@cloudscape-design/components 3.0.1267 → 3.0.1268
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/app-layout/visual-refresh-toolbar/state/use-feature-notifications.d.ts.map +1 -1
- package/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js +13 -0
- package/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js.map +1 -1
- package/internal/base-component/styles.scoped.css +1 -1
- package/internal/context/reset-contexts-for-modal.d.ts.map +1 -1
- package/internal/context/reset-contexts-for-modal.js +3 -1
- package/internal/context/reset-contexts-for-modal.js.map +1 -1
- package/internal/context/token-inline-context.d.ts +6 -0
- package/internal/context/token-inline-context.d.ts.map +1 -0
- package/internal/context/token-inline-context.js +11 -0
- package/internal/context/token-inline-context.js.map +1 -0
- package/internal/environment.js +2 -2
- package/internal/environment.json +2 -2
- package/internal/manifest.json +1 -1
- package/link/internal.d.ts.map +1 -1
- package/link/internal.js +3 -1
- package/link/internal.js.map +1 -1
- package/link/styles.css.js +21 -20
- package/link/styles.scoped.css +74 -71
- package/link/styles.selectors.js +21 -20
- package/package.json +1 -1
- package/popover/internal.d.ts.map +1 -1
- package/popover/internal.js +3 -1
- package/popover/internal.js.map +1 -1
- package/popover/styles.css.js +58 -57
- package/popover/styles.scoped.css +92 -89
- package/popover/styles.selectors.js +58 -57
- package/token/internal.d.ts.map +1 -1
- package/token/internal.js +17 -15
- package/token/internal.js.map +1 -1
|
@@ -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;
|
|
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;AAQpE,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;EAsJjE"}
|
|
@@ -4,6 +4,7 @@ import React, { useMemo, useRef, useState } from 'react';
|
|
|
4
4
|
import { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';
|
|
5
5
|
import { useInternalI18n } from '../../../i18n/context';
|
|
6
6
|
import FeaturePrompt from '../../../internal/do-not-use/feature-prompt';
|
|
7
|
+
import { metrics } from '../../../internal/metrics';
|
|
7
8
|
import { persistFeatureNotifications, retrieveFeatureNotifications } from '../../../internal/persistence';
|
|
8
9
|
import { useMountRefPromise } from '../../../internal/utils/promises';
|
|
9
10
|
import RuntimeFeaturesNotificationDrawer, { RuntimeContentPart } from '../drawer/feature-notifications-drawer-content';
|
|
@@ -76,6 +77,18 @@ export function useFeatureNotifications() {
|
|
|
76
77
|
var _a, _b;
|
|
77
78
|
if (event.type === 'registerFeatureNotifications') {
|
|
78
79
|
const { payload } = event;
|
|
80
|
+
metrics.logComponentUsed('feature-notifications', {
|
|
81
|
+
props: {
|
|
82
|
+
featuresPageLink: payload.featuresPageLink,
|
|
83
|
+
suppressFeaturePrompt: payload.suppressFeaturePrompt,
|
|
84
|
+
},
|
|
85
|
+
metadata: {
|
|
86
|
+
featuresLength: payload.features.length,
|
|
87
|
+
hasMountItem: !!payload.mountItem,
|
|
88
|
+
hasFilterFeatures: !!payload.filterFeatures,
|
|
89
|
+
hasPersistenceConfig: !!payload.persistenceConfig,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
79
92
|
const features = getFeaturesToDisplay(payload);
|
|
80
93
|
if (features.length === 0) {
|
|
81
94
|
return;
|
|
@@ -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 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"]}
|
|
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 { metrics } from '../../../internal/metrics';\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 metrics.logComponentUsed('feature-notifications', {\n props: {\n featuresPageLink: payload.featuresPageLink,\n suppressFeaturePrompt: payload.suppressFeaturePrompt,\n },\n metadata: {\n featuresLength: payload.features.length,\n hasMountItem: !!payload.mountItem,\n hasFilterFeatures: !!payload.filterFeatures,\n hasPersistenceConfig: !!payload.persistenceConfig,\n },\n });\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-contexts-for-modal.d.ts","sourceRoot":"","sources":["../../../../src/internal/context/reset-contexts-for-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"reset-contexts-for-modal.d.ts","sourceRoot":"","sources":["../../../../src/internal/context/reset-contexts-for-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAe1B,QAAA,MAAM,qBAAqB,GAAI,cAAc;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,gBAczE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { CollectionLabelContext } from './collection-label-context';
|
|
|
7
7
|
import { FormFieldContext } from './form-field-context';
|
|
8
8
|
import { InfoLinkLabelContext } from './info-link-label-context';
|
|
9
9
|
import { defaultValue as linkDefaultValue, LinkDefaultVariantContext } from './link-default-variant-context';
|
|
10
|
+
import { defaultValue as tokenInlineDefaultValue, TokenInlineContext } from './token-inline-context';
|
|
10
11
|
/*
|
|
11
12
|
Use this context-resetter when creating a new modal-type context where typically the contents
|
|
12
13
|
of the modal should not be affected by the surrounding components/DOM.
|
|
@@ -16,6 +17,7 @@ const ResetContextsForModal = ({ children }) => (React.createElement(ButtonConte
|
|
|
16
17
|
React.createElement(FormFieldContext.Provider, { value: {} },
|
|
17
18
|
React.createElement(InfoLinkLabelContext.Provider, { value: "" },
|
|
18
19
|
React.createElement(LinkDefaultVariantContext.Provider, { value: linkDefaultValue },
|
|
19
|
-
React.createElement(
|
|
20
|
+
React.createElement(TokenInlineContext.Provider, { value: tokenInlineDefaultValue },
|
|
21
|
+
React.createElement(SingleTabStopNavigationReset, null, children))))))));
|
|
20
22
|
export default ResetContextsForModal;
|
|
21
23
|
//# sourceMappingURL=reset-contexts-for-modal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset-contexts-for-modal.js","sourceRoot":"","sources":["../../../../src/internal/context/reset-contexts-for-modal.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"reset-contexts-for-modal.js","sourceRoot":"","sources":["../../../../src/internal/context/reset-contexts-for-modal.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC7G,OAAO,EAAE,YAAY,IAAI,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAErG;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAAC,EAAE,QAAQ,EAAiC,EAAE,EAAE,CAAC,CAC7E,oBAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;IAClD,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QAC5D,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE;YAClC,oBAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAC,EAAE;gBACrC,oBAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB;oBACzD,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,uBAAuB;wBACzD,oBAAC,4BAA4B,QAAE,QAAQ,CAAgC,CAC3C,CACK,CACP,CACN,CACI,CACX,CAC1B,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport { SingleTabStopNavigationReset } from '@cloudscape-design/component-toolkit/internal';\n\nimport { ButtonContext } from './button-context';\nimport { CollectionLabelContext } from './collection-label-context';\nimport { FormFieldContext } from './form-field-context';\nimport { InfoLinkLabelContext } from './info-link-label-context';\nimport { defaultValue as linkDefaultValue, LinkDefaultVariantContext } from './link-default-variant-context';\nimport { defaultValue as tokenInlineDefaultValue, TokenInlineContext } from './token-inline-context';\n\n/*\n Use this context-resetter when creating a new modal-type context where typically the contents\n of the modal should not be affected by the surrounding components/DOM.\n */\nconst ResetContextsForModal = ({ children }: { children: React.ReactNode }) => (\n <ButtonContext.Provider value={{ onClick: () => {} }}>\n <CollectionLabelContext.Provider value={{ assignId: () => {} }}>\n <FormFieldContext.Provider value={{}}>\n <InfoLinkLabelContext.Provider value=\"\">\n <LinkDefaultVariantContext.Provider value={linkDefaultValue}>\n <TokenInlineContext.Provider value={tokenInlineDefaultValue}>\n <SingleTabStopNavigationReset>{children}</SingleTabStopNavigationReset>\n </TokenInlineContext.Provider>\n </LinkDefaultVariantContext.Provider>\n </InfoLinkLabelContext.Provider>\n </FormFieldContext.Provider>\n </CollectionLabelContext.Provider>\n </ButtonContext.Provider>\n);\n\nexport default ResetContextsForModal;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface TokenInlineContextProps {
|
|
2
|
+
isInlineToken: boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare const defaultValue: TokenInlineContextProps;
|
|
5
|
+
export declare const TokenInlineContext: import("react").Context<TokenInlineContextProps>;
|
|
6
|
+
export declare function useTokenInlineContext(): TokenInlineContextProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-inline-context.d.ts","sourceRoot":"","sources":["../../../../src/internal/context/token-inline-context.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,EAAE,uBAE1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,kDAAuD,CAAC;AAEvF,wBAAgB,qBAAqB,4BAEpC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { createContext, useContext } from 'react';
|
|
4
|
+
export const defaultValue = {
|
|
5
|
+
isInlineToken: false,
|
|
6
|
+
};
|
|
7
|
+
export const TokenInlineContext = createContext(defaultValue);
|
|
8
|
+
export function useTokenInlineContext() {
|
|
9
|
+
return useContext(TokenInlineContext);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=token-inline-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-inline-context.js","sourceRoot":"","sources":["../../../../src/internal/context/token-inline-context.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMlD,MAAM,CAAC,MAAM,YAAY,GAA4B;IACnD,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAA0B,YAAY,CAAC,CAAC;AAEvF,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACxC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { createContext, useContext } from 'react';\n\nexport interface TokenInlineContextProps {\n isInlineToken: boolean;\n}\n\nexport const defaultValue: TokenInlineContextProps = {\n isInlineToken: false,\n};\n\nexport const TokenInlineContext = createContext<TokenInlineContextProps>(defaultValue);\n\nexport function useTokenInlineContext() {\n return useContext(TokenInlineContext);\n}\n"]}
|
package/internal/environment.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export var PACKAGE_SOURCE = "components";
|
|
2
|
-
export var PACKAGE_VERSION = "3.0.0 (
|
|
3
|
-
export var GIT_SHA = "
|
|
2
|
+
export var PACKAGE_VERSION = "3.0.0 (d8dfc28a)";
|
|
3
|
+
export var GIT_SHA = "d8dfc28a";
|
|
4
4
|
export var THEME = "open-source-visual-refresh";
|
|
5
5
|
export var SYSTEM = "core";
|
|
6
6
|
export var ALWAYS_VISUAL_REFRESH = true;
|
package/internal/manifest.json
CHANGED
package/link/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/link/internal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/link/internal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAsBlD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAKlF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,QAAA,MAAM,YAAY;cAHJ,SAAS,CAAC,SAAS,CAAC,GAAG,gBAAgB,GAAG,MAAM,GAAG,UAAU;uCAqN1E,CAAC;AAqBF,eAAe,YAAY,CAAC"}
|
package/link/internal.js
CHANGED
|
@@ -12,6 +12,7 @@ import { DATA_ATTR_FUNNEL_VALUE, getFunnelValueSelector, getSubStepAllSelector,
|
|
|
12
12
|
import { getBaseProps } from '../internal/base-component';
|
|
13
13
|
import { InfoLinkLabelContext } from '../internal/context/info-link-label-context';
|
|
14
14
|
import { LinkDefaultVariantContext } from '../internal/context/link-default-variant-context';
|
|
15
|
+
import { useTokenInlineContext } from '../internal/context/token-inline-context';
|
|
15
16
|
import { fireCancelableEvent, fireNonCancelableEvent, isPlainLeftClick } from '../internal/events';
|
|
16
17
|
import useForwardFocus from '../internal/hooks/forward-focus';
|
|
17
18
|
import { useVisualRefresh } from '../internal/hooks/use-visual-mode';
|
|
@@ -109,6 +110,7 @@ const InternalLink = React.forwardRef(({ variant: providedVariant, fontSize = 'b
|
|
|
109
110
|
};
|
|
110
111
|
const linkRef = useRef(null);
|
|
111
112
|
const isVisualRefresh = useVisualRefresh();
|
|
113
|
+
const { isInlineToken } = useTokenInlineContext();
|
|
112
114
|
useForwardFocus(ref, linkRef);
|
|
113
115
|
// Visual refresh should only add styles to buttons that don't already have unique styles (e.g. primary/secondary variants)
|
|
114
116
|
const applyButtonStyles = isButton && isVisualRefresh && !hasSpecialStyle;
|
|
@@ -116,7 +118,7 @@ const InternalLink = React.forwardRef(({ variant: providedVariant, fontSize = 'b
|
|
|
116
118
|
id: linkId,
|
|
117
119
|
...baseProps,
|
|
118
120
|
ref: useMergeRefs(linkRef, __internalRootRef),
|
|
119
|
-
className: clsx(styles.link, baseProps.className, applyButtonStyles ? styles.button : null, styles[getVariantStyle(variant)], styles[getFontSizeStyle(variant, fontSize)], styles[getColorStyle(variant, color)]),
|
|
121
|
+
className: clsx(styles.link, baseProps.className, applyButtonStyles ? styles.button : null, styles[getVariantStyle(variant)], styles[getFontSizeStyle(variant, fontSize)], styles[getColorStyle(variant, color)], isInlineToken && styles['in-inline-token']),
|
|
120
122
|
style: getLinkStyles(style),
|
|
121
123
|
'aria-label': ariaLabel,
|
|
122
124
|
'aria-labelledby': undefined,
|
package/link/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/link/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\nimport React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../i18n/context';\nimport InternalIcon from '../icon/internal';\nimport { FunnelMetrics } from '../internal/analytics';\nimport { useFunnel, useFunnelStep, useFunnelSubStep } from '../internal/analytics/hooks/use-funnel';\nimport {\n DATA_ATTR_FUNNEL_VALUE,\n getFunnelValueSelector,\n getSubStepAllSelector,\n getTextFromSelector,\n} from '../internal/analytics/selectors';\nimport { getBaseProps } from '../internal/base-component';\nimport { InfoLinkLabelContext } from '../internal/context/info-link-label-context';\nimport { LinkDefaultVariantContext } from '../internal/context/link-default-variant-context';\nimport { fireCancelableEvent, fireNonCancelableEvent, isPlainLeftClick } from '../internal/events';\nimport useForwardFocus from '../internal/hooks/forward-focus';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport { KeyCode } from '../internal/keycode';\nimport { checkSafeUrl } from '../internal/utils/check-safe-url';\nimport WithNativeAttributes from '../internal/utils/with-native-attributes';\nimport { LinkProps } from './interfaces';\nimport { getLinkStyles } from './style';\n\nimport styles from './styles.css.js';\n\ntype InternalLinkProps = InternalBaseComponentProps &\n Omit<LinkProps, 'variant'> & {\n variant?: LinkProps['variant'] | 'top-navigation' | 'link' | 'recovery';\n };\n\nconst InternalLink = React.forwardRef(\n (\n {\n variant: providedVariant,\n fontSize = 'body-m',\n color = 'normal',\n external = false,\n target,\n href,\n rel,\n ariaLabel,\n externalIconAriaLabel,\n onFollow,\n onClick,\n children,\n nativeAttributes,\n __internalRootRef,\n style,\n ...props\n }: InternalLinkProps,\n ref: React.Ref<LinkProps.Ref>\n ) => {\n checkSafeUrl('Link', href);\n const isButton = !href;\n const { defaultVariant } = useContext(LinkDefaultVariantContext);\n const variant = providedVariant || defaultVariant;\n const specialStyles = ['top-navigation', 'link', 'recovery'];\n const hasSpecialStyle = specialStyles.indexOf(variant) > -1;\n\n const i18n = useInternalI18n('link');\n const baseProps = getBaseProps(props);\n const anchorTarget = target ?? (external ? '_blank' : undefined);\n const anchorRel = rel ?? (anchorTarget === '_blank' ? 'noopener noreferrer' : undefined);\n const uniqueId = useUniqueId('link');\n const linkId = useUniqueId('link-self');\n const infoId = useUniqueId('link-info');\n\n const infoLinkLabelFromContext = useContext(InfoLinkLabelContext);\n\n const { funnelIdentifier, funnelInteractionId } = useFunnel();\n const { stepIdentifier, stepNumber, stepNameSelector } = useFunnelStep();\n const { subStepIdentifier, subStepSelector, subStepNameSelector } = useFunnelSubStep();\n\n const fireFunnelEvent = (funnelInteractionId: string) => {\n if (variant === 'info') {\n const stepName = getTextFromSelector(stepNameSelector);\n const subStepName = getTextFromSelector(subStepNameSelector);\n\n FunnelMetrics.helpPanelInteracted({\n funnelIdentifier,\n funnelInteractionId,\n stepIdentifier,\n stepNumber,\n stepName,\n subStepIdentifier,\n stepNameSelector,\n subStepSelector,\n subStepName,\n subStepNameSelector,\n elementSelector: getFunnelValueSelector(uniqueId),\n subStepAllSelector: getSubStepAllSelector(),\n });\n } else if (external) {\n const stepName = getTextFromSelector(stepNameSelector);\n const subStepName = getTextFromSelector(subStepNameSelector);\n\n FunnelMetrics.externalLinkInteracted({\n funnelIdentifier,\n funnelInteractionId,\n stepIdentifier,\n stepNumber,\n stepName,\n stepNameSelector,\n subStepIdentifier,\n subStepSelector,\n subStepName,\n subStepNameSelector,\n elementSelector: getFunnelValueSelector(uniqueId),\n subStepAllSelector: getSubStepAllSelector(),\n });\n }\n };\n\n const fireFollowEvent = (event: React.SyntheticEvent) => {\n if (funnelInteractionId) {\n fireFunnelEvent(funnelInteractionId);\n }\n\n fireCancelableEvent(onFollow, { href, external, target: anchorTarget }, event);\n };\n\n const fireClickEvent = (event: React.MouseEvent | React.KeyboardEvent) => {\n const { altKey, ctrlKey, metaKey, shiftKey } = event;\n // eslint-disable-next-line no-restricted-syntax -- MouseEvent vs KeyboardEvent discrimination\n const button = 'button' in event ? event.button : 0;\n // make onClick non-cancelable to prevent it from being used to block full page reload\n // for navigation use `onFollow` event instead\n fireNonCancelableEvent(onClick, { altKey, button, ctrlKey, metaKey, shiftKey });\n };\n\n const handleLinkClick = (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollowEvent(event);\n }\n fireClickEvent(event);\n };\n\n const handleButtonClick = (event: React.MouseEvent) => {\n fireFollowEvent(event);\n fireClickEvent(event);\n };\n\n const handleButtonKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCode.space || event.keyCode === KeyCode.enter) {\n event.preventDefault();\n fireFollowEvent(event);\n fireClickEvent(event);\n }\n };\n\n const linkRef = useRef<HTMLElement>(null);\n const isVisualRefresh = useVisualRefresh();\n useForwardFocus(ref, linkRef);\n\n // Visual refresh should only add styles to buttons that don't already have unique styles (e.g. primary/secondary variants)\n const applyButtonStyles = isButton && isVisualRefresh && !hasSpecialStyle;\n\n const sharedProps = {\n id: linkId,\n ...baseProps,\n ref: useMergeRefs(linkRef, __internalRootRef),\n className: clsx(\n styles.link,\n baseProps.className,\n applyButtonStyles ? styles.button : null,\n styles[getVariantStyle(variant)],\n styles[getFontSizeStyle(variant, fontSize)],\n styles[getColorStyle(variant, color)]\n ),\n style: getLinkStyles(style),\n 'aria-label': ariaLabel,\n 'aria-labelledby': undefined as string | undefined,\n [DATA_ATTR_FUNNEL_VALUE]: uniqueId,\n };\n\n if (variant === 'info' && infoLinkLabelFromContext && !ariaLabel) {\n sharedProps['aria-labelledby'] = `${sharedProps.id} ${infoId} ${infoLinkLabelFromContext}`;\n }\n\n const renderedExternalIconAriaLabel = i18n('externalIconAriaLabel', externalIconAriaLabel);\n const content = (\n <>\n {children}\n {external && (\n <span className={styles['icon-wrapper']}>\n \n <span\n className={styles.icon}\n aria-label={renderedExternalIconAriaLabel}\n role={renderedExternalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" size=\"inherit\" />\n </span>\n </span>\n )}\n {variant === 'info' && (\n <span hidden={true} id={infoId}>\n :\n </span>\n )}\n </>\n );\n\n const { tabIndex } = useSingleTabStopNavigation(linkRef, { tabIndex: isButton ? 0 : undefined });\n\n if (isButton) {\n return (\n <WithNativeAttributes\n {...sharedProps}\n tag=\"a\"\n componentName=\"Link\"\n nativeAttributes={nativeAttributes}\n role=\"button\"\n tabIndex={tabIndex}\n onKeyDown={handleButtonKeyDown}\n onClick={handleButtonClick}\n >\n {content}\n </WithNativeAttributes>\n );\n }\n\n return (\n <WithNativeAttributes\n {...sharedProps}\n tag=\"a\"\n componentName=\"Link\"\n nativeAttributes={nativeAttributes}\n tabIndex={tabIndex}\n target={anchorTarget}\n rel={anchorRel}\n href={href}\n onClick={handleLinkClick}\n >\n {content}\n </WithNativeAttributes>\n );\n }\n);\n\nfunction getVariantStyle(variant: Exclude<InternalLinkProps['variant'], undefined>) {\n return `variant-${variant.replace(/^awsui-/, '')}`;\n}\n\nfunction getFontSizeStyle(variant: InternalLinkProps['variant'], fontSize: InternalLinkProps['fontSize']) {\n switch (variant) {\n case 'info':\n return 'font-size-body-s';\n case 'awsui-value-large':\n return 'font-size-display-l';\n default:\n return `font-size-${fontSize}`;\n }\n}\n\nfunction getColorStyle(variant: InternalLinkProps['variant'], color: InternalLinkProps['color']) {\n return `color-${variant === 'info' ? 'normal' : color}`;\n}\n\nexport default InternalLink;\n"]}
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/link/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\nimport React, { useContext, useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\nimport { useSingleTabStopNavigation } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../i18n/context';\nimport InternalIcon from '../icon/internal';\nimport { FunnelMetrics } from '../internal/analytics';\nimport { useFunnel, useFunnelStep, useFunnelSubStep } from '../internal/analytics/hooks/use-funnel';\nimport {\n DATA_ATTR_FUNNEL_VALUE,\n getFunnelValueSelector,\n getSubStepAllSelector,\n getTextFromSelector,\n} from '../internal/analytics/selectors';\nimport { getBaseProps } from '../internal/base-component';\nimport { InfoLinkLabelContext } from '../internal/context/info-link-label-context';\nimport { LinkDefaultVariantContext } from '../internal/context/link-default-variant-context';\nimport { useTokenInlineContext } from '../internal/context/token-inline-context';\nimport { fireCancelableEvent, fireNonCancelableEvent, isPlainLeftClick } from '../internal/events';\nimport useForwardFocus from '../internal/hooks/forward-focus';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport { KeyCode } from '../internal/keycode';\nimport { checkSafeUrl } from '../internal/utils/check-safe-url';\nimport WithNativeAttributes from '../internal/utils/with-native-attributes';\nimport { LinkProps } from './interfaces';\nimport { getLinkStyles } from './style';\n\nimport styles from './styles.css.js';\n\ntype InternalLinkProps = InternalBaseComponentProps &\n Omit<LinkProps, 'variant'> & {\n variant?: LinkProps['variant'] | 'top-navigation' | 'link' | 'recovery';\n };\n\nconst InternalLink = React.forwardRef(\n (\n {\n variant: providedVariant,\n fontSize = 'body-m',\n color = 'normal',\n external = false,\n target,\n href,\n rel,\n ariaLabel,\n externalIconAriaLabel,\n onFollow,\n onClick,\n children,\n nativeAttributes,\n __internalRootRef,\n style,\n ...props\n }: InternalLinkProps,\n ref: React.Ref<LinkProps.Ref>\n ) => {\n checkSafeUrl('Link', href);\n const isButton = !href;\n const { defaultVariant } = useContext(LinkDefaultVariantContext);\n const variant = providedVariant || defaultVariant;\n const specialStyles = ['top-navigation', 'link', 'recovery'];\n const hasSpecialStyle = specialStyles.indexOf(variant) > -1;\n\n const i18n = useInternalI18n('link');\n const baseProps = getBaseProps(props);\n const anchorTarget = target ?? (external ? '_blank' : undefined);\n const anchorRel = rel ?? (anchorTarget === '_blank' ? 'noopener noreferrer' : undefined);\n const uniqueId = useUniqueId('link');\n const linkId = useUniqueId('link-self');\n const infoId = useUniqueId('link-info');\n\n const infoLinkLabelFromContext = useContext(InfoLinkLabelContext);\n\n const { funnelIdentifier, funnelInteractionId } = useFunnel();\n const { stepIdentifier, stepNumber, stepNameSelector } = useFunnelStep();\n const { subStepIdentifier, subStepSelector, subStepNameSelector } = useFunnelSubStep();\n\n const fireFunnelEvent = (funnelInteractionId: string) => {\n if (variant === 'info') {\n const stepName = getTextFromSelector(stepNameSelector);\n const subStepName = getTextFromSelector(subStepNameSelector);\n\n FunnelMetrics.helpPanelInteracted({\n funnelIdentifier,\n funnelInteractionId,\n stepIdentifier,\n stepNumber,\n stepName,\n subStepIdentifier,\n stepNameSelector,\n subStepSelector,\n subStepName,\n subStepNameSelector,\n elementSelector: getFunnelValueSelector(uniqueId),\n subStepAllSelector: getSubStepAllSelector(),\n });\n } else if (external) {\n const stepName = getTextFromSelector(stepNameSelector);\n const subStepName = getTextFromSelector(subStepNameSelector);\n\n FunnelMetrics.externalLinkInteracted({\n funnelIdentifier,\n funnelInteractionId,\n stepIdentifier,\n stepNumber,\n stepName,\n stepNameSelector,\n subStepIdentifier,\n subStepSelector,\n subStepName,\n subStepNameSelector,\n elementSelector: getFunnelValueSelector(uniqueId),\n subStepAllSelector: getSubStepAllSelector(),\n });\n }\n };\n\n const fireFollowEvent = (event: React.SyntheticEvent) => {\n if (funnelInteractionId) {\n fireFunnelEvent(funnelInteractionId);\n }\n\n fireCancelableEvent(onFollow, { href, external, target: anchorTarget }, event);\n };\n\n const fireClickEvent = (event: React.MouseEvent | React.KeyboardEvent) => {\n const { altKey, ctrlKey, metaKey, shiftKey } = event;\n // eslint-disable-next-line no-restricted-syntax -- MouseEvent vs KeyboardEvent discrimination\n const button = 'button' in event ? event.button : 0;\n // make onClick non-cancelable to prevent it from being used to block full page reload\n // for navigation use `onFollow` event instead\n fireNonCancelableEvent(onClick, { altKey, button, ctrlKey, metaKey, shiftKey });\n };\n\n const handleLinkClick = (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollowEvent(event);\n }\n fireClickEvent(event);\n };\n\n const handleButtonClick = (event: React.MouseEvent) => {\n fireFollowEvent(event);\n fireClickEvent(event);\n };\n\n const handleButtonKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === KeyCode.space || event.keyCode === KeyCode.enter) {\n event.preventDefault();\n fireFollowEvent(event);\n fireClickEvent(event);\n }\n };\n\n const linkRef = useRef<HTMLElement>(null);\n const isVisualRefresh = useVisualRefresh();\n const { isInlineToken } = useTokenInlineContext();\n useForwardFocus(ref, linkRef);\n\n // Visual refresh should only add styles to buttons that don't already have unique styles (e.g. primary/secondary variants)\n const applyButtonStyles = isButton && isVisualRefresh && !hasSpecialStyle;\n\n const sharedProps = {\n id: linkId,\n ...baseProps,\n ref: useMergeRefs(linkRef, __internalRootRef),\n className: clsx(\n styles.link,\n baseProps.className,\n applyButtonStyles ? styles.button : null,\n styles[getVariantStyle(variant)],\n styles[getFontSizeStyle(variant, fontSize)],\n styles[getColorStyle(variant, color)],\n isInlineToken && styles['in-inline-token']\n ),\n style: getLinkStyles(style),\n 'aria-label': ariaLabel,\n 'aria-labelledby': undefined as string | undefined,\n [DATA_ATTR_FUNNEL_VALUE]: uniqueId,\n };\n\n if (variant === 'info' && infoLinkLabelFromContext && !ariaLabel) {\n sharedProps['aria-labelledby'] = `${sharedProps.id} ${infoId} ${infoLinkLabelFromContext}`;\n }\n\n const renderedExternalIconAriaLabel = i18n('externalIconAriaLabel', externalIconAriaLabel);\n const content = (\n <>\n {children}\n {external && (\n <span className={styles['icon-wrapper']}>\n \n <span\n className={styles.icon}\n aria-label={renderedExternalIconAriaLabel}\n role={renderedExternalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" size=\"inherit\" />\n </span>\n </span>\n )}\n {variant === 'info' && (\n <span hidden={true} id={infoId}>\n :\n </span>\n )}\n </>\n );\n\n const { tabIndex } = useSingleTabStopNavigation(linkRef, { tabIndex: isButton ? 0 : undefined });\n\n if (isButton) {\n return (\n <WithNativeAttributes\n {...sharedProps}\n tag=\"a\"\n componentName=\"Link\"\n nativeAttributes={nativeAttributes}\n role=\"button\"\n tabIndex={tabIndex}\n onKeyDown={handleButtonKeyDown}\n onClick={handleButtonClick}\n >\n {content}\n </WithNativeAttributes>\n );\n }\n\n return (\n <WithNativeAttributes\n {...sharedProps}\n tag=\"a\"\n componentName=\"Link\"\n nativeAttributes={nativeAttributes}\n tabIndex={tabIndex}\n target={anchorTarget}\n rel={anchorRel}\n href={href}\n onClick={handleLinkClick}\n >\n {content}\n </WithNativeAttributes>\n );\n }\n);\n\nfunction getVariantStyle(variant: Exclude<InternalLinkProps['variant'], undefined>) {\n return `variant-${variant.replace(/^awsui-/, '')}`;\n}\n\nfunction getFontSizeStyle(variant: InternalLinkProps['variant'], fontSize: InternalLinkProps['fontSize']) {\n switch (variant) {\n case 'info':\n return 'font-size-body-s';\n case 'awsui-value-large':\n return 'font-size-display-l';\n default:\n return `font-size-${fontSize}`;\n }\n}\n\nfunction getColorStyle(variant: InternalLinkProps['variant'], color: InternalLinkProps['color']) {\n return `color-${variant === 'info' ? 'normal' : color}`;\n}\n\nexport default InternalLink;\n"]}
|
package/link/styles.css.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
|
|
2
2
|
import './styles.scoped.css';
|
|
3
3
|
export default {
|
|
4
|
-
"link": "
|
|
5
|
-
"variant-secondary": "awsui_variant-
|
|
6
|
-
"variant-primary": "awsui_variant-
|
|
7
|
-
"variant-info": "awsui_variant-
|
|
8
|
-
"variant-value-large": "awsui_variant-value-
|
|
9
|
-
"variant-top-navigation": "awsui_variant-top-
|
|
10
|
-
"variant-recovery": "awsui_variant-
|
|
11
|
-
"button": "
|
|
12
|
-
"color-inverted": "awsui_color-
|
|
13
|
-
"font-size-body-s": "awsui_font-size-body-
|
|
14
|
-
"font-size-body-m": "awsui_font-size-body-
|
|
15
|
-
"font-size-heading-xs": "awsui_font-size-heading-
|
|
16
|
-
"font-size-heading-s": "awsui_font-size-heading-
|
|
17
|
-
"font-size-heading-m": "awsui_font-size-heading-
|
|
18
|
-
"font-size-heading-l": "awsui_font-size-heading-
|
|
19
|
-
"font-size-heading-xl": "awsui_font-size-heading-
|
|
20
|
-
"font-size-display-l": "awsui_font-size-display-
|
|
21
|
-
"font-size-inherit": "awsui_font-size-
|
|
22
|
-
"
|
|
23
|
-
"icon": "
|
|
4
|
+
"link": "awsui_link_4c84z_19rql_145",
|
|
5
|
+
"variant-secondary": "awsui_variant-secondary_4c84z_19rql_212",
|
|
6
|
+
"variant-primary": "awsui_variant-primary_4c84z_19rql_247",
|
|
7
|
+
"variant-info": "awsui_variant-info_4c84z_19rql_280",
|
|
8
|
+
"variant-value-large": "awsui_variant-value-large_4c84z_19rql_315",
|
|
9
|
+
"variant-top-navigation": "awsui_variant-top-navigation_4c84z_19rql_347",
|
|
10
|
+
"variant-recovery": "awsui_variant-recovery_4c84z_19rql_382",
|
|
11
|
+
"button": "awsui_button_4c84z_19rql_415",
|
|
12
|
+
"color-inverted": "awsui_color-inverted_4c84z_19rql_450",
|
|
13
|
+
"font-size-body-s": "awsui_font-size-body-s_4c84z_19rql_471",
|
|
14
|
+
"font-size-body-m": "awsui_font-size-body-m_4c84z_19rql_478",
|
|
15
|
+
"font-size-heading-xs": "awsui_font-size-heading-xs_4c84z_19rql_484",
|
|
16
|
+
"font-size-heading-s": "awsui_font-size-heading-s_4c84z_19rql_491",
|
|
17
|
+
"font-size-heading-m": "awsui_font-size-heading-m_4c84z_19rql_498",
|
|
18
|
+
"font-size-heading-l": "awsui_font-size-heading-l_4c84z_19rql_505",
|
|
19
|
+
"font-size-heading-xl": "awsui_font-size-heading-xl_4c84z_19rql_512",
|
|
20
|
+
"font-size-display-l": "awsui_font-size-display-l_4c84z_19rql_519",
|
|
21
|
+
"font-size-inherit": "awsui_font-size-inherit_4c84z_19rql_526",
|
|
22
|
+
"in-inline-token": "awsui_in-inline-token_4c84z_19rql_533",
|
|
23
|
+
"icon-wrapper": "awsui_icon-wrapper_4c84z_19rql_537",
|
|
24
|
+
"icon": "awsui_icon_4c84z_19rql_537"
|
|
24
25
|
};
|
|
25
26
|
|