@salt-ds/core 1.72.0 → 1.73.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/CHANGELOG.md +122 -0
- package/css/salt-core.css +265 -120
- package/dist-cjs/accordion/AccordionHeader.css.js +1 -1
- package/dist-cjs/border-layout/BorderLayout.js.map +1 -1
- package/dist-cjs/breadcrumbs/Breadcrumb.js +5 -6
- package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-cjs/button/Button.css.js +1 -1
- package/dist-cjs/card/CardContent.css.js +1 -1
- package/dist-cjs/card/hasCardSection.js +11 -3
- package/dist-cjs/card/hasCardSection.js.map +1 -1
- package/dist-cjs/checkbox/CheckboxIcon.js.map +1 -1
- package/dist-cjs/collapsible/CollapsiblePanel.css.js +1 -1
- package/dist-cjs/collapsible/CollapsiblePanel.js +15 -15
- package/dist-cjs/collapsible/CollapsiblePanel.js.map +1 -1
- package/dist-cjs/combo-box/ComboBox.js.map +1 -1
- package/dist-cjs/dialog/DialogHeader.js +2 -0
- package/dist-cjs/dialog/DialogHeader.js.map +1 -1
- package/dist-cjs/drawer/DrawerHeader.js +2 -0
- package/dist-cjs/drawer/DrawerHeader.js.map +1 -1
- package/dist-cjs/dropdown/Dropdown.css.js +1 -1
- package/dist-cjs/dropdown/Dropdown.js +1 -1
- package/dist-cjs/dropdown/Dropdown.js.map +1 -1
- package/dist-cjs/form-field/FormField.js +2 -2
- package/dist-cjs/form-field/FormField.js.map +1 -1
- package/dist-cjs/form-field/FormFieldHelperText.js +2 -0
- package/dist-cjs/form-field/FormFieldHelperText.js.map +1 -1
- package/dist-cjs/form-field/FormFieldLabel.css.js +1 -1
- package/dist-cjs/form-field/FormFieldLabel.js +2 -0
- package/dist-cjs/form-field/FormFieldLabel.js.map +1 -1
- package/dist-cjs/form-field-context/FormFieldContext.js.map +1 -1
- package/dist-cjs/index.js +11 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/input/Input.css.js +1 -1
- package/dist-cjs/link/Link.js +2 -0
- package/dist-cjs/link/Link.js.map +1 -1
- package/dist-cjs/link/LinkAction.js +3 -2
- package/dist-cjs/link/LinkAction.js.map +1 -1
- package/dist-cjs/link-button/LinkButton.js +3 -2
- package/dist-cjs/link-button/LinkButton.js.map +1 -1
- package/dist-cjs/list-box/ListBox.js +1 -1
- package/dist-cjs/list-box/ListBox.js.map +1 -1
- package/dist-cjs/list-control/ListControlContext.js.map +1 -1
- package/dist-cjs/list-control/ListControlOptionContext.js.map +1 -1
- package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +1 -1
- package/dist-cjs/mega-menu/MegaMenuListItem.css.js +1 -1
- package/dist-cjs/menu/MenuGroup.css.js +1 -1
- package/dist-cjs/multiline-input/MultilineInput.css.js +1 -1
- package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
- package/dist-cjs/number-input/NumberInput.css.js +1 -1
- package/dist-cjs/on-solid-button/OnSolidButton.css.js +6 -0
- package/dist-cjs/on-solid-button/OnSolidButton.css.js.map +1 -0
- package/dist-cjs/on-solid-button/OnSolidButton.js +68 -0
- package/dist-cjs/on-solid-button/OnSolidButton.js.map +1 -0
- package/dist-cjs/option/Option.css.js +1 -1
- package/dist-cjs/option/Option.js +7 -1
- package/dist-cjs/option/Option.js.map +1 -1
- package/dist-cjs/option/OptionGroup.css.js +1 -1
- package/dist-cjs/overlay/OverlayHeader.js +2 -0
- package/dist-cjs/overlay/OverlayHeader.js.map +1 -1
- package/dist-cjs/overlay/OverlayPanelCloseButton.js +1 -1
- package/dist-cjs/overlay/OverlayPanelCloseButton.js.map +1 -1
- package/dist-cjs/pagination/CompactPaginator.js +2 -0
- package/dist-cjs/pagination/CompactPaginator.js.map +1 -1
- package/dist-cjs/pagination/GoToInput.js +2 -0
- package/dist-cjs/pagination/GoToInput.js.map +1 -1
- package/dist-cjs/pill/PillCheckIcon.js.map +1 -1
- package/dist-cjs/pill-input/PillInput.css.js +1 -1
- package/dist-cjs/progress/CircularProgress/CircularProgress.js +2 -0
- package/dist-cjs/progress/CircularProgress/CircularProgress.js.map +1 -1
- package/dist-cjs/progress/LinearProgress/LinearProgress.js +2 -0
- package/dist-cjs/progress/LinearProgress/LinearProgress.js.map +1 -1
- package/dist-cjs/salt-provider/ThemeApplicator.js +10 -6
- package/dist-cjs/salt-provider/ThemeApplicator.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelTitle.js +2 -0
- package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -1
- package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -1
- package/dist-cjs/side-panel/internal/useIsScrollable.js.map +1 -1
- package/dist-cjs/side-panel/useSidePanel.js +4 -9
- package/dist-cjs/side-panel/useSidePanel.js.map +1 -1
- package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js +2 -2
- package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js.map +1 -1
- package/dist-cjs/slider/internal/SliderThumb.js.map +1 -1
- package/dist-cjs/slider/internal/SliderTooltip.js +2 -0
- package/dist-cjs/slider/internal/SliderTooltip.js.map +1 -1
- package/dist-cjs/slider/internal/SliderTrack.js +2 -0
- package/dist-cjs/slider/internal/SliderTrack.js.map +1 -1
- package/dist-cjs/slider/internal/useRangeSliderThumb.js.map +1 -1
- package/dist-cjs/slider/internal/useSliderThumb.js.map +1 -1
- package/dist-cjs/slider/internal/utils.js.map +1 -1
- package/dist-cjs/stepper/Stepper.js +1 -1
- package/dist-cjs/stepper/Stepper.js.map +1 -1
- package/dist-cjs/stepper/internal/StepText.css.js +1 -1
- package/dist-cjs/stepper/internal/StepText.js +2 -0
- package/dist-cjs/stepper/internal/StepText.js.map +1 -1
- package/dist-cjs/table/Table.css.js +1 -1
- package/dist-cjs/tabs/Tabs.js +1 -1
- package/dist-cjs/tabs/Tabs.js.map +1 -1
- package/dist-cjs/tabs/internal/overflow/useOverflow.js.map +1 -1
- package/dist-cjs/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -1
- package/dist-cjs/text/Code.js +1 -1
- package/dist-cjs/text/Code.js.map +1 -1
- package/dist-cjs/text/Editorial.js +32 -0
- package/dist-cjs/text/Editorial.js.map +1 -0
- package/dist-cjs/text/Eyebrow.js +12 -0
- package/dist-cjs/text/Eyebrow.js.map +1 -0
- package/dist-cjs/text/Text.css.js +1 -1
- package/dist-cjs/text/Text.js +6 -2
- package/dist-cjs/text/Text.js.map +1 -1
- package/dist-cjs/toggle-button/ToggleButton.js.map +1 -1
- package/dist-cjs/toolbar/ToolbarOverflow.js +8 -4
- package/dist-cjs/toolbar/ToolbarOverflow.js.map +1 -1
- package/dist-cjs/toolbar/toolbarUtils.js.map +1 -1
- package/dist-cjs/tooltip/useAriaAnnounce.js +4 -2
- package/dist-cjs/tooltip/useAriaAnnounce.js.map +1 -1
- package/dist-cjs/tooltip/useTooltip.js.map +1 -1
- package/dist-cjs/tree/TreeContext.js.map +1 -1
- package/dist-cjs/utils/forkRef.js +34 -0
- package/dist-cjs/utils/forkRef.js.map +1 -0
- package/dist-cjs/utils/getRefFromChildren.js.map +1 -1
- package/dist-cjs/utils/marginMiddleware.js.map +1 -1
- package/dist-cjs/utils/setRef.js.map +1 -1
- package/dist-cjs/utils/useFloatingUI/useFloatingUI.js.map +1 -1
- package/dist-cjs/utils/useForkRef.js +3 -6
- package/dist-cjs/utils/useForkRef.js.map +1 -1
- package/dist-cjs/utils/useResizeObserver.js.map +1 -1
- package/dist-cjs/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
- package/dist-es/accordion/AccordionHeader.css.js +1 -1
- package/dist-es/border-layout/BorderLayout.js.map +1 -1
- package/dist-es/breadcrumbs/Breadcrumb.js +5 -6
- package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-es/button/Button.css.js +1 -1
- package/dist-es/card/CardContent.css.js +1 -1
- package/dist-es/card/hasCardSection.js +11 -3
- package/dist-es/card/hasCardSection.js.map +1 -1
- package/dist-es/checkbox/CheckboxIcon.js.map +1 -1
- package/dist-es/collapsible/CollapsiblePanel.css.js +1 -1
- package/dist-es/collapsible/CollapsiblePanel.js +16 -16
- package/dist-es/collapsible/CollapsiblePanel.js.map +1 -1
- package/dist-es/combo-box/ComboBox.js.map +1 -1
- package/dist-es/dialog/DialogHeader.js +2 -0
- package/dist-es/dialog/DialogHeader.js.map +1 -1
- package/dist-es/drawer/DrawerHeader.js +2 -0
- package/dist-es/drawer/DrawerHeader.js.map +1 -1
- package/dist-es/dropdown/Dropdown.css.js +1 -1
- package/dist-es/dropdown/Dropdown.js +1 -1
- package/dist-es/dropdown/Dropdown.js.map +1 -1
- package/dist-es/form-field/FormField.js +2 -2
- package/dist-es/form-field/FormField.js.map +1 -1
- package/dist-es/form-field/FormFieldHelperText.js +2 -0
- package/dist-es/form-field/FormFieldHelperText.js.map +1 -1
- package/dist-es/form-field/FormFieldLabel.css.js +1 -1
- package/dist-es/form-field/FormFieldLabel.js +2 -0
- package/dist-es/form-field/FormFieldLabel.js.map +1 -1
- package/dist-es/form-field-context/FormFieldContext.js.map +1 -1
- package/dist-es/index.js +3 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/input/Input.css.js +1 -1
- package/dist-es/link/Link.js +2 -0
- package/dist-es/link/Link.js.map +1 -1
- package/dist-es/link/LinkAction.js +3 -2
- package/dist-es/link/LinkAction.js.map +1 -1
- package/dist-es/link-button/LinkButton.js +3 -2
- package/dist-es/link-button/LinkButton.js.map +1 -1
- package/dist-es/list-box/ListBox.js +1 -1
- package/dist-es/list-box/ListBox.js.map +1 -1
- package/dist-es/list-control/ListControlContext.js.map +1 -1
- package/dist-es/list-control/ListControlOptionContext.js.map +1 -1
- package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +1 -1
- package/dist-es/mega-menu/MegaMenuListItem.css.js +1 -1
- package/dist-es/menu/MenuGroup.css.js +1 -1
- package/dist-es/multiline-input/MultilineInput.css.js +1 -1
- package/dist-es/navigation-item/NavigationItem.css.js +1 -1
- package/dist-es/number-input/NumberInput.css.js +1 -1
- package/dist-es/on-solid-button/OnSolidButton.css.js +4 -0
- package/dist-es/on-solid-button/OnSolidButton.css.js.map +1 -0
- package/dist-es/on-solid-button/OnSolidButton.js +66 -0
- package/dist-es/on-solid-button/OnSolidButton.js.map +1 -0
- package/dist-es/option/Option.css.js +1 -1
- package/dist-es/option/Option.js +7 -1
- package/dist-es/option/Option.js.map +1 -1
- package/dist-es/option/OptionGroup.css.js +1 -1
- package/dist-es/overlay/OverlayHeader.js +2 -0
- package/dist-es/overlay/OverlayHeader.js.map +1 -1
- package/dist-es/overlay/OverlayPanelCloseButton.js +1 -1
- package/dist-es/overlay/OverlayPanelCloseButton.js.map +1 -1
- package/dist-es/pagination/CompactPaginator.js +2 -0
- package/dist-es/pagination/CompactPaginator.js.map +1 -1
- package/dist-es/pagination/GoToInput.js +2 -0
- package/dist-es/pagination/GoToInput.js.map +1 -1
- package/dist-es/pill/PillCheckIcon.js.map +1 -1
- package/dist-es/pill-input/PillInput.css.js +1 -1
- package/dist-es/progress/CircularProgress/CircularProgress.js +2 -0
- package/dist-es/progress/CircularProgress/CircularProgress.js.map +1 -1
- package/dist-es/progress/LinearProgress/LinearProgress.js +2 -0
- package/dist-es/progress/LinearProgress/LinearProgress.js.map +1 -1
- package/dist-es/salt-provider/ThemeApplicator.js +10 -6
- package/dist-es/salt-provider/ThemeApplicator.js.map +1 -1
- package/dist-es/side-panel/SidePanelTitle.js +2 -0
- package/dist-es/side-panel/SidePanelTitle.js.map +1 -1
- package/dist-es/side-panel/SidePanelTrigger.js.map +1 -1
- package/dist-es/side-panel/internal/useIsScrollable.js.map +1 -1
- package/dist-es/side-panel/useSidePanel.js +4 -9
- package/dist-es/side-panel/useSidePanel.js.map +1 -1
- package/dist-es/skip-link/internal/useManageFocusOnTarget.js +2 -2
- package/dist-es/skip-link/internal/useManageFocusOnTarget.js.map +1 -1
- package/dist-es/slider/internal/SliderThumb.js.map +1 -1
- package/dist-es/slider/internal/SliderTooltip.js +2 -0
- package/dist-es/slider/internal/SliderTooltip.js.map +1 -1
- package/dist-es/slider/internal/SliderTrack.js +2 -0
- package/dist-es/slider/internal/SliderTrack.js.map +1 -1
- package/dist-es/slider/internal/useRangeSliderThumb.js.map +1 -1
- package/dist-es/slider/internal/useSliderThumb.js.map +1 -1
- package/dist-es/slider/internal/utils.js.map +1 -1
- package/dist-es/stepper/Stepper.js +1 -1
- package/dist-es/stepper/Stepper.js.map +1 -1
- package/dist-es/stepper/internal/StepText.css.js +1 -1
- package/dist-es/stepper/internal/StepText.js +2 -0
- package/dist-es/stepper/internal/StepText.js.map +1 -1
- package/dist-es/table/Table.css.js +1 -1
- package/dist-es/tabs/Tabs.js +1 -1
- package/dist-es/tabs/Tabs.js.map +1 -1
- package/dist-es/tabs/internal/overflow/useOverflow.js.map +1 -1
- package/dist-es/tabs/internal/overflow/useRenderedTabWidth.js.map +1 -1
- package/dist-es/text/Code.js +1 -1
- package/dist-es/text/Code.js.map +1 -1
- package/dist-es/text/Editorial.js +25 -0
- package/dist-es/text/Editorial.js.map +1 -0
- package/dist-es/text/Eyebrow.js +10 -0
- package/dist-es/text/Eyebrow.js.map +1 -0
- package/dist-es/text/Text.css.js +1 -1
- package/dist-es/text/Text.js +6 -2
- package/dist-es/text/Text.js.map +1 -1
- package/dist-es/toggle-button/ToggleButton.js.map +1 -1
- package/dist-es/toolbar/ToolbarOverflow.js +8 -4
- package/dist-es/toolbar/ToolbarOverflow.js.map +1 -1
- package/dist-es/toolbar/toolbarUtils.js.map +1 -1
- package/dist-es/tooltip/useAriaAnnounce.js +4 -2
- package/dist-es/tooltip/useAriaAnnounce.js.map +1 -1
- package/dist-es/tooltip/useTooltip.js.map +1 -1
- package/dist-es/tree/TreeContext.js.map +1 -1
- package/dist-es/utils/forkRef.js +32 -0
- package/dist-es/utils/forkRef.js.map +1 -0
- package/dist-es/utils/getRefFromChildren.js.map +1 -1
- package/dist-es/utils/marginMiddleware.js.map +1 -1
- package/dist-es/utils/setRef.js.map +1 -1
- package/dist-es/utils/useFloatingUI/useFloatingUI.js.map +1 -1
- package/dist-es/utils/useForkRef.js +3 -6
- package/dist-es/utils/useForkRef.js.map +1 -1
- package/dist-es/utils/useResizeObserver.js.map +1 -1
- package/dist-es/vertical-navigation/VerticalNavigationSubMenu.css.js +1 -1
- package/dist-types/checkbox/CheckboxIcon.d.ts +2 -1
- package/dist-types/collapsible/CollapsiblePanel.d.ts +8 -1
- package/dist-types/combo-box/ComboBox.d.ts +2 -2
- package/dist-types/dropdown/Dropdown.d.ts +2 -2
- package/dist-types/form-field/FormFieldHelperText.d.ts +1 -1
- package/dist-types/form-field/FormFieldLabel.d.ts +1 -1
- package/dist-types/form-field-context/FormFieldContext.d.ts +1 -1
- package/dist-types/index.d.ts +1 -0
- package/dist-types/list-box/ListBox.d.ts +2 -2
- package/dist-types/list-control/ListControlContext.d.ts +1 -1
- package/dist-types/list-control/ListControlOptionContext.d.ts +1 -1
- package/dist-types/on-solid-button/OnSolidButton.d.ts +12 -0
- package/dist-types/on-solid-button/index.d.ts +1 -0
- package/dist-types/pill/PillCheckIcon.d.ts +2 -1
- package/dist-types/registerClassNameInjection.d.ts +0 -2
- package/dist-types/salt-provider/SaltProvider.d.ts +1 -1
- package/dist-types/side-panel/internal/useIsScrollable.d.ts +1 -1
- package/dist-types/skip-link/internal/useManageFocusOnTarget.d.ts +1 -1
- package/dist-types/slider/internal/SliderThumb.d.ts +2 -2
- package/dist-types/slider/internal/SliderTrack.d.ts +2 -2
- package/dist-types/slider/internal/useRangeSliderThumb.d.ts +1 -1
- package/dist-types/slider/internal/useSliderThumb.d.ts +1 -1
- package/dist-types/slider/internal/utils.d.ts +1 -1
- package/dist-types/tabs/internal/overflow/useOverflow.d.ts +2 -2
- package/dist-types/tabs/internal/overflow/useRenderedTabWidth.d.ts +1 -1
- package/dist-types/text/Editorial.d.ts +7 -0
- package/dist-types/text/Eyebrow.d.ts +2 -0
- package/dist-types/text/Text.d.ts +9 -2
- package/dist-types/text/index.d.ts +2 -0
- package/dist-types/toggle-button/ToggleButton.d.ts +1 -1
- package/dist-types/tooltip/useTooltip.d.ts +12 -26
- package/dist-types/tree/TreeContext.d.ts +1 -1
- package/dist-types/utils/forkRef.d.ts +11 -0
- package/dist-types/utils/inferElementType.d.ts +1 -2
- package/dist-types/utils/marginMiddleware.d.ts +1 -1
- package/dist-types/utils/setRef.d.ts +4 -0
- package/dist-types/utils/useFloatingUI/useFloatingUI.d.ts +1 -5
- package/dist-types/utils/useResizeObserver.d.ts +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Editorial.js","sources":["../src/text/Editorial.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { Text, type TextProps } from \"./Text\";\n\nexport const Editorial1 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial1({ children, styleAs = \"editorial1\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n\nexport const Editorial2 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial2({ children, styleAs = \"editorial2\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n\nexport const Editorial3 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial3({ children, styleAs = \"editorial3\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n\nexport const Editorial4 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial4({ children, styleAs = \"editorial4\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n\nexport const Editorial5 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial5({ children, styleAs = \"editorial5\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n\nexport const Editorial6 = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Editorial6({ children, styleAs = \"editorial6\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n"],"names":["forwardRef","Editorial1","jsx","Text","Editorial2","Editorial3","Editorial4","Editorial5","Editorial6"],"mappings":";;;;;;AAGO,MAAM,UAAA,GAAaA,gBAAA,CAGxB,SAASC,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEC,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;AAEM,MAAM,UAAA,GAAaH,gBAAA,CAGxB,SAASI,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEF,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;AAEM,MAAM,UAAA,GAAaH,gBAAA,CAGxB,SAASK,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEH,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;AAEM,MAAM,UAAA,GAAaH,gBAAA,CAGxB,SAASM,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEJ,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;AAEM,MAAM,UAAA,GAAaH,gBAAA,CAGxB,SAASO,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEL,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;AAEM,MAAM,UAAA,GAAaH,gBAAA,CAGxB,SAASQ,WAAAA,CAAW,EAAE,QAAA,EAAU,OAAA,GAAU,YAAA,EAAc,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACxE,EAAA,uBACEN,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;;;;;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var Text = require('./Text.js');
|
|
6
|
+
|
|
7
|
+
const Eyebrow = React.forwardRef(function Eyebrow2({ children, styleAs = "eyebrow", ...rest }, ref) {
|
|
8
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "span", styleAs, ref, ...rest, children });
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
exports.Eyebrow = Eyebrow;
|
|
12
|
+
//# sourceMappingURL=Eyebrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Eyebrow.js","sources":["../src/text/Eyebrow.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { Text, type TextProps } from \"./Text\";\n\nexport const Eyebrow = forwardRef<\n HTMLSpanElement,\n Omit<TextProps<\"span\">, \"as\">\n>(function Eyebrow({ children, styleAs = \"eyebrow\", ...rest }, ref) {\n return (\n <Text as=\"span\" styleAs={styleAs} ref={ref} {...rest}>\n {children}\n </Text>\n );\n});\n"],"names":["forwardRef","Eyebrow","jsx","Text"],"mappings":";;;;;;AAGO,MAAM,OAAA,GAAUA,gBAAA,CAGrB,SAASC,QAAAA,CAAQ,EAAE,QAAA,EAAU,OAAA,GAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAClE,EAAA,uBACEC,cAAA,CAACC,aAAK,EAAA,EAAG,MAAA,EAAO,SAAkB,GAAA,EAAW,GAAG,MAC7C,QAAA,EACH,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".saltText {\n --text-color: currentColor;\n}\n\n/* Main css class. Style for body text */\n.saltText {\n color: var(--saltText-color, var(--text-color));\n font-family: var(--saltText-fontFamily, var(--salt-text-fontFamily));\n font-size: var(--saltText-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltText-lineHeight, var(--salt-text-lineHeight));\n font-weight: var(--saltText-fontWeight, var(--salt-text-fontWeight));\n letter-spacing: var(--salt-text-letterSpacing);\n}\n\n/* Allows truncation */\n.saltText-lineClamp {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--text-max-rows, 0);\n overflow: hidden;\n word-break: break-word;\n}\n\n/* Primary variant */\n.saltText-primary {\n --text-color: var(--salt-content-primary-foreground);\n}\n\n/* Disabled primary variant */\n.saltText-primary.saltText-disabled {\n --text-color: var(--salt-content-primary-foreground-disabled);\n}\n\n/* Secondary variant */\n.saltText-secondary {\n --text-color: var(--salt-content-secondary-foreground);\n}\n\n/* Disabled secondary variant */\n.saltText-secondary.saltText-disabled {\n --text-color: var(--salt-content-secondary-foreground-disabled);\n}\n\n/* Info color */\n.saltText-info {\n --text-color: var(--salt-status-info-foreground-informative);\n}\n\n/* Error color */\n.saltText-error {\n --text-color: var(--salt-status-error-foreground-informative);\n}\n\n/* Warning color */\n.saltText-warning {\n --text-color: var(--salt-status-warning-foreground-informative);\n}\n\n/* Success color */\n.saltText-success {\n --text-color: var(--salt-status-success-foreground-informative);\n}\n\n/* Body emphasis strong */\n.saltText strong {\n font-weight: var(--salt-text-fontWeight-strong);\n}\n\n/* Body emphasis small */\n.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Notation */\n.saltText-notation.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-notation-fontSize);\n line-height: var(--salt-text-notation-lineHeight);\n font-weight: var(--salt-text-fontWeight);\n}\n\n/* Notation emphasis strong */\n.saltText-notation.saltText strong {\n font-weight: var(--salt-text-notation-fontWeight-strong);\n}\n\n/* Notation emphasis small */\n.saltText-notation.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-notation-fontWeight-small);\n}\n\n/* Action */\n.saltText-action.saltText {\n font-family: var(--salt-text-action-fontFamily);\n letter-spacing: var(--salt-text-action-letterSpacing);\n text-transform: var(--salt-text-action-textTransform);\n text-align: var(--salt-text-action-textAlign);\n font-weight: var(--salt-text-action-fontWeight);\n}\n.saltText-action.saltText strong {\n font-weight: var(--salt-text-action-fontWeight-strong);\n}\n.saltText-action.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-action-fontWeight-small);\n}\n\n/* Code */\ncode.saltText,\n.saltText-code.saltText {\n font-family: var(--salt-text-code-fontFamily);\n}\n\n/* Display 1 */\n.saltText-display1.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display1-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display1-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n}\n\n/* Display 1 emphasis strong */\n.saltText-display1.saltText strong {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-strong);\n}\n\n/* Display 1 emphasis small */\n.saltText-display1.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-small);\n}\n\n/* Display 2 */\n.saltText-display2.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display2-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display2-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n}\n\n/* Display 2 emphasis strong */\n.saltText-display2.saltText strong {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-strong);\n}\n\n/* Display 2 emphasis small */\n.saltText-display2.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-small);\n}\n\n/* Display 3 */\n.saltText-display3.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display3-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display3-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n}\n\n/* Display 3 emphasis strong */\n.saltText-display3.saltText strong {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-strong);\n}\n\n/* Display 3 emphasis small */\n.saltText-display3.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-small);\n}\n\n/* Display 4 */\n.saltText-display4.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display4-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display4-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n}\n\n/* Display 4 emphasis strong */\n.saltText-display4.saltText strong {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-strong);\n}\n\n/* Display 4 emphasis small */\n.saltText-display4.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-display-fontWeight-small);\n}\n\n/* Heading 1 */\nh1.saltText,\n.saltText-h1.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h1-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h1-lineHeight);\n}\n\n/* H1 emphasis strong */\nh1.saltText strong,\n.saltText-h1.saltText strong {\n font-weight: var(--salt-text-heading-fontWeight-strong);\n}\n\n/* H1 emphasis small */\nh1.saltText small,\n.saltText-h1.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-heading-fontWeight-small);\n}\n\n/* Heading 2 */\nh2.saltText,\n.saltText-h2.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h2-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h2-lineHeight);\n}\n\n/* H2 emphasis strong */\nh2.saltText strong,\n.saltText-h2.saltText strong {\n font-weight: var(--salt-text-heading-fontWeight-strong);\n}\n\n/* H2 emphasis small */\nh2.saltText small,\n.saltText-h2.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-heading-fontWeight-small);\n}\n\n/* Heading 3 */\nh3.saltText,\n.saltText-h3.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h3-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h3-lineHeight);\n}\n\n/* H3 emphasis strong */\nh3.saltText strong,\n.saltText-h3.saltText strong {\n font-weight: var(--salt-text-heading-fontWeight-strong);\n}\n\n/* H3 emphasis small */\nh3.saltText small,\n.saltText-h3.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-heading-fontWeight-small);\n}\n\n/* Heading 4 */\nh4.saltText,\n.saltText-h4.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h4-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h4-lineHeight);\n}\n\n/* H4 emphasis strong */\nh4.saltText strong,\n.saltText-h4.saltText strong {\n font-weight: var(--salt-text-heading-fontWeight-strong);\n}\n\n/* H4 emphasis small */\nh4.saltText small,\n.saltText-h4.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-heading-fontWeight-small);\n}\n\n/* Label */\nlabel.saltText,\n.saltText-label.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n line-height: var(--salt-text-label-lineHeight);\n font-weight: var(--salt-text-label-fontWeight);\n}\n\n/* Label emphasis strong */\nlabel.saltText strong,\n.saltText-label.saltText strong {\n font-weight: var(--salt-text-label-fontWeight-strong);\n}\n\n/* Label emphasis small */\nlabel.saltText small,\n.saltText-label.saltText small {\n font-size: inherit;\n font-weight: var(--salt-text-label-fontWeight-small);\n}\n";
|
|
3
|
+
var css_248z = ".saltText {\n --text-color: currentColor;\n}\n\n/* Main css class. Style for body text */\n.saltText {\n color: var(--saltText-color, var(--text-color));\n font-family: var(--saltText-fontFamily, var(--salt-text-fontFamily));\n font-size: var(--saltText-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltText-lineHeight, var(--salt-text-lineHeight));\n font-weight: var(--saltText-fontWeight, var(--salt-text-fontWeight));\n letter-spacing: var(--salt-text-letterSpacing);\n --text-fontWeight-bolder: var(--salt-text-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-fontWeight-lighter);\n}\n\n/* Allows truncation */\n.saltText-lineClamp {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--text-max-rows, 0);\n overflow: hidden;\n word-break: break-word;\n}\n\n/* Primary variant */\n.saltText-primary {\n --text-color: var(--salt-content-primary-foreground);\n}\n\n/* Disabled primary variant */\n.saltText-primary.saltText-disabled {\n --text-color: var(--salt-content-primary-foreground-disabled);\n}\n\n/* Secondary variant */\n.saltText-secondary {\n --text-color: var(--salt-content-secondary-foreground);\n}\n\n/* Disabled secondary variant */\n.saltText-secondary.saltText-disabled {\n --text-color: var(--salt-content-secondary-foreground-disabled);\n}\n\n/* Info color */\n.saltText-info {\n --text-color: var(--salt-status-info-foreground-informative);\n}\n\n/* Error color */\n.saltText-error {\n --text-color: var(--salt-status-error-foreground-informative);\n}\n\n/* Warning color */\n.saltText-warning {\n --text-color: var(--salt-status-warning-foreground-informative);\n}\n\n/* Success color */\n.saltText-success {\n --text-color: var(--salt-status-success-foreground-informative);\n}\n\n/* Notation */\n.saltText-notation.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-notation-fontSize);\n line-height: var(--salt-text-notation-lineHeight);\n font-weight: var(--salt-text-notation-fontWeight);\n --text-fontWeight-bolder: var(--salt-text-notation-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-notation-fontWeight-lighter);\n}\n\n/* Action */\n.saltText-action.saltText {\n font-family: var(--salt-text-action-fontFamily);\n letter-spacing: var(--salt-text-action-letterSpacing);\n text-transform: var(--salt-text-action-textTransform);\n text-align: var(--salt-text-action-textAlign);\n font-weight: var(--salt-text-action-fontWeight);\n --text-fontWeight-bolder: var(--salt-text-action-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-action-fontWeight-lighter);\n}\n\n/* Code */\ncode.saltText,\n.saltText-code.saltText {\n font-family: var(--salt-text-code-fontFamily);\n font-weight: var(--salt-text-code-fontWeight);\n /* Code has a single weight, so lighter and bolder match the default */\n --text-fontWeight-bolder: var(--salt-text-code-fontWeight);\n --text-fontWeight-lighter: var(--salt-text-code-fontWeight);\n}\n\n/* Display 1 */\n.saltText-display1.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display1-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display1-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-display-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-display-fontWeight-lighter);\n}\n\n/* Display 2 */\n.saltText-display2.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display2-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display2-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-display-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-display-fontWeight-lighter);\n}\n\n/* Display 3 */\n.saltText-display3.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display3-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display3-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-display-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-display-fontWeight-lighter);\n}\n\n/* Display 4 */\n.saltText-display4.saltText {\n font-family: var(--salt-text-display-fontFamily);\n font-size: var(--salt-text-display4-fontSize);\n font-style: var(--salt-text-display-fontStyle, normal);\n font-weight: var(--salt-text-display-fontWeight);\n letter-spacing: var(--salt-text-display-letterSpacing, var(--salt-text-letterSpacing));\n line-height: var(--salt-text-display4-lineHeight);\n text-transform: var(--salt-text-display-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-display-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-display-fontWeight-lighter);\n}\n\n/* Editorial 1 */\n.saltText-editorial1.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial1-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial1-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Editorial 2 */\n.saltText-editorial2.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial2-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial2-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Editorial 3 */\n.saltText-editorial3.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial3-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial3-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Editorial 4 */\n.saltText-editorial4.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial4-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial4-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Editorial 5 */\n.saltText-editorial5.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial5-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial5-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Editorial 6 */\n.saltText-editorial6.saltText {\n font-family: var(--salt-text-editorial-fontFamily);\n font-size: var(--salt-text-editorial6-fontSize);\n font-style: var(--salt-text-editorial-fontStyle, normal);\n font-weight: var(--salt-text-editorial-fontWeight);\n letter-spacing: var(--salt-text-editorial-letterSpacing);\n line-height: var(--salt-text-editorial6-lineHeight);\n text-transform: var(--salt-text-editorial-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-editorial-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-editorial-fontWeight-lighter);\n}\n\n/* Heading 1 */\nh1.saltText,\n.saltText-h1.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h1-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h1-lineHeight);\n --text-fontWeight-bolder: var(--salt-text-heading-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-heading-fontWeight-lighter);\n}\n\n/* Heading 2 */\nh2.saltText,\n.saltText-h2.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h2-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h2-lineHeight);\n --text-fontWeight-bolder: var(--salt-text-heading-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-heading-fontWeight-lighter);\n}\n\n/* Heading 3 */\nh3.saltText,\n.saltText-h3.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h3-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h3-lineHeight);\n --text-fontWeight-bolder: var(--salt-text-heading-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-heading-fontWeight-lighter);\n}\n\n/* Heading 4 */\nh4.saltText,\n.saltText-h4.saltText {\n font-family: var(--salt-text-heading-fontFamily);\n font-size: var(--salt-text-h4-fontSize);\n font-weight: var(--salt-text-heading-fontWeight);\n line-height: var(--salt-text-h4-lineHeight);\n --text-fontWeight-bolder: var(--salt-text-heading-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-heading-fontWeight-lighter);\n}\n\n/* Label */\nlabel.saltText,\n.saltText-label.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-label-fontSize);\n line-height: var(--salt-text-label-lineHeight);\n font-weight: var(--salt-text-label-fontWeight);\n --text-fontWeight-bolder: var(--salt-text-label-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-label-fontWeight-lighter);\n}\n\n/* Label 2 */\n.saltText-label2.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-label2-fontSize);\n line-height: var(--salt-text-label2-lineHeight);\n font-weight: var(--salt-text-label-fontWeight);\n --text-fontWeight-bolder: var(--salt-text-label-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-label-fontWeight-lighter);\n}\n\n/* Body 2 */\n.saltText-body2.saltText {\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-body2-fontSize);\n line-height: var(--salt-text-body2-lineHeight);\n font-weight: var(--salt-text-fontWeight);\n --text-fontWeight-bolder: var(--salt-text-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-fontWeight-lighter);\n}\n\n/* Eyebrow */\n.saltText-eyebrow.saltText {\n font-family: var(--salt-text-eyebrow-fontFamily);\n font-size: var(--salt-text-eyebrow-fontSize);\n font-style: var(--salt-text-eyebrow-fontStyle, normal);\n font-weight: var(--salt-text-eyebrow-fontWeight);\n letter-spacing: var(--salt-text-eyebrow-letterSpacing);\n line-height: var(--salt-text-eyebrow-lineHeight);\n text-transform: var(--salt-text-eyebrow-textTransform, none);\n --text-fontWeight-bolder: var(--salt-text-eyebrow-fontWeight-bolder);\n --text-fontWeight-lighter: var(--salt-text-eyebrow-fontWeight-lighter);\n}\n\n/* Inherit the parent's text style, including its bolder and lighter weights */\n.saltText-inheritStyle.saltText {\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n line-height: inherit;\n --text-fontWeight-bolder: inherit;\n --text-fontWeight-lighter: inherit;\n}\n\n/* Emphasis strong */\n.saltText strong,\n.saltText b {\n font-weight: var(--text-fontWeight-bolder, var(--salt-text-fontWeight-bolder));\n}\n\n/* Emphasis small. Deprecated, use the fontWeight prop instead */\n.saltText small {\n font-size: inherit;\n font-weight: var(--text-fontWeight-lighter, var(--salt-text-fontWeight-lighter));\n}\n\n/* Font weight prop. Must follow the text styles so it overrides their weights */\n.saltText.saltText-bolder {\n font-weight: var(--text-fontWeight-bolder, var(--salt-text-fontWeight-bolder));\n}\n\n.saltText.saltText-lighter {\n font-weight: var(--text-fontWeight-lighter, var(--salt-text-fontWeight-lighter));\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=Text.css.js.map
|
package/dist-cjs/text/Text.js
CHANGED
|
@@ -18,6 +18,7 @@ const Text = React.forwardRef(function Text2({
|
|
|
18
18
|
children,
|
|
19
19
|
className,
|
|
20
20
|
disabled = false,
|
|
21
|
+
fontWeight,
|
|
21
22
|
maxRows,
|
|
22
23
|
style,
|
|
23
24
|
styleAs,
|
|
@@ -33,7 +34,7 @@ const Text = React.forwardRef(function Text2({
|
|
|
33
34
|
});
|
|
34
35
|
const Component = as ?? "div";
|
|
35
36
|
const textStyles = { "--text-max-rows": maxRows, ...style };
|
|
36
|
-
const color = variant ?? colorProp ?? "primary";
|
|
37
|
+
const color = variant ?? colorProp ?? (styleAs === "inherit" ? "inherit" : "primary");
|
|
37
38
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
38
39
|
Component,
|
|
39
40
|
{
|
|
@@ -42,7 +43,10 @@ const Text = React.forwardRef(function Text2({
|
|
|
42
43
|
{
|
|
43
44
|
[withBaseName("disabled")]: disabled,
|
|
44
45
|
[withBaseName("lineClamp")]: maxRows,
|
|
45
|
-
[withBaseName(
|
|
46
|
+
[withBaseName(
|
|
47
|
+
styleAs === "inherit" ? "inheritStyle" : styleAs
|
|
48
|
+
)]: styleAs,
|
|
49
|
+
[withBaseName(fontWeight)]: fontWeight,
|
|
46
50
|
[withBaseName(color)]: color !== "inherit"
|
|
47
51
|
},
|
|
48
52
|
className
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.js","sources":["../src/text/Text.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ElementType,\n type ForwardedRef,\n type FunctionComponent,\n forwardRef,\n} from \"react\";\nimport type { ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n type PolymorphicComponentPropWithRef,\n type PolymorphicRef,\n} from \"../utils\";\nimport textCss from \"./Text.css\";\n\nexport type TextProps<T extends ElementType> = PolymorphicComponentPropWithRef<\n T,\n {\n /**\n * Applies disabled styling when true\n */\n disabled?: boolean;\n /**\n * Apply text truncation by mentioning number of rows to be displayed\n */\n maxRows?: number;\n /**\n * Match styling to another text component's style
|
|
1
|
+
{"version":3,"file":"Text.js","sources":["../src/text/Text.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ElementType,\n type ForwardedRef,\n type FunctionComponent,\n forwardRef,\n} from \"react\";\nimport type { ValidationStatus } from \"../status-indicator\";\nimport {\n makePrefixer,\n type PolymorphicComponentPropWithRef,\n type PolymorphicRef,\n} from \"../utils\";\nimport textCss from \"./Text.css\";\n\nexport type TextProps<T extends ElementType> = PolymorphicComponentPropWithRef<\n T,\n {\n /**\n * Applies disabled styling when true\n */\n disabled?: boolean;\n /**\n * Adjust the font weight using the theme's weights for the current text style.\n * This is a visual change only and isn't conveyed to assistive technologies; use `<strong>` or `<em>` to convey importance or stress.\n */\n fontWeight?: \"lighter\" | \"bolder\";\n /**\n * Apply text truncation by mentioning number of rows to be displayed\n */\n maxRows?: number;\n /**\n * Match styling to another text component's style.\n * Use `inherit` to inherit the font and color from the parent element.\n * The `lighter` and `bolder` weights then come from the closest `Text`-based ancestor.\n */\n styleAs?:\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"label\"\n | \"label2\"\n | \"body2\"\n | \"eyebrow\"\n | \"display1\"\n | \"display2\"\n | \"display3\"\n | \"display4\"\n | \"editorial1\"\n | \"editorial2\"\n | \"editorial3\"\n | \"editorial4\"\n | \"editorial5\"\n | \"editorial6\"\n | \"notation\"\n | \"action\"\n | \"code\"\n | \"inherit\";\n /**\n * Change text color palette\n * @deprecated since 1.27.1. Use `color` instead.\n */\n variant?: \"primary\" | \"secondary\";\n /*\n * The color of the text. Defaults to \"primary\".\n */\n color?: \"inherit\" | \"primary\" | \"secondary\" | ValidationStatus;\n }\n>;\n\ntype TextComponent = <T extends ElementType = \"div\">(\n props: TextProps<T>,\n) => ReturnType<FunctionComponent>;\n\nconst withBaseName = makePrefixer(\"saltText\");\n\nexport const Text: TextComponent = forwardRef(function Text<\n T extends ElementType = \"div\",\n>(\n {\n as,\n children,\n className,\n disabled = false,\n fontWeight,\n maxRows,\n style,\n styleAs,\n variant,\n color: colorProp,\n ...restProps\n }: TextProps<T>,\n ref?: ForwardedRef<unknown>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-text\",\n css: textCss,\n window: targetWindow,\n });\n\n const Component = as ?? \"div\";\n\n const textStyles = { \"--text-max-rows\": maxRows, ...style };\n\n const color =\n variant ?? colorProp ?? (styleAs === \"inherit\" ? \"inherit\" : \"primary\");\n\n return (\n <Component\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"lineClamp\")]: maxRows,\n [withBaseName(\n styleAs === \"inherit\" ? \"inheritStyle\" : (styleAs as string),\n )]: styleAs,\n [withBaseName(fontWeight as string)]: fontWeight,\n [withBaseName(color)]: color !== \"inherit\",\n },\n className,\n )}\n {...restProps}\n ref={ref as PolymorphicRef<T>}\n style={textStyles}\n >\n {children}\n </Component>\n );\n});\n"],"names":["makePrefixer","forwardRef","Text","useWindow","useComponentCssInjection","textCss","jsx","clsx"],"mappings":";;;;;;;;;;;;;;AA6EA,MAAM,YAAA,GAAeA,0BAAa,UAAU,CAAA;AAErC,MAAM,IAAA,GAAsBC,gBAAA,CAAW,SAASC,KAAAA,CAGrD;AAAA,EACE,EAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,GAAG;AACL,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,WAAA;AAAA,IACR,GAAA,EAAKC,MAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,YAAY,EAAA,IAAM,KAAA;AAExB,EAAA,MAAM,UAAA,GAAa,EAAE,iBAAA,EAAmB,OAAA,EAAS,GAAG,KAAA,EAAM;AAE1D,EAAA,MAAM,KAAA,GACJ,OAAA,IAAW,SAAA,KAAc,OAAA,KAAY,YAAY,SAAA,GAAY,SAAA,CAAA;AAE/D,EAAA,uBACEC,cAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,SAAA;AAAA,QACT,YAAA,EAAa;AAAA,QACb;AAAA,UACE,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAA;AAAA,UAC5B,CAAC,YAAA,CAAa,WAAW,CAAC,GAAG,OAAA;AAAA,UAC7B,CAAC,YAAA;AAAA,YACC,OAAA,KAAY,YAAY,cAAA,GAAkB;AAAA,WAC3C,GAAG,OAAA;AAAA,UACJ,CAAC,YAAA,CAAa,UAAoB,CAAC,GAAG,UAAA;AAAA,UACtC,CAAC,YAAA,CAAa,KAAK,CAAC,GAAG,KAAA,KAAU;AAAA,SACnC;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,SAAA;AAAA,MACJ,GAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MAEN;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleButton.js","sources":["../src/toggle-button/ToggleButton.tsx"],"sourcesContent":["import {\n useClassNameInjection,\n useComponentCssInjection,\n} from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEvent,\n forwardRef,\n type MouseEvent,\n useRef,\n} from \"react\";\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport { useToggleButtonGroup } from \"../toggle-button-group\";\nimport {\n makePrefixer,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\n\nimport toggleButtonCss from \"./ToggleButton.css\";\n\nexport interface ToggleButtonProps
|
|
1
|
+
{"version":3,"file":"ToggleButton.js","sources":["../src/toggle-button/ToggleButton.tsx"],"sourcesContent":["import {\n useClassNameInjection,\n useComponentCssInjection,\n} from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEvent,\n forwardRef,\n type MouseEvent,\n useRef,\n} from \"react\";\nimport type { ButtonAppearance, ButtonSentiment } from \"../button\";\nimport { useToggleButtonGroup } from \"../toggle-button-group\";\nimport {\n makePrefixer,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\n\nimport toggleButtonCss from \"./ToggleButton.css\";\n\nexport interface ToggleButtonProps\n extends Omit<ComponentPropsWithoutRef<\"button\">, \"onChange\"> {\n /**\n * The appearance of the toggle button when `selected` is true.\n * @default solid\n */\n appearance?: Extract<ButtonAppearance, \"bordered\" | \"solid\">;\n /**\n * Callback fired when the toggle button's selection state is changed.\n */\n onChange?: (event: MouseEvent<HTMLButtonElement>) => void;\n /**\n * If `true`, the toggle button will be read-only.\n */\n readOnly?: boolean;\n /**\n * The sentiment of the toggle button.\n * @default neutral\n */\n sentiment?: ButtonSentiment;\n /**\n * Whether the toggle button is in a selected state.\n */\n selected?: boolean;\n /**\n * Whether the toggle button is selected by default.\n * This will be disregarded if `selected` is already set.\n */\n defaultSelected?: boolean;\n /**\n * Value of the toggle button, to be used when in a controlled state.\n */\n value: string | ReadonlyArray<string> | number | undefined;\n}\n\nconst withBaseName = makePrefixer(\"saltToggleButton\");\n\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n function ToggleButton(props, ref) {\n const { className, props: finalProps } = useClassNameInjection(\n \"saltToggleButton\",\n props,\n );\n const {\n appearance: appearanceProp,\n children,\n disabled: disabledProp,\n value,\n onClick,\n onFocus,\n onChange,\n readOnly: readOnlyProp,\n selected: selectedProp,\n defaultSelected,\n sentiment: sentimentProp,\n ...rest\n } = finalProps;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toggle-button\",\n css: toggleButtonCss,\n window: targetWindow,\n });\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const handleRef = useForkRef(ref, buttonRef);\n\n const toggleButtonGroup = useToggleButtonGroup();\n\n const toggleButtonGroupSelected = toggleButtonGroup\n ? toggleButtonGroup.isSelected(value)\n : selectedProp;\n const focusable = toggleButtonGroup\n ? toggleButtonGroup?.isFocused(value)\n : true;\n\n const sentiment =\n sentimentProp || toggleButtonGroup?.sentiment || \"neutral\";\n const appearance =\n appearanceProp || toggleButtonGroup?.appearance || \"solid\";\n const disabled = toggleButtonGroup?.disabled || disabledProp;\n const readOnly = toggleButtonGroup?.readOnly || readOnlyProp;\n\n const registerButton = toggleButtonGroup?.registerButton;\n useIsomorphicLayoutEffect(() => {\n if (!disabled && buttonRef.current && registerButton) {\n return registerButton(value, buttonRef.current);\n }\n }, [disabled, registerButton, value]);\n\n const [selected, setSelected] = useControlled({\n controlled: toggleButtonGroupSelected,\n default: Boolean(defaultSelected),\n name: \"ToggleButton\",\n state: \"selected\",\n });\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n if (disabled || readOnly) {\n return;\n }\n toggleButtonGroup?.select(event, value);\n setSelected(!selected);\n onChange?.(event);\n onClick?.(event);\n };\n\n const handleFocus = (event: FocusEvent<HTMLButtonElement>) => {\n toggleButtonGroup?.focus(value);\n onFocus?.(event);\n };\n\n const toggleButtonProps: ComponentPropsWithoutRef<\"button\"> = {\n \"aria-readonly\": readOnlyProp,\n \"aria-pressed\": !toggleButtonGroup ? selected : undefined,\n \"aria-checked\": toggleButtonGroup ? selected : undefined,\n \"aria-disabled\": disabled,\n role: toggleButtonGroup ? \"radio\" : undefined,\n className: clsx(\n withBaseName(),\n withBaseName(sentiment),\n withBaseName(appearance),\n readOnly && withBaseName(\"readOnly\"),\n className,\n ),\n onClick: handleClick,\n onFocus: handleFocus,\n tabIndex: focusable ? 0 : -1,\n value: value,\n type: \"button\",\n disabled: disabled,\n ...rest,\n };\n\n return (\n <button ref={handleRef} {...toggleButtonProps}>\n {children}\n </button>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","ToggleButton","useClassNameInjection","useWindow","useComponentCssInjection","toggleButtonCss","useRef","useForkRef","useToggleButtonGroup","useIsomorphicLayoutEffect","useControlled","clsx"],"mappings":"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"}
|
|
@@ -119,6 +119,7 @@ function ToolbarOverflowItemOwner({
|
|
|
119
119
|
}) {
|
|
120
120
|
const targetWindow = window.useWindow();
|
|
121
121
|
const [mountNode, setMountNode] = React.useState(null);
|
|
122
|
+
const mountNodeRef = React.useRef(null);
|
|
122
123
|
const mainToolbarTabIndexMemoryRef = React.useRef(
|
|
123
124
|
/* @__PURE__ */ new WeakMap()
|
|
124
125
|
);
|
|
@@ -129,15 +130,18 @@ function ToolbarOverflowItemOwner({
|
|
|
129
130
|
}
|
|
130
131
|
const boundaryKey = host ? currentOverflowBoundaryKey : lastOverflowBoundaryKeyRef.current;
|
|
131
132
|
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
132
|
-
|
|
133
|
-
|
|
133
|
+
var _a;
|
|
134
|
+
const ownerDocument = targetWindow == null ? void 0 : targetWindow.document;
|
|
135
|
+
if (!ownerDocument) {
|
|
134
136
|
return;
|
|
135
137
|
}
|
|
138
|
+
const nextMountNode = ((_a = mountNodeRef.current) == null ? void 0 : _a.ownerDocument) === ownerDocument ? mountNodeRef.current : ownerDocument.createElement("div");
|
|
136
139
|
nextMountNode.className = withBaseName("contentHost");
|
|
140
|
+
mountNodeRef.current = nextMountNode;
|
|
137
141
|
setMountNode(nextMountNode);
|
|
138
142
|
return () => {
|
|
139
|
-
var
|
|
140
|
-
(
|
|
143
|
+
var _a2;
|
|
144
|
+
(_a2 = nextMountNode.parentElement) == null ? void 0 : _a2.removeChild(nextMountNode);
|
|
141
145
|
};
|
|
142
146
|
}, [targetWindow]);
|
|
143
147
|
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarOverflow.js","sources":["../src/toolbar/ToolbarOverflow.tsx"],"sourcesContent":["import {\n flip,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { compute } from \"compute-scroll-into-view\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n type ReactElement,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../button\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport {\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\nimport { ToolbarContent } from \"./ToolbarContent\";\nimport toolbarOverflowCss from \"./ToolbarOverflow.css\";\nimport {\n getToolbarOverflowBoundaryKey,\n isTargetInsideOverflowBoundary,\n ToolbarOverflowFloatingComponentProvider,\n useToolbarOverflowFloatingBoundary,\n} from \"./ToolbarOverflowFloatingBoundary\";\nimport {\n getDocumentFocusableElements,\n getToolbarFocusMemory,\n getToolbarScopeFocusableElements,\n getToolbarTabMoveTarget,\n scheduleToolbarFocus,\n shouldToolbarPreserveNativeTab,\n TOOLBAR_GROUP_KEY_ATTR,\n TOOLBAR_ITEM_ATTR,\n TOOLBAR_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_SCOPE_ROOT_ATTR,\n type ToolbarFocusMemory,\n toolbarFocusableSelector,\n} from \"./toolbarKeyboardUtils\";\nimport type { ToolbarContentModel, ToolbarOverflowItem } from \"./toolbarUtils\";\nimport { buildContentOverflowRenderSlots } from \"./toolbarUtils\";\nimport { useToolbarKeyboardNavigation } from \"./useToolbarKeyboardNavigation\";\nimport type { ToolbarOverflowGroup } from \"./useToolbarOverflow\";\n\nconst withBaseName = makePrefixer(\"saltToolbarOverflow\");\n\nexport type ToolbarItemHostKind = \"main\" | \"measurement\" | \"overflow\";\n\nconst toolbarStatefulFocusRootSelector = [\n \".saltComboBox-focused\",\n \".saltDateInput-focused\",\n \".saltInput-focused\",\n].join(\", \");\n\nconst toolbarOverflowFocusScrollRootSelector = [\n \".saltComboBox\",\n \".saltDateInput\",\n \".saltDropdown\",\n \".saltInput\",\n \".saltSwitch\",\n].join(\", \");\n\ntype ToolbarOverflowOpenModality = \"keyboard\" | \"pointer\" | null;\n\nfunction createToolbarFocusEvent(\n eventName: \"blur\" | \"focusout\",\n target: HTMLElement,\n relatedTarget: Element | null,\n) {\n const FocusEventCtor = target.ownerDocument.defaultView?.FocusEvent;\n const eventInit = {\n bubbles: eventName === \"focusout\",\n relatedTarget,\n };\n\n return FocusEventCtor\n ? new FocusEventCtor(eventName, eventInit)\n : new Event(eventName, eventInit);\n}\n\nfunction notifyToolbarReparentedFocusLoss(mountNode: HTMLDivElement) {\n const activeElement = mountNode.ownerDocument.activeElement;\n\n if (mountNode.contains(activeElement)) {\n return;\n }\n\n // Browser focus can move to the document when a portaled toolbar item is\n // reparented, without notifying controls that keep their own focused state.\n const staleFocusTargets = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarStatefulFocusRootSelector),\n )\n .map(\n (root) =>\n root.querySelector<HTMLElement>(\"input\") ??\n root.querySelector<HTMLElement>(toolbarFocusableSelector),\n )\n .filter((target): target is HTMLElement => target != null);\n\n for (const target of staleFocusTargets) {\n const relatedTarget =\n activeElement instanceof Element ? activeElement : null;\n\n target.dispatchEvent(\n createToolbarFocusEvent(\"blur\", target, relatedTarget),\n );\n target.dispatchEvent(\n createToolbarFocusEvent(\"focusout\", target, relatedTarget),\n );\n }\n}\n\nfunction getToolbarOverflowFocusScrollTarget(target: HTMLElement) {\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_ITEM_ATTR}]`);\n const controlRoot = target.closest<HTMLElement>(\n toolbarOverflowFocusScrollRootSelector,\n );\n\n return controlRoot && itemRoot?.contains(controlRoot) ? controlRoot : target;\n}\n\nfunction getToolbarOverflowPanelInlinePadding(target: HTMLElement) {\n const panelContent = target.closest<HTMLElement>(\n `[${TOOLBAR_SCOPE_ROOT_ATTR}]`,\n );\n const styles =\n panelContent?.ownerDocument.defaultView?.getComputedStyle(panelContent);\n\n return {\n left: Number.parseFloat(styles?.paddingLeft ?? \"0\") || 0,\n right: Number.parseFloat(styles?.paddingRight ?? \"0\") || 0,\n };\n}\n\nfunction scrollToolbarOverflowTargetIntoView(\n panel: HTMLDivElement | null,\n target: HTMLElement,\n) {\n if (!panel || !panel.contains(target)) {\n return;\n }\n\n const scrollTarget = getToolbarOverflowFocusScrollTarget(target);\n const actions = compute(scrollTarget, {\n block: \"nearest\",\n boundary: panel,\n inline: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, left, top } of actions) {\n if (el === panel) {\n const targetRect = scrollTarget.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const viewportLeft = panelRect.left + panel.clientLeft;\n const viewportRight = viewportLeft + panel.clientWidth;\n const padding = getToolbarOverflowPanelInlinePadding(scrollTarget);\n const nextLeft =\n targetRect.left < viewportLeft + padding.left\n ? left - padding.left\n : targetRect.right > viewportRight - padding.right\n ? left + padding.right\n : left;\n\n el.scrollLeft = Math.max(0, nextLeft);\n } else {\n el.scrollLeft = left;\n }\n\n el.scrollTop = top;\n }\n}\n\nfunction canSeedOverflowFocusMemory(\n focusMemory: ToolbarFocusMemory | null | undefined,\n group: ToolbarOverflowGroup,\n): focusMemory is Extract<ToolbarFocusMemory, { type: \"item\" }> {\n return (\n focusMemory?.type === \"item\" &&\n group.items.some((item) => item.id === focusMemory.itemId)\n );\n}\n\ninterface ToolbarOverflowOwnersProps {\n hostNodes: Record<string, HTMLDivElement | null>;\n items: ToolbarOverflowItem[];\n}\n\nfunction ToolbarOverflowItemOwner({\n host,\n item,\n}: {\n host: HTMLDivElement | null;\n item: ToolbarOverflowItem;\n}) {\n const targetWindow = useWindow();\n const [mountNode, setMountNode] = useState<HTMLDivElement | null>(null);\n const mainToolbarTabIndexMemoryRef = useRef(\n new WeakMap<HTMLElement, string | null>(),\n );\n const lastOverflowBoundaryKeyRef = useRef<string | null>(null);\n const currentOverflowBoundaryKey = getToolbarOverflowBoundaryKey(host);\n\n if (host) {\n lastOverflowBoundaryKeyRef.current = currentOverflowBoundaryKey;\n }\n\n const boundaryKey = host\n ? currentOverflowBoundaryKey\n : lastOverflowBoundaryKeyRef.current;\n\n useIsomorphicLayoutEffect(() => {\n const nextMountNode = targetWindow?.document.createElement(\"div\");\n\n if (!nextMountNode) {\n return;\n }\n\n nextMountNode.className = withBaseName(\"contentHost\");\n setMountNode(nextMountNode);\n\n return () => {\n nextMountNode.parentElement?.removeChild(nextMountNode);\n };\n }, [targetWindow]);\n\n useIsomorphicLayoutEffect(() => {\n if (!mountNode) {\n return;\n }\n\n if (host) {\n if (mountNode.parentElement !== host) {\n host.appendChild(mountNode);\n notifyToolbarReparentedFocusLoss(mountNode);\n }\n\n const isMainToolbarHost =\n host\n .closest(`[${TOOLBAR_SCOPE_ROOT_ATTR}]`)\n ?.getAttribute(TOOLBAR_SCOPE_ROOT_ATTR) === \"main\";\n\n if (isMainToolbarHost) {\n const focusableElements = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarFocusableSelector),\n );\n\n for (const element of focusableElements) {\n const rememberedTabIndex =\n mainToolbarTabIndexMemoryRef.current.get(element);\n\n if (rememberedTabIndex !== undefined) {\n if (rememberedTabIndex == null) {\n element.removeAttribute(\"tabindex\");\n } else {\n element.setAttribute(\"tabindex\", rememberedTabIndex);\n }\n }\n }\n\n for (const element of focusableElements) {\n mainToolbarTabIndexMemoryRef.current.set(\n element,\n element.getAttribute(\"tabindex\"),\n );\n }\n }\n\n return;\n }\n\n notifyToolbarReparentedFocusLoss(mountNode);\n mountNode.parentElement?.removeChild(mountNode);\n }, [host, mountNode]);\n\n if (!mountNode) {\n return null;\n }\n\n const clonedItem = cloneElement(\n item.element as ReactElement<Record<string, ReactNode>>,\n {\n [TOOLBAR_GROUP_KEY_ATTR]: item.overflowGroupKey,\n [TOOLBAR_ITEM_ATTR]: item.id,\n },\n );\n const itemContent = (\n <ToolbarOverflowFloatingComponentProvider boundaryKey={boundaryKey}>\n {clonedItem}\n </ToolbarOverflowFloatingComponentProvider>\n );\n\n return createPortal(itemContent, mountNode);\n}\n\nexport function ToolbarOverflowOwners({\n hostNodes,\n items,\n}: ToolbarOverflowOwnersProps) {\n return (\n <>\n {items.map((item) => (\n <ToolbarOverflowItemOwner\n host={hostNodes[item.id] ?? null}\n item={item}\n key={item.id}\n />\n ))}\n </>\n );\n}\n\nfunction cloneDecorations(\n itemId: string,\n decorations: ReactElement[],\n slot: \"leading\" | \"trailing\",\n) {\n return Children.toArray(decorations).flatMap((decoration) => {\n if (!isValidElement(decoration)) {\n return [];\n }\n\n return [\n cloneElement(decoration, {\n key: `${itemId}-${slot}-${String(\n decoration.key ??\n (typeof decoration.type === \"string\"\n ? decoration.type\n : \"decoration\"),\n )}`,\n }),\n ];\n });\n}\n\nexport function ToolbarOverflowTriggerContent({\n label,\n named,\n}: {\n label: string;\n named: boolean;\n}) {\n const { OverflowIcon } = useIcon();\n\n if (named) {\n return <>{label}</>;\n }\n\n return <OverflowIcon aria-hidden />;\n}\n\nfunction getOverflowTriggerLabel(group: ToolbarOverflowGroup) {\n return group.named\n ? `${group.label} overflow. Hidden controls.`\n : \"Overflow. Hidden controls.\";\n}\n\ninterface ToolbarOverflowMenuProps {\n focusMemoryRef?: RefObject<ToolbarFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n group: ToolbarOverflowGroup;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n}\n\nexport function ToolbarOverflowMenu({\n focusMemoryRef,\n getItemHostRef,\n group,\n onItemFocus,\n}: ToolbarOverflowMenuProps) {\n const panelId = useId();\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelContentRef = useRef<HTMLDivElement>(null);\n const [panelContentNode, setPanelContentNode] =\n useState<HTMLDivElement | null>(null);\n const wasOpenRef = useRef(false);\n const focusedOpenPanelRef = useRef(false);\n const openModalityRef = useRef<ToolbarOverflowOpenModality>(null);\n const floatingBoundary = useToolbarOverflowFloatingBoundary();\n const {\n focusEntryTarget,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberedFocusRef,\n } = useToolbarKeyboardNavigation({\n includeTabIndexMinusOne: true,\n items: group.items,\n scopeRef: panelContentRef,\n });\n\n const { refs, x, y, strategy, context, elements } = useFloatingUI({\n open,\n onOpenChange(nextOpen, _, reason) {\n setOpen(nextOpen);\n\n if (!nextOpen) {\n openModalityRef.current = null;\n }\n\n if (!nextOpen && reason === \"escape-key\") {\n scheduleToolbarFocus(triggerRef.current);\n }\n },\n placement: \"bottom-end\",\n middleware: [\n offset(1),\n size({\n apply({ elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n flip(),\n shift({\n padding: 8,\n }),\n ],\n });\n const { getFloatingProps, getReferenceProps } = useInteractions([\n useClick(context),\n useDismiss(context, {\n escapeKey: false,\n outsidePress(event) {\n return !isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.target,\n );\n },\n }),\n ]);\n\n const handleTriggerKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (!open && [\"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n openModalityRef.current = \"keyboard\";\n setOpen(true);\n return;\n }\n\n if (open && event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n }\n },\n [open],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handleTriggerMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handlePanelKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (\n panelContent &&\n target instanceof HTMLElement &&\n shouldToolbarPreserveNativeTab(target)\n ) {\n const focusableElements = getDocumentFocusableElements(\n panelContent.ownerDocument,\n );\n const currentIndex = focusableElements.indexOf(target);\n const nextFocusTarget =\n focusableElements[currentIndex + (event.shiftKey ? -1 : 1)];\n\n if (\n currentIndex !== -1 &&\n nextFocusTarget &&\n panelContent.contains(nextFocusTarget)\n ) {\n return;\n }\n }\n }\n\n if (event.key === \"Tab\" && !event.shiftKey) {\n const toolbarRoot = triggerRef.current?.closest<HTMLElement>(\n `[${TOOLBAR_SCOPE_ROOT_ATTR}]`,\n );\n const nextFocusTarget = toolbarRoot\n ? getToolbarTabMoveTarget(toolbarRoot, false)\n : null;\n\n if (nextFocusTarget) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(nextFocusTarget);\n }\n\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n }\n }, []);\n\n const handleTriggerRef = useForkRef<HTMLButtonElement>(\n triggerRef,\n refs.setReference,\n );\n const handlePanelRef = useForkRef<HTMLDivElement>(panelRef, refs.setFloating);\n const handlePanelContentRef = useForkRef<HTMLDivElement>(\n panelContentRef,\n setPanelContentNode,\n );\n const handlePanelFocus = useCallback(\n (event: FocusEvent) => {\n handleScopeFocus(event);\n\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (!panelContent || !(target instanceof HTMLElement)) {\n return;\n }\n\n const focusMemory = getToolbarFocusMemory(panelContent, target, {\n includeTabIndexMinusOne: true,\n });\n\n if (focusMemory?.type !== \"item\") {\n return;\n }\n\n scrollToolbarOverflowTargetIntoView(panelRef.current, target);\n onItemFocus?.(focusMemory.itemId, focusMemory.controlIndex);\n },\n [handleScopeFocus, onItemFocus],\n );\n const { Component: FloatingComponent } = useFloatingComponent();\n\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n const externalFocusMemory = focusMemoryRef?.current;\n\n if (canSeedOverflowFocusMemory(externalFocusMemory, group)) {\n rememberedFocusRef.current = externalFocusMemory;\n }\n\n if (openModalityRef.current !== \"pointer\") {\n focusEntryTarget();\n }\n }\n\n wasOpenRef.current = open;\n }, [focusEntryTarget, focusMemoryRef, group, open, rememberedFocusRef]);\n\n useEffect(() => {\n if (!open || !panelContentNode) {\n return;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n handlePanelFocus(event);\n };\n const handleFocusOut = (event: FocusEvent) => {\n if (\n isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.relatedTarget,\n )\n ) {\n return;\n }\n\n handleScopeBlur(event);\n };\n const handleKeyDownCapture = (event: KeyboardEvent) => {\n handleScopeKeyDown(event);\n };\n const handlePointerDownCapture = (event: PointerEvent) => {\n handleScopePointerDown(event);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented) {\n handlePanelKeyDown(event);\n }\n };\n\n panelContentNode.addEventListener(\"focusin\", handleFocusIn);\n panelContentNode.addEventListener(\"focusout\", handleFocusOut);\n panelContentNode.addEventListener(\"keydown\", handleKeyDownCapture, true);\n panelContentNode.addEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n panelContentNode.removeEventListener(\"focusin\", handleFocusIn);\n panelContentNode.removeEventListener(\"focusout\", handleFocusOut);\n panelContentNode.removeEventListener(\n \"keydown\",\n handleKeyDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n handlePanelFocus,\n handlePanelKeyDown,\n handleScopeBlur,\n handleScopeKeyDown,\n handleScopePointerDown,\n floatingBoundary,\n group.key,\n open,\n panelContentNode,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n focusedOpenPanelRef.current = false;\n return;\n }\n\n if (\n !panelContentNode ||\n focusedOpenPanelRef.current ||\n openModalityRef.current === \"pointer\"\n ) {\n return;\n }\n\n const getPanelFocusables = () =>\n getToolbarScopeFocusableElements(panelContentNode, {\n includeTabIndexMinusOne: true,\n });\n const focusEntryWhenReady = () => {\n const panelFocusables = getPanelFocusables();\n\n if (panelFocusables.length === 0) {\n return false;\n }\n\n focusedOpenPanelRef.current = true;\n focusEntryTarget();\n return true;\n };\n\n if (focusEntryWhenReady()) {\n return;\n }\n\n const panelWindow = panelContentNode.ownerDocument.defaultView;\n const mutationObserverCtor = panelWindow?.MutationObserver;\n const resizeObserverCtor = panelWindow?.ResizeObserver;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n mutationObserver =\n mutationObserverCtor != null\n ? new mutationObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n resizeObserver =\n resizeObserverCtor != null\n ? new resizeObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n\n mutationObserver?.observe(panelContentNode, {\n childList: true,\n subtree: true,\n });\n resizeObserver?.observe(panelContentNode);\n\n return () => {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n };\n }, [focusEntryTarget, open, panelContentNode]);\n\n return (\n <div\n className={withBaseName(\"menu\")}\n data-overflowgroup={group.overflowGroup}\n >\n <Button\n appearance=\"transparent\"\n aria-controls={panelId}\n aria-expanded={open}\n aria-label={getOverflowTriggerLabel(group)}\n className={withBaseName(\"trigger\")}\n {...{\n [TOOLBAR_GROUP_KEY_ATTR]: group.key,\n [TOOLBAR_OVERFLOW_TRIGGER_ATTR]: \"\",\n }}\n {...getReferenceProps({\n onKeyDown: handleTriggerKeyDown,\n onMouseDown: handleTriggerMouseDown,\n onPointerDown: handleTriggerPointerDown,\n })}\n ref={handleTriggerRef}\n sentiment=\"neutral\"\n >\n <ToolbarOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n <FloatingComponent\n {...getFloatingProps({\n role: \"presentation\",\n })}\n className={withBaseName(\"panel\")}\n focusManagerProps={\n context\n ? {\n context,\n initialFocus: -1,\n returnFocus: false,\n modal: false,\n closeOnFocusOut: false,\n }\n : undefined\n }\n id={panelId}\n left={x ?? 0}\n open={open}\n position={strategy}\n ref={handlePanelRef}\n top={y ?? 0}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <div\n aria-label={`${group.label} overflow`}\n aria-orientation=\"horizontal\"\n className={withBaseName(\"panelContent\")}\n {...{ [TOOLBAR_SCOPE_ROOT_ATTR]: group.key }}\n role=\"toolbar\"\n ref={handlePanelContentRef}\n >\n {group.items.map((item, index) => (\n <div\n className={withBaseName(\"panelItem\")}\n key={`${group.id}-${item.id}`}\n >\n {index > 0 &&\n item.leadingDecorations.length > 0 &&\n cloneDecorations(item.id, item.leadingDecorations, \"leading\")}\n <div\n className={withBaseName(\"itemHost\")}\n ref={open ? getItemHostRef(item.id, \"overflow\") : null}\n />\n {cloneDecorations(item.id, item.trailingDecorations, \"trailing\")}\n </div>\n ))}\n </div>\n </FloatingComponent>\n </div>\n );\n}\n\nexport interface ToolbarOverflowContentProps {\n focusMemoryRef?: RefObject<ToolbarFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n getItemRef: (id: string) => (node: HTMLDivElement | null) => void;\n getNamedTriggerRef: (id: string) => (node: HTMLDivElement | null) => void;\n getContentRef: (contentKey: string) => (node: HTMLDivElement | null) => void;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n overflowGroups: ToolbarOverflowGroup[];\n overflowedIds: Set<string>;\n content: ToolbarContentModel;\n}\n\nexport function ToolbarOverflowContent({\n content,\n focusMemoryRef,\n getItemHostRef,\n getItemRef,\n getNamedTriggerRef,\n getContentRef,\n onItemFocus,\n overflowGroups,\n overflowedIds,\n}: ToolbarOverflowContentProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar-overflow\",\n css: toolbarOverflowCss,\n window: targetWindow,\n });\n\n const { className, ...contentProps } = content.props;\n const handleContentRef = useForkRef(content.ref, getContentRef(content.key));\n const overflowGroupByKey = new Map(\n overflowGroups.map((group) => [group.key, group] as const),\n );\n\n const renderSlots = buildContentOverflowRenderSlots(\n content.items,\n overflowedIds,\n new Set(overflowGroups.map((group) => group.key)),\n );\n\n return (\n <ToolbarContent\n {...contentProps}\n data-implicit={content.implicit || undefined}\n className={clsx(className, withBaseName(\"content\"))}\n position={content.position}\n ref={handleContentRef}\n >\n {renderSlots.map(\n ({\n item,\n overflowed,\n showLeadingDecorations,\n showTrailingDecorations,\n triggerGroupKey,\n }) => {\n const triggerGroup =\n triggerGroupKey != null\n ? overflowGroupByKey.get(triggerGroupKey)\n : undefined;\n\n return (\n <div\n className={withBaseName(\"slot\")}\n data-align={item.align}\n data-priority={item.overflowPriority}\n key={\n triggerGroup\n ? `${content.key}-${triggerGroup.id}-anchor-${item.id}`\n : item.id\n }\n ref={\n triggerGroup ? getNamedTriggerRef(item.id) : getItemRef(item.id)\n }\n >\n {showLeadingDecorations\n ? cloneDecorations(item.id, item.leadingDecorations, \"leading\")\n : null}\n {!overflowed ? (\n <div className={withBaseName(\"item\")}>\n <div\n className={withBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"main\")}\n />\n </div>\n ) : null}\n {triggerGroup ? (\n <div className={withBaseName(\"item\")}>\n <ToolbarOverflowMenu\n focusMemoryRef={focusMemoryRef}\n getItemHostRef={getItemHostRef}\n group={triggerGroup}\n onItemFocus={onItemFocus}\n />\n </div>\n ) : null}\n {showTrailingDecorations\n ? cloneDecorations(\n item.id,\n item.trailingDecorations,\n \"trailing\",\n )\n : null}\n </div>\n );\n },\n )}\n </ToolbarContent>\n );\n}\n"],"names":["makePrefixer","toolbarFocusableSelector","TOOLBAR_ITEM_ATTR","TOOLBAR_SCOPE_ROOT_ATTR","compute","useWindow","useState","useRef","getToolbarOverflowBoundaryKey","useIsomorphicLayoutEffect","cloneElement","TOOLBAR_GROUP_KEY_ATTR","jsx","ToolbarOverflowFloatingComponentProvider","createPortal","Fragment","Children","isValidElement","useIcon","useId","useToolbarOverflowFloatingBoundary","useToolbarKeyboardNavigation","useFloatingUI","scheduleToolbarFocus","offset","size","elements","flip","shift","useInteractions","useClick","useDismiss","isTargetInsideOverflowBoundary","useCallback","_a","shouldToolbarPreserveNativeTab","getDocumentFocusableElements","getToolbarTabMoveTarget","useForkRef","getToolbarFocusMemory","useFloatingComponent","useEffect","getToolbarScopeFocusableElements","jsxs","Button","TOOLBAR_OVERFLOW_TRIGGER_ATTR","useComponentCssInjection","toolbarOverflowCss","buildContentOverflowRenderSlots","ToolbarContent","clsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolbarOverflow.js","sources":["../src/toolbar/ToolbarOverflow.tsx"],"sourcesContent":["import {\n flip,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { compute } from \"compute-scroll-into-view\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n type ReactElement,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button } from \"../button\";\nimport { useIcon } from \"../semantic-icon-provider\";\nimport {\n makePrefixer,\n useFloatingComponent,\n useFloatingUI,\n useForkRef,\n useId,\n useIsomorphicLayoutEffect,\n} from \"../utils\";\nimport { ToolbarContent } from \"./ToolbarContent\";\nimport toolbarOverflowCss from \"./ToolbarOverflow.css\";\nimport {\n getToolbarOverflowBoundaryKey,\n isTargetInsideOverflowBoundary,\n ToolbarOverflowFloatingComponentProvider,\n useToolbarOverflowFloatingBoundary,\n} from \"./ToolbarOverflowFloatingBoundary\";\nimport {\n getDocumentFocusableElements,\n getToolbarFocusMemory,\n getToolbarScopeFocusableElements,\n getToolbarTabMoveTarget,\n scheduleToolbarFocus,\n shouldToolbarPreserveNativeTab,\n TOOLBAR_GROUP_KEY_ATTR,\n TOOLBAR_ITEM_ATTR,\n TOOLBAR_OVERFLOW_TRIGGER_ATTR,\n TOOLBAR_SCOPE_ROOT_ATTR,\n type ToolbarFocusMemory,\n toolbarFocusableSelector,\n} from \"./toolbarKeyboardUtils\";\nimport type { ToolbarContentModel, ToolbarOverflowItem } from \"./toolbarUtils\";\nimport { buildContentOverflowRenderSlots } from \"./toolbarUtils\";\nimport { useToolbarKeyboardNavigation } from \"./useToolbarKeyboardNavigation\";\nimport type { ToolbarOverflowGroup } from \"./useToolbarOverflow\";\n\nconst withBaseName = makePrefixer(\"saltToolbarOverflow\");\n\nexport type ToolbarItemHostKind = \"main\" | \"measurement\" | \"overflow\";\n\nconst toolbarStatefulFocusRootSelector = [\n \".saltComboBox-focused\",\n \".saltDateInput-focused\",\n \".saltInput-focused\",\n].join(\", \");\n\nconst toolbarOverflowFocusScrollRootSelector = [\n \".saltComboBox\",\n \".saltDateInput\",\n \".saltDropdown\",\n \".saltInput\",\n \".saltSwitch\",\n].join(\", \");\n\ntype ToolbarOverflowOpenModality = \"keyboard\" | \"pointer\" | null;\n\nfunction createToolbarFocusEvent(\n eventName: \"blur\" | \"focusout\",\n target: HTMLElement,\n relatedTarget: Element | null,\n) {\n const FocusEventCtor = target.ownerDocument.defaultView?.FocusEvent;\n const eventInit = {\n bubbles: eventName === \"focusout\",\n relatedTarget,\n };\n\n return FocusEventCtor\n ? new FocusEventCtor(eventName, eventInit)\n : new Event(eventName, eventInit);\n}\n\nfunction notifyToolbarReparentedFocusLoss(mountNode: HTMLDivElement) {\n const activeElement = mountNode.ownerDocument.activeElement;\n\n if (mountNode.contains(activeElement)) {\n return;\n }\n\n // Browser focus can move to the document when a portaled toolbar item is\n // reparented, without notifying controls that keep their own focused state.\n const staleFocusTargets = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarStatefulFocusRootSelector),\n )\n .map(\n (root) =>\n root.querySelector<HTMLElement>(\"input\") ??\n root.querySelector<HTMLElement>(toolbarFocusableSelector),\n )\n .filter((target): target is HTMLElement => target != null);\n\n for (const target of staleFocusTargets) {\n const relatedTarget =\n activeElement instanceof Element ? activeElement : null;\n\n target.dispatchEvent(\n createToolbarFocusEvent(\"blur\", target, relatedTarget),\n );\n target.dispatchEvent(\n createToolbarFocusEvent(\"focusout\", target, relatedTarget),\n );\n }\n}\n\nfunction getToolbarOverflowFocusScrollTarget(target: HTMLElement) {\n const itemRoot = target.closest<HTMLElement>(`[${TOOLBAR_ITEM_ATTR}]`);\n const controlRoot = target.closest<HTMLElement>(\n toolbarOverflowFocusScrollRootSelector,\n );\n\n return controlRoot && itemRoot?.contains(controlRoot) ? controlRoot : target;\n}\n\nfunction getToolbarOverflowPanelInlinePadding(target: HTMLElement) {\n const panelContent = target.closest<HTMLElement>(\n `[${TOOLBAR_SCOPE_ROOT_ATTR}]`,\n );\n const styles =\n panelContent?.ownerDocument.defaultView?.getComputedStyle(panelContent);\n\n return {\n left: Number.parseFloat(styles?.paddingLeft ?? \"0\") || 0,\n right: Number.parseFloat(styles?.paddingRight ?? \"0\") || 0,\n };\n}\n\nfunction scrollToolbarOverflowTargetIntoView(\n panel: HTMLDivElement | null,\n target: HTMLElement,\n) {\n if (!panel || !panel.contains(target)) {\n return;\n }\n\n const scrollTarget = getToolbarOverflowFocusScrollTarget(target);\n const actions = compute(scrollTarget, {\n block: \"nearest\",\n boundary: panel,\n inline: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, left, top } of actions) {\n if (el === panel) {\n const targetRect = scrollTarget.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const viewportLeft = panelRect.left + panel.clientLeft;\n const viewportRight = viewportLeft + panel.clientWidth;\n const padding = getToolbarOverflowPanelInlinePadding(scrollTarget);\n const nextLeft =\n targetRect.left < viewportLeft + padding.left\n ? left - padding.left\n : targetRect.right > viewportRight - padding.right\n ? left + padding.right\n : left;\n\n el.scrollLeft = Math.max(0, nextLeft);\n } else {\n el.scrollLeft = left;\n }\n\n el.scrollTop = top;\n }\n}\n\nfunction canSeedOverflowFocusMemory(\n focusMemory: ToolbarFocusMemory | null | undefined,\n group: ToolbarOverflowGroup,\n): focusMemory is Extract<ToolbarFocusMemory, { type: \"item\" }> {\n return (\n focusMemory?.type === \"item\" &&\n group.items.some((item) => item.id === focusMemory.itemId)\n );\n}\n\ninterface ToolbarOverflowOwnersProps {\n hostNodes: Record<string, HTMLDivElement | null>;\n items: ToolbarOverflowItem[];\n}\n\nfunction ToolbarOverflowItemOwner({\n host,\n item,\n}: {\n host: HTMLDivElement | null;\n item: ToolbarOverflowItem;\n}) {\n const targetWindow = useWindow();\n const [mountNode, setMountNode] = useState<HTMLDivElement | null>(null);\n const mountNodeRef = useRef<HTMLDivElement | null>(null);\n const mainToolbarTabIndexMemoryRef = useRef(\n new WeakMap<HTMLElement, string | null>(),\n );\n const lastOverflowBoundaryKeyRef = useRef<string | null>(null);\n const currentOverflowBoundaryKey = getToolbarOverflowBoundaryKey(host);\n\n if (host) {\n lastOverflowBoundaryKeyRef.current = currentOverflowBoundaryKey;\n }\n\n const boundaryKey = host\n ? currentOverflowBoundaryKey\n : lastOverflowBoundaryKeyRef.current;\n\n useIsomorphicLayoutEffect(() => {\n const ownerDocument = targetWindow?.document;\n\n if (!ownerDocument) {\n return;\n }\n\n // Reuse the node when the effect runs again for the same document, as in\n // Strict Mode. A new node would leave the previous one behind in the host,\n // because the effect that attaches it can run again with the previous node.\n const nextMountNode =\n mountNodeRef.current?.ownerDocument === ownerDocument\n ? mountNodeRef.current\n : ownerDocument.createElement(\"div\");\n\n nextMountNode.className = withBaseName(\"contentHost\");\n mountNodeRef.current = nextMountNode;\n setMountNode(nextMountNode);\n\n return () => {\n nextMountNode.parentElement?.removeChild(nextMountNode);\n };\n }, [targetWindow]);\n\n useIsomorphicLayoutEffect(() => {\n if (!mountNode) {\n return;\n }\n\n if (host) {\n if (mountNode.parentElement !== host) {\n host.appendChild(mountNode);\n notifyToolbarReparentedFocusLoss(mountNode);\n }\n\n const isMainToolbarHost =\n host\n .closest(`[${TOOLBAR_SCOPE_ROOT_ATTR}]`)\n ?.getAttribute(TOOLBAR_SCOPE_ROOT_ATTR) === \"main\";\n\n if (isMainToolbarHost) {\n const focusableElements = Array.from(\n mountNode.querySelectorAll<HTMLElement>(toolbarFocusableSelector),\n );\n\n for (const element of focusableElements) {\n const rememberedTabIndex =\n mainToolbarTabIndexMemoryRef.current.get(element);\n\n if (rememberedTabIndex !== undefined) {\n if (rememberedTabIndex == null) {\n element.removeAttribute(\"tabindex\");\n } else {\n element.setAttribute(\"tabindex\", rememberedTabIndex);\n }\n }\n }\n\n for (const element of focusableElements) {\n mainToolbarTabIndexMemoryRef.current.set(\n element,\n element.getAttribute(\"tabindex\"),\n );\n }\n }\n\n return;\n }\n\n notifyToolbarReparentedFocusLoss(mountNode);\n mountNode.parentElement?.removeChild(mountNode);\n }, [host, mountNode]);\n\n if (!mountNode) {\n return null;\n }\n\n const clonedItem = cloneElement(\n item.element as ReactElement<Record<string, ReactNode>>,\n {\n [TOOLBAR_GROUP_KEY_ATTR]: item.overflowGroupKey,\n [TOOLBAR_ITEM_ATTR]: item.id,\n },\n );\n const itemContent = (\n <ToolbarOverflowFloatingComponentProvider boundaryKey={boundaryKey}>\n {clonedItem}\n </ToolbarOverflowFloatingComponentProvider>\n );\n\n return createPortal(itemContent, mountNode);\n}\n\nexport function ToolbarOverflowOwners({\n hostNodes,\n items,\n}: ToolbarOverflowOwnersProps) {\n return (\n <>\n {items.map((item) => (\n <ToolbarOverflowItemOwner\n host={hostNodes[item.id] ?? null}\n item={item}\n key={item.id}\n />\n ))}\n </>\n );\n}\n\nfunction cloneDecorations(\n itemId: string,\n decorations: ReactElement[],\n slot: \"leading\" | \"trailing\",\n) {\n return Children.toArray(decorations).flatMap((decoration) => {\n if (!isValidElement(decoration)) {\n return [];\n }\n\n return [\n cloneElement(decoration, {\n key: `${itemId}-${slot}-${String(\n decoration.key ??\n (typeof decoration.type === \"string\"\n ? decoration.type\n : \"decoration\"),\n )}`,\n }),\n ];\n });\n}\n\nexport function ToolbarOverflowTriggerContent({\n label,\n named,\n}: {\n label: string;\n named: boolean;\n}) {\n const { OverflowIcon } = useIcon();\n\n if (named) {\n return <>{label}</>;\n }\n\n return <OverflowIcon aria-hidden />;\n}\n\nfunction getOverflowTriggerLabel(group: ToolbarOverflowGroup) {\n return group.named\n ? `${group.label} overflow. Hidden controls.`\n : \"Overflow. Hidden controls.\";\n}\n\ninterface ToolbarOverflowMenuProps {\n focusMemoryRef?: RefObject<ToolbarFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n group: ToolbarOverflowGroup;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n}\n\nexport function ToolbarOverflowMenu({\n focusMemoryRef,\n getItemHostRef,\n group,\n onItemFocus,\n}: ToolbarOverflowMenuProps) {\n const panelId = useId();\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelContentRef = useRef<HTMLDivElement>(null);\n const [panelContentNode, setPanelContentNode] =\n useState<HTMLDivElement | null>(null);\n const wasOpenRef = useRef(false);\n const focusedOpenPanelRef = useRef(false);\n const openModalityRef = useRef<ToolbarOverflowOpenModality>(null);\n const floatingBoundary = useToolbarOverflowFloatingBoundary();\n const {\n focusEntryTarget,\n handleScopeBlur,\n handleScopeFocus,\n handleScopeKeyDown,\n handleScopePointerDown,\n rememberedFocusRef,\n } = useToolbarKeyboardNavigation({\n includeTabIndexMinusOne: true,\n items: group.items,\n scopeRef: panelContentRef,\n });\n\n const { refs, x, y, strategy, context, elements } = useFloatingUI({\n open,\n onOpenChange(nextOpen, _, reason) {\n setOpen(nextOpen);\n\n if (!nextOpen) {\n openModalityRef.current = null;\n }\n\n if (!nextOpen && reason === \"escape-key\") {\n scheduleToolbarFocus(triggerRef.current);\n }\n },\n placement: \"bottom-end\",\n middleware: [\n offset(1),\n size({\n apply({ elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n flip(),\n shift({\n padding: 8,\n }),\n ],\n });\n const { getFloatingProps, getReferenceProps } = useInteractions([\n useClick(context),\n useDismiss(context, {\n escapeKey: false,\n outsidePress(event) {\n return !isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.target,\n );\n },\n }),\n ]);\n\n const handleTriggerKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (!open && [\"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n openModalityRef.current = \"keyboard\";\n setOpen(true);\n return;\n }\n\n if (open && event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n }\n },\n [open],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handleTriggerMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n if (!open && event.button === 0) {\n openModalityRef.current = \"pointer\";\n }\n },\n [open],\n );\n\n const handlePanelKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (\n panelContent &&\n target instanceof HTMLElement &&\n shouldToolbarPreserveNativeTab(target)\n ) {\n const focusableElements = getDocumentFocusableElements(\n panelContent.ownerDocument,\n );\n const currentIndex = focusableElements.indexOf(target);\n const nextFocusTarget =\n focusableElements[currentIndex + (event.shiftKey ? -1 : 1)];\n\n if (\n currentIndex !== -1 &&\n nextFocusTarget &&\n panelContent.contains(nextFocusTarget)\n ) {\n return;\n }\n }\n }\n\n if (event.key === \"Tab\" && !event.shiftKey) {\n const toolbarRoot = triggerRef.current?.closest<HTMLElement>(\n `[${TOOLBAR_SCOPE_ROOT_ATTR}]`,\n );\n const nextFocusTarget = toolbarRoot\n ? getToolbarTabMoveTarget(toolbarRoot, false)\n : null;\n\n if (nextFocusTarget) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(nextFocusTarget);\n }\n\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n setOpen(false);\n scheduleToolbarFocus(triggerRef.current);\n }\n }, []);\n\n const handleTriggerRef = useForkRef<HTMLButtonElement>(\n triggerRef,\n refs.setReference,\n );\n const handlePanelRef = useForkRef<HTMLDivElement>(panelRef, refs.setFloating);\n const handlePanelContentRef = useForkRef<HTMLDivElement>(\n panelContentRef,\n setPanelContentNode,\n );\n const handlePanelFocus = useCallback(\n (event: FocusEvent) => {\n handleScopeFocus(event);\n\n const panelContent = panelContentRef.current;\n const target = event.target;\n\n if (!panelContent || !(target instanceof HTMLElement)) {\n return;\n }\n\n const focusMemory = getToolbarFocusMemory(panelContent, target, {\n includeTabIndexMinusOne: true,\n });\n\n if (focusMemory?.type !== \"item\") {\n return;\n }\n\n scrollToolbarOverflowTargetIntoView(panelRef.current, target);\n onItemFocus?.(focusMemory.itemId, focusMemory.controlIndex);\n },\n [handleScopeFocus, onItemFocus],\n );\n const { Component: FloatingComponent } = useFloatingComponent();\n\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n const externalFocusMemory = focusMemoryRef?.current;\n\n if (canSeedOverflowFocusMemory(externalFocusMemory, group)) {\n rememberedFocusRef.current = externalFocusMemory;\n }\n\n if (openModalityRef.current !== \"pointer\") {\n focusEntryTarget();\n }\n }\n\n wasOpenRef.current = open;\n }, [focusEntryTarget, focusMemoryRef, group, open, rememberedFocusRef]);\n\n useEffect(() => {\n if (!open || !panelContentNode) {\n return;\n }\n\n const handleFocusIn = (event: FocusEvent) => {\n handlePanelFocus(event);\n };\n const handleFocusOut = (event: FocusEvent) => {\n if (\n isTargetInsideOverflowBoundary(\n panelContentRef.current,\n floatingBoundary,\n group.key,\n event.relatedTarget,\n )\n ) {\n return;\n }\n\n handleScopeBlur(event);\n };\n const handleKeyDownCapture = (event: KeyboardEvent) => {\n handleScopeKeyDown(event);\n };\n const handlePointerDownCapture = (event: PointerEvent) => {\n handleScopePointerDown(event);\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!event.defaultPrevented) {\n handlePanelKeyDown(event);\n }\n };\n\n panelContentNode.addEventListener(\"focusin\", handleFocusIn);\n panelContentNode.addEventListener(\"focusout\", handleFocusOut);\n panelContentNode.addEventListener(\"keydown\", handleKeyDownCapture, true);\n panelContentNode.addEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n panelContentNode.removeEventListener(\"focusin\", handleFocusIn);\n panelContentNode.removeEventListener(\"focusout\", handleFocusOut);\n panelContentNode.removeEventListener(\n \"keydown\",\n handleKeyDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\n \"pointerdown\",\n handlePointerDownCapture,\n true,\n );\n panelContentNode.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n handlePanelFocus,\n handlePanelKeyDown,\n handleScopeBlur,\n handleScopeKeyDown,\n handleScopePointerDown,\n floatingBoundary,\n group.key,\n open,\n panelContentNode,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n focusedOpenPanelRef.current = false;\n return;\n }\n\n if (\n !panelContentNode ||\n focusedOpenPanelRef.current ||\n openModalityRef.current === \"pointer\"\n ) {\n return;\n }\n\n const getPanelFocusables = () =>\n getToolbarScopeFocusableElements(panelContentNode, {\n includeTabIndexMinusOne: true,\n });\n const focusEntryWhenReady = () => {\n const panelFocusables = getPanelFocusables();\n\n if (panelFocusables.length === 0) {\n return false;\n }\n\n focusedOpenPanelRef.current = true;\n focusEntryTarget();\n return true;\n };\n\n if (focusEntryWhenReady()) {\n return;\n }\n\n const panelWindow = panelContentNode.ownerDocument.defaultView;\n const mutationObserverCtor = panelWindow?.MutationObserver;\n const resizeObserverCtor = panelWindow?.ResizeObserver;\n let mutationObserver: MutationObserver | null = null;\n let resizeObserver: ResizeObserver | null = null;\n\n mutationObserver =\n mutationObserverCtor != null\n ? new mutationObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n resizeObserver =\n resizeObserverCtor != null\n ? new resizeObserverCtor(() => {\n if (focusEntryWhenReady()) {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n }\n })\n : null;\n\n mutationObserver?.observe(panelContentNode, {\n childList: true,\n subtree: true,\n });\n resizeObserver?.observe(panelContentNode);\n\n return () => {\n mutationObserver?.disconnect();\n resizeObserver?.disconnect();\n };\n }, [focusEntryTarget, open, panelContentNode]);\n\n return (\n <div\n className={withBaseName(\"menu\")}\n data-overflowgroup={group.overflowGroup}\n >\n <Button\n appearance=\"transparent\"\n aria-controls={panelId}\n aria-expanded={open}\n aria-label={getOverflowTriggerLabel(group)}\n className={withBaseName(\"trigger\")}\n {...{\n [TOOLBAR_GROUP_KEY_ATTR]: group.key,\n [TOOLBAR_OVERFLOW_TRIGGER_ATTR]: \"\",\n }}\n {...getReferenceProps({\n onKeyDown: handleTriggerKeyDown,\n onMouseDown: handleTriggerMouseDown,\n onPointerDown: handleTriggerPointerDown,\n })}\n ref={handleTriggerRef}\n sentiment=\"neutral\"\n >\n <ToolbarOverflowTriggerContent\n label={group.label}\n named={group.named}\n />\n </Button>\n <FloatingComponent\n {...getFloatingProps({\n role: \"presentation\",\n })}\n className={withBaseName(\"panel\")}\n focusManagerProps={\n context\n ? {\n context,\n initialFocus: -1,\n returnFocus: false,\n modal: false,\n closeOnFocusOut: false,\n }\n : undefined\n }\n id={panelId}\n left={x ?? 0}\n open={open}\n position={strategy}\n ref={handlePanelRef}\n top={y ?? 0}\n width={elements.floating?.offsetWidth}\n height={elements.floating?.offsetHeight}\n >\n <div\n aria-label={`${group.label} overflow`}\n aria-orientation=\"horizontal\"\n className={withBaseName(\"panelContent\")}\n {...{ [TOOLBAR_SCOPE_ROOT_ATTR]: group.key }}\n role=\"toolbar\"\n ref={handlePanelContentRef}\n >\n {group.items.map((item, index) => (\n <div\n className={withBaseName(\"panelItem\")}\n key={`${group.id}-${item.id}`}\n >\n {index > 0 &&\n item.leadingDecorations.length > 0 &&\n cloneDecorations(item.id, item.leadingDecorations, \"leading\")}\n <div\n className={withBaseName(\"itemHost\")}\n ref={open ? getItemHostRef(item.id, \"overflow\") : null}\n />\n {cloneDecorations(item.id, item.trailingDecorations, \"trailing\")}\n </div>\n ))}\n </div>\n </FloatingComponent>\n </div>\n );\n}\n\nexport interface ToolbarOverflowContentProps {\n focusMemoryRef?: RefObject<ToolbarFocusMemory | null>;\n getItemHostRef: (\n id: string,\n kind: ToolbarItemHostKind,\n ) => (node: HTMLDivElement | null) => void;\n getItemRef: (id: string) => (node: HTMLDivElement | null) => void;\n getNamedTriggerRef: (id: string) => (node: HTMLDivElement | null) => void;\n getContentRef: (contentKey: string) => (node: HTMLDivElement | null) => void;\n onItemFocus?: (itemId: string, controlIndex: number) => void;\n overflowGroups: ToolbarOverflowGroup[];\n overflowedIds: Set<string>;\n content: ToolbarContentModel;\n}\n\nexport function ToolbarOverflowContent({\n content,\n focusMemoryRef,\n getItemHostRef,\n getItemRef,\n getNamedTriggerRef,\n getContentRef,\n onItemFocus,\n overflowGroups,\n overflowedIds,\n}: ToolbarOverflowContentProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-toolbar-overflow\",\n css: toolbarOverflowCss,\n window: targetWindow,\n });\n\n const { className, ...contentProps } = content.props;\n const handleContentRef = useForkRef(content.ref, getContentRef(content.key));\n const overflowGroupByKey = new Map(\n overflowGroups.map((group) => [group.key, group] as const),\n );\n\n const renderSlots = buildContentOverflowRenderSlots(\n content.items,\n overflowedIds,\n new Set(overflowGroups.map((group) => group.key)),\n );\n\n return (\n <ToolbarContent\n {...contentProps}\n data-implicit={content.implicit || undefined}\n className={clsx(className, withBaseName(\"content\"))}\n position={content.position}\n ref={handleContentRef}\n >\n {renderSlots.map(\n ({\n item,\n overflowed,\n showLeadingDecorations,\n showTrailingDecorations,\n triggerGroupKey,\n }) => {\n const triggerGroup =\n triggerGroupKey != null\n ? overflowGroupByKey.get(triggerGroupKey)\n : undefined;\n\n return (\n <div\n className={withBaseName(\"slot\")}\n data-align={item.align}\n data-priority={item.overflowPriority}\n key={\n triggerGroup\n ? `${content.key}-${triggerGroup.id}-anchor-${item.id}`\n : item.id\n }\n ref={\n triggerGroup ? getNamedTriggerRef(item.id) : getItemRef(item.id)\n }\n >\n {showLeadingDecorations\n ? cloneDecorations(item.id, item.leadingDecorations, \"leading\")\n : null}\n {!overflowed ? (\n <div className={withBaseName(\"item\")}>\n <div\n className={withBaseName(\"itemHost\")}\n ref={getItemHostRef(item.id, \"main\")}\n />\n </div>\n ) : null}\n {triggerGroup ? (\n <div className={withBaseName(\"item\")}>\n <ToolbarOverflowMenu\n focusMemoryRef={focusMemoryRef}\n getItemHostRef={getItemHostRef}\n group={triggerGroup}\n onItemFocus={onItemFocus}\n />\n </div>\n ) : null}\n {showTrailingDecorations\n ? cloneDecorations(\n item.id,\n item.trailingDecorations,\n \"trailing\",\n )\n : null}\n </div>\n );\n },\n )}\n </ToolbarContent>\n );\n}\n"],"names":["makePrefixer","toolbarFocusableSelector","TOOLBAR_ITEM_ATTR","TOOLBAR_SCOPE_ROOT_ATTR","compute","useWindow","useState","useRef","getToolbarOverflowBoundaryKey","useIsomorphicLayoutEffect","_a","cloneElement","TOOLBAR_GROUP_KEY_ATTR","jsx","ToolbarOverflowFloatingComponentProvider","createPortal","Fragment","Children","isValidElement","useIcon","useId","useToolbarOverflowFloatingBoundary","useToolbarKeyboardNavigation","useFloatingUI","scheduleToolbarFocus","offset","size","elements","flip","shift","useInteractions","useClick","useDismiss","isTargetInsideOverflowBoundary","useCallback","shouldToolbarPreserveNativeTab","getDocumentFocusableElements","getToolbarTabMoveTarget","useForkRef","getToolbarFocusMemory","useFloatingComponent","useEffect","getToolbarScopeFocusableElements","jsxs","Button","TOOLBAR_OVERFLOW_TRIGGER_ATTR","useComponentCssInjection","toolbarOverflowCss","buildContentOverflowRenderSlots","ToolbarContent","clsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbarUtils.js","sources":["../src/toolbar/toolbarUtils.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Divider } from \"../divider\";\nimport { getRefFromChildren } from \"../utils\";\n\nimport { ToolbarContent, type ToolbarContentProps } from \"./ToolbarContent\";\nimport { Tooltray, type TooltrayProps } from \"./Tooltray\";\n\nexport type ToolbarMode = \"explicit\" | \"flat\" | \"invalid\";\n\ntype ToolbarChild = Exclude<ReactNode, boolean | null | undefined>;\ntype ToolbarContentPosition = ToolbarContentProps[\"position\"];\ntype TooltrayOverflowMode = NonNullable<TooltrayProps[\"overflowMode\"]>;\n\nexport interface ToolbarOverflowItem {\n align: NonNullable<TooltrayProps[\"align\"]>;\n element: ReactElement<TooltrayProps>;\n id: string;\n leadingDecorations: ReactElement[];\n order: number;\n overflowGroup: string;\n overflowGroupKey: string;\n overflowLabel?: string;\n overflowMode: TooltrayOverflowMode;\n overflowPriority: number;\n contentKey: string;\n trailingDecorations: ReactElement[];\n}\n\nexport interface ToolbarOverflowRenderSlot {\n item: ToolbarOverflowItem;\n overflowed: boolean;\n showLeadingDecorations: boolean;\n showTrailingDecorations: boolean;\n triggerGroupKey?: string;\n}\n\nexport interface ToolbarContentModel {\n implicit: boolean;\n items: ToolbarOverflowItem[];\n key: string;\n position: ToolbarContentPosition;\n props: Omit<ToolbarContentProps, \"children\" | \"position\">;\n ref: Ref<HTMLDivElement> | null;\n}\n\nexport interface ToolbarModel {\n mode: ToolbarMode;\n content: ToolbarContentModel[];\n}\n\nexport function buildContentOverflowRenderSlots(\n items: ToolbarOverflowItem[],\n overflowedIds: Set<string>,\n activeNamedGroupKeys: Set<string>,\n) {\n const triggerGroupByItemId = new Map<string, string>();\n\n for (const groupKey of activeNamedGroupKeys) {\n const anchorItem = items.find((item) => {\n return overflowedIds.has(item.id) && item.overflowGroupKey === groupKey;\n });\n\n if (anchorItem) {\n triggerGroupByItemId.set(anchorItem.id, groupKey);\n }\n }\n\n const slots: ToolbarOverflowRenderSlot[] = [];\n let hasSurvivingPredecessor = false;\n\n for (const item of items) {\n const overflowed = overflowedIds.has(item.id);\n const triggerGroupKey = triggerGroupByItemId.get(item.id);\n const survives = !overflowed || triggerGroupKey != null;\n\n if (overflowed && !triggerGroupKey) {\n continue;\n }\n\n slots.push({\n item,\n overflowed,\n showLeadingDecorations:\n item.leadingDecorations.length > 0 &&\n hasSurvivingPredecessor &&\n survives,\n showTrailingDecorations:\n !overflowed && item.trailingDecorations.length > 0,\n triggerGroupKey,\n });\n\n if (survives) {\n hasSurvivingPredecessor = true;\n }\n }\n\n return slots;\n}\n\nexport function flattenToolbarChildren(children: ReactNode): ToolbarChild[] {\n const flattened: ToolbarChild[] = [];\n\n Children.forEach(children, (child) => {\n if (child == null || typeof child === \"boolean\") {\n return;\n }\n\n if (isValidElement(child) && child.type === Fragment) {\n flattened.push(...flattenToolbarChildren(child.props.children));\n return;\n }\n\n flattened.push(child);\n });\n\n return flattened;\n}\n\nfunction isToolbarContentElement(\n child: ToolbarChild,\n): child is ReactElement<ToolbarContentProps> {\n return isValidElement(child) && child.type === ToolbarContent;\n}\n\nfunction isTooltrayElement(\n child: ToolbarChild,\n): child is ReactElement<TooltrayProps> {\n return isValidElement(child) && child.type === Tooltray;\n}\n\nfunction isDividerElement(child: ToolbarChild): child is ReactElement {\n return isValidElement(child) && child.type === Divider;\n}\n\nfunction buildItemId(\n contentKey: string,\n element: ReactElement<TooltrayProps>,\n order: number,\n) {\n const elementKey =\n element.key != null ? String(element.key) : `tray-${order}`;\n return `${contentKey}-${elementKey}-${order}`;\n}\n\nfunction buildOverflowGroupKey(contentKey: string, overflowGroup: string) {\n return overflowGroup === \"shared\"\n ? \"shared\"\n : `${contentKey}:${overflowGroup}`;\n}\n\nfunction normalizeContentItems(\n children: ReactNode,\n contentKey: string,\n): ToolbarOverflowItem[] | null {\n const flattenedChildren = flattenToolbarChildren(children);\n const items: ToolbarOverflowItem[] = [];\n let pendingLeadingDecorations: ReactElement[] = [];\n\n for (const child of flattenedChildren) {\n if (isDividerElement(child)) {\n pendingLeadingDecorations.push(child);\n continue;\n }\n\n if (!isTooltrayElement(child)) {\n return null;\n }\n\n const {\n align = \"start\",\n overflowGroup = \"shared\",\n overflowLabel,\n overflowMode = \"independent\",\n overflowPriority = 0,\n } = child.props;\n const order = items.length;\n\n items.push({\n align,\n element: child,\n id: buildItemId(contentKey, child, order),\n leadingDecorations: pendingLeadingDecorations,\n order,\n overflowGroup,\n overflowGroupKey: buildOverflowGroupKey(contentKey, overflowGroup),\n overflowLabel,\n overflowMode,\n overflowPriority,\n contentKey,\n trailingDecorations: [],\n });\n\n pendingLeadingDecorations = [];\n }\n\n if (pendingLeadingDecorations.length > 0 && items.length > 0) {\n items[items.length - 1]?.trailingDecorations.push(\n ...pendingLeadingDecorations,\n );\n }\n\n return items;\n}\n\nfunction normalizeExplicitContent(\n children: ToolbarChild[],\n): ToolbarContentModel[] | null {\n const content: ToolbarContentModel[] = [];\n\n for (const [index, child] of children.entries()) {\n if (!isToolbarContentElement(child)) {\n continue;\n }\n\n const {\n children: contentChildren,\n position,\n ...contentProps\n } = child.props;\n const contentKey =\n child.key != null ? String(child.key) : `${position}-content-${index}`;\n const items = normalizeContentItems(contentChildren, contentKey);\n\n if (items == null) {\n return null;\n }\n\n content.push({\n implicit: false,\n items,\n key: contentKey,\n position,\n props: contentProps,\n ref: getRefFromChildren(child),\n });\n }\n\n return content;\n}\n\nfunction normalizeFlatChildren(children: ToolbarChild[]) {\n const buckets: Record<ToolbarContentPosition, ToolbarChild[]> = {\n start: [],\n center: [],\n end: [],\n };\n let currentPosition: ToolbarContentPosition = \"start\";\n\n for (const child of children) {\n if (isTooltrayElement(child)) {\n currentPosition = child.props.align ?? \"start\";\n buckets[currentPosition].push(child);\n continue;\n }\n\n if (isDividerElement(child)) {\n buckets[currentPosition].push(child);\n continue;\n }\n\n return null;\n }\n\n return (Object.keys(buckets) as ToolbarContentPosition[]).reduce<\n ToolbarContentModel[]\n >((content, position) => {\n const contentKey = `${position}-implicit`;\n const contentItems = normalizeContentItems(buckets[position], contentKey);\n\n if (contentItems == null || contentItems.length === 0) {\n return content;\n }\n\n content.push({\n implicit: true,\n items: contentItems,\n key: contentKey,\n position,\n props: {},\n ref: null,\n });\n\n return content;\n }, []);\n}\n\nexport function normalizeToolbarChildren(children: ReactNode): ToolbarModel {\n const flattenedChildren = flattenToolbarChildren(children);\n const hasContentChildren = flattenedChildren.some(isToolbarContentElement);\n const hasOnlyContent =\n hasContentChildren && flattenedChildren.every(isToolbarContentElement);\n const hasOnlyFlatChildren = flattenedChildren.every(\n (child) => isTooltrayElement(child) || isDividerElement(child),\n );\n\n if (hasOnlyContent) {\n const content = normalizeExplicitContent(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"explicit\",\n content,\n };\n }\n\n if (hasOnlyFlatChildren) {\n const content = normalizeFlatChildren(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"flat\",\n content,\n };\n }\n\n return {\n mode: \"invalid\",\n content: [],\n };\n}\n"],"names":["Children","isValidElement","Fragment","ToolbarContent","Tooltray","Divider","getRefFromChildren"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolbarUtils.js","sources":["../src/toolbar/toolbarUtils.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { Divider } from \"../divider\";\nimport { getRefFromChildren } from \"../utils\";\n\nimport { ToolbarContent, type ToolbarContentProps } from \"./ToolbarContent\";\nimport { Tooltray, type TooltrayProps } from \"./Tooltray\";\n\nexport type ToolbarMode = \"explicit\" | \"flat\" | \"invalid\";\n\ntype ToolbarChild = Exclude<ReactNode, boolean | null | undefined>;\ntype ToolbarContentPosition = ToolbarContentProps[\"position\"];\ntype TooltrayOverflowMode = NonNullable<TooltrayProps[\"overflowMode\"]>;\n\nexport interface ToolbarOverflowItem {\n align: NonNullable<TooltrayProps[\"align\"]>;\n element: ReactElement<TooltrayProps>;\n id: string;\n leadingDecorations: ReactElement[];\n order: number;\n overflowGroup: string;\n overflowGroupKey: string;\n overflowLabel?: string;\n overflowMode: TooltrayOverflowMode;\n overflowPriority: number;\n contentKey: string;\n trailingDecorations: ReactElement[];\n}\n\nexport interface ToolbarOverflowRenderSlot {\n item: ToolbarOverflowItem;\n overflowed: boolean;\n showLeadingDecorations: boolean;\n showTrailingDecorations: boolean;\n triggerGroupKey?: string;\n}\n\nexport interface ToolbarContentModel {\n implicit: boolean;\n items: ToolbarOverflowItem[];\n key: string;\n position: ToolbarContentPosition;\n props: Omit<ToolbarContentProps, \"children\" | \"position\">;\n ref: Ref<HTMLDivElement> | null;\n}\n\nexport interface ToolbarModel {\n mode: ToolbarMode;\n content: ToolbarContentModel[];\n}\n\nexport function buildContentOverflowRenderSlots(\n items: ToolbarOverflowItem[],\n overflowedIds: Set<string>,\n activeNamedGroupKeys: Set<string>,\n) {\n const triggerGroupByItemId = new Map<string, string>();\n\n for (const groupKey of activeNamedGroupKeys) {\n const anchorItem = items.find((item) => {\n return overflowedIds.has(item.id) && item.overflowGroupKey === groupKey;\n });\n\n if (anchorItem) {\n triggerGroupByItemId.set(anchorItem.id, groupKey);\n }\n }\n\n const slots: ToolbarOverflowRenderSlot[] = [];\n let hasSurvivingPredecessor = false;\n\n for (const item of items) {\n const overflowed = overflowedIds.has(item.id);\n const triggerGroupKey = triggerGroupByItemId.get(item.id);\n const survives = !overflowed || triggerGroupKey != null;\n\n if (overflowed && !triggerGroupKey) {\n continue;\n }\n\n slots.push({\n item,\n overflowed,\n showLeadingDecorations:\n item.leadingDecorations.length > 0 &&\n hasSurvivingPredecessor &&\n survives,\n showTrailingDecorations:\n !overflowed && item.trailingDecorations.length > 0,\n triggerGroupKey,\n });\n\n if (survives) {\n hasSurvivingPredecessor = true;\n }\n }\n\n return slots;\n}\n\nexport function flattenToolbarChildren(children: ReactNode): ToolbarChild[] {\n const flattened: ToolbarChild[] = [];\n\n Children.forEach(children, (child) => {\n if (child == null || typeof child === \"boolean\") {\n return;\n }\n\n if (\n isValidElement<{ children?: ReactNode }>(child) &&\n child.type === Fragment\n ) {\n flattened.push(...flattenToolbarChildren(child.props.children));\n return;\n }\n\n flattened.push(child);\n });\n\n return flattened;\n}\n\nfunction isToolbarContentElement(\n child: ToolbarChild,\n): child is ReactElement<ToolbarContentProps> {\n return isValidElement(child) && child.type === ToolbarContent;\n}\n\nfunction isTooltrayElement(\n child: ToolbarChild,\n): child is ReactElement<TooltrayProps> {\n return isValidElement(child) && child.type === Tooltray;\n}\n\nfunction isDividerElement(child: ToolbarChild): child is ReactElement {\n return isValidElement(child) && child.type === Divider;\n}\n\nfunction buildItemId(\n contentKey: string,\n element: ReactElement<TooltrayProps>,\n order: number,\n) {\n const elementKey =\n element.key != null ? String(element.key) : `tray-${order}`;\n return `${contentKey}-${elementKey}-${order}`;\n}\n\nfunction buildOverflowGroupKey(contentKey: string, overflowGroup: string) {\n return overflowGroup === \"shared\"\n ? \"shared\"\n : `${contentKey}:${overflowGroup}`;\n}\n\nfunction normalizeContentItems(\n children: ReactNode,\n contentKey: string,\n): ToolbarOverflowItem[] | null {\n const flattenedChildren = flattenToolbarChildren(children);\n const items: ToolbarOverflowItem[] = [];\n let pendingLeadingDecorations: ReactElement[] = [];\n\n for (const child of flattenedChildren) {\n if (isDividerElement(child)) {\n pendingLeadingDecorations.push(child);\n continue;\n }\n\n if (!isTooltrayElement(child)) {\n return null;\n }\n\n const {\n align = \"start\",\n overflowGroup = \"shared\",\n overflowLabel,\n overflowMode = \"independent\",\n overflowPriority = 0,\n } = child.props;\n const order = items.length;\n\n items.push({\n align,\n element: child,\n id: buildItemId(contentKey, child, order),\n leadingDecorations: pendingLeadingDecorations,\n order,\n overflowGroup,\n overflowGroupKey: buildOverflowGroupKey(contentKey, overflowGroup),\n overflowLabel,\n overflowMode,\n overflowPriority,\n contentKey,\n trailingDecorations: [],\n });\n\n pendingLeadingDecorations = [];\n }\n\n if (pendingLeadingDecorations.length > 0 && items.length > 0) {\n items[items.length - 1]?.trailingDecorations.push(\n ...pendingLeadingDecorations,\n );\n }\n\n return items;\n}\n\nfunction normalizeExplicitContent(\n children: ToolbarChild[],\n): ToolbarContentModel[] | null {\n const content: ToolbarContentModel[] = [];\n\n for (const [index, child] of children.entries()) {\n if (!isToolbarContentElement(child)) {\n continue;\n }\n\n const {\n children: contentChildren,\n position,\n ...contentProps\n } = child.props;\n const contentKey =\n child.key != null ? String(child.key) : `${position}-content-${index}`;\n const items = normalizeContentItems(contentChildren, contentKey);\n\n if (items == null) {\n return null;\n }\n\n content.push({\n implicit: false,\n items,\n key: contentKey,\n position,\n props: contentProps,\n ref: getRefFromChildren(child),\n });\n }\n\n return content;\n}\n\nfunction normalizeFlatChildren(children: ToolbarChild[]) {\n const buckets: Record<ToolbarContentPosition, ToolbarChild[]> = {\n start: [],\n center: [],\n end: [],\n };\n let currentPosition: ToolbarContentPosition = \"start\";\n\n for (const child of children) {\n if (isTooltrayElement(child)) {\n currentPosition = child.props.align ?? \"start\";\n buckets[currentPosition].push(child);\n continue;\n }\n\n if (isDividerElement(child)) {\n buckets[currentPosition].push(child);\n continue;\n }\n\n return null;\n }\n\n return (Object.keys(buckets) as ToolbarContentPosition[]).reduce<\n ToolbarContentModel[]\n >((content, position) => {\n const contentKey = `${position}-implicit`;\n const contentItems = normalizeContentItems(buckets[position], contentKey);\n\n if (contentItems == null || contentItems.length === 0) {\n return content;\n }\n\n content.push({\n implicit: true,\n items: contentItems,\n key: contentKey,\n position,\n props: {},\n ref: null,\n });\n\n return content;\n }, []);\n}\n\nexport function normalizeToolbarChildren(children: ReactNode): ToolbarModel {\n const flattenedChildren = flattenToolbarChildren(children);\n const hasContentChildren = flattenedChildren.some(isToolbarContentElement);\n const hasOnlyContent =\n hasContentChildren && flattenedChildren.every(isToolbarContentElement);\n const hasOnlyFlatChildren = flattenedChildren.every(\n (child) => isTooltrayElement(child) || isDividerElement(child),\n );\n\n if (hasOnlyContent) {\n const content = normalizeExplicitContent(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"explicit\",\n content,\n };\n }\n\n if (hasOnlyFlatChildren) {\n const content = normalizeFlatChildren(flattenedChildren);\n\n if (content == null) {\n return { mode: \"invalid\", content: [] };\n }\n\n return {\n mode: \"flat\",\n content,\n };\n }\n\n return {\n mode: \"invalid\",\n content: [],\n };\n}\n"],"names":["Children","isValidElement","Fragment","ToolbarContent","Tooltray","Divider","getRefFromChildren"],"mappings":"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"}
|
|
@@ -32,8 +32,10 @@ function getDelay(value, prop, pointerType) {
|
|
|
32
32
|
}
|
|
33
33
|
const useAriaAnnounce = (context, { delay = 0 }) => {
|
|
34
34
|
const { open, dataRef, refs } = context;
|
|
35
|
-
const pointerTypeRef = React.useRef(
|
|
36
|
-
|
|
35
|
+
const pointerTypeRef = React.useRef(
|
|
36
|
+
void 0
|
|
37
|
+
);
|
|
38
|
+
const timeoutRef = React.useRef(void 0);
|
|
37
39
|
const blockMouseMoveRef = React.useRef(true);
|
|
38
40
|
const { announce } = useAriaAnnouncer.useAriaAnnouncer();
|
|
39
41
|
useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAriaAnnounce.js","sources":["../src/tooltip/useAriaAnnounce.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { type PointerEvent, useEffect, useRef } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nfunction getDocument(floating: HTMLElement | null) {\n return floating?.ownerDocument ?? document;\n}\n\n// TODO: Check whether can be anything more restrictive than `any`\n// biome-ignore lint/suspicious/noExplicitAny: see comment above\nfunction getWindow(value: any) {\n return getDocument(value).defaultView ?? window;\n}\n\nfunction isElement(value: unknown): value is HTMLElement {\n return value ? value instanceof getWindow(value).Element : false;\n}\n\nfunction getDelay(\n value: Props[\"delay\"],\n prop: \"open\" | \"close\",\n pointerType?: PointerEvent[\"pointerType\"],\n) {\n if (pointerType && pointerType !== \"mouse\") {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n return value?.[prop];\n}\n\ntype Props = {\n delay?: number | Partial<{ open: number; close: number }>;\n};\n\nexport const useAriaAnnounce = (\n context: FloatingContext,\n { delay = 0 }: Props,\n): ElementProps => {\n const { open, dataRef, refs } = context;\n\n const pointerTypeRef = useRef<PointerEvent[\"pointerType\"]>();\n const timeoutRef = useRef<number>();\n const blockMouseMoveRef = useRef(true);\n const { announce } = useAriaAnnouncer();\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n }\n });\n\n useEffect(() => {\n const reference = refs.reference.current;\n function announceFloating() {\n const tooltipContent = refs.floating.current?.innerText;\n\n if (tooltipContent) {\n announce(tooltipContent);\n }\n }\n\n function onMouseEnter(event: MouseEvent) {\n clearTimeout(timeoutRef.current);\n\n if (open) {\n return;\n }\n\n blockMouseMoveRef.current = false;\n dataRef.current.openEvent = event;\n\n if (delay) {\n timeoutRef.current = window.setTimeout(\n () => {\n announceFloating();\n },\n getDelay(delay, \"open\", pointerTypeRef.current),\n );\n } else {\n announceFloating();\n }\n }\n\n if (isElement(reference)) {\n reference.addEventListener(\"mouseenter\", onMouseEnter);\n return () => {\n reference.removeEventListener(\"mouseenter\", onMouseEnter);\n };\n }\n }, [dataRef, delay, open, refs.reference, refs.floating, announce]);\n\n function setPointerRef(event: PointerEvent) {\n pointerTypeRef.current = event.pointerType;\n }\n\n return {\n reference: {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n },\n floating: {\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n },\n };\n};\n"],"names":["useRef","useAriaAnnouncer","useIsomorphicLayoutEffect","useEffect"],"mappings":";;;;;;;;;;;;;;AAKA,SAAS,YAAY,QAAA,EAA8B;AACjD,EAAA,OAAA,CAAO,qCAAU,aAAA,KAAiB,QAAA;AACpC;AAIA,SAAS,UAAU,KAAA,EAAY;AAC7B,EAAA,OAAO,WAAA,CAAY,KAAK,CAAA,CAAE,WAAA,IAAe,MAAA;AAC3C;AAEA,SAAS,UAAU,KAAA,EAAsC;AACvD,EAAA,OAAO,KAAA,GAAQ,KAAA,YAAiB,SAAA,CAAU,KAAK,EAAE,OAAA,GAAU,KAAA;AAC7D;AAEA,SAAS,QAAA,CACP,KAAA,EACA,IAAA,EACA,WAAA,EACA;AACA,EAAA,IAAI,WAAA,IAAe,gBAAgB,OAAA,EAAS;AAC1C,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAQ,IAAA,CAAA;AACjB;AAMO,MAAM,kBAAkB,CAC7B,OAAA,EACA,EAAE,KAAA,GAAQ,GAAE,KACK;AACjB,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK,GAAI,OAAA;AAEhC,EAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"useAriaAnnounce.js","sources":["../src/tooltip/useAriaAnnounce.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { type PointerEvent, useEffect, useRef } from \"react\";\nimport { useAriaAnnouncer } from \"../aria-announcer\";\nimport { useIsomorphicLayoutEffect } from \"../utils\";\n\nfunction getDocument(floating: HTMLElement | null) {\n return floating?.ownerDocument ?? document;\n}\n\n// TODO: Check whether can be anything more restrictive than `any`\n// biome-ignore lint/suspicious/noExplicitAny: see comment above\nfunction getWindow(value: any) {\n return getDocument(value).defaultView ?? window;\n}\n\nfunction isElement(value: unknown): value is HTMLElement {\n return value ? value instanceof getWindow(value).Element : false;\n}\n\nfunction getDelay(\n value: Props[\"delay\"],\n prop: \"open\" | \"close\",\n pointerType?: PointerEvent[\"pointerType\"],\n) {\n if (pointerType && pointerType !== \"mouse\") {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return value;\n }\n\n return value?.[prop];\n}\n\ntype Props = {\n delay?: number | Partial<{ open: number; close: number }>;\n};\n\nexport const useAriaAnnounce = (\n context: FloatingContext,\n { delay = 0 }: Props,\n): ElementProps => {\n const { open, dataRef, refs } = context;\n\n const pointerTypeRef = useRef<PointerEvent[\"pointerType\"] | undefined>(\n undefined,\n );\n const timeoutRef = useRef<number | undefined>(undefined);\n const blockMouseMoveRef = useRef(true);\n const { announce } = useAriaAnnouncer();\n\n useIsomorphicLayoutEffect(() => {\n if (!open) {\n pointerTypeRef.current = undefined;\n }\n });\n\n useEffect(() => {\n const reference = refs.reference.current;\n function announceFloating() {\n const tooltipContent = refs.floating.current?.innerText;\n\n if (tooltipContent) {\n announce(tooltipContent);\n }\n }\n\n function onMouseEnter(event: MouseEvent) {\n clearTimeout(timeoutRef.current);\n\n if (open) {\n return;\n }\n\n blockMouseMoveRef.current = false;\n dataRef.current.openEvent = event;\n\n if (delay) {\n timeoutRef.current = window.setTimeout(\n () => {\n announceFloating();\n },\n getDelay(delay, \"open\", pointerTypeRef.current),\n );\n } else {\n announceFloating();\n }\n }\n\n if (isElement(reference)) {\n reference.addEventListener(\"mouseenter\", onMouseEnter);\n return () => {\n reference.removeEventListener(\"mouseenter\", onMouseEnter);\n };\n }\n }, [dataRef, delay, open, refs.reference, refs.floating, announce]);\n\n function setPointerRef(event: PointerEvent) {\n pointerTypeRef.current = event.pointerType;\n }\n\n return {\n reference: {\n onPointerDown: setPointerRef,\n onPointerEnter: setPointerRef,\n },\n floating: {\n onMouseEnter() {\n clearTimeout(timeoutRef.current);\n },\n },\n };\n};\n"],"names":["useRef","useAriaAnnouncer","useIsomorphicLayoutEffect","useEffect"],"mappings":"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"}
|