@cloudscape-design/components-themeable 3.0.1252 → 3.0.1254
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/internal/manifest.json +1 -1
- package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
- package/lib/internal/scss/internal/styles/typography/mixins.scss +5 -2
- package/lib/internal/scss/panel-layout/styles.scss +2 -0
- package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.d.ts +3 -2
- package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.d.ts.map +1 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.js +3 -3
- package/lib/internal/template/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.js.map +1 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.d.ts.map +1 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js +10 -7
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js.map +1 -1
- package/lib/internal/template/box/styles.css.js +192 -192
- package/lib/internal/template/box/styles.scoped.css +238 -237
- package/lib/internal/template/box/styles.selectors.js +192 -192
- package/lib/internal/template/flashbar/non-collapsible-flashbar.d.ts.map +1 -1
- package/lib/internal/template/flashbar/non-collapsible-flashbar.js +1 -1
- package/lib/internal/template/flashbar/non-collapsible-flashbar.js.map +1 -1
- package/lib/internal/template/icon/generated/icons.d.ts +0 -1
- package/lib/internal/template/icon/generated/icons.d.ts.map +1 -1
- package/lib/internal/template/icon/generated/icons.js +0 -3
- package/lib/internal/template/icon/generated/icons.js.map +1 -1
- package/lib/internal/template/icon-provider/interfaces.d.ts +1 -1
- package/lib/internal/template/icon-provider/interfaces.d.ts.map +1 -1
- package/lib/internal/template/icon-provider/interfaces.js.map +1 -1
- package/lib/internal/template/internal/base-component/styles.scoped.css +3 -1
- package/lib/internal/template/internal/components/transition/index.d.ts +2 -1
- package/lib/internal/template/internal/components/transition/index.d.ts.map +1 -1
- package/lib/internal/template/internal/components/transition/index.js +2 -2
- package/lib/internal/template/internal/components/transition/index.js.map +1 -1
- package/lib/internal/template/internal/environment.js +2 -2
- package/lib/internal/template/internal/environment.json +2 -2
- package/lib/internal/template/internal/generated/styles/tokens.d.ts +1 -0
- package/lib/internal/template/internal/generated/styles/tokens.js +1 -0
- package/lib/internal/template/internal/generated/theming/index.cjs +7 -0
- package/lib/internal/template/internal/generated/theming/index.cjs.d.ts +18 -0
- package/lib/internal/template/internal/generated/theming/index.d.ts +18 -0
- package/lib/internal/template/internal/generated/theming/index.js +7 -0
- package/lib/internal/template/internal/plugins/widget/interfaces.d.ts +8 -0
- package/lib/internal/template/internal/plugins/widget/interfaces.d.ts.map +1 -1
- package/lib/internal/template/internal/plugins/widget/interfaces.js.map +1 -1
- package/lib/internal/template/panel-layout/styles.css.js +7 -7
- package/lib/internal/template/panel-layout/styles.scoped.css +12 -10
- package/lib/internal/template/panel-layout/styles.selectors.js +7 -7
- package/package.json +1 -1
|
@@ -97,7 +97,10 @@
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
@mixin font-display-l {
|
|
100
|
+
@mixin font-display-l($family: true) {
|
|
101
|
+
@if $family {
|
|
102
|
+
font-family: awsui.$font-family-display;
|
|
103
|
+
}
|
|
101
104
|
font-size: awsui.$font-size-display-l;
|
|
102
105
|
line-height: awsui.$line-height-display-l;
|
|
103
106
|
letter-spacing: awsui.$letter-spacing-display-l;
|
|
@@ -160,7 +163,7 @@
|
|
|
160
163
|
@include font-heading-xl($weight: false, $family: false);
|
|
161
164
|
}
|
|
162
165
|
@if $font-size == display-l {
|
|
163
|
-
@include font-display-l;
|
|
166
|
+
@include font-display-l($family: false);
|
|
164
167
|
}
|
|
165
168
|
@if $font-size == inherit {
|
|
166
169
|
@include font-inherit;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { Feature, MountContentPart } from '../../../internal/plugins/widget/interfaces';
|
|
1
|
+
import { Feature, FeatureNotificationsPayload, MountContentPart } from '../../../internal/plugins/widget/interfaces';
|
|
2
2
|
interface RuntimeContentPartProps<T> {
|
|
3
3
|
mountContent?: MountContentPart<T>;
|
|
4
4
|
content: T;
|
|
5
5
|
}
|
|
6
6
|
export declare function RuntimeContentPart<T>({ content, mountContent }: RuntimeContentPartProps<T>): JSX.Element;
|
|
7
|
-
export default function RuntimeFeaturesNotificationDrawer<T>({ features, mountItem, featuresPageLink, }: {
|
|
7
|
+
export default function RuntimeFeaturesNotificationDrawer<T>({ features, mountItem, featuresPageLink, i18nStrings, }: {
|
|
8
8
|
features: Array<Feature<T>>;
|
|
9
9
|
mountItem?: MountContentPart<T>;
|
|
10
10
|
featuresPageLink?: string;
|
|
11
|
+
i18nStrings?: FeatureNotificationsPayload<unknown>['i18nStrings'];
|
|
11
12
|
}): JSX.Element;
|
|
12
13
|
export {};
|
|
13
14
|
//# sourceMappingURL=feature-notifications-drawer-content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-notifications-drawer-content.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-notifications-drawer-content.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAQrH,UAAU,uBAAuB,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,eAkB1F;AAED,MAAM,CAAC,OAAO,UAAU,iCAAiC,CAAC,CAAC,EAAE,EAC3D,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;CACnE,eA6CA"}
|
|
@@ -24,9 +24,9 @@ export function RuntimeContentPart({ content, mountContent }) {
|
|
|
24
24
|
}, []);
|
|
25
25
|
return mountContent ? React.createElement("div", { ref: ref }) : React.createElement(React.Fragment, null, content);
|
|
26
26
|
}
|
|
27
|
-
export default function RuntimeFeaturesNotificationDrawer({ features, mountItem, featuresPageLink, }) {
|
|
27
|
+
export default function RuntimeFeaturesNotificationDrawer({ features, mountItem, featuresPageLink, i18nStrings, }) {
|
|
28
28
|
const i18n = useInternalI18n('features-notification-drawer');
|
|
29
|
-
return (React.createElement(InternalDrawer, { header: i18n('i18nStrings.title',
|
|
29
|
+
return (React.createElement(InternalDrawer, { header: i18n('i18nStrings.title', i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.titleText), disableContentPaddings: true },
|
|
30
30
|
React.createElement("div", { className: styles['runtime-feature-notifications-drawer-content'] },
|
|
31
31
|
React.createElement(Box, { padding: { top: 'm', left: 'xl', right: 'xl', bottom: 'm' } },
|
|
32
32
|
React.createElement(List, { items: features, renderItem: item => ({
|
|
@@ -42,6 +42,6 @@ export default function RuntimeFeaturesNotificationDrawer({ features, mountItem,
|
|
|
42
42
|
}) }),
|
|
43
43
|
!!featuresPageLink && (React.createElement("footer", { className: styles['runtime-feature-notifications-footer'] },
|
|
44
44
|
React.createElement(Box, { padding: { top: 's' } },
|
|
45
|
-
React.createElement(Link, { href: featuresPageLink }, i18n('i18nStrings.viewAll',
|
|
45
|
+
React.createElement(Link, { href: featuresPageLink }, i18n('i18nStrings.viewAll', i18nStrings === null || i18nStrings === void 0 ? void 0 : i18nStrings.viewAllText)))))))));
|
|
46
46
|
}
|
|
47
47
|
//# sourceMappingURL=feature-notifications-drawer-content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-notifications-drawer-content.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAE3D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAOrC,MAAM,UAAU,kBAAkB,CAAI,EAAE,OAAO,EAAE,YAAY,EAA8B;IACzF,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpD,OAAO,GAAG,EAAE;YACV,UAAU,aAAV,UAAU,uBAAV,UAAU,EAAI,CAAC;QACjB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC,CAAC,CAAC,6BAAK,GAAG,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,0CAAG,OAAO,CAAI,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iCAAiC,CAAI,EAC3D,QAAQ,EACR,SAAS,EACT,gBAAgB,
|
|
1
|
+
{"version":3,"file":"feature-notifications-drawer-content.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/drawer/feature-notifications-drawer-content.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,GAAG,MAAM,uBAAuB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAE3D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAOrC,MAAM,UAAU,kBAAkB,CAAI,EAAE,OAAO,EAAE,YAAY,EAA8B;IACzF,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpD,OAAO,GAAG,EAAE;YACV,UAAU,aAAV,UAAU,uBAAV,UAAU,EAAI,CAAC;QACjB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,YAAY,CAAC,CAAC,CAAC,6BAAK,GAAG,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,0CAAG,OAAO,CAAI,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iCAAiC,CAAI,EAC3D,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,GAMZ;IACC,MAAM,IAAI,GAAG,eAAe,CAAC,8BAA8B,CAAC,CAAC;IAE7D,OAAO,CACL,oBAAC,cAAc,IAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAC,EAAE,sBAAsB,EAAE,IAAI;QACrG,6BAAK,SAAS,EAAE,MAAM,CAAC,8CAA8C,CAAC;YACpE,oBAAC,GAAG,IAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBAC9D,oBAAC,IAAI,IACH,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBACnB,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,OAAO,EAAE,CACP,oBAAC,GAAG,IAAC,OAAO,EAAC,IAAI;4BACf,oBAAC,kBAAkB,IAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,GAAI,CACjE,CACP;wBACD,gBAAgB,EAAE,CAChB,oBAAC,YAAY,IAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU;4BAC1C,oBAAC,GAAG,IAAC,QAAQ,EAAC,QAAQ,EAAC,KAAK,EAAC,qBAAqB,IAC/C,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CACzB;4BACL,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,CACzB,oBAAC,GAAG;gCACF,oBAAC,kBAAkB,IAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,GAAI,CAC1E,CACP;4BACD,oBAAC,GAAG;gCACF,oBAAC,kBAAkB,IAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,GAAI,CAClE,CACO,CAChB;qBACF,CAAC,GACF;gBAED,CAAC,CAAC,gBAAgB,IAAI,CACrB,gCAAQ,SAAS,EAAE,MAAM,CAAC,sCAAsC,CAAC;oBAC/D,oBAAC,GAAG,IAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;wBACxB,oBAAC,IAAI,IAAC,IAAI,EAAE,gBAAgB,IAAG,IAAI,CAAC,qBAAqB,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,CAAC,CAAQ,CACxF,CACC,CACV,CACG,CACF,CACS,CAClB,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useEffect, useRef } from 'react';\n\nimport Box from '../../../box/internal';\nimport { InternalDrawer } from '../../../drawer/internal';\nimport { useInternalI18n } from '../../../i18n/context';\nimport { Feature, FeatureNotificationsPayload, MountContentPart } from '../../../internal/plugins/widget/interfaces';\nimport { formatDate } from '../../../internal/utils/date-time';\nimport Link from '../../../link/internal';\nimport List from '../../../list/internal';\nimport SpaceBetween from '../../../space-between/internal';\n\nimport styles from './styles.css.js';\n\ninterface RuntimeContentPartProps<T> {\n mountContent?: MountContentPart<T>;\n content: T;\n}\n\nexport function RuntimeContentPart<T>({ content, mountContent }: RuntimeContentPartProps<T>) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!(mountContent && ref.current)) {\n return;\n }\n\n const container = ref.current;\n const destructor = mountContent(container, content);\n\n return () => {\n destructor?.();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return mountContent ? <div ref={ref} /> : <>{content}</>;\n}\n\nexport default function RuntimeFeaturesNotificationDrawer<T>({\n features,\n mountItem,\n featuresPageLink,\n i18nStrings,\n}: {\n features: Array<Feature<T>>;\n mountItem?: MountContentPart<T>;\n featuresPageLink?: string;\n i18nStrings?: FeatureNotificationsPayload<unknown>['i18nStrings'];\n}) {\n const i18n = useInternalI18n('features-notification-drawer');\n\n return (\n <InternalDrawer header={i18n('i18nStrings.title', i18nStrings?.titleText)} disableContentPaddings={true}>\n <div className={styles['runtime-feature-notifications-drawer-content']}>\n <Box padding={{ top: 'm', left: 'xl', right: 'xl', bottom: 'm' }}>\n <List\n items={features}\n renderItem={item => ({\n id: item.id,\n content: (\n <Box variant=\"h3\">\n <RuntimeContentPart mountContent={mountItem} content={item.header} />\n </Box>\n ),\n secondaryContent: (\n <SpaceBetween size=\"xs\" direction=\"vertical\">\n <Box fontSize=\"body-s\" color=\"text-body-secondary\">\n {formatDate(item.releaseDate)}\n </Box>\n {!!item.contentCategory && (\n <Box>\n <RuntimeContentPart mountContent={mountItem} content={item.contentCategory} />\n </Box>\n )}\n <Box>\n <RuntimeContentPart mountContent={mountItem} content={item.content} />\n </Box>\n </SpaceBetween>\n ),\n })}\n />\n\n {!!featuresPageLink && (\n <footer className={styles['runtime-feature-notifications-footer']}>\n <Box padding={{ top: 's' }}>\n <Link href={featuresPageLink}>{i18n('i18nStrings.viewAll', i18nStrings?.viewAllText)}</Link>\n </Box>\n </footer>\n )}\n </Box>\n </div>\n </InternalDrawer>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-notifications.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOpE,OAAO,EAIL,aAAa,EACd,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,UAAU,8BAA8B;IACtC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;CACvC;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AA+BtG,wBAAgB,uBAAuB;;;
|
|
1
|
+
{"version":3,"file":"use-feature-notifications.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOpE,OAAO,EAIL,aAAa,EACd,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,UAAU,8BAA8B;IACtC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;CACvC;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AA+BtG,wBAAgB,uBAAuB;;;gDAuDc,aAAa;EA0IjE"}
|
package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js
CHANGED
|
@@ -51,18 +51,21 @@ export function useFeatureNotifications() {
|
|
|
51
51
|
.sort((a, b) => b.releaseDate.getTime() - a.releaseDate.getTime());
|
|
52
52
|
};
|
|
53
53
|
const mapPayloadToDrawer = (payload) => {
|
|
54
|
-
var _a;
|
|
54
|
+
var _a, _b, _c, _d, _e;
|
|
55
55
|
return {
|
|
56
56
|
id: payload.id,
|
|
57
|
-
content: (React.createElement(RuntimeFeaturesNotificationDrawer, { features: payload.features, featuresPageLink: payload.featuresPageLink, mountItem: payload.mountItem })),
|
|
57
|
+
content: (React.createElement(RuntimeFeaturesNotificationDrawer, { features: payload.features, featuresPageLink: payload.featuresPageLink, mountItem: payload.mountItem, i18nStrings: payload.i18nStrings })),
|
|
58
58
|
trigger: {
|
|
59
|
-
|
|
59
|
+
iconSvg: (React.createElement("svg", { viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", focusable: "false", "aria-hidden": "true" },
|
|
60
|
+
React.createElement("path", { d: "M7 4L14.3244 1.25334C14.6513 1.13076 15 1.3724 15 1.7215V13.2785C15 13.6276 14.6513 13.8692 14.3244 13.7467L7 11" }),
|
|
61
|
+
React.createElement("path", { d: "M1 6C1 4.89543 1.89543 4 3 4H7V11H3C1.89543 11 1 10.1046 1 9V6Z" }),
|
|
62
|
+
React.createElement("path", { d: "M9.93649 12.1466C9.66614 13.4393 8.51989 14.4102 7.14687 14.4102C5.57286 14.4102 4.29688 13.1342 4.29688 11.5602C4.29688 11.3685 4.31579 11.1813 4.35187 11.0002" }))),
|
|
60
63
|
},
|
|
61
64
|
ariaLabels: {
|
|
62
|
-
closeButton: i18n('ariaLabels.closeButton',
|
|
63
|
-
drawerName: (
|
|
64
|
-
triggerButton: i18n('ariaLabels.triggerButton',
|
|
65
|
-
resizeHandle: i18n('ariaLabels.resizeHandle',
|
|
65
|
+
closeButton: i18n('ariaLabels.closeButton', (_a = payload.i18nStrings) === null || _a === void 0 ? void 0 : _a.closeButtonAriaLabel),
|
|
66
|
+
drawerName: (_c = i18n('ariaLabels.content', (_b = payload.i18nStrings) === null || _b === void 0 ? void 0 : _b.contentAriaLabel)) !== null && _c !== void 0 ? _c : '',
|
|
67
|
+
triggerButton: i18n('ariaLabels.triggerButton', (_d = payload.i18nStrings) === null || _d === void 0 ? void 0 : _d.triggerButtonAriaLabel),
|
|
68
|
+
resizeHandle: i18n('ariaLabels.resizeHandle', (_e = payload.i18nStrings) === null || _e === void 0 ? void 0 : _e.resizeHandleAriaLabel),
|
|
66
69
|
},
|
|
67
70
|
resizable: true,
|
|
68
71
|
defaultSize: 320,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-notifications.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { RefObject, useMemo, useRef, useState } from 'react';\n\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../../../i18n/context';\nimport FeaturePrompt, { FeaturePromptProps } from '../../../internal/do-not-use/feature-prompt';\nimport { persistFeatureNotifications, retrieveFeatureNotifications } from '../../../internal/persistence';\nimport {\n Feature,\n FeatureNotificationsPayload,\n PersistedFeaturesDict,\n WidgetMessage,\n} from '../../../internal/plugins/widget/interfaces';\nimport { useMountRefPromise } from '../../../internal/utils/promises';\nimport { AppLayoutProps } from '../../interfaces';\nimport RuntimeFeaturesNotificationDrawer, { RuntimeContentPart } from '../drawer/feature-notifications-drawer-content';\n\nconst DEFAULT_PERSISTENCE_CONFIG = {\n uniqueKey: 'awsui-feature-notifications',\n};\n\ninterface RenderLatestFeaturePromptProps {\n triggerRef: RefObject<HTMLElement>;\n}\nexport interface FeatureNotificationsProps {\n renderLatestFeaturePrompt: RenderLatestFeaturePrompt;\n drawer?: AppLayoutProps.Drawer | null;\n}\nexport type RenderLatestFeaturePrompt = (props: RenderLatestFeaturePromptProps) => JSX.Element | null;\ninterface FeatureNotifications extends FeatureNotificationsPayload<unknown> {\n badge?: boolean;\n}\n\nconst FEATURE_NOTIFICATIONS_RETENTION_DAYS = 180;\nconst DEFAULT_FEATURE_FILTER_DAYS = 90;\n\nfunction subtractDaysFromDate(currentDate: Date, daysToSubtract: number = 0): Date {\n const pastDate = new Date(currentDate);\n pastDate.setDate(pastDate.getDate() - daysToSubtract);\n return pastDate;\n}\n\nfunction filterOutdatedFeatures(features: PersistedFeaturesDict): PersistedFeaturesDict {\n const cutoffDate = subtractDaysFromDate(new Date(), FEATURE_NOTIFICATIONS_RETENTION_DAYS);\n\n return Object.keys(features).reduce((acc, key) => {\n const featureDate = new Date(features[key]);\n\n if (featureDate && featureDate >= cutoffDate) {\n return {\n ...acc,\n [key]: features[key],\n };\n }\n\n return acc;\n }, {});\n}\n\nexport function useFeatureNotifications() {\n const i18n = useInternalI18n('features-notification-drawer');\n const [featurePromptDismissed, setFeaturePromptDismissed] = useState(false);\n const [featureNotificationsData, setFeatureNotificationsData] = useState<FeatureNotifications | null>(null);\n const [seenFeatures, setSeenFeatures] = useState<PersistedFeaturesDict>({});\n const featurePromptRef = useRef<FeaturePromptProps.Ref>(null);\n const { ref: featurePromptMountRef, promise: featurePromptMountPromise } = useMountRefPromise();\n const featurePromptMergedRef = useMergeRefs(featurePromptRef, featurePromptMountRef);\n const allNotificationsSeen = useMemo(() => {\n return featureNotificationsData?.features.every(feature => !!seenFeatures[feature.id]);\n }, [featureNotificationsData, seenFeatures]);\n\n const defaultFeaturesFilter = (feature: Feature<unknown>) => {\n return feature.releaseDate >= subtractDaysFromDate(new Date(), DEFAULT_FEATURE_FILTER_DAYS);\n };\n\n const getFeaturesToDisplay = (payload: FeatureNotificationsPayload<unknown>): Array<Feature<unknown>> => {\n return payload.features\n .slice()\n .filter(payload.filterFeatures ? payload.filterFeatures : defaultFeaturesFilter)\n .sort((a, b) => b.releaseDate.getTime() - a.releaseDate.getTime());\n };\n\n const mapPayloadToDrawer = (payload: FeatureNotifications): AppLayoutProps.Drawer => {\n return {\n id: payload.id,\n content: (\n <RuntimeFeaturesNotificationDrawer\n features={payload.features}\n featuresPageLink={payload.featuresPageLink}\n mountItem={payload.mountItem}\n />\n ),\n trigger: {\n iconName: 'announcement',\n },\n ariaLabels: {\n closeButton: i18n('ariaLabels.closeButton', undefined),\n drawerName: i18n('ariaLabels.content', undefined) ?? '',\n triggerButton: i18n('ariaLabels.triggerButton', undefined),\n resizeHandle: i18n('ariaLabels.resizeHandle', undefined),\n },\n resizable: true,\n defaultSize: 320,\n badge: payload.badge,\n };\n };\n\n function featureNotificationsMessageHandler(event: WidgetMessage) {\n if (event.type === 'registerFeatureNotifications') {\n const { payload } = event;\n const features = getFeaturesToDisplay(payload);\n if (features.length === 0) {\n return;\n }\n\n setFeatureNotificationsData({ ...payload, features });\n\n const persistenceConfig = payload.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n // Retrieve previously seen feature notifications from persistence to determine\n // which features the user has already viewed\n (payload?.__retrieveFeatureNotifications || retrieveFeatureNotifications)(persistenceConfig).then(\n seenFeatureNotifications => {\n setSeenFeatures(seenFeatureNotifications);\n const hasUnseenFeatures = features.some(feature => !seenFeatureNotifications[feature.id]);\n if (hasUnseenFeatures) {\n const latestFeature = features.find(feature => !seenFeatureNotifications[feature.id]) ?? null;\n if (\n !payload.suppressFeaturePrompt &&\n !featurePromptDismissed &&\n !seenFeatureNotifications[getFeaturePromptPersistenceId(latestFeature)]\n ) {\n featurePromptMountPromise.then(() => {\n featurePromptRef.current?.show();\n });\n }\n setFeatureNotificationsData(data => (data ? { ...data, badge: true } : data));\n }\n }\n );\n return;\n }\n\n if (event.type === 'showFeaturePromptIfPossible' && !allNotificationsSeen) {\n featurePromptRef.current?.show();\n return;\n }\n\n if (event.type === 'clearFeatureNotifications') {\n setFeatureNotificationsData(null);\n return;\n }\n }\n\n function getLatestUnseenFeature() {\n return featureNotificationsData?.features.find(feature => !seenFeatures[feature.id]) ?? null;\n }\n\n function renderLatestFeaturePrompt({ triggerRef }: RenderLatestFeaturePromptProps) {\n const latestFeature = getLatestUnseenFeature();\n if (!triggerRef.current || !latestFeature) {\n return null;\n }\n return (\n <FeaturePrompt\n ref={featurePromptMergedRef}\n onShow={() => {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'true';\n }}\n onDismiss={event => {\n if (event.detail?.method !== 'blur') {\n triggerRef?.current!.focus();\n }\n setFeaturePromptDismissed(true);\n Promise.resolve().then(() => {\n if (triggerRef.current?.dataset) {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'false';\n }\n });\n persistFeaturePromptDismiss(latestFeature);\n }}\n header={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.header} />\n }\n content={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.content} />\n }\n trackKey={latestFeature.id}\n position=\"left\"\n getTrack={() => triggerRef.current}\n />\n );\n }\n\n const setFeaturesToSeenAndPersist = () => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = featureNotificationsData?.features.reduce((acc, feature) => {\n return {\n ...acc,\n [feature.id]: feature.releaseDate,\n };\n }, {});\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n setFeatureNotificationsData(data => (data ? { ...data, badge: false } : data));\n });\n };\n\n const getFeaturePromptPersistenceId = (feature?: Feature<unknown> | null) => `${feature?.id}_feature-prompt`;\n\n const persistFeaturePromptDismiss = (feature: Feature<unknown>) => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = { [getFeaturePromptPersistenceId(feature)]: feature.releaseDate?.toString() };\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n });\n };\n\n const onOpenFeatureNotificationsDrawer = () => {\n if (!featureNotificationsData || allNotificationsSeen) {\n return;\n }\n\n setFeaturesToSeenAndPersist();\n };\n\n const featureNotificationsProps: FeatureNotificationsProps = {\n renderLatestFeaturePrompt,\n drawer: featureNotificationsData && mapPayloadToDrawer(featureNotificationsData),\n };\n\n return {\n featureNotificationsProps,\n onOpenFeatureNotificationsDrawer,\n featureNotificationsMessageHandler,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-feature-notifications.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { RefObject, useMemo, useRef, useState } from 'react';\n\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../../../i18n/context';\nimport FeaturePrompt, { FeaturePromptProps } from '../../../internal/do-not-use/feature-prompt';\nimport { persistFeatureNotifications, retrieveFeatureNotifications } from '../../../internal/persistence';\nimport {\n Feature,\n FeatureNotificationsPayload,\n PersistedFeaturesDict,\n WidgetMessage,\n} from '../../../internal/plugins/widget/interfaces';\nimport { useMountRefPromise } from '../../../internal/utils/promises';\nimport { AppLayoutProps } from '../../interfaces';\nimport RuntimeFeaturesNotificationDrawer, { RuntimeContentPart } from '../drawer/feature-notifications-drawer-content';\n\nconst DEFAULT_PERSISTENCE_CONFIG = {\n uniqueKey: 'awsui-feature-notifications',\n};\n\ninterface RenderLatestFeaturePromptProps {\n triggerRef: RefObject<HTMLElement>;\n}\nexport interface FeatureNotificationsProps {\n renderLatestFeaturePrompt: RenderLatestFeaturePrompt;\n drawer?: AppLayoutProps.Drawer | null;\n}\nexport type RenderLatestFeaturePrompt = (props: RenderLatestFeaturePromptProps) => JSX.Element | null;\ninterface FeatureNotifications extends FeatureNotificationsPayload<unknown> {\n badge?: boolean;\n}\n\nconst FEATURE_NOTIFICATIONS_RETENTION_DAYS = 180;\nconst DEFAULT_FEATURE_FILTER_DAYS = 90;\n\nfunction subtractDaysFromDate(currentDate: Date, daysToSubtract: number = 0): Date {\n const pastDate = new Date(currentDate);\n pastDate.setDate(pastDate.getDate() - daysToSubtract);\n return pastDate;\n}\n\nfunction filterOutdatedFeatures(features: PersistedFeaturesDict): PersistedFeaturesDict {\n const cutoffDate = subtractDaysFromDate(new Date(), FEATURE_NOTIFICATIONS_RETENTION_DAYS);\n\n return Object.keys(features).reduce((acc, key) => {\n const featureDate = new Date(features[key]);\n\n if (featureDate && featureDate >= cutoffDate) {\n return {\n ...acc,\n [key]: features[key],\n };\n }\n\n return acc;\n }, {});\n}\n\nexport function useFeatureNotifications() {\n const i18n = useInternalI18n('features-notification-drawer');\n const [featurePromptDismissed, setFeaturePromptDismissed] = useState(false);\n const [featureNotificationsData, setFeatureNotificationsData] = useState<FeatureNotifications | null>(null);\n const [seenFeatures, setSeenFeatures] = useState<PersistedFeaturesDict>({});\n const featurePromptRef = useRef<FeaturePromptProps.Ref>(null);\n const { ref: featurePromptMountRef, promise: featurePromptMountPromise } = useMountRefPromise();\n const featurePromptMergedRef = useMergeRefs(featurePromptRef, featurePromptMountRef);\n const allNotificationsSeen = useMemo(() => {\n return featureNotificationsData?.features.every(feature => !!seenFeatures[feature.id]);\n }, [featureNotificationsData, seenFeatures]);\n\n const defaultFeaturesFilter = (feature: Feature<unknown>) => {\n return feature.releaseDate >= subtractDaysFromDate(new Date(), DEFAULT_FEATURE_FILTER_DAYS);\n };\n\n const getFeaturesToDisplay = (payload: FeatureNotificationsPayload<unknown>): Array<Feature<unknown>> => {\n return payload.features\n .slice()\n .filter(payload.filterFeatures ? payload.filterFeatures : defaultFeaturesFilter)\n .sort((a, b) => b.releaseDate.getTime() - a.releaseDate.getTime());\n };\n\n const mapPayloadToDrawer = (payload: FeatureNotifications): AppLayoutProps.Drawer => {\n return {\n id: payload.id,\n content: (\n <RuntimeFeaturesNotificationDrawer\n features={payload.features}\n featuresPageLink={payload.featuresPageLink}\n mountItem={payload.mountItem}\n i18nStrings={payload.i18nStrings}\n />\n ),\n trigger: {\n iconSvg: (\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 4L14.3244 1.25334C14.6513 1.13076 15 1.3724 15 1.7215V13.2785C15 13.6276 14.6513 13.8692 14.3244 13.7467L7 11\" />\n <path d=\"M1 6C1 4.89543 1.89543 4 3 4H7V11H3C1.89543 11 1 10.1046 1 9V6Z\" />\n <path d=\"M9.93649 12.1466C9.66614 13.4393 8.51989 14.4102 7.14687 14.4102C5.57286 14.4102 4.29688 13.1342 4.29688 11.5602C4.29688 11.3685 4.31579 11.1813 4.35187 11.0002\" />\n </svg>\n ),\n },\n ariaLabels: {\n closeButton: i18n('ariaLabels.closeButton', payload.i18nStrings?.closeButtonAriaLabel),\n drawerName: i18n('ariaLabels.content', payload.i18nStrings?.contentAriaLabel) ?? '',\n triggerButton: i18n('ariaLabels.triggerButton', payload.i18nStrings?.triggerButtonAriaLabel),\n resizeHandle: i18n('ariaLabels.resizeHandle', payload.i18nStrings?.resizeHandleAriaLabel),\n },\n resizable: true,\n defaultSize: 320,\n badge: payload.badge,\n };\n };\n\n function featureNotificationsMessageHandler(event: WidgetMessage) {\n if (event.type === 'registerFeatureNotifications') {\n const { payload } = event;\n const features = getFeaturesToDisplay(payload);\n if (features.length === 0) {\n return;\n }\n\n setFeatureNotificationsData({ ...payload, features });\n\n const persistenceConfig = payload.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n // Retrieve previously seen feature notifications from persistence to determine\n // which features the user has already viewed\n (payload?.__retrieveFeatureNotifications || retrieveFeatureNotifications)(persistenceConfig).then(\n seenFeatureNotifications => {\n setSeenFeatures(seenFeatureNotifications);\n const hasUnseenFeatures = features.some(feature => !seenFeatureNotifications[feature.id]);\n if (hasUnseenFeatures) {\n const latestFeature = features.find(feature => !seenFeatureNotifications[feature.id]) ?? null;\n if (\n !payload.suppressFeaturePrompt &&\n !featurePromptDismissed &&\n !seenFeatureNotifications[getFeaturePromptPersistenceId(latestFeature)]\n ) {\n featurePromptMountPromise.then(() => {\n featurePromptRef.current?.show();\n });\n }\n setFeatureNotificationsData(data => (data ? { ...data, badge: true } : data));\n }\n }\n );\n return;\n }\n\n if (event.type === 'showFeaturePromptIfPossible' && !allNotificationsSeen) {\n featurePromptRef.current?.show();\n return;\n }\n\n if (event.type === 'clearFeatureNotifications') {\n setFeatureNotificationsData(null);\n return;\n }\n }\n\n function getLatestUnseenFeature() {\n return featureNotificationsData?.features.find(feature => !seenFeatures[feature.id]) ?? null;\n }\n\n function renderLatestFeaturePrompt({ triggerRef }: RenderLatestFeaturePromptProps) {\n const latestFeature = getLatestUnseenFeature();\n if (!triggerRef.current || !latestFeature) {\n return null;\n }\n return (\n <FeaturePrompt\n ref={featurePromptMergedRef}\n onShow={() => {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'true';\n }}\n onDismiss={event => {\n if (event.detail?.method !== 'blur') {\n triggerRef?.current!.focus();\n }\n setFeaturePromptDismissed(true);\n Promise.resolve().then(() => {\n if (triggerRef.current?.dataset) {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'false';\n }\n });\n persistFeaturePromptDismiss(latestFeature);\n }}\n header={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.header} />\n }\n content={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.content} />\n }\n trackKey={latestFeature.id}\n position=\"left\"\n getTrack={() => triggerRef.current}\n />\n );\n }\n\n const setFeaturesToSeenAndPersist = () => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = featureNotificationsData?.features.reduce((acc, feature) => {\n return {\n ...acc,\n [feature.id]: feature.releaseDate,\n };\n }, {});\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n setFeatureNotificationsData(data => (data ? { ...data, badge: false } : data));\n });\n };\n\n const getFeaturePromptPersistenceId = (feature?: Feature<unknown> | null) => `${feature?.id}_feature-prompt`;\n\n const persistFeaturePromptDismiss = (feature: Feature<unknown>) => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = { [getFeaturePromptPersistenceId(feature)]: feature.releaseDate?.toString() };\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n });\n };\n\n const onOpenFeatureNotificationsDrawer = () => {\n if (!featureNotificationsData || allNotificationsSeen) {\n return;\n }\n\n setFeaturesToSeenAndPersist();\n };\n\n const featureNotificationsProps: FeatureNotificationsProps = {\n renderLatestFeaturePrompt,\n drawer: featureNotificationsData && mapPayloadToDrawer(featureNotificationsData),\n };\n\n return {\n featureNotificationsProps,\n onOpenFeatureNotificationsDrawer,\n featureNotificationsMessageHandler,\n };\n}\n"]}
|