@cloudscape-design/components-themeable 3.0.1247 → 3.0.1249

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.
@@ -1,3 +1,3 @@
1
1
  {
2
- "commit": "6082b1880b0601b2854a5fdf0c2b7d6becb50083"
2
+ "commit": "f604e9558bc04cd44d0c6b7d516359014135c2c1"
3
3
  }
@@ -1,6 +1,6 @@
1
1
 
2
2
  // Build environment
3
- $awsui-commit-hash: "6082b188";
3
+ $awsui-commit-hash: "f604e955";
4
4
  // Manually managed CSS-variables
5
5
  $maxContentWidth: --awsui-max-content-width-n6lfw8;
6
6
  $minContentWidth: --awsui-min-content-width-n6lfw8;
@@ -56,7 +56,7 @@ export function useFeatureNotifications() {
56
56
  id: payload.id,
57
57
  content: (React.createElement(RuntimeFeaturesNotificationDrawer, { features: payload.features, featuresPageLink: payload.featuresPageLink, mountItem: payload.mountItem })),
58
58
  trigger: {
59
- iconName: 'suggestions',
59
+ iconName: 'announcement',
60
60
  },
61
61
  ariaLabels: {
62
62
  closeButton: i18n('ariaLabels.closeButton', undefined),
@@ -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: 'suggestions',\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 />\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"]}
@@ -3816,5 +3816,5 @@ body {
3816
3816
  }
3817
3817
  }
3818
3818
  :root {
3819
- --awsui-version-info-6082b188: true;
3819
+ --awsui-version-info-f604e955: true;
3820
3820
  }
@@ -1,6 +1,6 @@
1
1
  export var PACKAGE_SOURCE = "components";
2
- export var PACKAGE_VERSION = "3.0.0 (6082b188)";
3
- export var GIT_SHA = "6082b188";
2
+ export var PACKAGE_VERSION = "3.0.0 (f604e955)";
3
+ export var GIT_SHA = "f604e955";
4
4
  export var THEME = "open-source-visual-refresh";
5
5
  export var SYSTEM = "core";
6
6
  export var ALWAYS_VISUAL_REFRESH = true;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "PACKAGE_SOURCE": "components",
3
- "PACKAGE_VERSION": "3.0.0 (6082b188)",
4
- "GIT_SHA": "6082b188",
3
+ "PACKAGE_VERSION": "3.0.0 (f604e955)",
4
+ "GIT_SHA": "f604e955",
5
5
  "THEME": "default",
6
6
  "SYSTEM": "core",
7
7
  "ALWAYS_VISUAL_REFRESH": false
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/token/internal.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAIlF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,KAAK,kBAAkB,GAAG,UAAU,GAClC,0BAA0B,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEJ,iBAAS,aAAa,CAAC,EAErB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,cAAc,EAGd,IAAI,EACJ,mBAAmB,EAGnB,iBAAiB,EACjB,GAAG,SAAS,EACb,EAAE,kBAAkB,eA4HpB;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/token/internal.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAIlF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,KAAK,kBAAkB,GAAG,UAAU,GAClC,0BAA0B,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEJ,iBAAS,aAAa,CAAC,EAErB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,cAAc,EAGd,IAAI,EACJ,mBAAmB,EAGnB,iBAAiB,EACjB,GAAG,SAAS,EACb,EAAE,kBAAkB,eA+HpB;AAED,eAAe,aAAa,CAAC"}
@@ -63,7 +63,9 @@ __internalRootRef, ...restProps }) {
63
63
  };
64
64
  }
65
65
  };
66
- return (React.createElement("div", { ...baseProps, ref: __internalRootRef, className: clsx(styles.root, legacyTestingStyles.token, testUtilStyles.root, !isInline ? styles['token-normal'] : styles['token-inline'], analyticsSelectors.token, baseProps.className), "aria-label": ariaLabel, "aria-labelledby": !ariaLabel ? ariaLabelledbyId : undefined, "aria-disabled": !!disabled, role: role !== null && role !== void 0 ? role : 'group', onFocus: () => {
66
+ // Use span for inline tokens (e.g. inside contentEditable) to avoid block-level elements breaking text flow.
67
+ const SpanOrDivTag = isInline ? 'span' : 'div';
68
+ return (React.createElement(SpanOrDivTag, { ...baseProps, ref: __internalRootRef, className: clsx(styles.root, legacyTestingStyles.token, testUtilStyles.root, !isInline ? styles['token-normal'] : styles['token-inline'], analyticsSelectors.token, baseProps.className), "aria-label": ariaLabel, "aria-labelledby": !ariaLabel ? ariaLabelledbyId : undefined, "aria-disabled": !!disabled, role: role !== null && role !== void 0 ? role : 'group', onFocus: () => {
67
69
  setShowTooltip(true);
68
70
  }, onBlur: () => {
69
71
  setShowTooltip(false);
@@ -72,7 +74,7 @@ __internalRootRef, ...restProps }) {
72
74
  }, onMouseLeave: () => {
73
75
  setShowTooltip(false);
74
76
  }, tabIndex: !!tooltipContent && isInline && isEllipsisActive ? 0 : undefined },
75
- React.createElement("div", { className: clsx(!isInline ? styles['token-box'] : styles['token-box-inline'], disabled && styles['token-box-disabled'], readOnly && styles['token-box-readonly'], !isInline && !onDismiss && styles['token-box-without-dismiss'], disableInnerPadding && styles['disable-padding']) },
77
+ React.createElement(SpanOrDivTag, { className: clsx(!isInline ? styles['token-box'] : styles['token-box-inline'], disabled && styles['token-box-disabled'], readOnly && styles['token-box-readonly'], !isInline && !onDismiss && styles['token-box-without-dismiss'], disableInnerPadding && styles['disable-padding']) },
76
78
  React.createElement(Option, { className: clsx(isInline && styles['token-option-inline']), triggerVariant: isInline, option: buildOptionDefinition(), disableTitleTooltip: !!tooltipContent, labelContainerRef: labelContainerRef, labelRef: labelRef, labelId: ariaLabelledbyId }),
77
79
  onDismiss && (React.createElement(DismissButton, { disabled: disabled, dismissLabel: dismissLabel, onDismiss: onDismiss, readOnly: readOnly, inline: isInline }))),
78
80
  !!tooltipContent && isInline && isEllipsisActive && showTooltip && (React.createElement(Tooltip, { "data-testid": "token-tooltip", getTrack: () => labelContainerRef.current, content: React.createElement(LiveRegion, null,
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/token/internal.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\n\nimport React, { useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { useResizeObserver, useUniqueId, warnOnce } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getBaseProps } from '../internal/base-component';\nimport Option from '../internal/components/option';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport LiveRegion from '../live-region/internal';\nimport Tooltip from '../tooltip/internal.js';\nimport DismissButton from './dismiss-button';\nimport { TokenProps } from './interfaces';\n\nimport legacyTestingStyles from '../token-group/styles.css.js';\nimport analyticsSelectors from './analytics-metadata/styles.css.js';\nimport styles from './styles.css.js';\nimport testUtilStyles from './test-classes/styles.css.js';\n\ntype InternalTokenProps = TokenProps &\n InternalBaseComponentProps & {\n role?: string;\n disableInnerPadding?: boolean;\n };\n\nfunction InternalToken({\n // External\n label,\n ariaLabel,\n labelTag,\n description,\n variant = 'normal',\n disabled,\n readOnly,\n icon,\n tags,\n dismissLabel,\n onDismiss,\n tooltipContent,\n\n // Internal\n role,\n disableInnerPadding,\n\n // Base\n __internalRootRef,\n ...restProps\n}: InternalTokenProps) {\n const baseProps = getBaseProps(restProps);\n const labelContainerRef = useRef<HTMLSpanElement>(null);\n const labelRef = useRef<HTMLSpanElement>(null);\n const [showTooltip, setShowTooltip] = useState(false);\n const [isEllipsisActive, setIsEllipsisActive] = useState(false);\n const isInline = variant === 'inline';\n const ariaLabelledbyId = useUniqueId();\n\n const isLabelOverflowing = () => {\n const labelContent = labelRef.current;\n const labelContainer = labelContainerRef.current;\n\n if (labelContent && labelContainer) {\n return labelContent.offsetWidth > labelContainer.offsetWidth;\n }\n };\n\n useResizeObserver(labelContainerRef, () => {\n if (isInline) {\n setIsEllipsisActive(isLabelOverflowing() ?? false);\n }\n });\n\n const buildOptionDefinition = () => {\n const isLabelStringOrNumber = typeof label === 'string' || typeof label === 'number';\n const labelObject = isLabelStringOrNumber ? { label: String(label) } : { labelContent: label };\n\n if (isInline) {\n if (!isLabelStringOrNumber) {\n warnOnce('Label', `Only plain text (strings or numbers) are supported when variant=\"inline\".`);\n }\n\n return {\n ...labelObject,\n disabled,\n __customIcon: icon && <span className={clsx(styles.icon, styles['icon-inline'])}>{icon}</span>,\n };\n } else {\n return {\n ...labelObject,\n disabled,\n labelTag,\n description,\n tags,\n __customIcon: icon && <span className={styles.icon}>{icon}</span>,\n };\n }\n };\n\n return (\n <div\n {...baseProps}\n ref={__internalRootRef}\n className={clsx(\n styles.root,\n legacyTestingStyles.token,\n testUtilStyles.root,\n !isInline ? styles['token-normal'] : styles['token-inline'],\n analyticsSelectors.token,\n baseProps.className\n )}\n aria-label={ariaLabel}\n aria-labelledby={!ariaLabel ? ariaLabelledbyId : undefined}\n aria-disabled={!!disabled}\n role={role ?? 'group'}\n onFocus={() => {\n setShowTooltip(true);\n }}\n onBlur={() => {\n setShowTooltip(false);\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n setShowTooltip(false);\n }}\n tabIndex={!!tooltipContent && isInline && isEllipsisActive ? 0 : undefined}\n >\n <div\n className={clsx(\n !isInline ? styles['token-box'] : styles['token-box-inline'],\n disabled && styles['token-box-disabled'],\n readOnly && styles['token-box-readonly'],\n !isInline && !onDismiss && styles['token-box-without-dismiss'],\n disableInnerPadding && styles['disable-padding']\n )}\n >\n <Option\n className={clsx(isInline && styles['token-option-inline'])}\n triggerVariant={isInline}\n option={buildOptionDefinition()}\n disableTitleTooltip={!!tooltipContent}\n labelContainerRef={labelContainerRef}\n labelRef={labelRef}\n labelId={ariaLabelledbyId}\n />\n {onDismiss && (\n <DismissButton\n disabled={disabled}\n dismissLabel={dismissLabel}\n onDismiss={onDismiss}\n readOnly={readOnly}\n inline={isInline}\n />\n )}\n </div>\n {!!tooltipContent && isInline && isEllipsisActive && showTooltip && (\n <Tooltip\n data-testid=\"token-tooltip\"\n getTrack={() => labelContainerRef.current}\n content={\n <LiveRegion>\n <span data-testid=\"tooltip-live-region-content\">{tooltipContent}</span>\n </LiveRegion>\n }\n onEscape={() => {\n setShowTooltip(false);\n }}\n />\n )}\n </div>\n );\n}\n\nexport default InternalToken;\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/token/internal.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\n\nimport React, { useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { useResizeObserver, useUniqueId, warnOnce } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getBaseProps } from '../internal/base-component';\nimport Option from '../internal/components/option';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport LiveRegion from '../live-region/internal';\nimport Tooltip from '../tooltip/internal.js';\nimport DismissButton from './dismiss-button';\nimport { TokenProps } from './interfaces';\n\nimport legacyTestingStyles from '../token-group/styles.css.js';\nimport analyticsSelectors from './analytics-metadata/styles.css.js';\nimport styles from './styles.css.js';\nimport testUtilStyles from './test-classes/styles.css.js';\n\ntype InternalTokenProps = TokenProps &\n InternalBaseComponentProps & {\n role?: string;\n disableInnerPadding?: boolean;\n };\n\nfunction InternalToken({\n // External\n label,\n ariaLabel,\n labelTag,\n description,\n variant = 'normal',\n disabled,\n readOnly,\n icon,\n tags,\n dismissLabel,\n onDismiss,\n tooltipContent,\n\n // Internal\n role,\n disableInnerPadding,\n\n // Base\n __internalRootRef,\n ...restProps\n}: InternalTokenProps) {\n const baseProps = getBaseProps(restProps);\n const labelContainerRef = useRef<HTMLSpanElement>(null);\n const labelRef = useRef<HTMLSpanElement>(null);\n const [showTooltip, setShowTooltip] = useState(false);\n const [isEllipsisActive, setIsEllipsisActive] = useState(false);\n const isInline = variant === 'inline';\n const ariaLabelledbyId = useUniqueId();\n\n const isLabelOverflowing = () => {\n const labelContent = labelRef.current;\n const labelContainer = labelContainerRef.current;\n\n if (labelContent && labelContainer) {\n return labelContent.offsetWidth > labelContainer.offsetWidth;\n }\n };\n\n useResizeObserver(labelContainerRef, () => {\n if (isInline) {\n setIsEllipsisActive(isLabelOverflowing() ?? false);\n }\n });\n\n const buildOptionDefinition = () => {\n const isLabelStringOrNumber = typeof label === 'string' || typeof label === 'number';\n const labelObject = isLabelStringOrNumber ? { label: String(label) } : { labelContent: label };\n\n if (isInline) {\n if (!isLabelStringOrNumber) {\n warnOnce('Label', `Only plain text (strings or numbers) are supported when variant=\"inline\".`);\n }\n\n return {\n ...labelObject,\n disabled,\n __customIcon: icon && <span className={clsx(styles.icon, styles['icon-inline'])}>{icon}</span>,\n };\n } else {\n return {\n ...labelObject,\n disabled,\n labelTag,\n description,\n tags,\n __customIcon: icon && <span className={styles.icon}>{icon}</span>,\n };\n }\n };\n\n // Use span for inline tokens (e.g. inside contentEditable) to avoid block-level elements breaking text flow.\n const SpanOrDivTag = isInline ? 'span' : 'div';\n\n return (\n <SpanOrDivTag\n {...baseProps}\n ref={__internalRootRef}\n className={clsx(\n styles.root,\n legacyTestingStyles.token,\n testUtilStyles.root,\n !isInline ? styles['token-normal'] : styles['token-inline'],\n analyticsSelectors.token,\n baseProps.className\n )}\n aria-label={ariaLabel}\n aria-labelledby={!ariaLabel ? ariaLabelledbyId : undefined}\n aria-disabled={!!disabled}\n role={role ?? 'group'}\n onFocus={() => {\n setShowTooltip(true);\n }}\n onBlur={() => {\n setShowTooltip(false);\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n setShowTooltip(false);\n }}\n tabIndex={!!tooltipContent && isInline && isEllipsisActive ? 0 : undefined}\n >\n <SpanOrDivTag\n className={clsx(\n !isInline ? styles['token-box'] : styles['token-box-inline'],\n disabled && styles['token-box-disabled'],\n readOnly && styles['token-box-readonly'],\n !isInline && !onDismiss && styles['token-box-without-dismiss'],\n disableInnerPadding && styles['disable-padding']\n )}\n >\n <Option\n className={clsx(isInline && styles['token-option-inline'])}\n triggerVariant={isInline}\n option={buildOptionDefinition()}\n disableTitleTooltip={!!tooltipContent}\n labelContainerRef={labelContainerRef}\n labelRef={labelRef}\n labelId={ariaLabelledbyId}\n />\n {onDismiss && (\n <DismissButton\n disabled={disabled}\n dismissLabel={dismissLabel}\n onDismiss={onDismiss}\n readOnly={readOnly}\n inline={isInline}\n />\n )}\n </SpanOrDivTag>\n {!!tooltipContent && isInline && isEllipsisActive && showTooltip && (\n <Tooltip\n data-testid=\"token-tooltip\"\n getTrack={() => labelContainerRef.current}\n content={\n <LiveRegion>\n <span data-testid=\"tooltip-live-region-content\">{tooltipContent}</span>\n </LiveRegion>\n }\n onEscape={() => {\n setShowTooltip(false);\n }}\n />\n )}\n </SpanOrDivTag>\n );\n}\n\nexport default InternalToken;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudscape-design/components-themeable",
3
- "version": "3.0.1247",
3
+ "version": "3.0.1249",
4
4
  "files": [
5
5
  "lib"
6
6
  ],