@redsift/design-system 11.5.0-muiv5 → 11.6.0-alpha.0
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/_internal/Alert2.js +197 -0
- package/_internal/Alert2.js.map +1 -0
- package/_internal/AppBar.js +248 -0
- package/_internal/AppBar.js.map +1 -0
- package/_internal/AppContainer.js +142 -0
- package/_internal/AppContainer.js.map +1 -0
- package/_internal/AppContent.js +92 -0
- package/_internal/AppContent.js.map +1 -0
- package/_internal/Badge2.js +142 -0
- package/_internal/Badge2.js.map +1 -0
- package/_internal/BreadcrumbItem.js +91 -0
- package/_internal/BreadcrumbItem.js.map +1 -0
- package/_internal/Breadcrumbs2.js +94 -0
- package/_internal/Breadcrumbs2.js.map +1 -0
- package/_internal/Button2.js +91 -0
- package/_internal/Button2.js.map +1 -0
- package/_internal/ButtonGroup.js +181 -0
- package/_internal/ButtonGroup.js.map +1 -0
- package/_internal/ButtonLink.js +84 -0
- package/_internal/ButtonLink.js.map +1 -0
- package/_internal/Card2.js +157 -0
- package/_internal/Card2.js.map +1 -0
- package/_internal/CardActions.js +44 -0
- package/_internal/CardActions.js.map +1 -0
- package/_internal/CardBody.js +42 -0
- package/_internal/CardBody.js.map +1 -0
- package/_internal/CardHeader.js +83 -0
- package/_internal/CardHeader.js.map +1 -0
- package/_internal/Checkbox2.js +244 -0
- package/_internal/Checkbox2.js.map +1 -0
- package/_internal/CheckboxGroup.js +188 -0
- package/_internal/CheckboxGroup.js.map +1 -0
- package/_internal/ConditionalWrapper.js +13 -0
- package/_internal/ConditionalWrapper.js.map +1 -0
- package/_internal/DetailedCard.js +6916 -0
- package/_internal/DetailedCard.js.map +1 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js +64 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -0
- package/_internal/DetailedCardHeader.js +67 -0
- package/_internal/DetailedCardHeader.js.map +1 -0
- package/_internal/DetailedCardSection.js +172 -0
- package/_internal/DetailedCardSection.js.map +1 -0
- package/_internal/DetailedCardSectionItem.js +94 -0
- package/_internal/DetailedCardSectionItem.js.map +1 -0
- package/_internal/Flexbox2.js +93 -0
- package/_internal/Flexbox2.js.map +1 -0
- package/_internal/Grid2.js +95 -0
- package/_internal/Grid2.js.map +1 -0
- package/_internal/GridItem.js +40 -0
- package/_internal/GridItem.js.map +1 -0
- package/_internal/Heading2.js +113 -0
- package/_internal/Heading2.js.map +1 -0
- package/_internal/Icon2.js +211 -0
- package/_internal/Icon2.js.map +1 -0
- package/_internal/IconButton.js +80 -0
- package/_internal/IconButton.js.map +1 -0
- package/_internal/IconButtonLink.js +75 -0
- package/_internal/IconButtonLink.js.map +1 -0
- package/_internal/Item2.js +399 -0
- package/_internal/Item2.js.map +1 -0
- package/_internal/Link2.js +67 -0
- package/_internal/Link2.js.map +1 -0
- package/_internal/LinkButton.js +66 -0
- package/_internal/LinkButton.js.map +1 -0
- package/_internal/Listbox2.js +274 -0
- package/_internal/Listbox2.js.map +1 -0
- package/_internal/Number2.js +111 -0
- package/_internal/Number2.js.map +1 -0
- package/_internal/NumberField.js +3974 -0
- package/_internal/NumberField.js.map +1 -0
- package/_internal/Pill2.js +405 -0
- package/_internal/Pill2.js.map +1 -0
- package/_internal/ProgressBar.js +69 -0
- package/_internal/ProgressBar.js.map +1 -0
- package/_internal/Radio2.js +237 -0
- package/_internal/Radio2.js.map +1 -0
- package/_internal/RadioGroup.js +176 -0
- package/_internal/RadioGroup.js.map +1 -0
- package/_internal/Shield2.js +225 -0
- package/_internal/Shield2.js.map +1 -0
- package/_internal/SideNavigationMenu.js +591 -0
- package/_internal/SideNavigationMenu.js.map +1 -0
- package/_internal/SideNavigationMenuItem.js +304 -0
- package/_internal/SideNavigationMenuItem.js.map +1 -0
- package/_internal/Skeleton2.js +42 -0
- package/_internal/Skeleton2.js.map +1 -0
- package/_internal/SkeletonCircle.js +58 -0
- package/_internal/SkeletonCircle.js.map +1 -0
- package/_internal/SkeletonText.js +77 -0
- package/_internal/SkeletonText.js.map +1 -0
- package/_internal/Spinner2.js +333 -0
- package/_internal/Spinner2.js.map +1 -0
- package/_internal/Switch2.js +320 -0
- package/_internal/Switch2.js.map +1 -0
- package/_internal/SwitchGroup.js +188 -0
- package/_internal/SwitchGroup.js.map +1 -0
- package/_internal/Text2.js +51 -0
- package/_internal/Text2.js.map +1 -0
- package/_internal/TextArea.js +444 -0
- package/_internal/TextArea.js.map +1 -0
- package/_internal/TextField.js +473 -0
- package/_internal/TextField.js.map +1 -0
- package/_internal/_rollupPluginBabelHelpers.js +133 -0
- package/_internal/_rollupPluginBabelHelpers.js.map +1 -0
- package/_internal/alert.js +2 -0
- package/_internal/alert.js.map +1 -0
- package/_internal/app-bar.js +2 -0
- package/_internal/app-bar.js.map +1 -0
- package/_internal/app-container.js +3 -0
- package/_internal/app-container.js.map +1 -0
- package/_internal/app-content.js +2 -0
- package/_internal/app-content.js.map +1 -0
- package/_internal/app-side-panel.js +3 -0
- package/_internal/app-side-panel.js.map +1 -0
- package/_internal/badge.js +2 -0
- package/_internal/badge.js.map +1 -0
- package/_internal/breadcrumb-item.js +2 -0
- package/_internal/breadcrumb-item.js.map +1 -0
- package/_internal/breadcrumbs.js +2 -0
- package/_internal/breadcrumbs.js.map +1 -0
- package/_internal/button-group.js +2 -0
- package/_internal/button-group.js.map +1 -0
- package/_internal/button-link.js +2 -0
- package/_internal/button-link.js.map +1 -0
- package/_internal/button.js +3 -0
- package/_internal/button.js.map +1 -0
- package/_internal/card-actions.js +2 -0
- package/_internal/card-actions.js.map +1 -0
- package/_internal/card-body.js +2 -0
- package/_internal/card-body.js.map +1 -0
- package/_internal/card-header.js +2 -0
- package/_internal/card-header.js.map +1 -0
- package/_internal/card.js +2 -0
- package/_internal/card.js.map +1 -0
- package/_internal/checkbox-group.js +2 -0
- package/_internal/checkbox-group.js.map +1 -0
- package/_internal/checkbox.js +2 -0
- package/_internal/checkbox.js.map +1 -0
- package/_internal/colors.js +98 -0
- package/_internal/colors.js.map +1 -0
- package/_internal/conditional-wrapper.js +2 -0
- package/_internal/conditional-wrapper.js.map +1 -0
- package/_internal/context.js +6 -0
- package/_internal/context.js.map +1 -0
- package/_internal/context2.js +300 -0
- package/_internal/context2.js.map +1 -0
- package/_internal/context3.js +6 -0
- package/_internal/context3.js.map +1 -0
- package/_internal/context4.js +6 -0
- package/_internal/context4.js.map +1 -0
- package/_internal/context5.js +6 -0
- package/_internal/context5.js.map +1 -0
- package/_internal/detailed-card-collapsible-section-items.js +2 -0
- package/_internal/detailed-card-collapsible-section-items.js.map +1 -0
- package/_internal/detailed-card-header.js +2 -0
- package/_internal/detailed-card-header.js.map +1 -0
- package/_internal/detailed-card-section-item.js +2 -0
- package/_internal/detailed-card-section-item.js.map +1 -0
- package/_internal/detailed-card-section.js +2 -0
- package/_internal/detailed-card-section.js.map +1 -0
- package/_internal/detailed-card.js +2 -0
- package/_internal/detailed-card.js.map +1 -0
- package/_internal/filterComponents.js +24 -0
- package/_internal/filterComponents.js.map +1 -0
- package/_internal/flexbox.js +2 -0
- package/_internal/flexbox.js.map +1 -0
- package/_internal/focus-within-group.js +3 -0
- package/_internal/focus-within-group.js.map +1 -0
- package/_internal/fonts.js +10 -0
- package/_internal/fonts.js.map +1 -0
- package/_internal/gradient-border.js +38 -0
- package/_internal/gradient-border.js.map +1 -0
- package/_internal/grid-item.js +2 -0
- package/_internal/grid-item.js.map +1 -0
- package/_internal/grid.js +2 -0
- package/_internal/grid.js.map +1 -0
- package/_internal/heading.js +3 -0
- package/_internal/heading.js.map +1 -0
- package/_internal/icon-button-link.js +2 -0
- package/_internal/icon-button-link.js.map +1 -0
- package/_internal/icon-button.js +3 -0
- package/_internal/icon-button.js.map +1 -0
- package/_internal/icon.js +2 -0
- package/_internal/icon.js.map +1 -0
- package/_internal/isComponent.js +15 -0
- package/_internal/isComponent.js.map +1 -0
- package/_internal/item.js +2 -0
- package/_internal/item.js.map +1 -0
- package/_internal/link-button.js +2 -0
- package/_internal/link-button.js.map +1 -0
- package/_internal/link.js +3 -0
- package/_internal/link.js.map +1 -0
- package/_internal/listbox.js +3 -0
- package/_internal/listbox.js.map +1 -0
- package/_internal/number-field.js +2 -0
- package/_internal/number-field.js.map +1 -0
- package/_internal/number.js +2 -0
- package/_internal/number.js.map +1 -0
- package/_internal/partitionComponents.js +26 -0
- package/_internal/partitionComponents.js.map +1 -0
- package/_internal/pill.js +2 -0
- package/_internal/pill.js.map +1 -0
- package/_internal/progress-bar.js +2 -0
- package/_internal/progress-bar.js.map +1 -0
- package/_internal/radio-group.js +2 -0
- package/_internal/radio-group.js.map +1 -0
- package/_internal/radio.js +2 -0
- package/_internal/radio.js.map +1 -0
- package/_internal/redsift-design-tokens.js +1391 -0
- package/_internal/redsift-design-tokens.js.map +1 -0
- package/_internal/shared.js +2 -0
- package/_internal/shared.js.map +1 -0
- package/_internal/shield.js +2 -0
- package/_internal/shield.js.map +1 -0
- package/_internal/side-navigation-menu-bar.js +3 -0
- package/_internal/side-navigation-menu-bar.js.map +1 -0
- package/_internal/side-navigation-menu-item.js +2 -0
- package/_internal/side-navigation-menu-item.js.map +1 -0
- package/_internal/side-navigation-menu.js +2 -0
- package/_internal/side-navigation-menu.js.map +1 -0
- package/_internal/skeleton-circle.js +2 -0
- package/_internal/skeleton-circle.js.map +1 -0
- package/_internal/skeleton-text.js +3 -0
- package/_internal/skeleton-text.js.map +1 -0
- package/_internal/skeleton.js +2 -0
- package/_internal/skeleton.js.map +1 -0
- package/_internal/spinner.js +2 -0
- package/_internal/spinner.js.map +1 -0
- package/_internal/styles.js +235 -0
- package/_internal/styles.js.map +1 -0
- package/_internal/styles2.js +47 -0
- package/_internal/styles2.js.map +1 -0
- package/_internal/styles3.js +145 -0
- package/_internal/styles3.js.map +1 -0
- package/_internal/styles4.js +250 -0
- package/_internal/styles4.js.map +1 -0
- package/_internal/styles5.js +143 -0
- package/_internal/styles5.js.map +1 -0
- package/_internal/styles6.js +84 -0
- package/_internal/styles6.js.map +1 -0
- package/_internal/switch-group.js +2 -0
- package/_internal/switch-group.js.map +1 -0
- package/_internal/switch.js +2 -0
- package/_internal/switch.js.map +1 -0
- package/_internal/text-area.js +2 -0
- package/_internal/text-area.js.map +1 -0
- package/_internal/text-field.js +2 -0
- package/_internal/text-field.js.map +1 -0
- package/_internal/text.js +3 -0
- package/_internal/text.js.map +1 -0
- package/_internal/theme.js +2 -0
- package/_internal/theme.js.map +1 -0
- package/_internal/types.js +15 -0
- package/_internal/types.js.map +1 -0
- package/_internal/types2.js +26 -0
- package/_internal/types2.js.map +1 -0
- package/_internal/types3.js +20 -0
- package/_internal/types3.js.map +1 -0
- package/_internal/useAppSidePanel.js +337 -0
- package/_internal/useAppSidePanel.js.map +1 -0
- package/_internal/useFocusOnList.js +541 -0
- package/_internal/useFocusOnList.js.map +1 -0
- package/_internal/useFocusOnListItem.js +203 -0
- package/_internal/useFocusOnListItem.js.map +1 -0
- package/_internal/useFocusRing.js +669 -0
- package/_internal/useFocusRing.js.map +1 -0
- package/_internal/useId.js +42 -0
- package/_internal/useId.js.map +1 -0
- package/_internal/useIsLoaded.js +14 -0
- package/_internal/useIsLoaded.js.map +1 -0
- package/_internal/useListboxItem.js +129 -0
- package/_internal/useListboxItem.js.map +1 -0
- package/_internal/useMessageFormatter.js +143 -0
- package/_internal/useMessageFormatter.js.map +1 -0
- package/_internal/useNumberFormatter.js +239 -0
- package/_internal/useNumberFormatter.js.map +1 -0
- package/_internal/useSideNavigationMenuBar.js +373 -0
- package/_internal/useSideNavigationMenuBar.js.map +1 -0
- package/_internal/useTheme.js +15 -0
- package/_internal/useTheme.js.map +1 -0
- package/_internal/warnIfNoAccessibleLabelFound.js +20 -0
- package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -0
- package/index.js +315 -24243
- package/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { u as useLocale } from './context2.js';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { a as _defineProperty, _ as _objectSpread2 } from './_rollupPluginBabelHelpers.js';
|
|
4
|
+
|
|
5
|
+
/* eslint-disable prefer-const */
|
|
6
|
+
// @ts-nocheck
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
10
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
12
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
*
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
15
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
16
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
17
|
+
* governing permissions and limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
let formatterCache = new Map();
|
|
21
|
+
let supportsSignDisplay = false;
|
|
22
|
+
try {
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
supportsSignDisplay = new Intl.NumberFormat('de-DE', {
|
|
25
|
+
signDisplay: 'exceptZero'
|
|
26
|
+
}).resolvedOptions().signDisplay === 'exceptZero';
|
|
27
|
+
// eslint-disable-next-line no-empty
|
|
28
|
+
} catch (e) {}
|
|
29
|
+
let supportsUnit = false;
|
|
30
|
+
try {
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
supportsUnit = new Intl.NumberFormat('de-DE', {
|
|
33
|
+
style: 'unit',
|
|
34
|
+
unit: 'degree'
|
|
35
|
+
}).resolvedOptions().style === 'unit';
|
|
36
|
+
// eslint-disable-next-line no-empty
|
|
37
|
+
} catch (e) {}
|
|
38
|
+
|
|
39
|
+
// Polyfill for units since Safari doesn't support them yet. See https://bugs.webkit.org/show_bug.cgi?id=215438.
|
|
40
|
+
// Currently only polyfilling the unit degree in narrow format for ColorSlider in our supported locales.
|
|
41
|
+
// Values were determined by switching to each locale manually in Chrome.
|
|
42
|
+
const UNITS = {
|
|
43
|
+
degree: {
|
|
44
|
+
narrow: {
|
|
45
|
+
default: '°',
|
|
46
|
+
'ja-JP': ' 度',
|
|
47
|
+
'zh-TW': '度',
|
|
48
|
+
'sl-SI': ' °'
|
|
49
|
+
// Arabic?? But Safari already doesn't use Arabic digits so might be ok...
|
|
50
|
+
// https://bugs.webkit.org/show_bug.cgi?id=218139
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A wrapper around Intl.NumberFormat providing additional options, polyfills, and caching for performance.
|
|
57
|
+
*/
|
|
58
|
+
class NumberFormatter {
|
|
59
|
+
constructor(locale) {
|
|
60
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
61
|
+
_defineProperty(this, "numberFormatter", void 0);
|
|
62
|
+
_defineProperty(this, "options", void 0);
|
|
63
|
+
this.numberFormatter = getCachedNumberFormatter(locale, options);
|
|
64
|
+
this.options = options;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Formats a number value as a string, according to the locale and options provided to the constructor. */
|
|
68
|
+
format(value) {
|
|
69
|
+
let res = '';
|
|
70
|
+
if (!supportsSignDisplay && this.options.signDisplay != null) {
|
|
71
|
+
res = numberFormatSignDisplayPolyfill(this.numberFormatter, this.options.signDisplay, value);
|
|
72
|
+
} else {
|
|
73
|
+
res = this.numberFormatter.format(value);
|
|
74
|
+
}
|
|
75
|
+
if (this.options.style === 'unit' && !supportsUnit) {
|
|
76
|
+
var _UNITS$unit;
|
|
77
|
+
let {
|
|
78
|
+
unit,
|
|
79
|
+
unitDisplay = 'short',
|
|
80
|
+
locale
|
|
81
|
+
} = this.resolvedOptions();
|
|
82
|
+
if (!unit) {
|
|
83
|
+
return res;
|
|
84
|
+
}
|
|
85
|
+
let values = (_UNITS$unit = UNITS[unit]) === null || _UNITS$unit === void 0 ? void 0 : _UNITS$unit[unitDisplay];
|
|
86
|
+
res += values[locale] || values.default;
|
|
87
|
+
}
|
|
88
|
+
return res;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Formats a number to an array of parts such as separators, digits, punctuation, and more. */
|
|
92
|
+
formatToParts(value) {
|
|
93
|
+
// TODO: implement signDisplay for formatToParts
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
return this.numberFormatter.formatToParts(value);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Formats a number range as a string. */
|
|
99
|
+
formatRange(start, end) {
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
if (typeof this.numberFormatter.formatRange === 'function') {
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
return this.numberFormatter.formatRange(start, end);
|
|
104
|
+
}
|
|
105
|
+
if (end < start) {
|
|
106
|
+
throw new RangeError('End date must be >= start date');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Very basic fallback for old browsers.
|
|
110
|
+
return `${this.format(start)} – ${this.format(end)}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Formats a number range as an array of parts. */
|
|
114
|
+
formatRangeToParts(start, end) {
|
|
115
|
+
// @ts-ignore
|
|
116
|
+
if (typeof this.numberFormatter.formatRangeToParts === 'function') {
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
return this.numberFormatter.formatRangeToParts(start, end);
|
|
119
|
+
}
|
|
120
|
+
if (end < start) {
|
|
121
|
+
throw new RangeError('End date must be >= start date');
|
|
122
|
+
}
|
|
123
|
+
let startParts = this.numberFormatter.formatToParts(start);
|
|
124
|
+
let endParts = this.numberFormatter.formatToParts(end);
|
|
125
|
+
return [...startParts.map(p => _objectSpread2(_objectSpread2({}, p), {}, {
|
|
126
|
+
source: 'startRange'
|
|
127
|
+
})), {
|
|
128
|
+
type: 'literal',
|
|
129
|
+
value: ' – ',
|
|
130
|
+
source: 'shared'
|
|
131
|
+
}, ...endParts.map(p => _objectSpread2(_objectSpread2({}, p), {}, {
|
|
132
|
+
source: 'endRange'
|
|
133
|
+
}))];
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Returns the resolved formatting options based on the values passed to the constructor. */
|
|
137
|
+
resolvedOptions() {
|
|
138
|
+
let options = this.numberFormatter.resolvedOptions();
|
|
139
|
+
if (!supportsSignDisplay && this.options.signDisplay != null) {
|
|
140
|
+
options = _objectSpread2(_objectSpread2({}, options), {}, {
|
|
141
|
+
signDisplay: this.options.signDisplay
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (!supportsUnit && this.options.style === 'unit') {
|
|
145
|
+
options = _objectSpread2(_objectSpread2({}, options), {}, {
|
|
146
|
+
style: 'unit',
|
|
147
|
+
unit: this.options.unit,
|
|
148
|
+
unitDisplay: this.options.unitDisplay
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return options;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function getCachedNumberFormatter(locale) {
|
|
155
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
156
|
+
let {
|
|
157
|
+
numberingSystem
|
|
158
|
+
} = options;
|
|
159
|
+
if (numberingSystem && locale.includes('-nu-')) {
|
|
160
|
+
if (!locale.includes('-u-')) {
|
|
161
|
+
locale += '-u-';
|
|
162
|
+
}
|
|
163
|
+
locale += `-nu-${numberingSystem}`;
|
|
164
|
+
}
|
|
165
|
+
if (options.style === 'unit' && !supportsUnit) {
|
|
166
|
+
var _UNITS$unit2;
|
|
167
|
+
let {
|
|
168
|
+
unit,
|
|
169
|
+
unitDisplay = 'short'
|
|
170
|
+
} = options;
|
|
171
|
+
if (!unit) {
|
|
172
|
+
throw new Error('unit option must be provided with style: "unit"');
|
|
173
|
+
}
|
|
174
|
+
if (!((_UNITS$unit2 = UNITS[unit]) !== null && _UNITS$unit2 !== void 0 && _UNITS$unit2[unitDisplay])) {
|
|
175
|
+
throw new Error(`Unsupported unit ${unit} with unitDisplay = ${unitDisplay}`);
|
|
176
|
+
}
|
|
177
|
+
options = _objectSpread2(_objectSpread2({}, options), {}, {
|
|
178
|
+
style: 'decimal'
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
let cacheKey = locale + (options ? Object.entries(options).sort((a, b) => a[0] < b[0] ? -1 : 1).join() : '');
|
|
182
|
+
if (formatterCache.has(cacheKey)) {
|
|
183
|
+
return formatterCache.get(cacheKey);
|
|
184
|
+
}
|
|
185
|
+
let numberFormatter = new Intl.NumberFormat(locale, options);
|
|
186
|
+
formatterCache.set(cacheKey, numberFormatter);
|
|
187
|
+
return numberFormatter;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** @private - exported for tests */
|
|
191
|
+
function numberFormatSignDisplayPolyfill(numberFormat, signDisplay, num) {
|
|
192
|
+
if (signDisplay === 'auto') {
|
|
193
|
+
return numberFormat.format(num);
|
|
194
|
+
} else if (signDisplay === 'never') {
|
|
195
|
+
return numberFormat.format(Math.abs(num));
|
|
196
|
+
} else {
|
|
197
|
+
let needsPositiveSign = false;
|
|
198
|
+
if (signDisplay === 'always') {
|
|
199
|
+
needsPositiveSign = num > 0 || Object.is(num, 0);
|
|
200
|
+
} else if (signDisplay === 'exceptZero') {
|
|
201
|
+
if (Object.is(num, -0) || Object.is(num, 0)) {
|
|
202
|
+
num = Math.abs(num);
|
|
203
|
+
} else {
|
|
204
|
+
needsPositiveSign = num > 0;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (needsPositiveSign) {
|
|
208
|
+
let negative = numberFormat.format(-num);
|
|
209
|
+
let noSign = numberFormat.format(num);
|
|
210
|
+
// ignore RTL/LTR marker character
|
|
211
|
+
let minus = negative.replace(noSign, '').replace(/\u200e|\u061C/, '');
|
|
212
|
+
if ([...minus].length !== 1) {
|
|
213
|
+
console.warn('@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case');
|
|
214
|
+
}
|
|
215
|
+
let positive = negative.replace(noSign, '!!!').replace(minus, '+').replace('!!!', noSign);
|
|
216
|
+
return positive;
|
|
217
|
+
} else {
|
|
218
|
+
return numberFormat.format(num);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/* eslint-disable prefer-const */
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Provides localized number formatting for the current locale. Automatically updates when the locale changes,
|
|
227
|
+
* and handles caching of the number formatter for performance.
|
|
228
|
+
* @param options - Formatting options.
|
|
229
|
+
*/
|
|
230
|
+
function useNumberFormatter() {
|
|
231
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
232
|
+
let {
|
|
233
|
+
locale
|
|
234
|
+
} = useLocale();
|
|
235
|
+
return useMemo(() => new NumberFormatter(locale, options), [locale, options]);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export { NumberFormatter as N, useNumberFormatter as u };
|
|
239
|
+
//# sourceMappingURL=useNumberFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNumberFormatter.js","sources":["../../src/react-aria/internationalized/number/NumberFormatter.ts","../../src/react-aria/react-aria/i18n/useNumberFormatter.ts"],"sourcesContent":["/* eslint-disable prefer-const */\n// @ts-nocheck\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nlet formatterCache = new Map<string, Intl.NumberFormat>();\n\nlet supportsSignDisplay = false;\ntry {\n // @ts-ignore\n supportsSignDisplay =\n new Intl.NumberFormat('de-DE', { signDisplay: 'exceptZero' }).resolvedOptions().signDisplay === 'exceptZero';\n // eslint-disable-next-line no-empty\n} catch (e) {}\n\nlet supportsUnit = false;\ntry {\n // @ts-ignore\n supportsUnit = new Intl.NumberFormat('de-DE', { style: 'unit', unit: 'degree' }).resolvedOptions().style === 'unit';\n // eslint-disable-next-line no-empty\n} catch (e) {}\n\n// Polyfill for units since Safari doesn't support them yet. See https://bugs.webkit.org/show_bug.cgi?id=215438.\n// Currently only polyfilling the unit degree in narrow format for ColorSlider in our supported locales.\n// Values were determined by switching to each locale manually in Chrome.\nconst UNITS = {\n degree: {\n narrow: {\n default: '°',\n 'ja-JP': ' 度',\n 'zh-TW': '度',\n 'sl-SI': ' °',\n // Arabic?? But Safari already doesn't use Arabic digits so might be ok...\n // https://bugs.webkit.org/show_bug.cgi?id=218139\n },\n },\n};\n\nexport interface NumberFormatOptions extends Intl.NumberFormatOptions {\n /** Overrides default numbering system for the current locale. */\n numberingSystem?: string;\n}\n\ninterface NumberRangeFormatPart extends Intl.NumberFormatPart {\n source: 'startRange' | 'endRange' | 'shared';\n}\n\n/**\n * A wrapper around Intl.NumberFormat providing additional options, polyfills, and caching for performance.\n */\nexport class NumberFormatter implements Intl.NumberFormat {\n private numberFormatter: Intl.NumberFormat;\n private options: NumberFormatOptions;\n\n constructor(locale: string, options: NumberFormatOptions = {}) {\n this.numberFormatter = getCachedNumberFormatter(locale, options);\n this.options = options;\n }\n\n /** Formats a number value as a string, according to the locale and options provided to the constructor. */\n format(value: number): string {\n let res = '';\n if (!supportsSignDisplay && this.options.signDisplay != null) {\n res = numberFormatSignDisplayPolyfill(this.numberFormatter, this.options.signDisplay, value);\n } else {\n res = this.numberFormatter.format(value);\n }\n\n if (this.options.style === 'unit' && !supportsUnit) {\n let { unit, unitDisplay = 'short', locale } = this.resolvedOptions();\n if (!unit) {\n return res;\n }\n let values = UNITS[unit]?.[unitDisplay];\n res += values[locale] || values.default;\n }\n\n return res;\n }\n\n /** Formats a number to an array of parts such as separators, digits, punctuation, and more. */\n formatToParts(value: number): Intl.NumberFormatPart[] {\n // TODO: implement signDisplay for formatToParts\n // @ts-ignore\n return this.numberFormatter.formatToParts(value);\n }\n\n /** Formats a number range as a string. */\n formatRange(start: number, end: number): string {\n // @ts-ignore\n if (typeof this.numberFormatter.formatRange === 'function') {\n // @ts-ignore\n return this.numberFormatter.formatRange(start, end);\n }\n\n if (end < start) {\n throw new RangeError('End date must be >= start date');\n }\n\n // Very basic fallback for old browsers.\n return `${this.format(start)} – ${this.format(end)}`;\n }\n\n /** Formats a number range as an array of parts. */\n formatRangeToParts(start: number, end: number): NumberRangeFormatPart[] {\n // @ts-ignore\n if (typeof this.numberFormatter.formatRangeToParts === 'function') {\n // @ts-ignore\n return this.numberFormatter.formatRangeToParts(start, end);\n }\n\n if (end < start) {\n throw new RangeError('End date must be >= start date');\n }\n\n let startParts = this.numberFormatter.formatToParts(start);\n let endParts = this.numberFormatter.formatToParts(end);\n return [\n ...startParts.map((p) => ({ ...p, source: 'startRange' } as NumberRangeFormatPart)),\n { type: 'literal', value: ' – ', source: 'shared' },\n ...endParts.map((p) => ({ ...p, source: 'endRange' } as NumberRangeFormatPart)),\n ];\n }\n\n /** Returns the resolved formatting options based on the values passed to the constructor. */\n resolvedOptions(): Intl.ResolvedNumberFormatOptions {\n let options = this.numberFormatter.resolvedOptions();\n if (!supportsSignDisplay && this.options.signDisplay != null) {\n options = { ...options, signDisplay: this.options.signDisplay };\n }\n\n if (!supportsUnit && this.options.style === 'unit') {\n options = { ...options, style: 'unit', unit: this.options.unit, unitDisplay: this.options.unitDisplay };\n }\n\n return options;\n }\n}\n\nfunction getCachedNumberFormatter(locale: string, options: NumberFormatOptions = {}): Intl.NumberFormat {\n let { numberingSystem } = options;\n if (numberingSystem && locale.includes('-nu-')) {\n if (!locale.includes('-u-')) {\n locale += '-u-';\n }\n locale += `-nu-${numberingSystem}`;\n }\n\n if (options.style === 'unit' && !supportsUnit) {\n let { unit, unitDisplay = 'short' } = options;\n if (!unit) {\n throw new Error('unit option must be provided with style: \"unit\"');\n }\n if (!UNITS[unit]?.[unitDisplay]) {\n throw new Error(`Unsupported unit ${unit} with unitDisplay = ${unitDisplay}`);\n }\n options = { ...options, style: 'decimal' };\n }\n\n let cacheKey =\n locale +\n (options\n ? Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n : '');\n if (formatterCache.has(cacheKey)) {\n return formatterCache.get(cacheKey)!;\n }\n\n let numberFormatter = new Intl.NumberFormat(locale, options);\n formatterCache.set(cacheKey, numberFormatter);\n return numberFormatter;\n}\n\n/** @private - exported for tests */\nexport function numberFormatSignDisplayPolyfill(numberFormat: Intl.NumberFormat, signDisplay: string, num: number) {\n if (signDisplay === 'auto') {\n return numberFormat.format(num);\n } else if (signDisplay === 'never') {\n return numberFormat.format(Math.abs(num));\n } else {\n let needsPositiveSign = false;\n if (signDisplay === 'always') {\n needsPositiveSign = num > 0 || Object.is(num, 0);\n } else if (signDisplay === 'exceptZero') {\n if (Object.is(num, -0) || Object.is(num, 0)) {\n num = Math.abs(num);\n } else {\n needsPositiveSign = num > 0;\n }\n }\n\n if (needsPositiveSign) {\n let negative = numberFormat.format(-num);\n let noSign = numberFormat.format(num);\n // ignore RTL/LTR marker character\n let minus = negative.replace(noSign, '').replace(/\\u200e|\\u061C/, '');\n if ([...minus].length !== 1) {\n console.warn('@react-aria/i18n polyfill for NumberFormat signDisplay: Unsupported case');\n }\n let positive = negative.replace(noSign, '!!!').replace(minus, '+').replace('!!!', noSign);\n return positive;\n } else {\n return numberFormat.format(num);\n }\n }\n}\n","/* eslint-disable prefer-const */\n// @ts-nocheck\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { NumberFormatOptions, NumberFormatter } from '../../internationalized/number';\nimport { useLocale } from './context';\nimport { useMemo } from 'react';\n\n/**\n * Provides localized number formatting for the current locale. Automatically updates when the locale changes,\n * and handles caching of the number formatter for performance.\n * @param options - Formatting options.\n */\nexport function useNumberFormatter(options: NumberFormatOptions = {}): Intl.NumberFormat {\n let { locale } = useLocale();\n return useMemo(() => new NumberFormatter(locale, options), [locale, options]);\n}\n"],"names":["formatterCache","Map","supportsSignDisplay","Intl","NumberFormat","signDisplay","resolvedOptions","e","supportsUnit","style","unit","UNITS","degree","narrow","default","NumberFormatter","constructor","locale","options","arguments","length","undefined","_defineProperty","numberFormatter","getCachedNumberFormatter","format","value","res","numberFormatSignDisplayPolyfill","_UNITS$unit","unitDisplay","values","formatToParts","formatRange","start","end","RangeError","formatRangeToParts","startParts","endParts","map","p","_objectSpread","source","type","numberingSystem","includes","_UNITS$unit2","Error","cacheKey","Object","entries","sort","a","b","join","has","get","set","numberFormat","num","Math","abs","needsPositiveSign","is","negative","noSign","minus","replace","console","warn","positive","useNumberFormatter","useLocale","useMemo"],"mappings":"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"}
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { b as _objectWithoutProperties, c as _extends } from './_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React__default, { useState, useEffect, forwardRef, useRef, useContext, useMemo } from 'react';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { w as warnIfNoAccessibleLabelFound } from './warnIfNoAccessibleLabelFound.js';
|
|
5
|
+
import styled, { css } from 'styled-components';
|
|
6
|
+
import { S as SideNavigationMenuBarVariant, b as SideNavigationMenuBarContext, a as SideNavigationMenuItem } from './SideNavigationMenuItem.js';
|
|
7
|
+
import { f as filterComponents } from './filterComponents.js';
|
|
8
|
+
import { a as SideNavigationMenu } from './SideNavigationMenu.js';
|
|
9
|
+
import { A as AppContainerContext } from './context.js';
|
|
10
|
+
import { u as useTheme, a as ThemeProvider } from './useTheme.js';
|
|
11
|
+
import { A as AppSidePanelVariant } from './types.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Get the bounding rect of a component.
|
|
15
|
+
*/
|
|
16
|
+
const useBoundingClientRect = (ref, deps) => {
|
|
17
|
+
const [boundingRect, setBoundingRect] = useState({});
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (ref.current) {
|
|
20
|
+
setBoundingRect(ref.current.getBoundingClientRect());
|
|
21
|
+
}
|
|
22
|
+
}, deps);
|
|
23
|
+
return boundingRect;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Component style.
|
|
28
|
+
*/
|
|
29
|
+
const StyledSideNavigationMenuBar = styled.nav`
|
|
30
|
+
background-color: ${_ref => {
|
|
31
|
+
let {
|
|
32
|
+
$theme
|
|
33
|
+
} = _ref;
|
|
34
|
+
return `var(--redsift-color-${$theme}-components-side-navigation-background)`;
|
|
35
|
+
}};
|
|
36
|
+
box-sizing: content-box;
|
|
37
|
+
overflow-x: hidden;
|
|
38
|
+
overflow-y: auto;
|
|
39
|
+
scrollbar-gutter: stable;
|
|
40
|
+
transition: width 300ms ease-out;
|
|
41
|
+
width: ${_ref2 => {
|
|
42
|
+
let {
|
|
43
|
+
$variant
|
|
44
|
+
} = _ref2;
|
|
45
|
+
return $variant === SideNavigationMenuBarVariant.shrinked ? '64px' : '250px';
|
|
46
|
+
}};
|
|
47
|
+
|
|
48
|
+
${_ref3 => {
|
|
49
|
+
let {
|
|
50
|
+
$marginTop = 0
|
|
51
|
+
} = _ref3;
|
|
52
|
+
return $marginTop ? css`
|
|
53
|
+
height: calc(100% - ${$marginTop}px);
|
|
54
|
+
` : '';
|
|
55
|
+
}}
|
|
56
|
+
|
|
57
|
+
ul {
|
|
58
|
+
list-style: none;
|
|
59
|
+
margin: unset;
|
|
60
|
+
padding: unset;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
scrollbar-color: ${_ref4 => {
|
|
64
|
+
let {
|
|
65
|
+
$theme
|
|
66
|
+
} = _ref4;
|
|
67
|
+
return `var(--redsift-color-${$theme}-components-side-navigation-scrollbar-resting) transparent`;
|
|
68
|
+
}};
|
|
69
|
+
scrollbar-width: thin;
|
|
70
|
+
|
|
71
|
+
&::-webkit-scrollbar {
|
|
72
|
+
block-size: 9px;
|
|
73
|
+
inline-size: 9px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&::-webkit-scrollbar-thumb {
|
|
77
|
+
background-clip: padding-box;
|
|
78
|
+
background-color: ${_ref5 => {
|
|
79
|
+
let {
|
|
80
|
+
$theme
|
|
81
|
+
} = _ref5;
|
|
82
|
+
return `var(--redsift-color-${$theme}-components-side-navigation-scrollbar-resting)`;
|
|
83
|
+
}};
|
|
84
|
+
border-radius: 0px;
|
|
85
|
+
border-left: 2px solid transparent;
|
|
86
|
+
border-right: 2px solid transparent;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&::-webkit-scrollbar-track {
|
|
90
|
+
background-color: transparent;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
&::-webkit-scrollbar-thumb:horizontal,
|
|
94
|
+
&::-webkit-scrollbar-thumb:vertical {
|
|
95
|
+
&:hover {
|
|
96
|
+
background-color: ${_ref6 => {
|
|
97
|
+
let {
|
|
98
|
+
$theme
|
|
99
|
+
} = _ref6;
|
|
100
|
+
return `var(--redsift-color-${$theme}-components-side-navigation-scrollbar-hover)`;
|
|
101
|
+
}};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
&::-webkit-scrollbar-corner {
|
|
106
|
+
visibility: hidden;
|
|
107
|
+
}
|
|
108
|
+
`;
|
|
109
|
+
|
|
110
|
+
const _excluded$1 = ["aria-label", "aria-labelledby", "canHaveMultipleMenuOpenAtOnce", "children", "className", "isDisabled", "menubarProps", "menubarRef", "theme", "variant"];
|
|
111
|
+
const COMPONENT_NAME = 'SideNavigationMenuBar';
|
|
112
|
+
const CLASSNAME = 'redsift-side-navigation-menu-bar';
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Hook to store the previous index for further use
|
|
116
|
+
*/
|
|
117
|
+
const usePrevious = value => {
|
|
118
|
+
const ref = useRef(0);
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
ref.current = value;
|
|
121
|
+
}, [value]);
|
|
122
|
+
return ref.current;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The SideNavigationMenuBar component.
|
|
127
|
+
*/
|
|
128
|
+
const SideNavigationMenuBar = /*#__PURE__*/forwardRef((props, ref) => {
|
|
129
|
+
const navRef = ref || useRef();
|
|
130
|
+
const {
|
|
131
|
+
'aria-label': ariaLabel,
|
|
132
|
+
'aria-labelledby': ariaLabelledby,
|
|
133
|
+
canHaveMultipleMenuOpenAtOnce,
|
|
134
|
+
children,
|
|
135
|
+
className,
|
|
136
|
+
isDisabled,
|
|
137
|
+
menubarProps = {},
|
|
138
|
+
menubarRef = useRef(),
|
|
139
|
+
theme: propsTheme,
|
|
140
|
+
variant: propsVariant = SideNavigationMenuBarVariant.standard
|
|
141
|
+
} = props,
|
|
142
|
+
forwardedProps = _objectWithoutProperties(props, _excluded$1);
|
|
143
|
+
warnIfNoAccessibleLabelFound(props, undefined, 'SideNavigationMenuBar');
|
|
144
|
+
const appContainerState = useContext(AppContainerContext);
|
|
145
|
+
const theme = useTheme(propsTheme);
|
|
146
|
+
const {
|
|
147
|
+
top
|
|
148
|
+
} = useBoundingClientRect(navRef, [children]);
|
|
149
|
+
const [variant, setVariant] = useState(appContainerState ? appContainerState.sidePanelVariant === AppSidePanelVariant.hidden ? SideNavigationMenuBarVariant.shrinked : appContainerState.sidePanelVariant : propsVariant);
|
|
150
|
+
const [currentOpenMenuId, setCurrentOpenMenuId] = useState();
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
setVariant(propsVariant);
|
|
153
|
+
}, [propsVariant]);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
if (appContainerState && appContainerState.sidePanelVariant && appContainerState.sidePanelVariant !== variant) {
|
|
156
|
+
setVariant(appContainerState.sidePanelVariant === AppSidePanelVariant.hidden ? SideNavigationMenuBarVariant.shrinked : appContainerState.sidePanelVariant);
|
|
157
|
+
}
|
|
158
|
+
}, [appContainerState === null || appContainerState === void 0 ? void 0 : appContainerState.sidePanelVariant]);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Create an array containing only valid children being either SideNavigationMenu or SideNavigationMenuItem.
|
|
162
|
+
*/
|
|
163
|
+
const childArray = filterComponents([SideNavigationMenu, SideNavigationMenuItem])(children);
|
|
164
|
+
const navItems = childArray.map((child, index) => {
|
|
165
|
+
var _child$key, _child$key2;
|
|
166
|
+
return /*#__PURE__*/React__default.createElement("li", {
|
|
167
|
+
key: (_child$key = child.key) !== null && _child$key !== void 0 ? _child$key : index,
|
|
168
|
+
role: "none"
|
|
169
|
+
}, /*#__PURE__*/React__default.cloneElement(child, {
|
|
170
|
+
isDisabled: child.props.isDisabled || isDisabled || undefined,
|
|
171
|
+
key: (_child$key2 = child.key) !== null && _child$key2 !== void 0 ? _child$key2 : index,
|
|
172
|
+
tabIndex: index === 0 ? 0 : -1
|
|
173
|
+
}));
|
|
174
|
+
});
|
|
175
|
+
const menuItems = useRef(new Set()).current;
|
|
176
|
+
const [currentIndex, setCurrentIndex] = useState(0);
|
|
177
|
+
const previousIndex = usePrevious(currentIndex);
|
|
178
|
+
const first = () => setCurrentIndex(0);
|
|
179
|
+
const last = () => setCurrentIndex(menuItems.size - 1);
|
|
180
|
+
const next = () => {
|
|
181
|
+
const index = currentIndex === menuItems.size - 1 ? 0 : currentIndex + 1;
|
|
182
|
+
setCurrentIndex(index);
|
|
183
|
+
};
|
|
184
|
+
const previous = () => {
|
|
185
|
+
const index = currentIndex === 0 ? menuItems.size - 1 : currentIndex - 1;
|
|
186
|
+
setCurrentIndex(index);
|
|
187
|
+
};
|
|
188
|
+
const match = event => {
|
|
189
|
+
const items = Array.from(menuItems);
|
|
190
|
+
|
|
191
|
+
// Reorder the array, starting with the currentNode
|
|
192
|
+
const reorderedItems = [...items.slice(currentIndex), ...items.slice(0, currentIndex)];
|
|
193
|
+
|
|
194
|
+
// Find all nodes that begin with the pressed letter
|
|
195
|
+
const matches = reorderedItems.filter(menuItem => {
|
|
196
|
+
const {
|
|
197
|
+
textContent
|
|
198
|
+
} = menuItem;
|
|
199
|
+
// istanbul ignore next
|
|
200
|
+
const firstLetter = textContent === null || textContent === void 0 ? void 0 : textContent.toLowerCase().charAt(0);
|
|
201
|
+
return event.key === firstLetter;
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// Exit early if there are no matches
|
|
205
|
+
if (!matches.length) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// If the focused item is a match, focus the next match.
|
|
210
|
+
// Otherwise, focus the first match
|
|
211
|
+
const currentNode = items[currentIndex];
|
|
212
|
+
const nextMatch = matches.includes(currentNode) ? matches[1] : matches[0];
|
|
213
|
+
const index = items.findIndex(item => {
|
|
214
|
+
return item === nextMatch;
|
|
215
|
+
});
|
|
216
|
+
setCurrentIndex(index);
|
|
217
|
+
};
|
|
218
|
+
const keyDown = e => {
|
|
219
|
+
var _menubarProps$onKeyDo, _currentNode$parentNo;
|
|
220
|
+
(_menubarProps$onKeyDo = menubarProps.onKeyDown) === null || _menubarProps$onKeyDo === void 0 ? void 0 : _menubarProps$onKeyDo.call(menubarProps, e);
|
|
221
|
+
e.stopPropagation();
|
|
222
|
+
const currentNode = e.target;
|
|
223
|
+
// istanbul ignore next
|
|
224
|
+
const parentMenu = currentNode === null || currentNode === void 0 ? void 0 : (_currentNode$parentNo = currentNode.parentNode) === null || _currentNode$parentNo === void 0 ? void 0 : _currentNode$parentNo.parentNode;
|
|
225
|
+
const isFromSubmenu = parentMenu.getAttribute('role') === 'menu';
|
|
226
|
+
switch (e.code) {
|
|
227
|
+
case 'ArrowUp':
|
|
228
|
+
e.preventDefault();
|
|
229
|
+
previous();
|
|
230
|
+
break;
|
|
231
|
+
case 'ArrowDown':
|
|
232
|
+
e.preventDefault();
|
|
233
|
+
next();
|
|
234
|
+
break;
|
|
235
|
+
case 'ArrowRight':
|
|
236
|
+
e.preventDefault();
|
|
237
|
+
if (isFromSubmenu) {
|
|
238
|
+
next();
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
case 'End':
|
|
242
|
+
e.preventDefault();
|
|
243
|
+
last();
|
|
244
|
+
break;
|
|
245
|
+
case 'Home':
|
|
246
|
+
e.preventDefault();
|
|
247
|
+
first();
|
|
248
|
+
break;
|
|
249
|
+
case 'Enter':
|
|
250
|
+
case 'Space':
|
|
251
|
+
e.preventDefault();
|
|
252
|
+
currentNode.click();
|
|
253
|
+
break;
|
|
254
|
+
default:
|
|
255
|
+
match(e);
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const value = useMemo(() => ({
|
|
260
|
+
menuItems,
|
|
261
|
+
sideNavigationMenuBarVariant: variant,
|
|
262
|
+
setSideNavigationMenuBarVariant: setVariant,
|
|
263
|
+
currentOpenMenuId,
|
|
264
|
+
setCurrentOpenMenuId: value => {
|
|
265
|
+
if (!canHaveMultipleMenuOpenAtOnce) {
|
|
266
|
+
setCurrentOpenMenuId(value);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}), [menuItems, variant, setVariant, currentOpenMenuId, setCurrentOpenMenuId]);
|
|
270
|
+
useEffect(() => {
|
|
271
|
+
if (currentIndex !== previousIndex) {
|
|
272
|
+
const items = Array.from(menuItems);
|
|
273
|
+
const currentNode = items[currentIndex];
|
|
274
|
+
const previousNode = items[previousIndex];
|
|
275
|
+
|
|
276
|
+
// istanbul ignore next
|
|
277
|
+
previousNode === null || previousNode === void 0 ? void 0 : previousNode.setAttribute('tabindex', '-1');
|
|
278
|
+
currentNode === null || currentNode === void 0 ? void 0 : currentNode.setAttribute('tabindex', '0');
|
|
279
|
+
currentNode === null || currentNode === void 0 ? void 0 : currentNode.focus();
|
|
280
|
+
}
|
|
281
|
+
}, [currentIndex, previousIndex, menuItems]);
|
|
282
|
+
return /*#__PURE__*/React__default.createElement(ThemeProvider, {
|
|
283
|
+
value: {
|
|
284
|
+
theme
|
|
285
|
+
}
|
|
286
|
+
}, /*#__PURE__*/React__default.createElement(StyledSideNavigationMenuBar, _extends({}, forwardedProps, {
|
|
287
|
+
$isDisabled: isDisabled,
|
|
288
|
+
$marginTop: top,
|
|
289
|
+
$theme: theme,
|
|
290
|
+
$variant: variant,
|
|
291
|
+
"aria-label": ariaLabel,
|
|
292
|
+
"aria-labelledby": ariaLabelledby,
|
|
293
|
+
className: classNames(SideNavigationMenuBar.className, className),
|
|
294
|
+
ref: navRef
|
|
295
|
+
}), /*#__PURE__*/React__default.createElement(SideNavigationMenuBarContext.Provider, {
|
|
296
|
+
value: value
|
|
297
|
+
}, /*#__PURE__*/React__default.createElement("ul", _extends({}, menubarProps, {
|
|
298
|
+
"aria-label": ariaLabel,
|
|
299
|
+
"aria-labelledby": ariaLabelledby,
|
|
300
|
+
"aria-orientation": "vertical",
|
|
301
|
+
onKeyDown: keyDown,
|
|
302
|
+
ref: menubarRef,
|
|
303
|
+
role: "menubar"
|
|
304
|
+
}), navItems))));
|
|
305
|
+
});
|
|
306
|
+
SideNavigationMenuBar.className = CLASSNAME;
|
|
307
|
+
SideNavigationMenuBar.displayName = COMPONENT_NAME;
|
|
308
|
+
|
|
309
|
+
const _excluded = ["title", "href", "ref"],
|
|
310
|
+
_excluded2 = ["title", "children", "ref"],
|
|
311
|
+
_excluded3 = ["title", "href", "ref"];
|
|
312
|
+
const isMenu = item => {
|
|
313
|
+
return item.children !== undefined;
|
|
314
|
+
};
|
|
315
|
+
const useSideNavigationMenuBar = _ref => {
|
|
316
|
+
let {
|
|
317
|
+
items,
|
|
318
|
+
isActive
|
|
319
|
+
} = _ref;
|
|
320
|
+
const menuBarChildren = [];
|
|
321
|
+
items.map(item => {
|
|
322
|
+
if (!isMenu(item)) {
|
|
323
|
+
const {
|
|
324
|
+
title,
|
|
325
|
+
href,
|
|
326
|
+
ref
|
|
327
|
+
} = item,
|
|
328
|
+
rest = _objectWithoutProperties(item, _excluded);
|
|
329
|
+
menuBarChildren.push( /*#__PURE__*/React__default.createElement(SideNavigationMenuItem, _extends({
|
|
330
|
+
key: title,
|
|
331
|
+
isCurrent: isActive ? isActive(href) : undefined
|
|
332
|
+
}, rest, {
|
|
333
|
+
href: href,
|
|
334
|
+
ref: ref
|
|
335
|
+
}), title));
|
|
336
|
+
} else {
|
|
337
|
+
const {
|
|
338
|
+
title,
|
|
339
|
+
children,
|
|
340
|
+
ref
|
|
341
|
+
} = item,
|
|
342
|
+
rest = _objectWithoutProperties(item, _excluded2);
|
|
343
|
+
menuBarChildren.push( /*#__PURE__*/React__default.createElement(SideNavigationMenu, _extends({
|
|
344
|
+
key: title,
|
|
345
|
+
"aria-label": title,
|
|
346
|
+
isExpanded: isActive ? children.filter(child => isActive(child.href)).length > 0 : undefined,
|
|
347
|
+
hasBadge: children.filter(child => child.badge).length > 0
|
|
348
|
+
}, rest, {
|
|
349
|
+
ref: ref
|
|
350
|
+
}), children.map(child => {
|
|
351
|
+
const {
|
|
352
|
+
title,
|
|
353
|
+
href,
|
|
354
|
+
ref
|
|
355
|
+
} = child,
|
|
356
|
+
rest = _objectWithoutProperties(child, _excluded3);
|
|
357
|
+
return /*#__PURE__*/React__default.createElement(SideNavigationMenuItem, _extends({
|
|
358
|
+
key: title,
|
|
359
|
+
href: href,
|
|
360
|
+
isCurrent: isActive ? isActive(href) : undefined
|
|
361
|
+
}, rest, {
|
|
362
|
+
ref: ref
|
|
363
|
+
}), title);
|
|
364
|
+
})));
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
return {
|
|
368
|
+
children: menuBarChildren
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
export { SideNavigationMenuBar as S, useSideNavigationMenuBar as a, useBoundingClientRect as u };
|
|
373
|
+
//# sourceMappingURL=useSideNavigationMenuBar.js.map
|