@salt-ds/lab 1.0.0-alpha.26 → 1.0.0-alpha.27
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/css/salt-lab.css +378 -413
- package/dist-cjs/combo-box-next/ComboBoxNext.js +303 -166
- package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-cjs/combo-box-next/useComboBoxNext.js +55 -0
- package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -0
- package/dist-cjs/dropdown/DropdownBase.js +1 -1
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown-next/DropdownNext.css.js +1 -1
- package/dist-cjs/dropdown-next/DropdownNext.js +333 -169
- package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-cjs/editable-label/EditableLabel.js +1 -1
- package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
- package/dist-cjs/index.js +8 -10
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/layer-layout/LayerLayout.js +0 -1
- package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
- package/dist-cjs/list-control/ListControlContext.js +36 -0
- package/dist-cjs/list-control/ListControlContext.js.map +1 -0
- package/dist-cjs/list-control/ListControlState.js +193 -0
- package/dist-cjs/list-control/ListControlState.js.map +1 -0
- package/dist-cjs/navigation-item/ConditionalWrapper.js +2 -4
- package/dist-cjs/navigation-item/ConditionalWrapper.js.map +1 -1
- package/dist-cjs/navigation-item/ExpansionIcon.js +2 -4
- package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
- package/dist-cjs/navigation-item/NavigationItem.js +4 -7
- package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
- package/dist-cjs/option/Option.css.js +6 -0
- package/dist-cjs/option/Option.css.js.map +1 -0
- package/dist-cjs/option/Option.js +113 -0
- package/dist-cjs/option/Option.js.map +1 -0
- package/dist-cjs/option/OptionGroup.css.js +6 -0
- package/dist-cjs/option/OptionGroup.css.js.map +1 -0
- package/dist-cjs/option/OptionGroup.js +44 -0
- package/dist-cjs/option/OptionGroup.js.map +1 -0
- package/dist-cjs/option/OptionList.css.js +6 -0
- package/dist-cjs/option/OptionList.css.js.map +1 -0
- package/dist-cjs/option/OptionList.js +40 -0
- package/dist-cjs/option/OptionList.js.map +1 -0
- package/dist-cjs/scrim/Scrim.css.js +1 -1
- package/dist-cjs/scrim/Scrim.js +10 -140
- package/dist-cjs/scrim/Scrim.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputPill.js +13 -9
- package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +6 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +244 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.css.js +6 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.css.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.js +83 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js +22 -0
- package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js +37 -0
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/useWidth.js +48 -0
- package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -0
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js +479 -0
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/tree/Tree.js +1 -2
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-es/combo-box-next/ComboBoxNext.js +306 -169
- package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-es/combo-box-next/useComboBoxNext.js +51 -0
- package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -0
- package/dist-es/dropdown/DropdownBase.js +1 -1
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown-next/DropdownNext.css.js +1 -1
- package/dist-es/dropdown-next/DropdownNext.js +332 -168
- package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-es/editable-label/EditableLabel.js +1 -1
- package/dist-es/editable-label/EditableLabel.js.map +1 -1
- package/dist-es/index.js +4 -5
- package/dist-es/index.js.map +1 -1
- package/dist-es/layer-layout/LayerLayout.js +0 -1
- package/dist-es/layer-layout/LayerLayout.js.map +1 -1
- package/dist-es/list-control/ListControlContext.js +31 -0
- package/dist-es/list-control/ListControlContext.js.map +1 -0
- package/dist-es/list-control/ListControlState.js +189 -0
- package/dist-es/list-control/ListControlState.js.map +1 -0
- package/dist-es/navigation-item/ConditionalWrapper.js +2 -4
- package/dist-es/navigation-item/ConditionalWrapper.js.map +1 -1
- package/dist-es/navigation-item/ExpansionIcon.js +2 -4
- package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-es/navigation-item/NavigationItem.css.js +1 -1
- package/dist-es/navigation-item/NavigationItem.js +4 -7
- package/dist-es/navigation-item/NavigationItem.js.map +1 -1
- package/dist-es/option/Option.css.js +4 -0
- package/dist-es/option/Option.css.js.map +1 -0
- package/dist-es/option/Option.js +109 -0
- package/dist-es/option/Option.js.map +1 -0
- package/dist-es/option/OptionGroup.css.js +4 -0
- package/dist-es/option/OptionGroup.css.js.map +1 -0
- package/dist-es/option/OptionGroup.js +40 -0
- package/dist-es/option/OptionGroup.js.map +1 -0
- package/dist-es/option/OptionList.css.js +4 -0
- package/dist-es/option/OptionList.css.js.map +1 -0
- package/dist-es/option/OptionList.js +36 -0
- package/dist-es/option/OptionList.js.map +1 -0
- package/dist-es/scrim/Scrim.css.js +1 -1
- package/dist-es/scrim/Scrim.js +12 -138
- package/dist-es/scrim/Scrim.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputPill.js +15 -11
- package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +4 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.js +240 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/InputPill.css.js +4 -0
- package/dist-es/tokenized-input-next/internal/InputPill.css.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/InputPill.js +79 -0
- package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js +18 -0
- package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js +33 -0
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/useWidth.js +42 -0
- package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -0
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js +471 -0
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/tree/Tree.js +1 -2
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -80
- package/dist-types/combo-box-next/useComboBoxNext.d.ts +31 -0
- package/dist-types/dropdown-next/DropdownNext.d.ts +25 -27
- package/dist-types/index.d.ts +2 -2
- package/dist-types/list-control/ListControlContext.d.ts +20 -0
- package/dist-types/list-control/ListControlState.d.ts +68 -0
- package/dist-types/navigation-item/ConditionalWrapper.d.ts +1 -1
- package/dist-types/navigation-item/ExpansionIcon.d.ts +1 -1
- package/dist-types/option/Option.d.ts +20 -0
- package/dist-types/option/OptionGroup.d.ts +12 -0
- package/dist-types/option/OptionList.d.ts +5 -0
- package/dist-types/option/index.d.ts +2 -0
- package/dist-types/scrim/Scrim.d.ts +6 -61
- package/dist-types/scrim/index.d.ts +0 -1
- package/dist-types/tokenized-input/internal/InputPill.d.ts +7 -5
- package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +51 -0
- package/dist-types/tokenized-input-next/index.d.ts +2 -0
- package/dist-types/tokenized-input-next/internal/InputPill.d.ts +29 -0
- package/dist-types/tokenized-input-next/internal/calcFirstHiddenIndex.d.ts +4 -0
- package/dist-types/tokenized-input-next/internal/useResizeObserver.d.ts +6 -0
- package/dist-types/tokenized-input-next/internal/useWidth.d.ts +7 -0
- package/dist-types/tokenized-input-next/useTokenizedInputNext.d.ts +47 -0
- package/package.json +2 -2
- package/dist-cjs/combo-box-next/ComboBoxNext.css.js +0 -6
- package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +0 -1
- package/dist-cjs/combo-box-next/useComboBox.js +0 -147
- package/dist-cjs/combo-box-next/useComboBox.js.map +0 -1
- package/dist-cjs/combo-box-next/useComboboxPortal.js +0 -75
- package/dist-cjs/combo-box-next/useComboboxPortal.js.map +0 -1
- package/dist-cjs/combo-box-next/utils.js +0 -36
- package/dist-cjs/combo-box-next/utils.js.map +0 -1
- package/dist-cjs/dropdown-next/useDropdownNext.js +0 -188
- package/dist-cjs/dropdown-next/useDropdownNext.js.map +0 -1
- package/dist-cjs/focus-manager/FocusManager.js +0 -158
- package/dist-cjs/focus-manager/FocusManager.js.map +0 -1
- package/dist-cjs/focus-manager/internal/findAllTabbableElements.js +0 -45
- package/dist-cjs/focus-manager/internal/findAllTabbableElements.js.map +0 -1
- package/dist-cjs/focus-manager/internal/useReturnFocus.js +0 -59
- package/dist-cjs/focus-manager/internal/useReturnFocus.js.map +0 -1
- package/dist-cjs/pill/ClosablePill.js +0 -61
- package/dist-cjs/pill/ClosablePill.js.map +0 -1
- package/dist-cjs/pill/Pill.css.js +0 -6
- package/dist-cjs/pill/Pill.css.js.map +0 -1
- package/dist-cjs/pill/Pill.js +0 -49
- package/dist-cjs/pill/Pill.js.map +0 -1
- package/dist-cjs/pill/PillBase.js +0 -133
- package/dist-cjs/pill/PillBase.js.map +0 -1
- package/dist-cjs/pill/SelectablePill.js +0 -55
- package/dist-cjs/pill/SelectablePill.js.map +0 -1
- package/dist-cjs/pill/constants.js +0 -8
- package/dist-cjs/pill/constants.js.map +0 -1
- package/dist-cjs/pill/internal/DeleteButton.js +0 -37
- package/dist-cjs/pill/internal/DeleteButton.js.map +0 -1
- package/dist-cjs/pill/internal/DivButton.js +0 -68
- package/dist-cjs/pill/internal/DivButton.js.map +0 -1
- package/dist-cjs/pill/internal/PillCheckbox.css.js +0 -6
- package/dist-cjs/pill/internal/PillCheckbox.css.js.map +0 -1
- package/dist-cjs/pill/internal/PillCheckbox.js +0 -27
- package/dist-cjs/pill/internal/PillCheckbox.js.map +0 -1
- package/dist-cjs/pill-next/PillNext.css.js +0 -6
- package/dist-cjs/pill-next/PillNext.css.js.map +0 -1
- package/dist-cjs/pill-next/PillNext.js +0 -60
- package/dist-cjs/pill-next/PillNext.js.map +0 -1
- package/dist-cjs/scrim/ScrimContext.js +0 -13
- package/dist-cjs/scrim/ScrimContext.js.map +0 -1
- package/dist-cjs/scrim/internal/PreventFocus.js +0 -39
- package/dist-cjs/scrim/internal/PreventFocus.js.map +0 -1
- package/dist-es/combo-box-next/ComboBoxNext.css.js +0 -4
- package/dist-es/combo-box-next/ComboBoxNext.css.js.map +0 -1
- package/dist-es/combo-box-next/useComboBox.js +0 -143
- package/dist-es/combo-box-next/useComboBox.js.map +0 -1
- package/dist-es/combo-box-next/useComboboxPortal.js +0 -71
- package/dist-es/combo-box-next/useComboboxPortal.js.map +0 -1
- package/dist-es/combo-box-next/utils.js +0 -31
- package/dist-es/combo-box-next/utils.js.map +0 -1
- package/dist-es/dropdown-next/useDropdownNext.js +0 -184
- package/dist-es/dropdown-next/useDropdownNext.js.map +0 -1
- package/dist-es/focus-manager/FocusManager.js +0 -154
- package/dist-es/focus-manager/FocusManager.js.map +0 -1
- package/dist-es/focus-manager/internal/findAllTabbableElements.js +0 -41
- package/dist-es/focus-manager/internal/findAllTabbableElements.js.map +0 -1
- package/dist-es/focus-manager/internal/useReturnFocus.js +0 -55
- package/dist-es/focus-manager/internal/useReturnFocus.js.map +0 -1
- package/dist-es/pill/ClosablePill.js +0 -57
- package/dist-es/pill/ClosablePill.js.map +0 -1
- package/dist-es/pill/Pill.css.js +0 -4
- package/dist-es/pill/Pill.css.js.map +0 -1
- package/dist-es/pill/Pill.js +0 -45
- package/dist-es/pill/Pill.js.map +0 -1
- package/dist-es/pill/PillBase.js +0 -129
- package/dist-es/pill/PillBase.js.map +0 -1
- package/dist-es/pill/SelectablePill.js +0 -51
- package/dist-es/pill/SelectablePill.js.map +0 -1
- package/dist-es/pill/constants.js +0 -4
- package/dist-es/pill/constants.js.map +0 -1
- package/dist-es/pill/internal/DeleteButton.js +0 -33
- package/dist-es/pill/internal/DeleteButton.js.map +0 -1
- package/dist-es/pill/internal/DivButton.js +0 -64
- package/dist-es/pill/internal/DivButton.js.map +0 -1
- package/dist-es/pill/internal/PillCheckbox.css.js +0 -4
- package/dist-es/pill/internal/PillCheckbox.css.js.map +0 -1
- package/dist-es/pill/internal/PillCheckbox.js +0 -23
- package/dist-es/pill/internal/PillCheckbox.js.map +0 -1
- package/dist-es/pill-next/PillNext.css.js +0 -4
- package/dist-es/pill-next/PillNext.css.js.map +0 -1
- package/dist-es/pill-next/PillNext.js +0 -52
- package/dist-es/pill-next/PillNext.js.map +0 -1
- package/dist-es/scrim/ScrimContext.js +0 -9
- package/dist-es/scrim/ScrimContext.js.map +0 -1
- package/dist-es/scrim/internal/PreventFocus.js +0 -35
- package/dist-es/scrim/internal/PreventFocus.js.map +0 -1
- package/dist-types/combo-box-next/useComboBox.d.ts +0 -44
- package/dist-types/combo-box-next/useComboboxPortal.d.ts +0 -22
- package/dist-types/combo-box-next/utils.d.ts +0 -7
- package/dist-types/dropdown-next/useDropdownNext.d.ts +0 -50
- package/dist-types/pill/ClosablePill.d.ts +0 -8
- package/dist-types/pill/Pill.d.ts +0 -15
- package/dist-types/pill/PillBase.d.ts +0 -52
- package/dist-types/pill/SelectablePill.d.ts +0 -17
- package/dist-types/pill/constants.d.ts +0 -1
- package/dist-types/pill/index.d.ts +0 -3
- package/dist-types/pill/internal/DeleteButton.d.ts +0 -8
- package/dist-types/pill/internal/DivButton.d.ts +0 -12
- package/dist-types/pill/internal/PillCheckbox.d.ts +0 -3
- package/dist-types/pill-next/PillNext.d.ts +0 -4
- package/dist-types/pill-next/index.d.ts +0 -1
- package/dist-types/scrim/ScrimContext.d.ts +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Vars applied to root NavigationItem component */\n.saltNavigationItem {\n
|
|
3
|
+
var css_248z = "/* Vars applied to root NavigationItem component */\n.saltNavigationItem-wrapper {\n display: flex;\n gap: var(--salt-spacing-100);\n align-items: center;\n position: relative;\n background: none;\n border: none;\n font-size: var(--salt-text-fontSize);\n text-decoration: none;\n cursor: var(--salt-selectable-cursor-hover);\n /* Hover off animation */\n transition: all var(--salt-duration-instant) ease-in-out;\n}\n\n/* Vars applied to NavigationItem component when root */\n.saltNavigationItem-rootItem {\n font-weight: var(--salt-text-fontWeight-strong);\n}\n\n/* Styles applied to NavigationItem icon */\n.saltNavigationItem-label .saltIcon {\n top: var(--salt-spacing-25);\n}\n\n/* Styles applied when orientation = \"horizontal\" */\n.saltNavigationItem-horizontal {\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100) * 2);\n padding: 0 var(--salt-spacing-100);\n width: fit-content;\n}\n\n/* Styles applied when orientation = \"vertical\" */\n.saltNavigationItem-vertical {\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-50) * 2);\n padding-top: 0;\n padding-bottom: 0;\n padding-right: var(--salt-spacing-100);\n padding-left: calc(var(--salt-spacing-300) * (min(var(--saltNavigationItem-level, 0) + 1, 2)));\n width: 100%;\n}\n\n/* Styles applied to NavigationItem label */\n.saltNavigationItem-label {\n color: var(--salt-content-primary-foreground);\n line-height: var(--salt-text-lineHeight);\n font-family: var(--salt-text-fontFamily);\n padding-left: calc(var(--saltNavigationItem-level, 0) * var(--salt-spacing-100));\n flex: 1;\n text-align: left;\n display: flex;\n align-items: baseline;\n gap: var(--salt-spacing-100);\n}\n\n/* Styles applied to NavigationItem Badge */\n.saltNavigationItem-label .saltBadge {\n margin-left: auto;\n}\n\n/* Styles applied to NavigationItem when focus is visible */\n.saltNavigationItem-wrapper:focus-visible {\n outline: var(--salt-focused-outline);\n}\n\n/* Styles applied to NavigationItem for non-keyboard focus */\n.saltNavigationItem-wrapper:focus:not(:focus-visible) {\n outline: 0;\n}\n\n/* Styles applied to activation line */\n.saltNavigationItem-wrapper::after {\n content: \"\";\n position: absolute;\n top: var(--salt-spacing-25);\n left: 0;\n display: block;\n}\n\n/* Styles applied to activation line when orientation = \"horizontal\" */\n.saltNavigationItem-horizontal::after {\n width: 100%;\n height: var(--salt-size-indicator);\n}\n\n/* Styles applied to activation line when orientation = \"vertical\" */\n.saltNavigationItem-vertical::after {\n width: var(--salt-size-indicator);\n left: var(--salt-spacing-25);\n height: calc(100% - var(--salt-spacing-50));\n}\n\n/* Styles applied to activation line on hover */\n.saltNavigationItem-wrapper:hover::after,\n.saltNavigationItem-wrapper:focus-visible::after {\n background: var(--salt-navigable-indicator-hover);\n /* Hover on animation */\n transition: all var(--salt-duration-perceptible) ease-in-out;\n}\n\n/* Styles applied to activation line when item is active */\n.saltNavigationItem-active::after,\n.saltNavigationItem-active:hover::after,\n.saltNavigationItem-active:focus::after {\n background: var(--salt-navigable-indicator-active);\n /* Hover on animation */\n transition: all var(--salt-duration-perceptible) ease-in-out;\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=NavigationItem.css.js.map
|
|
@@ -41,18 +41,16 @@ const NavigationItem = React.forwardRef(
|
|
|
41
41
|
};
|
|
42
42
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
43
43
|
ref,
|
|
44
|
-
style,
|
|
45
44
|
className: clsx.clsx(withBaseName(), className),
|
|
45
|
+
style,
|
|
46
46
|
...rest,
|
|
47
47
|
children: /* @__PURE__ */ jsxRuntime.jsxs(ConditionalWrapper.ConditionalWrapper, {
|
|
48
48
|
className: clsx.clsx(
|
|
49
49
|
withBaseName("wrapper"),
|
|
50
50
|
{
|
|
51
51
|
[withBaseName("active")]: active || blurActive,
|
|
52
|
-
[withBaseName("blurActive")]: blurActive
|
|
53
|
-
[withBaseName("
|
|
54
|
-
[withBaseName("rootItem")]: level === 0,
|
|
55
|
-
[withBaseName("expandButton")]: parent
|
|
52
|
+
[withBaseName("blurActive")]: blurActive,
|
|
53
|
+
[withBaseName("rootItem")]: level === 0
|
|
56
54
|
},
|
|
57
55
|
withBaseName(orientation)
|
|
58
56
|
),
|
|
@@ -68,8 +66,7 @@ const NavigationItem = React.forwardRef(
|
|
|
68
66
|
}),
|
|
69
67
|
parent && /* @__PURE__ */ jsxRuntime.jsx(ExpansionIcon.ExpansionIcon, {
|
|
70
68
|
expanded,
|
|
71
|
-
orientation
|
|
72
|
-
className: withBaseName("expandIcon")
|
|
69
|
+
orientation
|
|
73
70
|
})
|
|
74
71
|
]
|
|
75
72
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEventHandler } from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport { ConditionalWrapper } from \"./ConditionalWrapper\";\n\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n children,\n className,\n expanded = false,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n href,\n style: styleProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n return (\n <div\n ref={ref}\n
|
|
1
|
+
{"version":3,"file":"NavigationItem.js","sources":["../src/navigation-item/NavigationItem.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEventHandler } from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { ExpansionIcon } from \"./ExpansionIcon\";\nimport { ConditionalWrapper } from \"./ConditionalWrapper\";\n\nimport navigationItemCss from \"./NavigationItem.css\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nexport interface NavigationItemProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Whether the navigation item is active.\n */\n active?: boolean;\n /**\n * Whether the nested group is collapsed and there is an active nested item within it.\n */\n blurActive?: boolean;\n /**\n * Whether the navigation item is expanded.\n */\n expanded?: boolean;\n /**\n * Level of nesting.\n */\n level?: number;\n /**\n * The orientation of the navigation item.\n */\n orientation?: \"horizontal\" | \"vertical\";\n /**\n * Whether the navigation item is a parent with nested items.\n */\n parent?: boolean;\n /**\n * Action to be triggered when the navigation item is expanded.\n */\n onExpand?: MouseEventHandler<HTMLButtonElement>;\n /**\n * Href to be passed to the Link element.\n */\n href?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltNavigationItem\");\n\nexport const NavigationItem = forwardRef<HTMLDivElement, NavigationItemProps>(\n function NavigationItem(props, ref) {\n const {\n active,\n blurActive,\n children,\n className,\n expanded = false,\n orientation = \"horizontal\",\n parent,\n level = 0,\n onExpand,\n href,\n style: styleProp,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-navigation-item\",\n css: navigationItemCss,\n window: targetWindow,\n });\n\n const style = {\n ...styleProp,\n \"--saltNavigationItem-level\": `${level}`,\n };\n\n return (\n <div\n ref={ref}\n className={clsx(withBaseName(), className)}\n style={style}\n {...rest}\n >\n <ConditionalWrapper\n className={clsx(\n withBaseName(\"wrapper\"),\n {\n [withBaseName(\"active\")]: active || blurActive,\n [withBaseName(\"blurActive\")]: blurActive,\n [withBaseName(\"rootItem\")]: level === 0,\n },\n withBaseName(orientation)\n )}\n parent={parent}\n expanded={expanded}\n onExpand={onExpand}\n active={active}\n href={href}\n >\n <span className={withBaseName(\"label\")}>{children}</span>\n {parent && (\n <ExpansionIcon expanded={expanded} orientation={orientation} />\n )}\n </ConditionalWrapper>\n </div>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","NavigationItem","useWindow","useComponentCssInjection","navigationItemCss","jsx","clsx","jsxs","ConditionalWrapper","ExpansionIcon"],"mappings":";;;;;;;;;;;;;;AA6CA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA,CAAA;AAE/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAM,MAAA;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAW,GAAA,KAAA;AAAA,MACX,WAAc,GAAA,YAAA;AAAA,MACd,MAAA;AAAA,MACA,KAAQ,GAAA,CAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACJ,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,sBAAA;AAAA,MACR,GAAK,EAAAC,gBAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,KAAQ,GAAA;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,8BAA8B,CAAG,EAAA,KAAA,CAAA,CAAA;AAAA,KACnC,CAAA;AAEA,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,KAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAC,kBAAAC,eAAA,CAAAC,qCAAA,EAAA;AAAA,QACC,SAAW,EAAAF,SAAA;AAAA,UACT,aAAa,SAAS,CAAA;AAAA,UACtB;AAAA,YACE,CAAC,YAAA,CAAa,QAAQ,CAAA,GAAI,MAAU,IAAA,UAAA;AAAA,YACpC,CAAC,YAAa,CAAA,YAAY,CAAI,GAAA,UAAA;AAAA,YAC9B,CAAC,YAAA,CAAa,UAAU,CAAA,GAAI,KAAU,KAAA,CAAA;AAAA,WACxC;AAAA,UACA,aAAa,WAAW,CAAA;AAAA,SAC1B;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAACD,cAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,YAAI,QAAA;AAAA,WAAS,CAAA;AAAA,UACjD,0BACEA,cAAA,CAAAI,2BAAA,EAAA;AAAA,YAAc,QAAA;AAAA,YAAoB,WAAA;AAAA,WAA0B,CAAA;AAAA,SAAA;AAAA,OAEjE,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltOption {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n align-items: center;\n margin-top: var(--salt-size-border);\n margin-bottom: var(--salt-size-border);\n border-top: var(--salt-size-border) var(--salt-container-borderStyle) transparent;\n border-bottom: var(--salt-size-border) var(--salt-container-borderStyle) transparent;\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n.saltOption-active {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltOption-focusVisible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-border) * -2);\n}\n\n.saltOption:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltOption[aria-selected=\"true\"] {\n background: var(--salt-selectable-background-selected);\n border-color: var(--salt-selectable-borderColor-selected);\n}\n\n.saltOption[aria-disabled=\"true\"] {\n color: var(--salt-content-primary-foreground-disabled);\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=Option.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Option.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var core = require('@salt-ds/core');
|
|
8
|
+
var clsx = require('clsx');
|
|
9
|
+
var ListControlContext = require('../list-control/ListControlContext.js');
|
|
10
|
+
var window = require('@salt-ds/window');
|
|
11
|
+
var styles = require('@salt-ds/styles');
|
|
12
|
+
var Option$1 = require('./Option.css.js');
|
|
13
|
+
|
|
14
|
+
const withBaseName = core.makePrefixer("saltOption");
|
|
15
|
+
function getOptionText(textValue, children) {
|
|
16
|
+
if (textValue) {
|
|
17
|
+
return textValue;
|
|
18
|
+
}
|
|
19
|
+
let textString = "";
|
|
20
|
+
React.Children.forEach(children, (child) => {
|
|
21
|
+
if (typeof child === "string") {
|
|
22
|
+
textString += child;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return textString;
|
|
26
|
+
}
|
|
27
|
+
const Option = React.forwardRef(function Option2(props, ref) {
|
|
28
|
+
const {
|
|
29
|
+
className,
|
|
30
|
+
children,
|
|
31
|
+
disabled,
|
|
32
|
+
onClick,
|
|
33
|
+
id: idProp,
|
|
34
|
+
value,
|
|
35
|
+
textValue,
|
|
36
|
+
...rest
|
|
37
|
+
} = props;
|
|
38
|
+
const targetWindow = window.useWindow();
|
|
39
|
+
styles.useComponentCssInjection({
|
|
40
|
+
testId: "salt-option",
|
|
41
|
+
css: Option$1,
|
|
42
|
+
window: targetWindow
|
|
43
|
+
});
|
|
44
|
+
const optionRef = React.useRef(null);
|
|
45
|
+
const id = core.useId(idProp);
|
|
46
|
+
const optionText = getOptionText(textValue, children);
|
|
47
|
+
const {
|
|
48
|
+
setActive,
|
|
49
|
+
activeState,
|
|
50
|
+
multiselect,
|
|
51
|
+
setOpen,
|
|
52
|
+
select,
|
|
53
|
+
register,
|
|
54
|
+
selectedState,
|
|
55
|
+
focusVisibleState
|
|
56
|
+
} = ListControlContext.useListControlContext();
|
|
57
|
+
const selected = selectedState.includes(value);
|
|
58
|
+
const active = (activeState == null ? void 0 : activeState.id) === id;
|
|
59
|
+
const optionValue = React.useMemo(
|
|
60
|
+
() => ({
|
|
61
|
+
id: String(id),
|
|
62
|
+
disabled: Boolean(disabled),
|
|
63
|
+
value,
|
|
64
|
+
text: optionText
|
|
65
|
+
}),
|
|
66
|
+
[id, disabled, value, optionText]
|
|
67
|
+
);
|
|
68
|
+
const handleClick = (event) => {
|
|
69
|
+
if (disabled || id == void 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
setActive(optionValue);
|
|
73
|
+
select(event, optionValue);
|
|
74
|
+
if (!multiselect) {
|
|
75
|
+
setOpen(event, false);
|
|
76
|
+
}
|
|
77
|
+
onClick == null ? void 0 : onClick(event);
|
|
78
|
+
};
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
if (id && optionRef.current) {
|
|
81
|
+
return register(optionValue, optionRef.current);
|
|
82
|
+
}
|
|
83
|
+
}, [optionValue, id, register]);
|
|
84
|
+
const handleRef = core.useForkRef(optionRef, ref);
|
|
85
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
86
|
+
"aria-disabled": disabled ? "true" : void 0,
|
|
87
|
+
"aria-selected": selected,
|
|
88
|
+
className: clsx.clsx(
|
|
89
|
+
withBaseName(),
|
|
90
|
+
{
|
|
91
|
+
[withBaseName("active")]: active,
|
|
92
|
+
[withBaseName("focusVisible")]: focusVisibleState && active
|
|
93
|
+
},
|
|
94
|
+
className
|
|
95
|
+
),
|
|
96
|
+
ref: handleRef,
|
|
97
|
+
role: "option",
|
|
98
|
+
id,
|
|
99
|
+
onClick: handleClick,
|
|
100
|
+
...rest,
|
|
101
|
+
children: [
|
|
102
|
+
multiselect && /* @__PURE__ */ jsxRuntime.jsx(core.Checkbox, {
|
|
103
|
+
checked: selected,
|
|
104
|
+
"aria-hidden": "true",
|
|
105
|
+
tabIndex: -1
|
|
106
|
+
}),
|
|
107
|
+
children
|
|
108
|
+
]
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
exports.Option = Option;
|
|
113
|
+
//# sourceMappingURL=Option.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Option.js","sources":["../src/option/Option.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n ReactNode,\n MouseEvent,\n useRef,\n useEffect,\n useMemo,\n Children,\n} from \"react\";\nimport { Checkbox, makePrefixer, useForkRef, useId } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n OptionValue,\n useListControlContext,\n} from \"../list-control/ListControlContext\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport optionCss from \"./Option.css\";\n\nexport interface OptionProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * If `true`, the option will be disabled.\n */\n disabled?: boolean;\n /**\n * The value of the option.\n */\n value: string;\n /**\n * The text value of the option. If not provided, the text value will be inferred from the children.\n */\n textValue?: string;\n /**\n * The content of the option.\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltOption\");\n\nfunction getOptionText(textValue: string | undefined, children: ReactNode) {\n if (textValue) {\n return textValue;\n }\n\n let textString = \"\";\n Children.forEach(children, (child) => {\n if (typeof child === \"string\") {\n textString += child;\n }\n });\n\n return textString;\n}\n\nexport const Option = forwardRef<HTMLDivElement, OptionProps>(function Option(\n props,\n ref\n) {\n const {\n className,\n children,\n disabled,\n onClick,\n id: idProp,\n value,\n textValue,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-option\",\n css: optionCss,\n window: targetWindow,\n });\n\n const optionRef = useRef(null);\n const id = useId(idProp);\n const optionText = getOptionText(textValue, children);\n\n const {\n setActive,\n activeState,\n multiselect,\n setOpen,\n select,\n register,\n selectedState,\n focusVisibleState,\n } = useListControlContext();\n\n const selected = selectedState.includes(value);\n const active = activeState?.id === id;\n\n const optionValue: OptionValue = useMemo(\n () => ({\n id: String(id),\n disabled: Boolean(disabled),\n value,\n text: optionText,\n }),\n [id, disabled, value, optionText]\n );\n\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n if (disabled || id == undefined) {\n return;\n }\n\n // set active descendent\n setActive(optionValue);\n\n // handle selection\n select(event, optionValue);\n\n // handle close if multi-select\n if (!multiselect) {\n setOpen(event, false);\n }\n\n onClick?.(event);\n };\n\n useEffect(() => {\n if (id && optionRef.current) {\n return register(optionValue, optionRef.current);\n }\n }, [optionValue, id, register]);\n\n const handleRef = useForkRef(optionRef, ref);\n\n return (\n <div\n aria-disabled={disabled ? \"true\" : undefined}\n aria-selected={selected}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"active\")]: active,\n [withBaseName(\"focusVisible\")]: focusVisibleState && active,\n },\n className\n )}\n ref={handleRef}\n role=\"option\"\n id={id}\n onClick={handleClick}\n {...rest}\n >\n {multiselect && (\n <Checkbox checked={selected} aria-hidden=\"true\" tabIndex={-1} />\n )}\n {children}\n </div>\n );\n});\n"],"names":["makePrefixer","Children","forwardRef","Option","useWindow","useComponentCssInjection","optionCss","useRef","useId","useListControlContext","useMemo","useEffect","useForkRef","jsxs","clsx","jsx","Checkbox"],"mappings":";;;;;;;;;;;;;AAuCA,MAAM,YAAA,GAAeA,kBAAa,YAAY,CAAA,CAAA;AAE9C,SAAS,aAAA,CAAc,WAA+B,QAAqB,EAAA;AACzE,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,UAAa,GAAA,EAAA,CAAA;AACjB,EAASC,cAAA,CAAA,OAAA,CAAQ,QAAU,EAAA,CAAC,KAAU,KAAA;AACpC,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAc,UAAA,IAAA,KAAA,CAAA;AAAA,KAChB;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,UAAA,CAAA;AACT,CAAA;AAEO,MAAM,MAAS,GAAAC,gBAAA,CAAwC,SAASC,OAAAA,CACrE,OACA,GACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,EAAI,EAAA,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,SAAA;AAAA,IACG,GAAA,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,aAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAYC,aAAO,IAAI,CAAA,CAAA;AAC7B,EAAM,MAAA,EAAA,GAAKC,WAAM,MAAM,CAAA,CAAA;AACvB,EAAM,MAAA,UAAA,GAAa,aAAc,CAAA,SAAA,EAAW,QAAQ,CAAA,CAAA;AAEpD,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,MACEC,wCAAsB,EAAA,CAAA;AAE1B,EAAM,MAAA,QAAA,GAAW,aAAc,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAC7C,EAAM,MAAA,MAAA,GAAA,CAAS,2CAAa,EAAO,MAAA,EAAA,CAAA;AAEnC,EAAA,MAAM,WAA2B,GAAAC,aAAA;AAAA,IAC/B,OAAO;AAAA,MACL,EAAA,EAAI,OAAO,EAAE,CAAA;AAAA,MACb,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,MAC1B,KAAA;AAAA,MACA,IAAM,EAAA,UAAA;AAAA,KACR,CAAA;AAAA,IACA,CAAC,EAAA,EAAI,QAAU,EAAA,KAAA,EAAO,UAAU,CAAA;AAAA,GAClC,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAAsC,KAAA;AACzD,IAAI,IAAA,QAAA,IAAY,MAAM,KAAW,CAAA,EAAA;AAC/B,MAAA,OAAA;AAAA,KACF;AAGA,IAAA,SAAA,CAAU,WAAW,CAAA,CAAA;AAGrB,IAAA,MAAA,CAAO,OAAO,WAAW,CAAA,CAAA;AAGzB,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA,CAAA;AAAA,KACtB;AAEA,IAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACZ,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,EAAA,IAAM,UAAU,OAAS,EAAA;AAC3B,MAAO,OAAA,QAAA,CAAS,WAAa,EAAA,SAAA,CAAU,OAAO,CAAA,CAAA;AAAA,KAChD;AAAA,GACC,EAAA,CAAC,WAAa,EAAA,EAAA,EAAI,QAAQ,CAAC,CAAA,CAAA;AAE9B,EAAM,MAAA,SAAA,GAAYC,eAAW,CAAA,SAAA,EAAW,GAAG,CAAA,CAAA;AAE3C,EAAA,uBACGC,eAAA,CAAA,KAAA,EAAA;AAAA,IACC,eAAA,EAAe,WAAW,MAAS,GAAA,KAAA,CAAA;AAAA,IACnC,eAAe,EAAA,QAAA;AAAA,IACf,SAAW,EAAAC,SAAA;AAAA,MACT,YAAa,EAAA;AAAA,MACb;AAAA,QACE,CAAC,YAAa,CAAA,QAAQ,CAAI,GAAA,MAAA;AAAA,QAC1B,CAAC,YAAA,CAAa,cAAc,CAAA,GAAI,iBAAqB,IAAA,MAAA;AAAA,OACvD;AAAA,MACA,SAAA;AAAA,KACF;AAAA,IACA,GAAK,EAAA,SAAA;AAAA,IACL,IAAK,EAAA,QAAA;AAAA,IACL,EAAA;AAAA,IACA,OAAS,EAAA,WAAA;AAAA,IACR,GAAG,IAAA;AAAA,IAEH,QAAA,EAAA;AAAA,MAAA,WAAA,oBACEC,cAAA,CAAAC,aAAA,EAAA;AAAA,QAAS,OAAS,EAAA,QAAA;AAAA,QAAU,aAAY,EAAA,MAAA;AAAA,QAAO,QAAU,EAAA,CAAA,CAAA;AAAA,OAAI,CAAA;AAAA,MAE/D,QAAA;AAAA,KAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltOptionGroup-label {\n background: var(--salt-container-primary-background);\n color: var(--salt-text-secondary-foreground);\n font-size: var(--salt-text-label-fontSize);\n font-weight: var(--salt-text-label-fontWeight-strong);\n height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n display: flex;\n align-items: center;\n position: sticky;\n top: 0;\n z-index: 2;\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=OptionGroup.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionGroup.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var core = require('@salt-ds/core');
|
|
8
|
+
var clsx = require('clsx');
|
|
9
|
+
var window = require('@salt-ds/window');
|
|
10
|
+
var styles = require('@salt-ds/styles');
|
|
11
|
+
var OptionGroup$1 = require('./OptionGroup.css.js');
|
|
12
|
+
|
|
13
|
+
const withBaseName = core.makePrefixer("saltOptionGroup");
|
|
14
|
+
const OptionGroup = React.forwardRef(
|
|
15
|
+
function OptionGroup2(props, ref) {
|
|
16
|
+
const { className, children, label, ...rest } = props;
|
|
17
|
+
const targetWindow = window.useWindow();
|
|
18
|
+
styles.useComponentCssInjection({
|
|
19
|
+
testId: "salt-option-group",
|
|
20
|
+
css: OptionGroup$1,
|
|
21
|
+
window: targetWindow
|
|
22
|
+
});
|
|
23
|
+
const labelId = core.useId();
|
|
24
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
25
|
+
"aria-labelledby": labelId,
|
|
26
|
+
className: clsx.clsx(withBaseName(), className),
|
|
27
|
+
role: "group",
|
|
28
|
+
ref,
|
|
29
|
+
...rest,
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
32
|
+
"aria-hidden": true,
|
|
33
|
+
className: withBaseName("label"),
|
|
34
|
+
id: labelId,
|
|
35
|
+
children: label
|
|
36
|
+
}),
|
|
37
|
+
children
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
exports.OptionGroup = OptionGroup;
|
|
44
|
+
//# sourceMappingURL=OptionGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionGroup.js","sources":["../src/option/OptionGroup.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, ReactNode } from \"react\";\nimport { makePrefixer, useId } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport optionGroupCss from \"./OptionGroup.css\";\n\nexport interface OptionGroupProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The label of the option group.\n */\n label?: string;\n /**\n * Options to be rendered inside the option group.\n */\n children?: ReactNode;\n}\n\nconst withBaseName = makePrefixer(\"saltOptionGroup\");\nexport const OptionGroup = forwardRef<HTMLDivElement, OptionGroupProps>(\n function OptionGroup(props, ref) {\n const { className, children, label, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-option-group\",\n css: optionGroupCss,\n window: targetWindow,\n });\n\n const labelId = useId();\n\n return (\n <div\n aria-labelledby={labelId}\n className={clsx(withBaseName(), className)}\n role=\"group\"\n ref={ref}\n {...rest}\n >\n <div aria-hidden className={withBaseName(\"label\")} id={labelId}>\n {label}\n </div>\n {children}\n </div>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","OptionGroup","useWindow","useComponentCssInjection","optionGroupCss","useId","jsxs","clsx","jsx"],"mappings":";;;;;;;;;;;;AAkBA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA,CAAA;AAC5C,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,SAASC,YAAY,CAAA,KAAA,EAAO,GAAK,EAAA;AAC/B,IAAA,MAAM,EAAE,SAAA,EAAW,QAAU,EAAA,KAAA,EAAA,GAAU,MAAS,GAAA,KAAA,CAAA;AAEhD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,aAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,UAAUC,UAAM,EAAA,CAAA;AAEtB,IAAA,uBACGC,eAAA,CAAA,KAAA,EAAA;AAAA,MACC,iBAAiB,EAAA,OAAA;AAAA,MACjB,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,IAAK,EAAA,OAAA;AAAA,MACL,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAACC,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,aAAW,EAAA,IAAA;AAAA,UAAC,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAAG,EAAI,EAAA,OAAA;AAAA,UACpD,QAAA,EAAA,KAAA;AAAA,SACH,CAAA;AAAA,QACC,QAAA;AAAA,OAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltOptionList {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-popout);\n box-shadow: var(--salt-overlayable-shadow-popout);\n max-height: inherit;\n min-height: inherit;\n}\n\n.saltOptionList-collapsed {\n display: none;\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=OptionList.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionList.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var clsx = require('clsx');
|
|
8
|
+
var core = require('@salt-ds/core');
|
|
9
|
+
var window = require('@salt-ds/window');
|
|
10
|
+
var styles = require('@salt-ds/styles');
|
|
11
|
+
var OptionList$1 = require('./OptionList.css.js');
|
|
12
|
+
|
|
13
|
+
const withBaseName = core.makePrefixer("saltOptionList");
|
|
14
|
+
const OptionList = React.forwardRef(
|
|
15
|
+
function OptionList2(props, ref) {
|
|
16
|
+
const { children, className, collapsed, ...rest } = props;
|
|
17
|
+
const targetWindow = window.useWindow();
|
|
18
|
+
styles.useComponentCssInjection({
|
|
19
|
+
testId: "salt-option-list",
|
|
20
|
+
css: OptionList$1,
|
|
21
|
+
window: targetWindow
|
|
22
|
+
});
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
24
|
+
role: "listbox",
|
|
25
|
+
className: clsx.clsx(
|
|
26
|
+
withBaseName(),
|
|
27
|
+
{
|
|
28
|
+
[withBaseName("collapsed")]: collapsed
|
|
29
|
+
},
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
ref,
|
|
33
|
+
...rest,
|
|
34
|
+
children
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
exports.OptionList = OptionList;
|
|
40
|
+
//# sourceMappingURL=OptionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionList.js","sources":["../src/option/OptionList.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport optionListCss from \"./OptionList.css\";\n\nexport interface OptionListProps extends ComponentPropsWithoutRef<\"div\"> {\n collapsed?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltOptionList\");\n\nexport const OptionList = forwardRef<HTMLDivElement, OptionListProps>(\n function OptionList(props, ref) {\n const { children, className, collapsed, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-option-list\",\n css: optionListCss,\n window: targetWindow,\n });\n\n return (\n <div\n role=\"listbox\"\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"collapsed\")]: collapsed,\n },\n className\n )}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","OptionList","useWindow","useComponentCssInjection","optionListCss","jsx","clsx"],"mappings":";;;;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA,CAAA;AAE3C,MAAM,UAAa,GAAAC,gBAAA;AAAA,EACxB,SAASC,WAAW,CAAA,KAAA,EAAO,GAAK,EAAA;AAC9B,IAAA,MAAM,EAAE,QAAA,EAAU,SAAW,EAAA,SAAA,EAAA,GAAc,MAAS,GAAA,KAAA,CAAA;AAEpD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,kBAAA;AAAA,MACR,GAAK,EAAAC,YAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,MACC,IAAK,EAAA,SAAA;AAAA,MACL,SAAW,EAAAC,SAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb;AAAA,UACE,CAAC,YAAa,CAAA,WAAW,CAAI,GAAA,SAAA;AAAA,SAC/B;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Style applied to the root element */\n.saltScrim {\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n bottom: 0;\n height: 100%;\n display: flex;\n z-index:
|
|
3
|
+
var css_248z = "/* Style applied to the root element */\n.saltScrim {\n top: 0;\n left: 0;\n right: 0;\n width: 100%;\n bottom: 0;\n height: 100%;\n display: flex;\n z-index: calc(var(--salt-zIndex-drawer) - 1);\n position: absolute;\n align-items: center;\n justify-content: center;\n background: var(--saltScrim-background, var(--salt-overlayable-background));\n -webkit-tap-highlight-color: transparent;\n}\n\n.saltScrim:focus {\n outline: none;\n}\n\n/* Style applied to the root element when fixed={true} */\n.saltScrim-fixed {\n position: fixed;\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=Scrim.css.js.map
|
package/dist-cjs/scrim/Scrim.js
CHANGED
|
@@ -3,166 +3,36 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var ariaHidden = require('aria-hidden');
|
|
7
6
|
var clsx = require('clsx');
|
|
8
|
-
var noScroll = require('no-scroll');
|
|
9
7
|
var React = require('react');
|
|
10
8
|
var core = require('@salt-ds/core');
|
|
11
|
-
var FocusManager = require('../focus-manager/FocusManager.js');
|
|
12
|
-
var PreventFocus = require('./internal/PreventFocus.js');
|
|
13
|
-
var ScrimContext = require('./ScrimContext.js');
|
|
14
9
|
var window = require('@salt-ds/window');
|
|
15
10
|
var styles = require('@salt-ds/styles');
|
|
16
11
|
var Scrim$1 = require('./Scrim.css.js');
|
|
17
12
|
|
|
18
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
19
|
-
|
|
20
|
-
var noScroll__default = /*#__PURE__*/_interopDefaultLegacy(noScroll);
|
|
21
|
-
|
|
22
|
-
const scrims = /* @__PURE__ */ new Set();
|
|
23
|
-
const getDefaultParent = () => typeof document !== "undefined" ? document.body : null;
|
|
24
|
-
const noop = () => {
|
|
25
|
-
};
|
|
26
13
|
const withBaseName = core.makePrefixer("saltScrim");
|
|
27
|
-
function
|
|
28
|
-
if (parent) {
|
|
29
|
-
const previous = parent.style.userSelect;
|
|
30
|
-
parent.style.userSelect = "none";
|
|
31
|
-
return () => {
|
|
32
|
-
parent.style.userSelect = previous;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return noop;
|
|
36
|
-
}
|
|
37
|
-
const defaultSelector = `
|
|
38
|
-
[tabindex="0"],
|
|
39
|
-
a:not([tabindex="-1"]),
|
|
40
|
-
area:not([tabindex="-1"]),
|
|
41
|
-
details:not([tabindex="-1"]),
|
|
42
|
-
iframe:not([tabindex="-1"]),
|
|
43
|
-
select:not([tabindex="-1"]),
|
|
44
|
-
textarea:not([tabindex="-1"]),
|
|
45
|
-
button:not([tabindex="-1"]),
|
|
46
|
-
input:not([tabindex="-1"])
|
|
47
|
-
`;
|
|
48
|
-
const Scrim = React.forwardRef(function Scrim2({
|
|
49
|
-
autoFocusRef,
|
|
50
|
-
closeWithEscape = false,
|
|
51
|
-
className,
|
|
52
|
-
children,
|
|
53
|
-
disableAutoFocus,
|
|
54
|
-
disableFocusTrap,
|
|
55
|
-
disableReturnFocus,
|
|
56
|
-
fallbackFocusRef,
|
|
57
|
-
onBackDropClick,
|
|
58
|
-
onClose,
|
|
59
|
-
open,
|
|
60
|
-
containerRef,
|
|
61
|
-
enableContainerMode = false,
|
|
62
|
-
returnFocusOptions,
|
|
63
|
-
tabEnabledSelectors = defaultSelector,
|
|
64
|
-
zIndex,
|
|
65
|
-
...rest
|
|
66
|
-
}, ref) {
|
|
14
|
+
const Scrim = React.forwardRef(function Scrim2({ className, children, fixed = false, open = true, ...rest }, ref) {
|
|
67
15
|
const targetWindow = window.useWindow();
|
|
68
16
|
styles.useComponentCssInjection({
|
|
69
17
|
testId: "salt-scrim",
|
|
70
18
|
css: Scrim$1,
|
|
71
19
|
window: targetWindow
|
|
72
20
|
});
|
|
73
|
-
const scrimRef = React.useRef(null);
|
|
74
|
-
const setWrapperRef = core.useForkRef(ref, scrimRef);
|
|
75
|
-
const undoAria = React.useRef(noop);
|
|
76
|
-
const undoSelection = React.useRef(noop);
|
|
77
|
-
const undoTabIndex = React.useRef(noop);
|
|
78
|
-
const scrimId = core.useId();
|
|
79
|
-
React.useEffect(() => {
|
|
80
|
-
if (open && !(containerRef == null ? void 0 : containerRef.current)) {
|
|
81
|
-
scrims.add(scrimId);
|
|
82
|
-
noScroll__default["default"].on();
|
|
83
|
-
}
|
|
84
|
-
return () => {
|
|
85
|
-
if (open) {
|
|
86
|
-
scrims.delete(scrimId);
|
|
87
|
-
if (scrims.size === 0) {
|
|
88
|
-
noScroll__default["default"].off();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}, [open, containerRef, scrimId]);
|
|
93
|
-
React.useEffect(() => {
|
|
94
|
-
if (open) {
|
|
95
|
-
const parent = (containerRef == null ? void 0 : containerRef.current) || void 0;
|
|
96
|
-
if (scrimRef.current) {
|
|
97
|
-
undoAria.current = ariaHidden.hideOthers(scrimRef.current, parent);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return () => {
|
|
101
|
-
var _a;
|
|
102
|
-
(_a = undoAria.current) == null ? void 0 : _a.call(undoAria);
|
|
103
|
-
};
|
|
104
|
-
}, [open, containerRef]);
|
|
105
|
-
React.useEffect(() => {
|
|
106
|
-
if (open) {
|
|
107
|
-
const parent = containerRef == null ? void 0 : containerRef.current;
|
|
108
|
-
if (parent) {
|
|
109
|
-
undoSelection.current = preventSelection(parent);
|
|
110
|
-
undoTabIndex.current = PreventFocus.preventFocusOthers(
|
|
111
|
-
scrimRef.current,
|
|
112
|
-
tabEnabledSelectors,
|
|
113
|
-
parent
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return () => {
|
|
118
|
-
var _a, _b;
|
|
119
|
-
(_a = undoSelection.current) == null ? void 0 : _a.call(undoSelection);
|
|
120
|
-
(_b = undoTabIndex.current) == null ? void 0 : _b.call(undoTabIndex);
|
|
121
|
-
};
|
|
122
|
-
}, [open, containerRef, tabEnabledSelectors]);
|
|
123
|
-
React.useEffect(() => {
|
|
124
|
-
if (closeWithEscape && open && scrimRef.current) {
|
|
125
|
-
const escapeHandler = (event) => {
|
|
126
|
-
if (event.key === "Escape") {
|
|
127
|
-
onClose == null ? void 0 : onClose();
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
const doc = core.ownerDocument(scrimRef.current);
|
|
131
|
-
doc.addEventListener("keydown", escapeHandler);
|
|
132
|
-
return () => {
|
|
133
|
-
doc.removeEventListener("keydown", escapeHandler);
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
}, [closeWithEscape, onClose, open]);
|
|
137
21
|
if (!open) {
|
|
138
22
|
return null;
|
|
139
23
|
}
|
|
140
24
|
return /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
25
|
+
className: clsx.clsx(
|
|
26
|
+
withBaseName(),
|
|
27
|
+
{
|
|
28
|
+
[withBaseName("fixed")]: fixed
|
|
29
|
+
},
|
|
30
|
+
className
|
|
31
|
+
),
|
|
145
32
|
"data-testid": "scrim",
|
|
146
|
-
|
|
147
|
-
ref: setWrapperRef,
|
|
148
|
-
role: "dialog",
|
|
149
|
-
style: {
|
|
150
|
-
zIndex
|
|
151
|
-
},
|
|
33
|
+
ref,
|
|
152
34
|
...rest,
|
|
153
|
-
children
|
|
154
|
-
active: open,
|
|
155
|
-
autoFocusRef,
|
|
156
|
-
disableAutoFocus,
|
|
157
|
-
disableFocusTrap: disableFocusTrap || !!enableContainerMode,
|
|
158
|
-
disableReturnFocus,
|
|
159
|
-
returnFocusOptions,
|
|
160
|
-
tabEnabledSelectors,
|
|
161
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ScrimContext.ScrimContext.Provider, {
|
|
162
|
-
value: onClose,
|
|
163
|
-
children
|
|
164
|
-
})
|
|
165
|
-
})
|
|
35
|
+
children
|
|
166
36
|
});
|
|
167
37
|
});
|
|
168
38
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scrim.js","sources":["../src/scrim/Scrim.tsx"],"sourcesContent":["import { hideOthers } from \"aria-hidden\";\nimport { clsx } from \"clsx\";\nimport noScroll from \"no-scroll\";\nimport {\n forwardRef,\n HTMLAttributes,\n RefObject,\n SyntheticEvent,\n useEffect,\n useRef,\n} from \"react\";\nimport { makePrefixer, ownerDocument, useForkRef, useId } from \"@salt-ds/core\";\nimport { FocusManager, FocusManagerProps } from \"../focus-manager\";\nimport { preventFocusOthers } from \"./internal/PreventFocus\";\nimport { ScrimContext } from \"./ScrimContext\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport scrimCss from \"./Scrim.css\";\n\nconst scrims = new Set();\n\nconst getDefaultParent = () =>\n typeof document !== \"undefined\" ? document.body : null;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nconst withBaseName = makePrefixer(\"saltScrim\");\n\nfunction preventSelection(parent = getDefaultParent()): () => void {\n if (parent) {\n const previous = parent.style.userSelect;\n parent.style.userSelect = \"none\";\n\n return () => {\n parent.style.userSelect = previous;\n };\n }\n return noop;\n}\n\nconst defaultSelector = `\n[tabindex=\"0\"],\na:not([tabindex=\"-1\"]),\narea:not([tabindex=\"-1\"]),\ndetails:not([tabindex=\"-1\"]),\niframe:not([tabindex=\"-1\"]),\nselect:not([tabindex=\"-1\"]),\ntextarea:not([tabindex=\"-1\"]),\nbutton:not([tabindex=\"-1\"]),\ninput:not([tabindex=\"-1\"])\n`;\n\nexport interface ScrimProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Ref of the element that automatically receives focus when the Scrim is opened.\n */\n autoFocusRef?: FocusManagerProps[\"autoFocusRef\"];\n /**\n * Prop to enable escape key to close scrim.\n * The default value of this props is false\n */\n closeWithEscape?: boolean;\n /**\n * If `true`, the trap focus will not automatically shift focus to itself when it opens, and\n * replace it to the last focused element when it closes.\n */\n disableAutoFocus?: boolean;\n /**\n * If `true`, the trap focus will not prevent focus from leaving the trap focus while open.\n */\n disableFocusTrap?: boolean;\n /**\n * If `true`, the trap focus will not restore focus to previously focused element once\n * trap focus is hidden.\n */\n disableReturnFocus?: boolean;\n /**\n * By default, an error will be thrown if the focus trap contains no elements in its tab order.\n * With this option you can specify a fallback element to programmatically receive focus if no other tabbable elements are found.\n * For example, you may want a popover's `<div>` to receive focus if the popover's content includes no tabbable elements.\n */\n fallbackFocusRef?: FocusManagerProps[\"fallbackFocusRef\"];\n /**\n * The handler for backdrop click on Scrim.\n */\n onBackDropClick?: (e: SyntheticEvent) => void;\n /**\n * The handler for onClose of Scrim.\n */\n onClose?: () => void;\n /**\n * To maintain open and close of the scrim.\n */\n open?: boolean;\n /**\n * Set to true to enable the container use case. If true the Scrim will be bound to a container ref you pass via the `parentRef` prop.\n * Default value is false, and the default behavior is for Scrim to be bound to the document viewport.\n */\n enableContainerMode?: boolean;\n /**\n * Prop necessary to enable container use case. Pass the parent element ref that you want Scrim to be bound to.\n * Default value is undefined, and the default behavior is for Scrim to be bound to the document viewport.\n */\n containerRef?: RefObject<HTMLElement>;\n /**\n * Options object to pass to the `focus()` method that is called on the previously focused element when Scrim is closed.\n */\n returnFocusOptions?: FocusManagerProps[\"returnFocusOptions\"];\n /**\n * comma separated string of query selectors which may need to be overridden for edge cases.\n */\n tabEnabledSelectors?: string;\n /**\n * Prop to pass z-index for Scrim.\n */\n zIndex?: number;\n}\n\nexport const Scrim = forwardRef<HTMLDivElement, ScrimProps>(function Scrim(\n {\n autoFocusRef,\n closeWithEscape = false,\n className,\n children,\n disableAutoFocus,\n disableFocusTrap,\n disableReturnFocus,\n fallbackFocusRef,\n onBackDropClick,\n onClose,\n open,\n containerRef,\n enableContainerMode = false,\n returnFocusOptions,\n tabEnabledSelectors = defaultSelector,\n zIndex,\n ...rest\n },\n ref\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-scrim\",\n css: scrimCss,\n window: targetWindow,\n });\n\n const scrimRef = useRef<HTMLDivElement>(null);\n const setWrapperRef = useForkRef(ref, scrimRef);\n const undoAria = useRef(noop);\n const undoSelection = useRef(noop);\n const undoTabIndex = useRef(noop);\n const scrimId = useId();\n\n useEffect(() => {\n if (open && !containerRef?.current) {\n scrims.add(scrimId);\n noScroll.on();\n }\n\n return () => {\n if (open) {\n scrims.delete(scrimId);\n if (scrims.size === 0) {\n noScroll.off();\n }\n }\n };\n }, [open, containerRef, scrimId]);\n\n useEffect(() => {\n if (open) {\n const parent = containerRef?.current || undefined;\n\n if (scrimRef.current) {\n undoAria.current = hideOthers(scrimRef.current, parent);\n }\n }\n\n return () => {\n undoAria.current?.();\n };\n }, [open, containerRef]);\n\n useEffect(() => {\n if (open) {\n const parent = containerRef?.current;\n\n if (parent) {\n undoSelection.current = preventSelection(parent);\n undoTabIndex.current = preventFocusOthers(\n scrimRef.current,\n tabEnabledSelectors,\n parent\n );\n }\n }\n\n return () => {\n undoSelection.current?.();\n undoTabIndex.current?.();\n };\n }, [open, containerRef, tabEnabledSelectors]);\n\n useEffect(() => {\n if (closeWithEscape && open && scrimRef.current) {\n const escapeHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose?.();\n }\n };\n\n const doc = ownerDocument(scrimRef.current);\n doc.addEventListener(\"keydown\", escapeHandler);\n\n return () => {\n doc.removeEventListener(\"keydown\", escapeHandler);\n };\n }\n }, [closeWithEscape, onClose, open]);\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n aria-modal={!enableContainerMode}\n className={clsx(className, withBaseName(), {\n [withBaseName(\"containerFix\")]: enableContainerMode,\n })}\n data-testid=\"scrim\"\n onClick={onBackDropClick}\n ref={setWrapperRef}\n role=\"dialog\"\n style={{\n zIndex,\n }}\n {...rest}\n >\n <FocusManager\n active={open}\n autoFocusRef={autoFocusRef}\n disableAutoFocus={disableAutoFocus}\n disableFocusTrap={disableFocusTrap || !!enableContainerMode}\n disableReturnFocus={disableReturnFocus}\n returnFocusOptions={returnFocusOptions}\n tabEnabledSelectors={tabEnabledSelectors}\n >\n <ScrimContext.Provider value={onClose}>\n {children}\n </ScrimContext.Provider>\n </FocusManager>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","Scrim","useWindow","useComponentCssInjection","scrimCss","useRef","useForkRef","useId","useEffect","noScroll","hideOthers","preventFocusOthers","ownerDocument","jsx","clsx","FocusManager","ScrimContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,MAAA,uBAAa,GAAI,EAAA,CAAA;AAEvB,MAAM,mBAAmB,MACvB,OAAO,QAAa,KAAA,WAAA,GAAc,SAAS,IAAO,GAAA,IAAA,CAAA;AAGpD,MAAM,OAAO,MAAM;AAAC,CAAA,CAAA;AAEpB,MAAM,YAAA,GAAeA,kBAAa,WAAW,CAAA,CAAA;AAE7C,SAAS,gBAAA,CAAiB,MAAS,GAAA,gBAAA,EAAgC,EAAA;AACjE,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,QAAA,GAAW,OAAO,KAAM,CAAA,UAAA,CAAA;AAC9B,IAAA,MAAA,CAAO,MAAM,UAAa,GAAA,MAAA,CAAA;AAE1B,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,MAAM,UAAa,GAAA,QAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,MAAM,eAAkB,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AA8EX,MAAA,KAAA,GAAQC,gBAAuC,CAAA,SAASC,MACnE,CAAA;AAAA,EACE,YAAA;AAAA,EACA,eAAkB,GAAA,KAAA;AAAA,EAClB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,mBAAsB,GAAA,KAAA;AAAA,EACtB,kBAAA;AAAA,EACA,mBAAsB,GAAA,eAAA;AAAA,EACtB,MAAA;AAAA,EACG,GAAA,IAAA;AACL,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,YAAA;AAAA,IACR,GAAK,EAAAC,OAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAWC,aAAuB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,aAAA,GAAgBC,eAAW,CAAA,GAAA,EAAK,QAAQ,CAAA,CAAA;AAC9C,EAAM,MAAA,QAAA,GAAWD,aAAO,IAAI,CAAA,CAAA;AAC5B,EAAM,MAAA,aAAA,GAAgBA,aAAO,IAAI,CAAA,CAAA;AACjC,EAAM,MAAA,YAAA,GAAeA,aAAO,IAAI,CAAA,CAAA;AAChC,EAAA,MAAM,UAAUE,UAAM,EAAA,CAAA;AAEtB,EAAAC,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,IAAA,IAAQ,EAAC,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAc,OAAS,CAAA,EAAA;AAClC,MAAA,MAAA,CAAO,IAAI,OAAO,CAAA,CAAA;AAClB,MAAAC,4BAAA,CAAS,EAAG,EAAA,CAAA;AAAA,KACd;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,MAAA,CAAO,OAAO,OAAO,CAAA,CAAA;AACrB,QAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,UAAAA,4BAAA,CAAS,GAAI,EAAA,CAAA;AAAA,SACf;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,YAAA,EAAc,OAAO,CAAC,CAAA,CAAA;AAEhC,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAM,EAAA;AACR,MAAM,MAAA,MAAA,GAAA,CAAS,6CAAc,OAAW,KAAA,KAAA,CAAA,CAAA;AAExC,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,QAAA,CAAS,OAAU,GAAAE,qBAAA,CAAW,QAAS,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAAA,OACxD;AAAA,KACF;AAEA,IAAA,OAAO,MAAM;AAtLjB,MAAA,IAAA,EAAA,CAAA;AAuLM,MAAA,CAAA,EAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,YAAY,CAAC,CAAA,CAAA;AAEvB,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAM,SAAS,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,OAAA,CAAA;AAE7B,MAAA,IAAI,MAAQ,EAAA;AACV,QAAc,aAAA,CAAA,OAAA,GAAU,iBAAiB,MAAM,CAAA,CAAA;AAC/C,QAAA,YAAA,CAAa,OAAU,GAAAG,+BAAA;AAAA,UACrB,QAAS,CAAA,OAAA;AAAA,UACT,mBAAA;AAAA,UACA,MAAA;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,OAAO,MAAM;AAzMjB,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA0MM,MAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CAAA;AACA,MAAA,CAAA,EAAA,GAAA,YAAA,CAAa,OAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,YAAA,CAAA,CAAA;AAAA,KACF,CAAA;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,YAAA,EAAc,mBAAmB,CAAC,CAAA,CAAA;AAE5C,EAAAH,eAAA,CAAU,MAAM;AACd,IAAI,IAAA,eAAA,IAAmB,IAAQ,IAAA,QAAA,CAAS,OAAS,EAAA;AAC/C,MAAM,MAAA,aAAA,GAAgB,CAAC,KAAyB,KAAA;AAC9C,QAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,UAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,EAAA,CAAA;AAAA,SACF;AAAA,OACF,CAAA;AAEA,MAAM,MAAA,GAAA,GAAMI,kBAAc,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAC1C,MAAI,GAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA,CAAA;AAE7C,MAAA,OAAO,MAAM;AACX,QAAI,GAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA,CAAA;AAAA,OAClD,CAAA;AAAA,KACF;AAAA,GACC,EAAA,CAAC,eAAiB,EAAA,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA;AAEnC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IACC,cAAY,CAAC,mBAAA;AAAA,IACb,SAAW,EAAAC,SAAA,CAAK,SAAW,EAAA,YAAA,EAAgB,EAAA;AAAA,MACzC,CAAC,YAAa,CAAA,cAAc,CAAI,GAAA,mBAAA;AAAA,KACjC,CAAA;AAAA,IACD,aAAY,EAAA,OAAA;AAAA,IACZ,OAAS,EAAA,eAAA;AAAA,IACT,GAAK,EAAA,aAAA;AAAA,IACL,IAAK,EAAA,QAAA;AAAA,IACL,KAAO,EAAA;AAAA,MACL,MAAA;AAAA,KACF;AAAA,IACC,GAAG,IAAA;AAAA,IAEJ,QAAC,kBAAAD,cAAA,CAAAE,yBAAA,EAAA;AAAA,MACC,MAAQ,EAAA,IAAA;AAAA,MACR,YAAA;AAAA,MACA,gBAAA;AAAA,MACA,gBAAA,EAAkB,gBAAoB,IAAA,CAAC,CAAC,mBAAA;AAAA,MACxC,kBAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MAEA,QAAA,kBAAAF,cAAA,CAACG,0BAAa,QAAb,EAAA;AAAA,QAAsB,KAAO,EAAA,OAAA;AAAA,QAC3B,QAAA;AAAA,OACH,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"Scrim.js","sources":["../src/scrim/Scrim.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\n\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport scrimCss from \"./Scrim.css\";\n\nconst withBaseName = makePrefixer(\"saltScrim\");\n\nexport interface ScrimProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * If `true` the scrim is bound to the document viewport.\n * The default value of this prop is false, and the default behavior is for Scrim to be bound to its parent container (nearest positioned ancestor).\n */\n fixed?: boolean;\n /**\n * If `true` the scrim is shown.\n */\n open?: boolean;\n}\n\nexport const Scrim = forwardRef<HTMLDivElement, ScrimProps>(function Scrim(\n { className, children, fixed = false, open = true, ...rest },\n ref\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-scrim\",\n css: scrimCss,\n window: targetWindow,\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"fixed\")]: fixed,\n },\n className\n )}\n data-testid=\"scrim\"\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","Scrim","useWindow","useComponentCssInjection","scrimCss","jsx","clsx"],"mappings":";;;;;;;;;;;;AASA,MAAM,YAAA,GAAeA,kBAAa,WAAW,CAAA,CAAA;AActC,MAAM,KAAQ,GAAAC,gBAAA,CAAuC,SAASC,MAAAA,CACnE,EAAE,SAAA,EAAW,QAAU,EAAA,KAAA,GAAQ,KAAO,EAAA,IAAA,GAAO,IAAS,EAAA,GAAA,IAAA,IACtD,GACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,YAAA;AAAA,IACR,GAAK,EAAAC,OAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IACC,SAAW,EAAAC,SAAA;AAAA,MACT,YAAa,EAAA;AAAA,MACb;AAAA,QACE,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,KAAA;AAAA,OAC3B;AAAA,MACA,SAAA;AAAA,KACF;AAAA,IACA,aAAY,EAAA,OAAA;AAAA,IACZ,GAAA;AAAA,IACC,GAAG,IAAA;AAAA,IAEH,QAAA;AAAA,GACH,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -7,9 +7,7 @@ var clsx = require('clsx');
|
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var core = require('@salt-ds/core');
|
|
9
9
|
var useWidth = require('./useWidth.js');
|
|
10
|
-
var
|
|
11
|
-
require('../../pill/ClosablePill.js');
|
|
12
|
-
require('../../pill/SelectablePill.js');
|
|
10
|
+
var icons = require('@salt-ds/icons');
|
|
13
11
|
|
|
14
12
|
const withBaseName = core.makePrefixer("saltInputPill");
|
|
15
13
|
const InputPill = React.memo(function InputPill2(props) {
|
|
@@ -20,10 +18,10 @@ const InputPill = React.memo(function InputPill2(props) {
|
|
|
20
18
|
hidden,
|
|
21
19
|
highlighted,
|
|
22
20
|
index,
|
|
21
|
+
label,
|
|
23
22
|
lastVisible,
|
|
24
23
|
onDelete,
|
|
25
24
|
pillsRef,
|
|
26
|
-
tabIndex: tabIndexProp,
|
|
27
25
|
...restProps
|
|
28
26
|
} = props;
|
|
29
27
|
const ref = React.useRef(null);
|
|
@@ -42,7 +40,7 @@ const InputPill = React.memo(function InputPill2(props) {
|
|
|
42
40
|
const handleDelete = () => {
|
|
43
41
|
onDelete == null ? void 0 : onDelete(index);
|
|
44
42
|
};
|
|
45
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
43
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(core.Pill, {
|
|
46
44
|
className: clsx.clsx(
|
|
47
45
|
withBaseName(),
|
|
48
46
|
{
|
|
@@ -53,12 +51,18 @@ const InputPill = React.memo(function InputPill2(props) {
|
|
|
53
51
|
className
|
|
54
52
|
),
|
|
55
53
|
disabled,
|
|
56
|
-
|
|
54
|
+
tabIndex: -1,
|
|
55
|
+
onClick: isRemovable ? handleDelete : void 0,
|
|
57
56
|
ref,
|
|
58
57
|
role: "option",
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
...restProps,
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
61
|
+
className: withBaseName("label"),
|
|
62
|
+
children: label
|
|
63
|
+
}),
|
|
64
|
+
isRemovable && /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, {})
|
|
65
|
+
]
|
|
62
66
|
});
|
|
63
67
|
});
|
|
64
68
|
|