@cloudscape-design/components 3.0.266 → 3.0.268
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/button/interfaces.d.ts +3 -2
- package/button/interfaces.d.ts.map +1 -1
- package/button/interfaces.js.map +1 -1
- package/button/internal.js +2 -2
- package/button/internal.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/manifest.json +1 -1
- package/package.json +1 -1
- package/table/body-cell/styles.css.js +23 -23
- package/table/body-cell/styles.scoped.css +56 -55
- package/table/body-cell/styles.selectors.js +23 -23
- package/table/body-cell/td-element.d.ts +2 -1
- package/table/body-cell/td-element.d.ts.map +1 -1
- package/table/body-cell/td-element.js +7 -2
- package/table/body-cell/td-element.js.map +1 -1
- package/table/interfaces.d.ts +2 -0
- package/table/interfaces.d.ts.map +1 -1
- package/table/interfaces.js.map +1 -1
- package/table/internal.d.ts.map +1 -1
- package/table/internal.js +1 -1
- package/table/internal.js.map +1 -1
- package/test-utils/dom/table/index.js +1 -1
- package/test-utils/dom/table/index.js.map +1 -1
- package/test-utils/selectors/table/index.js +1 -1
- package/test-utils/selectors/table/index.js.map +1 -1
- package/test-utils/tsconfig.tsbuildinfo +1 -1
- package/top-navigation/interfaces.d.ts +3 -0
- package/top-navigation/interfaces.d.ts.map +1 -1
- package/top-navigation/interfaces.js.map +1 -1
- package/top-navigation/parts/overflow-menu/menu-item.d.ts +1 -1
- package/top-navigation/parts/overflow-menu/menu-item.d.ts.map +1 -1
- package/top-navigation/parts/overflow-menu/menu-item.js +11 -33
- package/top-navigation/parts/overflow-menu/menu-item.js.map +1 -1
- package/top-navigation/parts/overflow-menu/views/submenu.d.ts.map +1 -1
- package/top-navigation/parts/overflow-menu/views/submenu.js +6 -4
- package/top-navigation/parts/overflow-menu/views/submenu.js.map +1 -1
- package/top-navigation/parts/utility.d.ts.map +1 -1
- package/top-navigation/parts/utility.js +5 -2
- package/top-navigation/parts/utility.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"lib/default/","sources":["top-navigation/interfaces.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { CancelableEventHandler } from '../internal/events';\nimport { BaseComponentProps } from '../internal/base-component';\nimport { IconProps } from '../icon/interfaces';\nimport { ButtonDropdownProps } from '../button-dropdown/interfaces';\n\nexport interface TopNavigationProps extends BaseComponentProps {\n /**\n * Properties describing the product identity. They are as follows:\n *\n * * `title` (string) - Specifies the title text.\n * * `logo` ({ src: string, alt: string }) - Specifies the logo for the product.\n * * `href` (string) - Specifies the `href` that the header links to.\n * * `onFollow` (() => void) - Specifies the event handler called when the identity is clicked without any modifier keys.\n */\n identity: TopNavigationProps.Identity;\n\n /**\n * Use with an input or autosuggest control for a global search query.\n */\n search?: React.ReactNode;\n\n /**\n * A list of utility navigation elements.\n * The supported utility types are: `button` and `menu-dropdown`.\n *\n * The following properties are supported across all utility types:\n *\n * * `type` (string) - The type of the utility. Can be `button` or `menu-dropdown`.\n * * `text` (string) - Specifies the text shown in the top navigation or the title inside the dropdown if no explicit `title` property is set.\n * * `title` (string) - The title displayed inside the dropdown.\n * * `iconName` (string) - The name of an existing icon to display next to the utility.\n * * `iconUrl` (string) - Specifies the URL of a custom icon. Use this property if the icon you want isn't available.\n * * `iconAlt` (string) - Specifies alternate text for a custom icon provided using `iconUrl`. We recommend that you provide this for accessibility.\n * * `iconSvg` (string) - Specifies the SVG of a custom icon.\n * * `ariaLabel` (string) - Adds `aria-label` to the button or dropdown trigger. This is recommended for accessibility if a text is not provided.\n * * `badge` (boolean) - Adds a badge to the corner of the icon to indicate a state change. For example: Unread notifications.\n * * `disableTextCollapse` (boolean) - Prevents the utility text from being hidden on smaller screens.\n * * `disableUtilityCollapse` (boolean) - Prevents the utility from being moved to an overflow menu on smaller screens.\n *\n * ### button\n *\n * * `variant` ('primary-button' | 'link') - The visual appearance of the button. The default value is 'link'.\n * * `href` (string) - Specifies the `href` for a link styled as a button.\n * * `target` (string) - Specifies where to open the linked URL (for example, to open in a new browser window or tab use `_blank`). This property only applies when an `href` is provided.\n * * `rel` (string) - Adds a `rel` attribute to the link. By default, the component sets the `rel` attribute to \"noopener noreferrer\" when `target` is `\"_blank\"`. If the `rel` property is provided, it overrides the default behavior.\n * * `external` (boolean) - Marks the link as external by adding an icon after the text. When clicked, the link opens in a new tab.\n * * `externalIconAriaLabel` (string) - Adds an `aria-label` for the external icon.\n * * `onClick` (() => void) - Specifies the event handler called when the utility is clicked.\n *\n * ### menu-dropdown\n *\n * * `description` (string) - The description displayed inside the dropdown.\n * * `items` (ButtonDropdownProps.Items) - An array of dropdown items. This follows the same structure as the `items` property of the [button dropdown component](/components/button-dropdown).\n * * `onItemClick` (NonCancelableEventHandler<ButtonDropdownProps.ItemClickDetails>) - Specifies the event handler called when a dropdown item is selected.\n */\n utilities?: ReadonlyArray<TopNavigationProps.Utility>;\n\n /**\n * An object containing all the localized strings required by the component.\n */\n i18nStrings: TopNavigationProps.I18nStrings;\n}\n\nexport namespace TopNavigationProps {\n export interface Identity {\n title?: string;\n logo?: Logo;\n href: string;\n onFollow?: CancelableEventHandler;\n }\n\n export interface Logo {\n src: string;\n alt?: string;\n }\n\n interface BaseUtility {\n text?: string;\n title?: string;\n iconName?: IconProps.Name;\n iconUrl?: string;\n iconAlt?: string;\n iconSvg?: React.ReactNode;\n ariaLabel?: string;\n\n badge?: boolean;\n disableUtilityCollapse?: boolean;\n disableTextCollapse?: boolean;\n }\n\n export interface MenuDropdownUtility extends BaseUtility {\n type: 'menu-dropdown';\n description?: string;\n items: ButtonDropdownProps.Items;\n onItemClick?: CancelableEventHandler<ButtonDropdownProps.ItemClickDetails>;\n }\n\n export interface ButtonUtility extends BaseUtility {\n type: 'button';\n variant?: 'primary-button' | 'link';\n onClick?: CancelableEventHandler;\n href?: string;\n target?: string;\n rel?: string;\n external?: boolean;\n externalIconAriaLabel?: string;\n }\n\n export type Utility = MenuDropdownUtility | ButtonUtility;\n\n export interface I18nStrings {\n searchIconAriaLabel?: string;\n searchDismissIconAriaLabel?: string;\n overflowMenuDismissIconAriaLabel?: string;\n overflowMenuBackIconAriaLabel?: string;\n overflowMenuTriggerText: string;\n overflowMenuTitleText: string;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"lib/default/","sources":["top-navigation/interfaces.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { CancelableEventHandler } from '../internal/events';\nimport { BaseComponentProps } from '../internal/base-component';\nimport { IconProps } from '../icon/interfaces';\nimport { ButtonDropdownProps } from '../button-dropdown/interfaces';\nimport { ButtonProps } from '../button/interfaces';\n\nexport interface TopNavigationProps extends BaseComponentProps {\n /**\n * Properties describing the product identity. They are as follows:\n *\n * * `title` (string) - Specifies the title text.\n * * `logo` ({ src: string, alt: string }) - Specifies the logo for the product.\n * * `href` (string) - Specifies the `href` that the header links to.\n * * `onFollow` (() => void) - Specifies the event handler called when the identity is clicked without any modifier keys.\n */\n identity: TopNavigationProps.Identity;\n\n /**\n * Use with an input or autosuggest control for a global search query.\n */\n search?: React.ReactNode;\n\n /**\n * A list of utility navigation elements.\n * The supported utility types are: `button` and `menu-dropdown`.\n *\n * The following properties are supported across all utility types:\n *\n * * `type` (string) - The type of the utility. Can be `button` or `menu-dropdown`.\n * * `text` (string) - Specifies the text shown in the top navigation or the title inside the dropdown if no explicit `title` property is set.\n * * `title` (string) - The title displayed inside the dropdown.\n * * `iconName` (string) - The name of an existing icon to display next to the utility.\n * * `iconUrl` (string) - Specifies the URL of a custom icon. Use this property if the icon you want isn't available.\n * * `iconAlt` (string) - Specifies alternate text for a custom icon provided using `iconUrl`. We recommend that you provide this for accessibility.\n * * `iconSvg` (string) - Specifies the SVG of a custom icon.\n * * `ariaLabel` (string) - Adds `aria-label` to the button or dropdown trigger. This is recommended for accessibility if a text is not provided.\n * * `badge` (boolean) - Adds a badge to the corner of the icon to indicate a state change. For example: Unread notifications.\n * * `disableTextCollapse` (boolean) - Prevents the utility text from being hidden on smaller screens.\n * * `disableUtilityCollapse` (boolean) - Prevents the utility from being moved to an overflow menu on smaller screens.\n *\n * ### button\n *\n * * `variant` ('primary-button' | 'link') - The visual appearance of the button. The default value is 'link'.\n * * `href` (string) - Specifies the `href` for a link styled as a button.\n * * `target` (string) - Specifies where to open the linked URL (for example, to open in a new browser window or tab use `_blank`). This property only applies when an `href` is provided.\n * * `rel` (string) - Adds a `rel` attribute to the link. By default, the component sets the `rel` attribute to \"noopener noreferrer\" when `target` is `\"_blank\"`. If the `rel` property is provided, it overrides the default behavior.\n * * `external` (boolean) - Marks the link as external by adding an icon after the text. When clicked, the link opens in a new tab.\n * * `externalIconAriaLabel` (string) - Adds an `aria-label` for the external icon.\n * * `onClick` (() => void) - Specifies the event handler called when the utility is clicked.\n *\n * ### menu-dropdown\n *\n * * `description` (string) - The description displayed inside the dropdown.\n * * `items` (ButtonDropdownProps.Items) - An array of dropdown items. This follows the same structure as the `items` property of the [button dropdown component](/components/button-dropdown).\n * * `onItemClick` (NonCancelableEventHandler<ButtonDropdownProps.ItemClickDetails>) - Specifies the event handler called when a dropdown item is selected.\n */\n utilities?: ReadonlyArray<TopNavigationProps.Utility>;\n\n /**\n * An object containing all the localized strings required by the component.\n */\n i18nStrings: TopNavigationProps.I18nStrings;\n}\n\nexport namespace TopNavigationProps {\n export interface Identity {\n title?: string;\n logo?: Logo;\n href: string;\n onFollow?: CancelableEventHandler;\n }\n\n export interface Logo {\n src: string;\n alt?: string;\n }\n\n interface BaseUtility {\n text?: string;\n title?: string;\n iconName?: IconProps.Name;\n iconUrl?: string;\n iconAlt?: string;\n iconSvg?: React.ReactNode;\n ariaLabel?: string;\n\n badge?: boolean;\n disableUtilityCollapse?: boolean;\n disableTextCollapse?: boolean;\n }\n\n export interface MenuDropdownUtility extends BaseUtility {\n type: 'menu-dropdown';\n description?: string;\n items: ButtonDropdownProps.Items;\n onItemClick?: CancelableEventHandler<ButtonDropdownProps.ItemClickDetails>;\n onItemFollow?: CancelableEventHandler<ButtonDropdownProps.ItemClickDetails>;\n }\n\n export interface ButtonUtility extends BaseUtility {\n type: 'button';\n variant?: 'primary-button' | 'link';\n onClick?: CancelableEventHandler;\n onFollow?: CancelableEventHandler<ButtonProps.FollowDetail>;\n href?: string;\n target?: string;\n rel?: string;\n external?: boolean;\n externalIconAriaLabel?: string;\n }\n\n export type Utility = MenuDropdownUtility | ButtonUtility;\n\n export interface I18nStrings {\n searchIconAriaLabel?: string;\n searchDismissIconAriaLabel?: string;\n overflowMenuDismissIconAriaLabel?: string;\n overflowMenuBackIconAriaLabel?: string;\n overflowMenuTriggerText: string;\n overflowMenuTitleText: string;\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@ type UtilityMenuItemProps = TopNavigationProps.Utility & {
|
|
|
6
6
|
};
|
|
7
7
|
export declare const UtilityMenuItem: React.ForwardRefExoticComponent<UtilityMenuItemProps & React.RefAttributes<HTMLAnchorElement & HTMLButtonElement>>;
|
|
8
8
|
type SubmenuItemProps = ButtonDropdownProps.ItemOrGroup & {
|
|
9
|
-
|
|
9
|
+
onClick: (event: React.MouseEvent, item: ButtonDropdownProps.Item) => void;
|
|
10
10
|
};
|
|
11
11
|
export declare const SubmenuItem: (props: SubmenuItemProps) => JSX.Element;
|
|
12
12
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-item.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/menu-item.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"menu-item.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/menu-item.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAgRtD,KAAK,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,eAAO,MAAM,eAAe,oHAQ3B,CAAC;AAEF,KAAK,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,GAAG;IACxD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,KAAK,IAAI,CAAC;CAC5E,CAAC;AAEF,eAAO,MAAM,WAAW,UAAW,gBAAgB,gBAclD,CAAC"}
|
|
@@ -14,45 +14,20 @@ const ListItem = ({ children, startIcon, endIcon }) => {
|
|
|
14
14
|
React.createElement("span", { className: styles['overflow-menu-list-item-text'] }, children),
|
|
15
15
|
endIcon && endIcon));
|
|
16
16
|
};
|
|
17
|
-
const LinkItem = forwardRef(({ children, external, href, target, rel, startIcon, endIcon,
|
|
17
|
+
const LinkItem = forwardRef(({ children, external, href, target, rel, startIcon, endIcon, onClick, context, testId }, ref) => {
|
|
18
18
|
const anchorTarget = target !== null && target !== void 0 ? target : (external ? '_blank' : undefined);
|
|
19
19
|
const anchorRel = rel !== null && rel !== void 0 ? rel : (anchorTarget === '_blank' ? 'noopener noreferrer' : undefined);
|
|
20
|
-
|
|
21
|
-
href,
|
|
22
|
-
target: anchorTarget,
|
|
23
|
-
rel: anchorRel,
|
|
24
|
-
onClick(event) {
|
|
25
|
-
if (isPlainLeftClick(event)) {
|
|
26
|
-
onFollow === null || onFollow === void 0 ? void 0 : onFollow(event);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
const buttonProps = {
|
|
31
|
-
role: 'button',
|
|
32
|
-
tabIndex: 0,
|
|
33
|
-
onKeyDown(event) {
|
|
34
|
-
if (event.key === ' ') {
|
|
35
|
-
event.preventDefault();
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
onKeyUp(event) {
|
|
39
|
-
if (event.key === ' ' || event.key === 'Enter') {
|
|
40
|
-
onFollow === null || onFollow === void 0 ? void 0 : onFollow(event);
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
onClick: onFollow,
|
|
44
|
-
};
|
|
45
|
-
return (React.createElement("a", Object.assign({ ref: ref, className: clsx(styles['overflow-menu-control'], styles['overflow-menu-control-link'], context && styles[`overflow-menu-control-${context}`]) }, (typeof href === 'string' ? anchorProps : buttonProps), (testId ? { 'data-testid': testId } : {})),
|
|
20
|
+
return (React.createElement("a", Object.assign({ ref: ref, onClick: onClick, className: clsx(styles['overflow-menu-control'], styles['overflow-menu-control-link'], context && styles[`overflow-menu-control-${context}`]), href: href, target: anchorTarget, rel: anchorRel }, (testId ? { 'data-testid': testId } : {})),
|
|
46
21
|
React.createElement(ListItem, { startIcon: startIcon, endIcon: endIcon }, children)));
|
|
47
22
|
});
|
|
48
|
-
const ButtonItem = forwardRef(({ children, startIcon, endIcon,
|
|
23
|
+
const ButtonItem = forwardRef(({ children, startIcon, endIcon, onClick, testId }, ref) => {
|
|
49
24
|
return (React.createElement("button", Object.assign({ ref: ref, className: styles['overflow-menu-control'], onClick: onClick }, (typeof testId === 'string' ? { 'data-testid': testId } : {})),
|
|
50
25
|
React.createElement(ListItem, { startIcon: startIcon, endIcon: endIcon }, children)));
|
|
51
26
|
});
|
|
52
27
|
const NavigationItem = forwardRef((_a, ref) => {
|
|
53
28
|
var { startIcon, children, index, testId } = _a, definition = __rest(_a, ["startIcon", "children", "index", "testId"]);
|
|
54
29
|
const navigate = useNavigate();
|
|
55
|
-
return (React.createElement(ButtonItem, { ref: ref, startIcon: startIcon, endIcon: React.createElement(InternalIcon, { name: "angle-right" }), testId: testId,
|
|
30
|
+
return (React.createElement(ButtonItem, { ref: ref, startIcon: startIcon, endIcon: React.createElement(InternalIcon, { name: "angle-right" }), testId: testId, onClick: () => navigate('dropdown-menu', {
|
|
56
31
|
definition,
|
|
57
32
|
headerText: definition.text || definition.title,
|
|
58
33
|
headerSecondaryText: definition.description,
|
|
@@ -80,6 +55,9 @@ function utilityComponentFactory(utility, index, ref) {
|
|
|
80
55
|
switch (utility.type) {
|
|
81
56
|
case 'button': {
|
|
82
57
|
const handleClick = (event) => {
|
|
58
|
+
if (Boolean(utility.href) && isPlainLeftClick(event)) {
|
|
59
|
+
fireCancelableEvent(utility.onFollow, { href: utility.href, target: utility.target }, event);
|
|
60
|
+
}
|
|
83
61
|
fireCancelableEvent(utility.onClick, {}, event);
|
|
84
62
|
};
|
|
85
63
|
const content = (React.createElement(React.Fragment, null,
|
|
@@ -89,9 +67,9 @@ function utilityComponentFactory(utility, index, ref) {
|
|
|
89
67
|
React.createElement("span", { "aria-label": utility.externalIconAriaLabel, role: utility.externalIconAriaLabel ? 'img' : undefined },
|
|
90
68
|
React.createElement(InternalIcon, { name: "external", size: "normal" }))))));
|
|
91
69
|
if (!utility.href) {
|
|
92
|
-
return (React.createElement(ButtonItem, { ref: ref, startIcon: startIcon,
|
|
70
|
+
return (React.createElement(ButtonItem, { ref: ref, startIcon: startIcon, onClick: handleClick, testId: `__${index}` }, content));
|
|
93
71
|
}
|
|
94
|
-
return (React.createElement(LinkItem, { ref: ref, startIcon: startIcon, href: utility.href, external: utility.external, target: utility.target, rel: utility.rel, testId: `__${index}`,
|
|
72
|
+
return (React.createElement(LinkItem, { ref: ref, startIcon: startIcon, href: utility.href, external: utility.external, target: utility.target, rel: utility.rel, testId: `__${index}`, onClick: handleClick }, content));
|
|
95
73
|
}
|
|
96
74
|
case 'menu-dropdown': {
|
|
97
75
|
return (React.createElement(NavigationItem, Object.assign({ ref: ref, startIcon: startIcon, index: index }, utility, { testId: `__${index}` }), label));
|
|
@@ -105,7 +83,7 @@ function dropdownComponentFactory(item, expandable, onItemClick) {
|
|
|
105
83
|
if (expandable) {
|
|
106
84
|
return (React.createElement(ExpandableItem, Object.assign({}, item, { onItemClick: onItemClick }), label));
|
|
107
85
|
}
|
|
108
|
-
return (React.createElement(LinkItem, { startIcon: startIcon, href: item.href, external: item.external, context: "dropdown-menu", testId: item.id,
|
|
86
|
+
return (React.createElement(LinkItem, { startIcon: startIcon, href: item.href, external: item.external, context: "dropdown-menu", testId: item.id, onClick: event => onItemClick(event, item) },
|
|
109
87
|
label,
|
|
110
88
|
item.external && (React.createElement(React.Fragment, null,
|
|
111
89
|
' ',
|
|
@@ -118,6 +96,6 @@ export const UtilityMenuItem = forwardRef((_a, ref) => {
|
|
|
118
96
|
});
|
|
119
97
|
export const SubmenuItem = (props) => {
|
|
120
98
|
const expandable = typeof props.items !== 'undefined';
|
|
121
|
-
return (React.createElement("li", { className: clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-submenu`], expandable && styles[`overflow-menu-list-item-expandable`]) }, dropdownComponentFactory(props, expandable, props.
|
|
99
|
+
return (React.createElement("li", { className: clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-submenu`], expandable && styles[`overflow-menu-list-item-expandable`]) }, dropdownComponentFactory(props, expandable, props.onClick)));
|
|
122
100
|
};
|
|
123
101
|
//# sourceMappingURL=menu-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-item.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/menu-item.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, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { fireCancelableEvent, isPlainLeftClick } from '../../../internal/events';\nimport { useUniqueId } from '../../../internal/hooks/use-unique-id';\n\nimport { LinkProps } from '../../../link/interfaces';\nimport { ButtonDropdownProps } from '../../../button-dropdown/interfaces';\nimport InternalIcon from '../../../icon/internal';\n\nimport { useNavigate } from './router';\nimport { TopNavigationProps } from '../../interfaces';\nimport styles from '../../styles.css.js';\n\ninterface ListItemProps {\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n context?: 'dropdown-menu';\n children?: React.ReactNode;\n testId?: string;\n}\n\nconst ListItem = ({ children, startIcon, endIcon }: ListItemProps) => {\n return (\n <>\n {startIcon && <span className={styles['overflow-menu-list-item-icon']}>{startIcon}</span>}\n <span className={styles['overflow-menu-list-item-text']}>{children}</span>\n {endIcon && endIcon}\n </>\n );\n};\n\ninterface LinkItemProps extends ButtonItemProps, Pick<LinkProps, 'href' | 'external' | 'target' | 'rel'> {}\n\nconst LinkItem = forwardRef(\n (\n { children, external, href, target, rel, startIcon, endIcon, onFollow, context, testId }: LinkItemProps,\n ref: React.Ref<HTMLAnchorElement>\n ) => {\n const anchorTarget = target ?? (external ? '_blank' : undefined);\n const anchorRel = rel ?? (anchorTarget === '_blank' ? 'noopener noreferrer' : undefined);\n\n const anchorProps = {\n href,\n target: anchorTarget,\n rel: anchorRel,\n onClick(event: React.MouseEvent) {\n if (isPlainLeftClick(event)) {\n onFollow?.(event);\n }\n },\n };\n\n const buttonProps = {\n role: 'button',\n tabIndex: 0,\n onKeyDown(event: React.KeyboardEvent) {\n if (event.key === ' ') {\n event.preventDefault();\n }\n },\n onKeyUp(event: React.KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter') {\n onFollow?.(event);\n }\n },\n onClick: onFollow,\n };\n\n return (\n <a\n ref={ref}\n className={clsx(\n styles['overflow-menu-control'],\n styles['overflow-menu-control-link'],\n context && styles[`overflow-menu-control-${context}`]\n )}\n {...(typeof href === 'string' ? anchorProps : buttonProps)}\n {...(testId ? { 'data-testid': testId } : {})}\n >\n <ListItem startIcon={startIcon} endIcon={endIcon}>\n {children}\n </ListItem>\n </a>\n );\n }\n);\n\ninterface ButtonItemProps extends ListItemProps {\n onFollow?: (event: React.SyntheticEvent) => void;\n}\n\nconst ButtonItem = forwardRef(\n (\n { children, startIcon, endIcon, onFollow: onClick, testId }: ButtonItemProps & { testId?: string },\n ref: React.Ref<HTMLButtonElement>\n ) => {\n return (\n <button\n ref={ref}\n className={styles['overflow-menu-control']}\n onClick={onClick}\n {...(typeof testId === 'string' ? { 'data-testid': testId } : {})}\n >\n <ListItem startIcon={startIcon} endIcon={endIcon}>\n {children}\n </ListItem>\n </button>\n );\n }\n);\n\nconst NavigationItem = forwardRef(\n (\n {\n startIcon,\n children,\n index,\n testId,\n ...definition\n }: ButtonItemProps & TopNavigationProps.MenuDropdownUtility & { index: number; testId?: string },\n ref: React.Ref<HTMLButtonElement>\n ) => {\n const navigate = useNavigate();\n return (\n <ButtonItem\n ref={ref}\n startIcon={startIcon}\n endIcon={<InternalIcon name=\"angle-right\" />}\n testId={testId}\n onFollow={() =>\n navigate('dropdown-menu', {\n definition,\n headerText: definition.text || definition.title,\n headerSecondaryText: definition.description,\n utilityIndex: index,\n })\n }\n >\n {children}\n </ButtonItem>\n );\n }\n);\n\nconst ExpandableItem: React.FC<\n ButtonItemProps & ButtonDropdownProps.ItemGroup & { onItemClick: (item: ButtonDropdownProps.Item) => void }\n> = ({ children, onItemClick, ...definition }) => {\n const [expanded, setExpanded] = useState(false);\n const headerId = useUniqueId('overflow-menu-item');\n\n return (\n <>\n <button\n className={clsx(styles['overflow-menu-control'], styles['overflow-menu-control-expandable-menu-trigger'])}\n onClick={() => setExpanded(value => !value)}\n aria-expanded={expanded}\n >\n <ListItem\n endIcon={\n <span className={clsx(styles.icon, expanded && styles.expanded)}>\n <InternalIcon name=\"caret-up-filled\" />\n </span>\n }\n >\n <span id={headerId}>{children}</span>\n </ListItem>\n </button>\n {expanded && (\n <ul\n className={clsx(styles['overflow-menu-list'], styles['overflow-menu-list-submenu'])}\n aria-labelledby={headerId}\n >\n {definition.items.map((item, index) => {\n const isGroup = typeof (item as ButtonDropdownProps.ItemGroup).items !== 'undefined';\n\n return (\n <li\n key={index}\n className={clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-dropdown-menu`])}\n >\n {dropdownComponentFactory(item, isGroup, onItemClick)}\n </li>\n );\n })}\n </ul>\n )}\n </>\n );\n};\n\nfunction utilityComponentFactory(\n utility: TopNavigationProps.Utility,\n index: number,\n ref?: React.Ref<HTMLAnchorElement & HTMLButtonElement>\n) {\n const label = utility.text || utility.title;\n const hasIcon = !!utility.iconName || !!utility.iconUrl || !!utility.iconAlt || !!utility.iconSvg;\n const startIcon = hasIcon && (\n <InternalIcon name={utility.iconName} url={utility.iconUrl} alt={utility.iconAlt} svg={utility.iconSvg} />\n );\n\n switch (utility.type) {\n case 'button': {\n const handleClick = (event: Event | React.SyntheticEvent) => {\n fireCancelableEvent(utility.onClick, {}, event);\n };\n\n const content = (\n <>\n {label}\n {utility.external && (\n <>\n {' '}\n <span aria-label={utility.externalIconAriaLabel} role={utility.externalIconAriaLabel ? 'img' : undefined}>\n <InternalIcon name=\"external\" size=\"normal\" />\n </span>\n </>\n )}\n </>\n );\n\n if (!utility.href) {\n return (\n <ButtonItem ref={ref} startIcon={startIcon} onFollow={handleClick} testId={`__${index}`}>\n {content}\n </ButtonItem>\n );\n }\n\n return (\n <LinkItem\n ref={ref}\n startIcon={startIcon}\n href={utility.href}\n external={utility.external}\n target={utility.target}\n rel={utility.rel}\n testId={`__${index}`}\n onFollow={handleClick}\n >\n {content}\n </LinkItem>\n );\n }\n case 'menu-dropdown': {\n return (\n <NavigationItem\n ref={ref}\n startIcon={startIcon}\n index={index}\n {...(utility as TopNavigationProps.MenuDropdownUtility)}\n testId={`__${index}`}\n >\n {label}\n </NavigationItem>\n );\n }\n }\n}\n\nfunction dropdownComponentFactory(\n item: ButtonDropdownProps.ItemOrGroup,\n expandable: boolean,\n onItemClick: (item: ButtonDropdownProps.Item) => void\n) {\n const label = item.text;\n const hasIcon = !!item.iconName || !!item.iconUrl || !!item.iconAlt || !!item.iconSvg;\n const startIcon = hasIcon && (\n <InternalIcon name={item.iconName} url={item.iconUrl} alt={item.iconAlt} svg={item.iconSvg} />\n );\n\n if (expandable) {\n return (\n <ExpandableItem {...(item as ButtonDropdownProps.ItemGroup)} onItemClick={onItemClick}>\n {label}\n </ExpandableItem>\n );\n }\n\n return (\n <LinkItem\n startIcon={startIcon}\n href={item.href}\n external={item.external}\n context=\"dropdown-menu\"\n testId={item.id}\n onFollow={() => onItemClick(item as ButtonDropdownProps.Item)}\n >\n {label}\n {item.external && (\n <>\n {' '}\n <span aria-label={item.externalIconAriaLabel} role={item.externalIconAriaLabel ? 'img' : undefined}>\n <InternalIcon name=\"external\" size=\"normal\" />\n </span>\n </>\n )}\n </LinkItem>\n );\n}\n\ntype UtilityMenuItemProps = TopNavigationProps.Utility & { index: number };\n\nexport const UtilityMenuItem = forwardRef(\n ({ index, ...props }: UtilityMenuItemProps, ref: React.Ref<HTMLAnchorElement & HTMLButtonElement>) => {\n return (\n <li className={clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-utility`])}>\n {utilityComponentFactory(props, index, ref)}\n </li>\n );\n }\n);\n\ntype SubmenuItemProps = ButtonDropdownProps.ItemOrGroup & { onItemClick: (item: ButtonDropdownProps.Item) => void };\n\nexport const SubmenuItem = (props: SubmenuItemProps) => {\n const expandable = typeof (props as ButtonDropdownProps.ItemGroup).items !== 'undefined';\n\n return (\n <li\n className={clsx(\n styles[`overflow-menu-list-item`],\n styles[`overflow-menu-list-item-submenu`],\n expandable && styles[`overflow-menu-list-item-expandable`]\n )}\n >\n {dropdownComponentFactory(props, expandable, props.onItemClick)}\n </li>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"menu-item.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/menu-item.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, { forwardRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { fireCancelableEvent, isPlainLeftClick } from '../../../internal/events';\nimport { useUniqueId } from '../../../internal/hooks/use-unique-id';\n\nimport { LinkProps } from '../../../link/interfaces';\nimport { ButtonDropdownProps } from '../../../button-dropdown/interfaces';\nimport InternalIcon from '../../../icon/internal';\n\nimport { useNavigate } from './router';\nimport { TopNavigationProps } from '../../interfaces';\nimport styles from '../../styles.css.js';\n\ninterface ListItemProps {\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n context?: 'dropdown-menu';\n children?: React.ReactNode;\n testId?: string;\n}\n\nconst ListItem = ({ children, startIcon, endIcon }: ListItemProps) => {\n return (\n <>\n {startIcon && <span className={styles['overflow-menu-list-item-icon']}>{startIcon}</span>}\n <span className={styles['overflow-menu-list-item-text']}>{children}</span>\n {endIcon && endIcon}\n </>\n );\n};\n\ninterface LinkItemProps extends ButtonItemProps, Pick<LinkProps, 'href' | 'external' | 'target' | 'rel'> {}\n\nconst LinkItem = forwardRef(\n (\n { children, external, href, target, rel, startIcon, endIcon, onClick, context, testId }: LinkItemProps,\n ref: React.Ref<HTMLAnchorElement & HTMLButtonElement>\n ) => {\n const anchorTarget = target ?? (external ? '_blank' : undefined);\n const anchorRel = rel ?? (anchorTarget === '_blank' ? 'noopener noreferrer' : undefined);\n\n return (\n <a\n ref={ref}\n onClick={onClick}\n className={clsx(\n styles['overflow-menu-control'],\n styles['overflow-menu-control-link'],\n context && styles[`overflow-menu-control-${context}`]\n )}\n href={href}\n target={anchorTarget}\n rel={anchorRel}\n {...(testId ? { 'data-testid': testId } : {})}\n >\n <ListItem startIcon={startIcon} endIcon={endIcon}>\n {children}\n </ListItem>\n </a>\n );\n }\n);\n\ninterface ButtonItemProps extends ListItemProps {\n onClick?: (event: React.MouseEvent) => void;\n}\n\nconst ButtonItem = forwardRef(\n (\n { children, startIcon, endIcon, onClick, testId }: ButtonItemProps & { testId?: string },\n ref: React.Ref<HTMLButtonElement>\n ) => {\n return (\n <button\n ref={ref}\n className={styles['overflow-menu-control']}\n onClick={onClick}\n {...(typeof testId === 'string' ? { 'data-testid': testId } : {})}\n >\n <ListItem startIcon={startIcon} endIcon={endIcon}>\n {children}\n </ListItem>\n </button>\n );\n }\n);\n\nconst NavigationItem = forwardRef(\n (\n {\n startIcon,\n children,\n index,\n testId,\n ...definition\n }: ButtonItemProps & TopNavigationProps.MenuDropdownUtility & { index: number; testId?: string },\n ref: React.Ref<HTMLButtonElement>\n ) => {\n const navigate = useNavigate();\n return (\n <ButtonItem\n ref={ref}\n startIcon={startIcon}\n endIcon={<InternalIcon name=\"angle-right\" />}\n testId={testId}\n onClick={() =>\n navigate('dropdown-menu', {\n definition,\n headerText: definition.text || definition.title,\n headerSecondaryText: definition.description,\n utilityIndex: index,\n })\n }\n >\n {children}\n </ButtonItem>\n );\n }\n);\n\nconst ExpandableItem: React.FC<\n ButtonItemProps &\n ButtonDropdownProps.ItemGroup & { onItemClick: (event: React.MouseEvent, item: ButtonDropdownProps.Item) => void }\n> = ({ children, onItemClick, ...definition }) => {\n const [expanded, setExpanded] = useState(false);\n const headerId = useUniqueId('overflow-menu-item');\n\n return (\n <>\n <button\n className={clsx(styles['overflow-menu-control'], styles['overflow-menu-control-expandable-menu-trigger'])}\n onClick={() => setExpanded(value => !value)}\n aria-expanded={expanded}\n >\n <ListItem\n endIcon={\n <span className={clsx(styles.icon, expanded && styles.expanded)}>\n <InternalIcon name=\"caret-up-filled\" />\n </span>\n }\n >\n <span id={headerId}>{children}</span>\n </ListItem>\n </button>\n {expanded && (\n <ul\n className={clsx(styles['overflow-menu-list'], styles['overflow-menu-list-submenu'])}\n aria-labelledby={headerId}\n >\n {definition.items.map((item, index) => {\n const isGroup = typeof (item as ButtonDropdownProps.ItemGroup).items !== 'undefined';\n\n return (\n <li\n key={index}\n className={clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-dropdown-menu`])}\n >\n {dropdownComponentFactory(item, isGroup, onItemClick)}\n </li>\n );\n })}\n </ul>\n )}\n </>\n );\n};\n\nfunction utilityComponentFactory(\n utility: TopNavigationProps.Utility,\n index: number,\n ref?: React.Ref<HTMLAnchorElement & HTMLButtonElement>\n) {\n const label = utility.text || utility.title;\n const hasIcon = !!utility.iconName || !!utility.iconUrl || !!utility.iconAlt || !!utility.iconSvg;\n const startIcon = hasIcon && (\n <InternalIcon name={utility.iconName} url={utility.iconUrl} alt={utility.iconAlt} svg={utility.iconSvg} />\n );\n\n switch (utility.type) {\n case 'button': {\n const handleClick = (event: React.MouseEvent) => {\n if (Boolean(utility.href) && isPlainLeftClick(event)) {\n fireCancelableEvent(utility.onFollow, { href: utility.href, target: utility.target }, event);\n }\n\n fireCancelableEvent(utility.onClick, {}, event);\n };\n\n const content = (\n <>\n {label}\n {utility.external && (\n <>\n {' '}\n <span aria-label={utility.externalIconAriaLabel} role={utility.externalIconAriaLabel ? 'img' : undefined}>\n <InternalIcon name=\"external\" size=\"normal\" />\n </span>\n </>\n )}\n </>\n );\n\n if (!utility.href) {\n return (\n <ButtonItem ref={ref} startIcon={startIcon} onClick={handleClick} testId={`__${index}`}>\n {content}\n </ButtonItem>\n );\n }\n\n return (\n <LinkItem\n ref={ref}\n startIcon={startIcon}\n href={utility.href}\n external={utility.external}\n target={utility.target}\n rel={utility.rel}\n testId={`__${index}`}\n onClick={handleClick}\n >\n {content}\n </LinkItem>\n );\n }\n case 'menu-dropdown': {\n return (\n <NavigationItem\n ref={ref}\n startIcon={startIcon}\n index={index}\n {...(utility as TopNavigationProps.MenuDropdownUtility)}\n testId={`__${index}`}\n >\n {label}\n </NavigationItem>\n );\n }\n }\n}\n\nfunction dropdownComponentFactory(\n item: ButtonDropdownProps.ItemOrGroup,\n expandable: boolean,\n onItemClick: (event: React.MouseEvent, item: ButtonDropdownProps.Item) => void\n) {\n const label = item.text;\n const hasIcon = !!item.iconName || !!item.iconUrl || !!item.iconAlt || !!item.iconSvg;\n const startIcon = hasIcon && (\n <InternalIcon name={item.iconName} url={item.iconUrl} alt={item.iconAlt} svg={item.iconSvg} />\n );\n\n if (expandable) {\n return (\n <ExpandableItem {...(item as ButtonDropdownProps.ItemGroup)} onItemClick={onItemClick}>\n {label}\n </ExpandableItem>\n );\n }\n\n return (\n <LinkItem\n startIcon={startIcon}\n href={item.href}\n external={item.external}\n context=\"dropdown-menu\"\n testId={item.id}\n onClick={event => onItemClick(event, item as ButtonDropdownProps.Item)}\n >\n {label}\n {item.external && (\n <>\n {' '}\n <span aria-label={item.externalIconAriaLabel} role={item.externalIconAriaLabel ? 'img' : undefined}>\n <InternalIcon name=\"external\" size=\"normal\" />\n </span>\n </>\n )}\n </LinkItem>\n );\n}\n\ntype UtilityMenuItemProps = TopNavigationProps.Utility & { index: number };\n\nexport const UtilityMenuItem = forwardRef(\n ({ index, ...props }: UtilityMenuItemProps, ref: React.Ref<HTMLAnchorElement & HTMLButtonElement>) => {\n return (\n <li className={clsx(styles[`overflow-menu-list-item`], styles[`overflow-menu-list-item-utility`])}>\n {utilityComponentFactory(props, index, ref)}\n </li>\n );\n }\n);\n\ntype SubmenuItemProps = ButtonDropdownProps.ItemOrGroup & {\n onClick: (event: React.MouseEvent, item: ButtonDropdownProps.Item) => void;\n};\n\nexport const SubmenuItem = (props: SubmenuItemProps) => {\n const expandable = typeof (props as ButtonDropdownProps.ItemGroup).items !== 'undefined';\n\n return (\n <li\n className={clsx(\n styles[`overflow-menu-list-item`],\n styles[`overflow-menu-list-item-submenu`],\n expandable && styles[`overflow-menu-list-item-expandable`]\n )}\n >\n {dropdownComponentFactory(props, expandable, props.onClick)}\n </li>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submenu.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/views/submenu.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI1B,UAAU,gBAAiB,SAAQ,IAAI;IACrC,UAAU,EAAE,kBAAkB,CAAC,mBAAmB,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,QAAA,MAAM,WAAW,qHAQd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"submenu.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/views/submenu.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI1B,UAAU,gBAAiB,SAAQ,IAAI;IACrC,UAAU,EAAE,kBAAkB,CAAC,mBAAmB,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,QAAA,MAAM,WAAW,qHAQd,gBAAgB,gBA2ClB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -8,16 +8,18 @@ import Header from '../header';
|
|
|
8
8
|
import { SubmenuItem } from '../menu-item';
|
|
9
9
|
import { useUniqueId } from '../../../../internal/hooks/use-unique-id';
|
|
10
10
|
import styles from '../../../styles.css.js';
|
|
11
|
-
import { fireCancelableEvent } from '../../../../internal/events';
|
|
11
|
+
import { fireCancelableEvent, isPlainLeftClick } from '../../../../internal/events';
|
|
12
12
|
const SubmenuView = ({ onClose, utilityIndex, headerText, headerSecondaryText, dismissIconAriaLabel, backIconAriaLabel, definition, }) => {
|
|
13
13
|
const navigate = useNavigate();
|
|
14
14
|
const headerId = useUniqueId('overflow-menu-header');
|
|
15
15
|
return (React.createElement(FocusLock, { returnFocus: true },
|
|
16
16
|
React.createElement(Header, { secondaryText: headerSecondaryText, dismissIconAriaLabel: dismissIconAriaLabel, backIconAriaLabel: backIconAriaLabel, onClose: onClose, onBack: () => navigate('utilities', { utilityIndex }) },
|
|
17
17
|
React.createElement("span", { id: headerId }, headerText)),
|
|
18
|
-
React.createElement("ul", { className: clsx(styles['overflow-menu-list'], styles['overflow-menu-list-submenu']), "aria-labelledby": headerId }, definition.items.map((item, index) => (React.createElement(SubmenuItem, Object.assign({ key: index }, item, {
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
React.createElement("ul", { className: clsx(styles['overflow-menu-list'], styles['overflow-menu-list-submenu']), "aria-labelledby": headerId }, definition.items.map((item, index) => (React.createElement(SubmenuItem, Object.assign({ key: index }, item, { onClick: (event, item) => {
|
|
19
|
+
if (item.href && isPlainLeftClick(event)) {
|
|
20
|
+
fireCancelableEvent(definition.onItemFollow, { id: item.id, href: item.href, external: item.external }, event);
|
|
21
|
+
}
|
|
22
|
+
fireCancelableEvent(definition.onItemClick, { id: item.id, href: item.href, external: item.external }, event);
|
|
21
23
|
} })))))));
|
|
22
24
|
};
|
|
23
25
|
export default SubmenuView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submenu.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/views/submenu.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAKvE,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"submenu.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/overflow-menu/views/submenu.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAKvE,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAOpF,MAAM,WAAW,GAAG,CAAC,EACnB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,GACO,EAAE,EAAE;IACrB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAErD,OAAO,CACL,oBAAC,SAAS,IAAC,WAAW,EAAE,IAAI;QAC1B,oBAAC,MAAM,IACL,aAAa,EAAE,mBAAmB,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC;YAErD,8BAAM,EAAE,EAAE,QAAQ,IAAG,UAAU,CAAQ,CAChC;QACT,4BACE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,4BAA4B,CAAC,CAAC,qBAClE,QAAQ,IAEvB,UAAqD,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjF,oBAAC,WAAW,kBACV,GAAG,EAAE,KAAK,IACN,IAAI,IACR,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBACxC,mBAAmB,CACjB,UAAU,CAAC,YAAY,EACvB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EACzD,KAAK,CACN,CAAC;iBACH;gBAED,mBAAmB,CACjB,UAAU,CAAC,WAAW,EACtB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EACzD,KAAK,CACN,CAAC;YACJ,CAAC,IACD,CACH,CAAC,CACC,CACK,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\nimport clsx from 'clsx';\nimport FocusLock from 'react-focus-lock';\n\nimport { useNavigate } from '../router';\nimport Header from '../header';\nimport { SubmenuItem } from '../menu-item';\nimport { useUniqueId } from '../../../../internal/hooks/use-unique-id';\n\nimport { TopNavigationProps } from '../../../interfaces';\n\nimport { View } from '..';\nimport styles from '../../../styles.css.js';\nimport { fireCancelableEvent, isPlainLeftClick } from '../../../../internal/events';\n\ninterface SubmenuViewProps extends View {\n definition: TopNavigationProps.MenuDropdownUtility;\n utilityIndex?: number;\n}\n\nconst SubmenuView = ({\n onClose,\n utilityIndex,\n headerText,\n headerSecondaryText,\n dismissIconAriaLabel,\n backIconAriaLabel,\n definition,\n}: SubmenuViewProps) => {\n const navigate = useNavigate();\n const headerId = useUniqueId('overflow-menu-header');\n\n return (\n <FocusLock returnFocus={true}>\n <Header\n secondaryText={headerSecondaryText}\n dismissIconAriaLabel={dismissIconAriaLabel}\n backIconAriaLabel={backIconAriaLabel}\n onClose={onClose}\n onBack={() => navigate('utilities', { utilityIndex })}\n >\n <span id={headerId}>{headerText}</span>\n </Header>\n <ul\n className={clsx(styles['overflow-menu-list'], styles['overflow-menu-list-submenu'])}\n aria-labelledby={headerId}\n >\n {(definition as TopNavigationProps.MenuDropdownUtility).items.map((item, index) => (\n <SubmenuItem\n key={index}\n {...item}\n onClick={(event, item) => {\n if (item.href && isPlainLeftClick(event)) {\n fireCancelableEvent(\n definition.onItemFollow,\n { id: item.id, href: item.href, external: item.external },\n event\n );\n }\n\n fireCancelableEvent(\n definition.onItemClick,\n { id: item.id, href: item.href, external: item.external },\n event\n );\n }}\n />\n ))}\n </ul>\n </FocusLock>\n );\n};\n\nexport default SubmenuView;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/utility.tsx"],"names":[],"mappings":";AAQA,OAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;CAChD;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"utility.d.ts","sourceRoot":"lib/default/","sources":["top-navigation/parts/utility.tsx"],"names":[],"mappings":";AAQA,OAAqB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;CAChD;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,YAAY,sBAwGlF"}
|
|
@@ -22,7 +22,7 @@ export default function Utility({ hideText, definition, offsetRight }) {
|
|
|
22
22
|
checkSafeUrl('TopNavigation', definition.href);
|
|
23
23
|
if (definition.variant === 'primary-button') {
|
|
24
24
|
return (React.createElement("span", { className: styles[`offset-right-${offsetRight}`] },
|
|
25
|
-
React.createElement(InternalButton, { variant: "primary", href: definition.href, target: definition.external ? '_blank' : undefined, onClick: definition.onClick, ariaLabel: ariaLabel, iconName: definition.iconName, iconUrl: definition.iconUrl, iconAlt: definition.iconAlt, iconSvg: definition.iconSvg }, shouldHideText ? null : (React.createElement(React.Fragment, null,
|
|
25
|
+
React.createElement(InternalButton, { variant: "primary", href: definition.href, target: definition.external ? '_blank' : undefined, onClick: definition.onClick, onFollow: definition.onFollow, ariaLabel: ariaLabel, iconName: definition.iconName, iconUrl: definition.iconUrl, iconAlt: definition.iconAlt, iconSvg: definition.iconSvg }, shouldHideText ? null : (React.createElement(React.Fragment, null,
|
|
26
26
|
definition.text,
|
|
27
27
|
definition.external && (React.createElement(React.Fragment, null,
|
|
28
28
|
' ',
|
|
@@ -32,7 +32,10 @@ export default function Utility({ hideText, definition, offsetRight }) {
|
|
|
32
32
|
else {
|
|
33
33
|
// Link
|
|
34
34
|
return (React.createElement("span", { className: styles[`offset-right-${offsetRight}`] },
|
|
35
|
-
React.createElement(InternalLink, { variant: "top-navigation", href: definition.href, target: definition.target, rel: definition.rel, external: definition.external, onFollow: evt =>
|
|
35
|
+
React.createElement(InternalLink, { variant: "top-navigation", href: definition.href, target: definition.target, rel: definition.rel, external: definition.external, onFollow: evt => {
|
|
36
|
+
fireCancelableEvent(definition.onFollow, { href: definition.href, target: definition.target, external: definition.external }, evt);
|
|
37
|
+
fireCancelableEvent(definition.onClick, { href: definition.href, target: definition.target, external: definition.external }, evt);
|
|
38
|
+
}, ariaLabel: ariaLabel },
|
|
36
39
|
hasIcon && (React.createElement(InternalIcon, { name: definition.iconName, url: definition.iconUrl, alt: definition.iconAlt, svg: definition.iconSvg, badge: definition.badge })),
|
|
37
40
|
!shouldHideText && definition.text && (React.createElement("span", { className: hasIcon ? styles['utility-link-icon'] : undefined }, definition.text)))));
|
|
38
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/utility.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"lib/default/","sources":["top-navigation/parts/utility.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 from 'react';\nimport clsx from 'clsx';\n\nimport { InternalButton } from '../../button/internal';\nimport InternalLink from '../../link/internal';\nimport InternalIcon from '../../icon/internal';\nimport MenuDropdown, { MenuDropdownProps } from '../../internal/components/menu-dropdown';\n\nimport { TopNavigationProps } from '../interfaces';\n\nimport styles from '../styles.css.js';\nimport { checkSafeUrl } from '../../internal/utils/check-safe-url';\nimport { joinStrings } from '../../internal/utils/strings';\nimport { fireCancelableEvent } from '../../internal/events';\n\nexport interface UtilityProps {\n hideText: boolean;\n definition: TopNavigationProps.Utility;\n offsetRight?: MenuDropdownProps['offsetRight'];\n}\n\nexport default function Utility({ hideText, definition, offsetRight }: UtilityProps) {\n const hasIcon = !!definition.iconName || !!definition.iconUrl || !!definition.iconAlt || !!definition.iconSvg;\n const shouldHideText = hideText && !definition.disableTextCollapse && hasIcon;\n let ariaLabel = definition.ariaLabel ?? definition.text;\n\n if (definition.type === 'button') {\n ariaLabel = definition.ariaLabel\n ? definition.ariaLabel\n : joinStrings(definition.text, definition.externalIconAriaLabel);\n checkSafeUrl('TopNavigation', definition.href);\n if (definition.variant === 'primary-button') {\n return (\n <span className={styles[`offset-right-${offsetRight}`]}>\n <InternalButton\n variant=\"primary\"\n href={definition.href}\n target={definition.external ? '_blank' : undefined}\n onClick={definition.onClick}\n onFollow={definition.onFollow}\n ariaLabel={ariaLabel}\n iconName={definition.iconName}\n iconUrl={definition.iconUrl}\n iconAlt={definition.iconAlt}\n iconSvg={definition.iconSvg}\n >\n {shouldHideText ? null : (\n <>\n {definition.text}\n {definition.external && (\n <>\n {' '}\n <span\n className={clsx(styles['utility-button-external-icon'], styles[`offset-right-${offsetRight}`])}\n aria-label={definition.externalIconAriaLabel}\n role={definition.externalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" />\n </span>\n </>\n )}\n </>\n )}\n </InternalButton>\n </span>\n );\n } else {\n // Link\n return (\n <span className={styles[`offset-right-${offsetRight}`]}>\n <InternalLink\n variant=\"top-navigation\"\n href={definition.href}\n target={definition.target}\n rel={definition.rel}\n external={definition.external}\n onFollow={evt => {\n fireCancelableEvent(\n definition.onFollow,\n { href: definition.href, target: definition.target, external: definition.external },\n evt\n );\n fireCancelableEvent(\n definition.onClick,\n { href: definition.href, target: definition.target, external: definition.external },\n evt\n );\n }}\n ariaLabel={ariaLabel}\n >\n {hasIcon && (\n <InternalIcon\n name={definition.iconName}\n url={definition.iconUrl}\n alt={definition.iconAlt}\n svg={definition.iconSvg}\n badge={definition.badge}\n />\n )}\n {!shouldHideText && definition.text && (\n <span className={hasIcon ? styles['utility-link-icon'] : undefined}>{definition.text}</span>\n )}\n </InternalLink>\n </span>\n );\n }\n } else if (definition.type === 'menu-dropdown') {\n const title = definition.title || definition.text;\n const shouldShowTitle = shouldHideText || !definition.text;\n\n checkSafeUrlRecursively(definition.items);\n\n return (\n <MenuDropdown\n {...definition}\n title={shouldShowTitle ? title : ''}\n ariaLabel={ariaLabel}\n offsetRight={offsetRight}\n >\n {!shouldHideText && definition.text}\n </MenuDropdown>\n );\n }\n\n return null;\n}\n\nfunction checkSafeUrlRecursively(itemOrGroup: MenuDropdownProps['items']) {\n for (const item of itemOrGroup) {\n checkSafeUrl('TopNavigation', item.href);\n\n if ('items' in item) {\n checkSafeUrlRecursively(item.items);\n }\n }\n}\n"]}
|