@cloudscape-design/components 3.0.630 → 3.0.632
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/autosuggest/internal.d.ts.map +1 -1
- package/autosuggest/internal.js +10 -0
- package/autosuggest/internal.js.map +1 -1
- package/breadcrumb-group/implementation.d.ts +8 -0
- package/breadcrumb-group/implementation.d.ts.map +1 -0
- package/breadcrumb-group/implementation.js +71 -0
- package/breadcrumb-group/implementation.js.map +1 -0
- package/breadcrumb-group/index.js +1 -1
- package/breadcrumb-group/index.js.map +1 -1
- package/breadcrumb-group/internal.d.ts +1 -11
- package/breadcrumb-group/internal.d.ts.map +1 -1
- package/breadcrumb-group/internal.js +2 -70
- package/breadcrumb-group/internal.js.map +1 -1
- package/breadcrumb-group/item/item.js +1 -1
- package/breadcrumb-group/item/item.js.map +1 -1
- package/breadcrumb-group/utils.d.ts +7 -0
- package/breadcrumb-group/utils.d.ts.map +1 -0
- package/breadcrumb-group/utils.js +6 -0
- package/breadcrumb-group/utils.js.map +1 -0
- package/drawer/implementation.d.ts +7 -0
- package/drawer/implementation.d.ts.map +1 -0
- package/drawer/implementation.js +24 -0
- package/drawer/implementation.js.map +1 -0
- package/drawer/index.d.ts +1 -1
- package/drawer/index.d.ts.map +1 -1
- package/drawer/index.js +4 -18
- package/drawer/index.js.map +1 -1
- package/drawer/internal.d.ts +2 -0
- package/drawer/internal.d.ts.map +1 -0
- package/drawer/internal.js +5 -0
- package/drawer/internal.js.map +1 -0
- package/form-field/styles.css.js +23 -23
- package/form-field/styles.scoped.css +38 -37
- package/form-field/styles.selectors.js +23 -23
- package/help-panel/implementation.d.ts +7 -0
- package/help-panel/implementation.d.ts.map +1 -0
- package/help-panel/implementation.js +27 -0
- package/help-panel/implementation.js.map +1 -0
- package/help-panel/index.d.ts +1 -1
- package/help-panel/index.d.ts.map +1 -1
- package/help-panel/index.js +4 -21
- package/help-panel/index.js.map +1 -1
- package/help-panel/internal.d.ts +2 -0
- package/help-panel/internal.d.ts.map +1 -0
- package/help-panel/internal.js +5 -0
- package/help-panel/internal.js.map +1 -0
- package/internal/base-component/styles.scoped.css +5 -0
- package/internal/components/options-list/utils/use-keyboard.d.ts +2 -1
- package/internal/components/options-list/utils/use-keyboard.d.ts.map +1 -1
- package/internal/components/options-list/utils/use-keyboard.js +4 -4
- package/internal/components/options-list/utils/use-keyboard.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/generated/styles/tokens.d.ts +1 -0
- package/internal/generated/styles/tokens.js +1 -0
- package/internal/generated/theming/index.cjs +31 -0
- package/internal/generated/theming/index.js +31 -0
- package/internal/manifest.json +1 -1
- package/internal/widgets/index.d.ts +4 -0
- package/internal/widgets/index.d.ts.map +1 -0
- package/internal/widgets/index.js +28 -0
- package/internal/widgets/index.js.map +1 -0
- package/link/styles.css.js +20 -20
- package/link/styles.scoped.css +71 -75
- package/link/styles.selectors.js +20 -20
- package/package.json +1 -1
- package/s3-resource-selector/s3-modal/index.js +2 -2
- package/s3-resource-selector/s3-modal/index.js.map +1 -1
- package/select/utils/use-select.d.ts.map +1 -1
- package/select/utils/use-select.js +15 -1
- package/select/utils/use-select.js.map +1 -1
- package/side-navigation/implementation.d.ts +7 -0
- package/side-navigation/implementation.d.ts.map +1 -0
- package/side-navigation/implementation.js +36 -0
- package/side-navigation/implementation.js.map +1 -0
- package/side-navigation/index.d.ts +1 -1
- package/side-navigation/index.d.ts.map +1 -1
- package/side-navigation/index.js +5 -29
- package/side-navigation/index.js.map +1 -1
- package/side-navigation/internal.d.ts +1 -17
- package/side-navigation/internal.d.ts.map +1 -1
- package/side-navigation/internal.js +2 -182
- package/side-navigation/internal.js.map +1 -1
- package/side-navigation/parts.d.ts +18 -0
- package/side-navigation/parts.d.ts.map +1 -0
- package/side-navigation/parts.js +185 -0
- package/side-navigation/parts.js.map +1 -0
- package/slider/internal.d.ts.map +1 -1
- package/slider/internal.js +6 -2
- package/slider/internal.js.map +1 -1
- package/slider/styles.css.js +25 -23
- package/slider/styles.scoped.css +95 -52
- package/slider/styles.selectors.js +25 -23
- package/slider/tick-marks.d.ts +1 -0
- package/slider/tick-marks.d.ts.map +1 -1
- package/slider/tick-marks.js +4 -1
- package/slider/tick-marks.js.map +1 -1
- package/split-panel/implementation.d.ts +1 -0
- package/split-panel/implementation.d.ts.map +1 -1
- package/split-panel/implementation.js +2 -0
- package/split-panel/implementation.js.map +1 -1
- package/split-panel/styles.css.js +57 -57
- package/split-panel/styles.scoped.css +78 -77
- package/split-panel/styles.selectors.js +57 -57
- package/split-panel/widget.d.ts +1 -5
- package/split-panel/widget.d.ts.map +1 -1
- package/split-panel/widget.js +1 -13
- package/split-panel/widget.js.map +1 -1
- package/table/selection/use-selection.d.ts.map +1 -1
- package/table/selection/use-selection.js +59 -64
- package/table/selection/use-selection.js.map +1 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import React, { useCallback, useState, useEffect, useMemo } from 'react';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import InternalExpandableSection from '../expandable-section/internal';
|
|
6
|
+
import InternalIcon from '../icon/internal';
|
|
7
|
+
import InternalBox from '../box/internal';
|
|
8
|
+
import styles from './styles.css.js';
|
|
9
|
+
import { isPlainLeftClick } from '../internal/events';
|
|
10
|
+
import { hasActiveLink } from './util';
|
|
11
|
+
import { checkSafeUrl } from '../internal/utils/check-safe-url';
|
|
12
|
+
import { useVisualRefresh } from '../internal/hooks/use-visual-mode';
|
|
13
|
+
export function Header({ definition, activeHref, fireFollow }) {
|
|
14
|
+
checkSafeUrl('SideNavigation', definition.href);
|
|
15
|
+
const onClick = useCallback((event) => {
|
|
16
|
+
if (isPlainLeftClick(event)) {
|
|
17
|
+
fireFollow(definition, event);
|
|
18
|
+
}
|
|
19
|
+
}, [fireFollow, definition]);
|
|
20
|
+
return (React.createElement(React.Fragment, null,
|
|
21
|
+
React.createElement("h2", { className: styles.header },
|
|
22
|
+
React.createElement("a", { href: definition.href, className: clsx(styles['header-link'], { [styles['header-link--has-logo']]: !!definition.logo }), "aria-current": definition.href === activeHref ? 'page' : undefined, onClick: onClick },
|
|
23
|
+
definition.logo && (React.createElement("img", Object.assign({ className: clsx(styles['header-logo'], {
|
|
24
|
+
[styles['header-logo--stretched']]: !definition.text,
|
|
25
|
+
}) }, definition.logo))),
|
|
26
|
+
React.createElement("span", { className: styles['header-link-text'] }, definition.text))),
|
|
27
|
+
React.createElement(Divider, { isPresentational: true, variant: "header" })));
|
|
28
|
+
}
|
|
29
|
+
export function NavigationItemsList({ items, variant, activeHref, fireChange, fireFollow }) {
|
|
30
|
+
const lists = [];
|
|
31
|
+
let currentListIndex = 0;
|
|
32
|
+
lists[currentListIndex] = {
|
|
33
|
+
listVariant: variant,
|
|
34
|
+
items: [],
|
|
35
|
+
};
|
|
36
|
+
items.forEach((item, index) => {
|
|
37
|
+
var _a, _b, _c, _d, _e;
|
|
38
|
+
const itemid = index + 1;
|
|
39
|
+
switch (item.type) {
|
|
40
|
+
case 'divider': {
|
|
41
|
+
const dividerIndex = lists.length;
|
|
42
|
+
lists[dividerIndex] = {
|
|
43
|
+
element: (React.createElement("div", { "data-itemid": `item-${itemid}` },
|
|
44
|
+
React.createElement(Divider, { variant: "default" }))),
|
|
45
|
+
};
|
|
46
|
+
currentListIndex = lists.length;
|
|
47
|
+
lists[currentListIndex] = {
|
|
48
|
+
listVariant: variant,
|
|
49
|
+
items: [],
|
|
50
|
+
};
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
case 'link': {
|
|
54
|
+
(_a = lists[currentListIndex].items) === null || _a === void 0 ? void 0 : _a.push({
|
|
55
|
+
element: (React.createElement("li", { key: index, "data-itemid": `item-${itemid}`, className: styles['list-item'] },
|
|
56
|
+
React.createElement(Link, { definition: item, activeHref: activeHref, fireChange: fireChange, fireFollow: fireFollow }))),
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
case 'section': {
|
|
61
|
+
(_b = lists[currentListIndex].items) === null || _b === void 0 ? void 0 : _b.push({
|
|
62
|
+
element: (React.createElement("li", { key: index, "data-itemid": `item-${itemid}`, className: styles['list-item'] },
|
|
63
|
+
React.createElement(Section, { definition: item, activeHref: activeHref, variant: variant, fireChange: fireChange, fireFollow: fireFollow }))),
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
case 'section-group': {
|
|
68
|
+
(_c = lists[currentListIndex].items) === null || _c === void 0 ? void 0 : _c.push({
|
|
69
|
+
element: (React.createElement("li", { key: index, "data-itemid": `item-${itemid}`, className: styles['list-item'] },
|
|
70
|
+
React.createElement(SectionGroup, { definition: item, activeHref: activeHref, fireChange: fireChange, fireFollow: fireFollow }))),
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
case 'link-group': {
|
|
75
|
+
(_d = lists[currentListIndex].items) === null || _d === void 0 ? void 0 : _d.push({
|
|
76
|
+
element: (React.createElement("li", { key: index, "data-itemid": `item-${itemid}`, className: styles['list-item'] },
|
|
77
|
+
React.createElement(LinkGroup, { definition: item, activeHref: activeHref, fireChange: fireChange, fireFollow: fireFollow }))),
|
|
78
|
+
});
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
case 'expandable-link-group': {
|
|
82
|
+
(_e = lists[currentListIndex].items) === null || _e === void 0 ? void 0 : _e.push({
|
|
83
|
+
element: (React.createElement("li", { key: index, "data-itemid": `item-${itemid}`, className: styles['list-item'] },
|
|
84
|
+
React.createElement(ExpandableLinkGroup, { definition: item, activeHref: activeHref, fireChange: fireChange, fireFollow: fireFollow, variant: variant }))),
|
|
85
|
+
});
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
const lastListIndex = lists.length - 1;
|
|
91
|
+
return (React.createElement(React.Fragment, null, lists.map((list, index) => {
|
|
92
|
+
if (!list.items || list.items.length === 0) {
|
|
93
|
+
return (React.createElement("div", { key: `hr-${index}`, className: clsx(styles.list, styles[`list-variant-${variant}`], {
|
|
94
|
+
[styles['list-variant-root--last']]: list.listVariant === 'root' && index === lastListIndex,
|
|
95
|
+
}) }, list.element));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return (React.createElement("ul", { key: `list-${index}`, className: clsx(styles.list, styles[`list-variant-${list.listVariant}`], {
|
|
99
|
+
[styles['list-variant-root--last']]: list.listVariant === 'root' && index === lastListIndex,
|
|
100
|
+
}) }, list.items.map(item => item.element)));
|
|
101
|
+
}
|
|
102
|
+
})));
|
|
103
|
+
}
|
|
104
|
+
function Divider({ variant = 'default', isPresentational = false }) {
|
|
105
|
+
return (React.createElement("hr", { className: clsx(styles.divider, styles[`divider-${variant}`]), role: isPresentational ? 'presentation' : undefined }));
|
|
106
|
+
}
|
|
107
|
+
function Link({ definition, expanded, activeHref, fireFollow }) {
|
|
108
|
+
checkSafeUrl('SideNavigation', definition.href);
|
|
109
|
+
const isActive = definition.href === activeHref;
|
|
110
|
+
const onClick = useCallback((event) => {
|
|
111
|
+
if (isPlainLeftClick(event)) {
|
|
112
|
+
fireFollow(definition, event);
|
|
113
|
+
}
|
|
114
|
+
}, [fireFollow, definition]);
|
|
115
|
+
return (React.createElement(React.Fragment, null,
|
|
116
|
+
React.createElement("a", { href: definition.href, className: clsx(styles.link, { [styles['link-active']]: isActive }), target: definition.external ? '_blank' : undefined, rel: definition.external ? 'noopener noreferrer' : undefined, "aria-expanded": expanded, "aria-current": definition.href === activeHref ? 'page' : undefined, onClick: onClick },
|
|
117
|
+
definition.text,
|
|
118
|
+
definition.external && (React.createElement("span", { "aria-label": definition.externalIconAriaLabel, role: definition.externalIconAriaLabel ? 'img' : undefined },
|
|
119
|
+
React.createElement(InternalIcon, { name: "external", className: styles['external-icon'] })))),
|
|
120
|
+
definition.info && React.createElement("span", { className: styles.info }, definition.info)));
|
|
121
|
+
}
|
|
122
|
+
function Section({ definition, activeHref, fireFollow, fireChange, variant }) {
|
|
123
|
+
var _a;
|
|
124
|
+
const [expanded, setExpanded] = useState((_a = definition.defaultExpanded) !== null && _a !== void 0 ? _a : true);
|
|
125
|
+
const isVisualRefresh = useVisualRefresh();
|
|
126
|
+
const onExpandedChange = useCallback((e) => {
|
|
127
|
+
fireChange(definition, e.detail.expanded);
|
|
128
|
+
setExpanded(e.detail.expanded);
|
|
129
|
+
}, [definition, fireChange]);
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
var _a;
|
|
132
|
+
setExpanded((_a = definition.defaultExpanded) !== null && _a !== void 0 ? _a : true);
|
|
133
|
+
}, [definition]);
|
|
134
|
+
return (React.createElement(InternalExpandableSection, { variant: "footer", expanded: expanded, onChange: onExpandedChange, className: clsx(styles.section, variant === 'section-group' && styles['section--no-ident'], isVisualRefresh && styles.refresh), headerText: definition.text },
|
|
135
|
+
React.createElement(NavigationItemsList, { variant: "section", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
|
|
136
|
+
}
|
|
137
|
+
function SectionGroup({ definition, activeHref, fireFollow, fireChange }) {
|
|
138
|
+
return (React.createElement("div", { className: styles['section-group'] },
|
|
139
|
+
React.createElement(InternalBox, { className: styles['section-group-title'], variant: "h3" }, definition.title),
|
|
140
|
+
React.createElement(NavigationItemsList, { variant: "section-group", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
|
|
141
|
+
}
|
|
142
|
+
function LinkGroup({ definition, activeHref, fireFollow, fireChange }) {
|
|
143
|
+
checkSafeUrl('SideNavigation', definition.href);
|
|
144
|
+
return (React.createElement(React.Fragment, null,
|
|
145
|
+
React.createElement(Link, { definition: { type: 'link', href: definition.href, text: definition.text, info: definition.info }, fireFollow: (_, event) => fireFollow(definition, event), fireChange: fireChange, activeHref: activeHref }),
|
|
146
|
+
React.createElement(NavigationItemsList, { variant: "link-group", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
|
|
147
|
+
}
|
|
148
|
+
function ExpandableLinkGroup({ definition, fireFollow, fireChange, activeHref, variant }) {
|
|
149
|
+
// Check whether the definition contains an active link and memoize it to avoid
|
|
150
|
+
// rechecking every time.
|
|
151
|
+
const containsActiveLink = useMemo(() => {
|
|
152
|
+
return activeHref ? hasActiveLink(definition.items, activeHref) : false;
|
|
153
|
+
}, [activeHref, definition.items]);
|
|
154
|
+
const [expanded, setExpanded] = useState(() => {
|
|
155
|
+
var _a;
|
|
156
|
+
return (_a = definition.defaultExpanded) !== null && _a !== void 0 ? _a : (definition.href === activeHref || containsActiveLink);
|
|
157
|
+
});
|
|
158
|
+
const [userExpanded, setUserExpanded] = useState();
|
|
159
|
+
// Reset user expansion status when the items property is updated.
|
|
160
|
+
useEffect(() => setUserExpanded(undefined), [definition]);
|
|
161
|
+
// By default, the expandable section is open when there's an active link inside.
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
setExpanded(definition.href === activeHref || containsActiveLink);
|
|
164
|
+
}, [definition.href, containsActiveLink, activeHref]);
|
|
165
|
+
// If the definition object itself is updated, reset the expansion state to default.
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
if (definition.defaultExpanded !== undefined) {
|
|
168
|
+
setExpanded(definition.defaultExpanded);
|
|
169
|
+
}
|
|
170
|
+
}, [definition]);
|
|
171
|
+
const onExpandedChange = useCallback((e) => {
|
|
172
|
+
fireChange(definition, e.detail.expanded);
|
|
173
|
+
setUserExpanded(e.detail.expanded);
|
|
174
|
+
}, [definition, fireChange]);
|
|
175
|
+
const onHeaderFollow = (_, event) => {
|
|
176
|
+
fireFollow(definition, event);
|
|
177
|
+
setUserExpanded(true);
|
|
178
|
+
if (!expanded) {
|
|
179
|
+
fireChange(definition, true);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
return (React.createElement(InternalExpandableSection, { className: clsx(styles['expandable-link-group'], variant === 'section-group' && styles['expandable-link-group--no-ident']), variant: "navigation", expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, onChange: onExpandedChange, headerText: React.createElement(Link, { definition: { type: 'link', href: definition.href, text: definition.text }, expanded: userExpanded !== null && userExpanded !== void 0 ? userExpanded : expanded, fireFollow: onHeaderFollow, fireChange: fireChange, activeHref: activeHref }) },
|
|
183
|
+
React.createElement(NavigationItemsList, { variant: "expandable-link-group", items: definition.items, fireFollow: fireFollow, fireChange: fireChange, activeHref: activeHref })));
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../../src/side-navigation/parts.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, { useCallback, useState, useEffect, useMemo, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { ExpandableSectionProps } from '../expandable-section/interfaces';\nimport InternalExpandableSection from '../expandable-section/internal';\nimport InternalIcon from '../icon/internal';\nimport InternalBox from '../box/internal';\nimport { SideNavigationProps } from './interfaces';\nimport styles from './styles.css.js';\nimport { NonCancelableCustomEvent, isPlainLeftClick } from '../internal/events';\nimport { hasActiveLink } from './util';\nimport { checkSafeUrl } from '../internal/utils/check-safe-url';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\n\ninterface BaseItemComponentProps {\n activeHref?: string;\n fireChange: (item: SideNavigationProps.Section | SideNavigationProps.ExpandableLinkGroup, expanded: boolean) => void;\n fireFollow: (\n item:\n | SideNavigationProps.Link\n | SideNavigationProps.Header\n | SideNavigationProps.LinkGroup\n | SideNavigationProps.ExpandableLinkGroup,\n event: React.SyntheticEvent | Event\n ) => void;\n}\n\nexport interface HeaderProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Header;\n}\n\nexport function Header({ definition, activeHref, fireFollow }: HeaderProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n <h2 className={styles.header}>\n <a\n href={definition.href}\n className={clsx(styles['header-link'], { [styles['header-link--has-logo']]: !!definition.logo })}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.logo && (\n <img\n className={clsx(styles['header-logo'], {\n [styles['header-logo--stretched']]: !definition.text,\n })}\n {...definition.logo}\n />\n )}\n <span className={styles['header-link-text']}>{definition.text}</span>\n </a>\n </h2>\n <Divider isPresentational={true} variant=\"header\" />\n </>\n );\n}\n\nexport interface NavigationItemsListProps extends BaseItemComponentProps {\n items: ReadonlyArray<SideNavigationProps.Item>;\n variant: 'section' | 'section-group' | 'link-group' | 'expandable-link-group' | 'root';\n}\n\ninterface Item {\n element?: ReactNode;\n listVariant?: 'section' | 'section-group' | 'link-group' | 'expandable-link-group' | 'root';\n items?: Array<Item>;\n}\n\nexport function NavigationItemsList({ items, variant, activeHref, fireChange, fireFollow }: NavigationItemsListProps) {\n const lists: Array<Item> = [];\n let currentListIndex = 0;\n lists[currentListIndex] = {\n listVariant: variant,\n items: [],\n };\n\n items.forEach((item, index) => {\n const itemid = index + 1;\n switch (item.type) {\n case 'divider': {\n const dividerIndex = lists.length;\n lists[dividerIndex] = {\n element: (\n <div data-itemid={`item-${itemid}`}>\n <Divider variant=\"default\" />\n </div>\n ),\n };\n currentListIndex = lists.length;\n lists[currentListIndex] = {\n listVariant: variant,\n items: [],\n };\n return;\n }\n case 'link': {\n lists[currentListIndex].items?.push({\n element: (\n <li key={index} data-itemid={`item-${itemid}`} className={styles['list-item']}>\n <Link definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n </li>\n ),\n });\n return;\n }\n case 'section': {\n lists[currentListIndex].items?.push({\n element: (\n <li key={index} data-itemid={`item-${itemid}`} className={styles['list-item']}>\n <Section\n definition={item}\n activeHref={activeHref}\n variant={variant}\n fireChange={fireChange}\n fireFollow={fireFollow}\n />\n </li>\n ),\n });\n return;\n }\n case 'section-group': {\n lists[currentListIndex].items?.push({\n element: (\n <li key={index} data-itemid={`item-${itemid}`} className={styles['list-item']}>\n <SectionGroup definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n </li>\n ),\n });\n return;\n }\n case 'link-group': {\n lists[currentListIndex].items?.push({\n element: (\n <li key={index} data-itemid={`item-${itemid}`} className={styles['list-item']}>\n <LinkGroup definition={item} activeHref={activeHref} fireChange={fireChange} fireFollow={fireFollow} />\n </li>\n ),\n });\n return;\n }\n case 'expandable-link-group': {\n lists[currentListIndex].items?.push({\n element: (\n <li key={index} data-itemid={`item-${itemid}`} className={styles['list-item']}>\n <ExpandableLinkGroup\n definition={item}\n activeHref={activeHref}\n fireChange={fireChange}\n fireFollow={fireFollow}\n variant={variant}\n />\n </li>\n ),\n });\n return;\n }\n }\n });\n\n const lastListIndex = lists.length - 1;\n\n return (\n <>\n {lists.map((list, index) => {\n if (!list.items || list.items.length === 0) {\n return (\n <div\n key={`hr-${index}`}\n className={clsx(styles.list, styles[`list-variant-${variant}`], {\n [styles['list-variant-root--last']]: list.listVariant === 'root' && index === lastListIndex,\n })}\n >\n {list.element}\n </div>\n );\n } else {\n return (\n <ul\n key={`list-${index}`}\n className={clsx(styles.list, styles[`list-variant-${list.listVariant}`], {\n [styles['list-variant-root--last']]: list.listVariant === 'root' && index === lastListIndex,\n })}\n >\n {list.items.map(item => item.element)}\n </ul>\n );\n }\n })}\n </>\n );\n}\n\ninterface DividerProps {\n variant: 'default' | 'header';\n isPresentational?: boolean;\n}\n\nfunction Divider({ variant = 'default', isPresentational = false }: DividerProps) {\n return (\n <hr\n className={clsx(styles.divider, styles[`divider-${variant}`])}\n role={isPresentational ? 'presentation' : undefined}\n />\n );\n}\n\ninterface LinkProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Link;\n expanded?: boolean;\n}\n\nfunction Link({ definition, expanded, activeHref, fireFollow }: LinkProps) {\n checkSafeUrl('SideNavigation', definition.href);\n const isActive = definition.href === activeHref;\n\n const onClick = useCallback(\n (event: React.MouseEvent) => {\n if (isPlainLeftClick(event)) {\n fireFollow(definition, event);\n }\n },\n [fireFollow, definition]\n );\n\n return (\n <>\n <a\n href={definition.href}\n className={clsx(styles.link, { [styles['link-active']]: isActive })}\n target={definition.external ? '_blank' : undefined}\n rel={definition.external ? 'noopener noreferrer' : undefined}\n aria-expanded={expanded}\n aria-current={definition.href === activeHref ? 'page' : undefined}\n onClick={onClick}\n >\n {definition.text}\n {definition.external && (\n <span\n aria-label={definition.externalIconAriaLabel}\n role={definition.externalIconAriaLabel ? 'img' : undefined}\n >\n <InternalIcon name=\"external\" className={styles['external-icon']} />\n </span>\n )}\n </a>\n {definition.info && <span className={styles.info}>{definition.info}</span>}\n </>\n );\n}\n\ninterface SectionProps extends BaseItemComponentProps {\n definition: SideNavigationProps.Section;\n variant: 'section' | 'section-group' | 'link-group' | 'expandable-link-group' | 'root';\n}\n\nfunction Section({ definition, activeHref, fireFollow, fireChange, variant }: SectionProps) {\n const [expanded, setExpanded] = useState<boolean>(definition.defaultExpanded ?? true);\n const isVisualRefresh = useVisualRefresh();\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n useEffect(() => {\n setExpanded(definition.defaultExpanded ?? true);\n }, [definition]);\n\n return (\n <InternalExpandableSection\n variant=\"footer\"\n expanded={expanded}\n onChange={onExpandedChange}\n className={clsx(\n styles.section,\n variant === 'section-group' && styles['section--no-ident'],\n isVisualRefresh && styles.refresh\n )}\n headerText={definition.text}\n >\n <NavigationItemsList\n variant=\"section\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n\ninterface SectionGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.SectionGroup;\n}\n\nfunction SectionGroup({ definition, activeHref, fireFollow, fireChange }: SectionGroupProps) {\n return (\n <div className={styles['section-group']}>\n <InternalBox className={styles['section-group-title']} variant=\"h3\">\n {definition.title}\n </InternalBox>\n <NavigationItemsList\n variant=\"section-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </div>\n );\n}\n\ninterface LinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.LinkGroup;\n}\n\nfunction LinkGroup({ definition, activeHref, fireFollow, fireChange }: LinkGroupProps) {\n checkSafeUrl('SideNavigation', definition.href);\n\n return (\n <>\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text, info: definition.info }}\n fireFollow={(_, event) => fireFollow(definition, event)}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n <NavigationItemsList\n variant=\"link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </>\n );\n}\n\ninterface ExpandableLinkGroupProps extends BaseItemComponentProps {\n definition: SideNavigationProps.ExpandableLinkGroup;\n variant: 'section' | 'section-group' | 'link-group' | 'expandable-link-group' | 'root';\n}\n\nfunction ExpandableLinkGroup({ definition, fireFollow, fireChange, activeHref, variant }: ExpandableLinkGroupProps) {\n // Check whether the definition contains an active link and memoize it to avoid\n // rechecking every time.\n const containsActiveLink = useMemo(() => {\n return activeHref ? hasActiveLink(definition.items, activeHref) : false;\n }, [activeHref, definition.items]);\n\n const [expanded, setExpanded] = useState<boolean>(() => {\n return definition.defaultExpanded ?? (definition.href === activeHref || containsActiveLink);\n });\n\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>();\n\n // Reset user expansion status when the items property is updated.\n useEffect(() => setUserExpanded(undefined), [definition]);\n\n // By default, the expandable section is open when there's an active link inside.\n useEffect(() => {\n setExpanded(definition.href === activeHref || containsActiveLink);\n }, [definition.href, containsActiveLink, activeHref]);\n\n // If the definition object itself is updated, reset the expansion state to default.\n useEffect(() => {\n if (definition.defaultExpanded !== undefined) {\n setExpanded(definition.defaultExpanded);\n }\n }, [definition]);\n\n const onExpandedChange = useCallback(\n (e: NonCancelableCustomEvent<ExpandableSectionProps.ChangeDetail>) => {\n fireChange(definition, e.detail.expanded);\n setUserExpanded(e.detail.expanded);\n },\n [definition, fireChange]\n );\n\n const onHeaderFollow: LinkProps['fireFollow'] = (_, event) => {\n fireFollow(definition, event);\n setUserExpanded(true);\n if (!expanded) {\n fireChange(definition, true);\n }\n };\n\n return (\n <InternalExpandableSection\n className={clsx(\n styles['expandable-link-group'],\n variant === 'section-group' && styles['expandable-link-group--no-ident']\n )}\n variant=\"navigation\"\n expanded={userExpanded ?? expanded}\n onChange={onExpandedChange}\n headerText={\n <Link\n definition={{ type: 'link', href: definition.href, text: definition.text }}\n expanded={userExpanded ?? expanded}\n fireFollow={onHeaderFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n }\n >\n <NavigationItemsList\n variant=\"expandable-link-group\"\n items={definition.items}\n fireFollow={fireFollow}\n fireChange={fireChange}\n activeHref={activeHref}\n />\n </InternalExpandableSection>\n );\n}\n"]}
|
package/slider/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/slider/internal.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAOlF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,MAAM,WAAW,mBAAoB,SAAQ,WAAW,EAAE,0BAA0B;CAAG;AAEvF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAwB,EACxB,GAAG,IAAI,EACR,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/slider/internal.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAOlF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,MAAM,WAAW,mBAAoB,SAAQ,WAAW,EAAE,0BAA0B;CAAG;AAEvF,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,eAAe,EACf,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAwB,EACxB,GAAG,IAAI,EACR,EAAE,mBAAmB,eA6LrB"}
|
package/slider/internal.js
CHANGED
|
@@ -23,7 +23,8 @@ export default function InternalSlider(_a) {
|
|
|
23
23
|
const [showTooltip, setShowTooltip] = useState(false);
|
|
24
24
|
const [isActive, setIsActive] = useState(false);
|
|
25
25
|
const labelsId = useUniqueId('labels');
|
|
26
|
-
const { ariaLabelledby, ariaDescribedby, controlId, invalid } = useFormFieldContext(rest);
|
|
26
|
+
const { ariaLabelledby, ariaDescribedby, controlId, invalid, warning } = useFormFieldContext(rest);
|
|
27
|
+
const showWarning = warning && !invalid;
|
|
27
28
|
if (referenceValues && valuesAreValid(referenceValues) === false) {
|
|
28
29
|
warnOnce('Slider', 'All reference values must be integers. Non-integer values will not be displayed.');
|
|
29
30
|
}
|
|
@@ -83,11 +84,13 @@ export default function InternalSlider(_a) {
|
|
|
83
84
|
}) }),
|
|
84
85
|
!hideFillLine && (React.createElement("div", { className: clsx(styles['slider-range'], {
|
|
85
86
|
[styles.error]: invalid,
|
|
87
|
+
[styles.warning]: showWarning,
|
|
86
88
|
[styles.active]: isActive,
|
|
87
89
|
[styles['error-active']]: invalid && isActive,
|
|
90
|
+
[styles['warning-active']]: showWarning && isActive,
|
|
88
91
|
[styles.disabled]: disabled,
|
|
89
92
|
}), style: { [customCssProps.sliderRangeInlineSize]: `${percent}%` } }))),
|
|
90
|
-
!!step && tickMarks && (React.createElement(SliderTickMarks, { hideFillLine: hideFillLine, disabled: disabled, invalid: invalid, isActive: isActive, step: step, min: min, max: max, value: sliderValue })),
|
|
93
|
+
!!step && tickMarks && (React.createElement(SliderTickMarks, { hideFillLine: hideFillLine, disabled: disabled, invalid: invalid, warning: warning, isActive: isActive, step: step, min: min, max: max, value: sliderValue })),
|
|
91
94
|
React.createElement("input", {
|
|
92
95
|
// we need to add this because input[type=range] isn't natively focusable in Safari.
|
|
93
96
|
tabIndex: 0, "aria-label": ariaLabel, "aria-labelledby": ariaLabel && !rest.ariaLabelledby ? undefined : ariaLabelledby, "aria-describedby": valueFormatter ? (ariaDescribedby ? `${labelsId} ${ariaDescribedby}` : labelsId) : ariaDescribedby, "aria-valuetext": getAriaValueText(), "aria-invalid": invalid ? 'true' : undefined, id: controlId, type: "range", min: min, max: max, disabled: disabled, onFocus: () => {
|
|
@@ -110,6 +113,7 @@ export default function InternalSlider(_a) {
|
|
|
110
113
|
onChange && fireNonCancelableEvent(onChange, { value: Number(event.target.value) });
|
|
111
114
|
}, className: clsx(styles.thumb, {
|
|
112
115
|
[styles.error]: invalid,
|
|
116
|
+
[styles.warning]: showWarning,
|
|
113
117
|
[styles.disabled]: disabled,
|
|
114
118
|
[styles.min]: sliderValue <= min || max < min,
|
|
115
119
|
[styles.max]: sliderValue >= max && min < max,
|
package/slider/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/slider/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, { useState, useRef } from 'react';\nimport clsx from 'clsx';\nimport { warnOnce } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getBaseProps } from '../internal/base-component/index.js';\nimport { fireNonCancelableEvent } from '../internal/events/index.js';\nimport { useFormFieldContext } from '../internal/context/form-field-context.js';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useUniqueId } from '../internal/hooks/use-unique-id/index.js';\nimport Tooltip from '../internal/components/tooltip/index.js';\nimport customCssProps from '../internal/generated/custom-css-properties/index.js';\nimport { useInternalI18n } from '../i18n/context';\n\nimport styles from './styles.css.js';\nimport { SliderProps } from './interfaces.js';\nimport SliderLabels from './slider-labels.js';\nimport SliderTickMarks from './tick-marks.js';\nimport { getPercent, getStepArray, findLowerAndHigherValues, valuesAreValid, THUMB_SIZE } from './utils.js';\n\nexport interface InternalSliderProps extends SliderProps, InternalBaseComponentProps {}\n\nexport default function InternalSlider({\n value,\n min,\n max,\n onChange,\n step,\n disabled,\n ariaLabel,\n ariaDescription,\n referenceValues,\n tickMarks,\n hideFillLine,\n valueFormatter,\n i18nStrings,\n __internalRootRef = null,\n ...rest\n}: InternalSliderProps) {\n const baseProps = getBaseProps(rest);\n const i18n = useInternalI18n('slider');\n\n const handleRef = useRef<HTMLDivElement>(null);\n const [showTooltip, setShowTooltip] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const labelsId = useUniqueId('labels');\n const { ariaLabelledby, ariaDescribedby, controlId, invalid } = useFormFieldContext(rest);\n\n if (referenceValues && valuesAreValid(referenceValues) === false) {\n warnOnce('Slider', 'All reference values must be integers. Non-integer values will not be displayed.');\n }\n\n if (min >= max) {\n warnOnce('Slider', 'The min value cannot be greater than the max value.');\n }\n\n if (step && step > max - min) {\n warnOnce('Slider', 'The step value cannot be greater than the difference between the min and max.');\n }\n\n if (step && value !== undefined && (value - min) % step !== 0) {\n warnOnce('Slider', 'Slider value must be a multiple of the step. The value will round to the nearest step value.');\n }\n\n const getValue = () => {\n const stepIsValid = step && step < max - min && step > min;\n\n if (value === undefined) {\n // this is the default html input's fallback value\n return max < min ? min : min + (max - min) / 2;\n }\n\n if (!step) {\n return value;\n }\n\n // if the value is not a multiple of the step, then find the closest step\n // and make that the value (this is also the native input behavior)\n if (step && stepIsValid && (value - min) % step !== 0) {\n const closest = getStepArray(step, [min, max]).reduce(function (prev, curr) {\n return Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev;\n });\n\n return closest;\n }\n\n return value;\n };\n\n const sliderValue = getValue();\n const percent = getPercent(Math.max(Math.min(sliderValue, max), min), [min, max]);\n\n const getAriaValueText = () => {\n if (valueFormatter && valueFormatter(sliderValue)) {\n return valueFormatter(sliderValue);\n }\n\n if (valueFormatter && !valueFormatter(sliderValue)) {\n const middleValues = referenceValues ? referenceValues : [];\n const valueArray = [min, ...middleValues, sliderValue, max];\n const prevAndNext = findLowerAndHigherValues(valueArray, sliderValue);\n const previousValue = prevAndNext.lower ? valueFormatter(prevAndNext.lower) : valueFormatter(min);\n const nextValue = prevAndNext.higher ? valueFormatter(prevAndNext.higher) : valueFormatter(max);\n const value = sliderValue;\n\n return i18n('i18nStrings.valueTextRange', i18nStrings?.valueTextRange(previousValue, value, nextValue), format =>\n format({ value, previousValue, nextValue })\n );\n }\n\n return undefined;\n };\n\n return (\n <div {...baseProps} ref={__internalRootRef} className={clsx(baseProps.className, styles.root)}>\n {showTooltip && (\n <Tooltip value={valueFormatter ? valueFormatter(sliderValue) : sliderValue} trackRef={handleRef} />\n )}\n <div\n ref={handleRef}\n className={clsx(styles['tooltip-thumb'])}\n style={{\n [customCssProps.sliderTooltipPosition]: `calc(${percent}% - ${THUMB_SIZE}px)`,\n }}\n />\n <div className={styles.slider}>\n <div\n className={clsx(styles['slider-track'], {\n [styles.disabled]: disabled,\n })}\n />\n\n {!hideFillLine && (\n <div\n className={clsx(styles['slider-range'], {\n [styles.error]: invalid,\n [styles.active]: isActive,\n [styles['error-active']]: invalid && isActive,\n [styles.disabled]: disabled,\n })}\n style={{ [customCssProps.sliderRangeInlineSize]: `${percent}%` }}\n />\n )}\n </div>\n {!!step && tickMarks && (\n <SliderTickMarks\n hideFillLine={hideFillLine}\n disabled={disabled}\n invalid={invalid}\n isActive={isActive}\n step={step}\n min={min}\n max={max}\n value={sliderValue}\n />\n )}\n\n <input\n // we need to add this because input[type=range] isn't natively focusable in Safari.\n tabIndex={0}\n aria-label={ariaLabel}\n // aria-labelledby has precedence over aria-label in accessible name calculation.\n // When aria-label is provided for Input, it should override aria-labelledBy from form-field context.\n // If both aria-label and aria-labelledby come from Input props, aria-labelledby will be used in accessible name\n aria-labelledby={ariaLabel && !rest.ariaLabelledby ? undefined : ariaLabelledby}\n // Slider labels, if present and something other than numbers, should be associated to the input with aria-describedby\n aria-describedby={\n valueFormatter ? (ariaDescribedby ? `${labelsId} ${ariaDescribedby}` : labelsId) : ariaDescribedby\n }\n aria-valuetext={getAriaValueText()}\n aria-invalid={invalid ? 'true' : undefined}\n id={controlId}\n type=\"range\"\n min={min}\n max={max}\n disabled={disabled}\n onFocus={() => {\n setShowTooltip(true);\n setIsActive(true);\n }}\n onBlur={() => {\n setShowTooltip(false);\n setIsActive(false);\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n setShowTooltip(false);\n }}\n onTouchStart={() => {\n setShowTooltip(true);\n setIsActive(true);\n }}\n onTouchEnd={() => {\n setShowTooltip(false);\n setIsActive(false);\n }}\n step={step}\n value={sliderValue}\n onChange={event => {\n onChange && fireNonCancelableEvent(onChange, { value: Number(event.target.value) });\n }}\n className={clsx(styles.thumb, {\n [styles.error]: invalid,\n [styles.disabled]: disabled,\n [styles.min]: sliderValue <= min || max < min,\n [styles.max]: sliderValue >= max && min < max,\n })}\n />\n\n <SliderLabels\n min={min}\n max={max}\n referenceValues={referenceValues}\n valueFormatter={valueFormatter}\n labelsId={labelsId}\n ariaDescription={ariaDescription}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/slider/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, { useState, useRef } from 'react';\nimport clsx from 'clsx';\nimport { warnOnce } from '@cloudscape-design/component-toolkit/internal';\n\nimport { getBaseProps } from '../internal/base-component/index.js';\nimport { fireNonCancelableEvent } from '../internal/events/index.js';\nimport { useFormFieldContext } from '../internal/context/form-field-context.js';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { useUniqueId } from '../internal/hooks/use-unique-id/index.js';\nimport Tooltip from '../internal/components/tooltip/index.js';\nimport customCssProps from '../internal/generated/custom-css-properties/index.js';\nimport { useInternalI18n } from '../i18n/context';\n\nimport styles from './styles.css.js';\nimport { SliderProps } from './interfaces.js';\nimport SliderLabels from './slider-labels.js';\nimport SliderTickMarks from './tick-marks.js';\nimport { getPercent, getStepArray, findLowerAndHigherValues, valuesAreValid, THUMB_SIZE } from './utils.js';\n\nexport interface InternalSliderProps extends SliderProps, InternalBaseComponentProps {}\n\nexport default function InternalSlider({\n value,\n min,\n max,\n onChange,\n step,\n disabled,\n ariaLabel,\n ariaDescription,\n referenceValues,\n tickMarks,\n hideFillLine,\n valueFormatter,\n i18nStrings,\n __internalRootRef = null,\n ...rest\n}: InternalSliderProps) {\n const baseProps = getBaseProps(rest);\n const i18n = useInternalI18n('slider');\n\n const handleRef = useRef<HTMLDivElement>(null);\n const [showTooltip, setShowTooltip] = useState(false);\n const [isActive, setIsActive] = useState(false);\n const labelsId = useUniqueId('labels');\n const { ariaLabelledby, ariaDescribedby, controlId, invalid, warning } = useFormFieldContext(rest);\n\n const showWarning = warning && !invalid;\n\n if (referenceValues && valuesAreValid(referenceValues) === false) {\n warnOnce('Slider', 'All reference values must be integers. Non-integer values will not be displayed.');\n }\n\n if (min >= max) {\n warnOnce('Slider', 'The min value cannot be greater than the max value.');\n }\n\n if (step && step > max - min) {\n warnOnce('Slider', 'The step value cannot be greater than the difference between the min and max.');\n }\n\n if (step && value !== undefined && (value - min) % step !== 0) {\n warnOnce('Slider', 'Slider value must be a multiple of the step. The value will round to the nearest step value.');\n }\n\n const getValue = () => {\n const stepIsValid = step && step < max - min && step > min;\n\n if (value === undefined) {\n // this is the default html input's fallback value\n return max < min ? min : min + (max - min) / 2;\n }\n\n if (!step) {\n return value;\n }\n\n // if the value is not a multiple of the step, then find the closest step\n // and make that the value (this is also the native input behavior)\n if (step && stepIsValid && (value - min) % step !== 0) {\n const closest = getStepArray(step, [min, max]).reduce(function (prev, curr) {\n return Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev;\n });\n\n return closest;\n }\n\n return value;\n };\n\n const sliderValue = getValue();\n const percent = getPercent(Math.max(Math.min(sliderValue, max), min), [min, max]);\n\n const getAriaValueText = () => {\n if (valueFormatter && valueFormatter(sliderValue)) {\n return valueFormatter(sliderValue);\n }\n\n if (valueFormatter && !valueFormatter(sliderValue)) {\n const middleValues = referenceValues ? referenceValues : [];\n const valueArray = [min, ...middleValues, sliderValue, max];\n const prevAndNext = findLowerAndHigherValues(valueArray, sliderValue);\n const previousValue = prevAndNext.lower ? valueFormatter(prevAndNext.lower) : valueFormatter(min);\n const nextValue = prevAndNext.higher ? valueFormatter(prevAndNext.higher) : valueFormatter(max);\n const value = sliderValue;\n\n return i18n('i18nStrings.valueTextRange', i18nStrings?.valueTextRange(previousValue, value, nextValue), format =>\n format({ value, previousValue, nextValue })\n );\n }\n\n return undefined;\n };\n\n return (\n <div {...baseProps} ref={__internalRootRef} className={clsx(baseProps.className, styles.root)}>\n {showTooltip && (\n <Tooltip value={valueFormatter ? valueFormatter(sliderValue) : sliderValue} trackRef={handleRef} />\n )}\n <div\n ref={handleRef}\n className={clsx(styles['tooltip-thumb'])}\n style={{\n [customCssProps.sliderTooltipPosition]: `calc(${percent}% - ${THUMB_SIZE}px)`,\n }}\n />\n <div className={styles.slider}>\n <div\n className={clsx(styles['slider-track'], {\n [styles.disabled]: disabled,\n })}\n />\n\n {!hideFillLine && (\n <div\n className={clsx(styles['slider-range'], {\n [styles.error]: invalid,\n [styles.warning]: showWarning,\n [styles.active]: isActive,\n [styles['error-active']]: invalid && isActive,\n [styles['warning-active']]: showWarning && isActive,\n [styles.disabled]: disabled,\n })}\n style={{ [customCssProps.sliderRangeInlineSize]: `${percent}%` }}\n />\n )}\n </div>\n {!!step && tickMarks && (\n <SliderTickMarks\n hideFillLine={hideFillLine}\n disabled={disabled}\n invalid={invalid}\n warning={warning}\n isActive={isActive}\n step={step}\n min={min}\n max={max}\n value={sliderValue}\n />\n )}\n\n <input\n // we need to add this because input[type=range] isn't natively focusable in Safari.\n tabIndex={0}\n aria-label={ariaLabel}\n // aria-labelledby has precedence over aria-label in accessible name calculation.\n // When aria-label is provided for Input, it should override aria-labelledBy from form-field context.\n // If both aria-label and aria-labelledby come from Input props, aria-labelledby will be used in accessible name\n aria-labelledby={ariaLabel && !rest.ariaLabelledby ? undefined : ariaLabelledby}\n // Slider labels, if present and something other than numbers, should be associated to the input with aria-describedby\n aria-describedby={\n valueFormatter ? (ariaDescribedby ? `${labelsId} ${ariaDescribedby}` : labelsId) : ariaDescribedby\n }\n aria-valuetext={getAriaValueText()}\n aria-invalid={invalid ? 'true' : undefined}\n id={controlId}\n type=\"range\"\n min={min}\n max={max}\n disabled={disabled}\n onFocus={() => {\n setShowTooltip(true);\n setIsActive(true);\n }}\n onBlur={() => {\n setShowTooltip(false);\n setIsActive(false);\n }}\n onMouseEnter={() => {\n setShowTooltip(true);\n }}\n onMouseLeave={() => {\n setShowTooltip(false);\n }}\n onTouchStart={() => {\n setShowTooltip(true);\n setIsActive(true);\n }}\n onTouchEnd={() => {\n setShowTooltip(false);\n setIsActive(false);\n }}\n step={step}\n value={sliderValue}\n onChange={event => {\n onChange && fireNonCancelableEvent(onChange, { value: Number(event.target.value) });\n }}\n className={clsx(styles.thumb, {\n [styles.error]: invalid,\n [styles.warning]: showWarning,\n [styles.disabled]: disabled,\n [styles.min]: sliderValue <= min || max < min,\n [styles.max]: sliderValue >= max && min < max,\n })}\n />\n\n <SliderLabels\n min={min}\n max={max}\n referenceValues={referenceValues}\n valueFormatter={valueFormatter}\n labelsId={labelsId}\n ariaDescription={ariaDescription}\n />\n </div>\n );\n}\n"]}
|
package/slider/styles.css.js
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
|
|
2
2
|
import './styles.scoped.css';
|
|
3
3
|
export default {
|
|
4
|
-
"root": "
|
|
5
|
-
"slider": "
|
|
6
|
-
"slider-track": "awsui_slider-
|
|
7
|
-
"slider-range": "awsui_slider-
|
|
8
|
-
"disabled": "
|
|
9
|
-
"error": "
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"labels
|
|
15
|
-
"labels-
|
|
16
|
-
"labels-
|
|
17
|
-
"labels-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
4
|
+
"root": "awsui_root_pcgz5_2nlcl_103",
|
|
5
|
+
"slider": "awsui_slider_pcgz5_2nlcl_143",
|
|
6
|
+
"slider-track": "awsui_slider-track_pcgz5_2nlcl_147",
|
|
7
|
+
"slider-range": "awsui_slider-range_pcgz5_2nlcl_147",
|
|
8
|
+
"disabled": "awsui_disabled_pcgz5_2nlcl_162",
|
|
9
|
+
"error": "awsui_error_pcgz5_2nlcl_171",
|
|
10
|
+
"warning": "awsui_warning_pcgz5_2nlcl_174",
|
|
11
|
+
"active": "awsui_active_pcgz5_2nlcl_177",
|
|
12
|
+
"error-active": "awsui_error-active_pcgz5_2nlcl_180",
|
|
13
|
+
"warning-active": "awsui_warning-active_pcgz5_2nlcl_183",
|
|
14
|
+
"labels": "awsui_labels_pcgz5_2nlcl_190",
|
|
15
|
+
"labels-noref": "awsui_labels-noref_pcgz5_2nlcl_196",
|
|
16
|
+
"labels-reference": "awsui_labels-reference_pcgz5_2nlcl_199",
|
|
17
|
+
"labels-min": "awsui_labels-min_pcgz5_2nlcl_206",
|
|
18
|
+
"labels-max": "awsui_labels-max_pcgz5_2nlcl_212",
|
|
19
|
+
"labels-aria-description": "awsui_labels-aria-description_pcgz5_2nlcl_220",
|
|
20
|
+
"ticks": "awsui_ticks_pcgz5_2nlcl_238",
|
|
21
|
+
"ticks-wrapper": "awsui_ticks-wrapper_pcgz5_2nlcl_244",
|
|
22
|
+
"tick": "awsui_tick_pcgz5_2nlcl_238",
|
|
23
|
+
"middle": "awsui_middle_pcgz5_2nlcl_259",
|
|
24
|
+
"filled": "awsui_filled_pcgz5_2nlcl_262",
|
|
25
|
+
"tooltip-thumb": "awsui_tooltip-thumb_pcgz5_2nlcl_284",
|
|
26
|
+
"thumb": "awsui_thumb_pcgz5_2nlcl_292",
|
|
27
|
+
"min": "awsui_min_pcgz5_2nlcl_307",
|
|
28
|
+
"max": "awsui_max_pcgz5_2nlcl_310"
|
|
27
29
|
};
|
|
28
30
|
|