@danske/sapphire-react-lab 0.106.2 → 0.107.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/build/cjs/index.js +2557 -64
- package/build/cjs/index.js.map +1 -1
- package/build/esm/core/src/BreakpointProvider/useBreakpointContext.js +11 -0
- package/build/esm/core/src/BreakpointProvider/useBreakpointContext.js.map +1 -0
- package/build/esm/core/src/Flex/src/Flex.js +64 -0
- package/build/esm/core/src/Flex/src/Flex.js.map +1 -0
- package/build/esm/core/src/Grid/src/Grid.js +55 -0
- package/build/esm/core/src/Grid/src/Grid.js.map +1 -0
- package/build/esm/core/src/Icon/src/Icon.js +37 -0
- package/build/esm/core/src/Icon/src/Icon.js.map +1 -0
- package/build/esm/core/src/ListBox/i18n/da-DK.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/de-DE.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/en-US.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/fi-FI.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/index.js.map +1 -0
- package/build/esm/core/src/ListBox/i18n/nb-NO.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/pl-PL.json.js +7 -0
- package/build/esm/core/src/ListBox/i18n/sv-SE.json.js +7 -0
- package/build/esm/core/src/ListBox/src/ListBoxContext.js +8 -0
- package/build/esm/core/src/ListBox/src/ListBoxContext.js.map +1 -0
- package/build/esm/core/src/ListBox/src/ListBoxEmptyState.js +26 -0
- package/build/esm/core/src/ListBox/src/ListBoxEmptyState.js.map +1 -0
- package/build/esm/core/src/ListBox/src/ListBoxItemSkeleton.js +37 -0
- package/build/esm/core/src/ListBox/src/ListBoxItemSkeleton.js.map +1 -0
- package/build/esm/core/src/ListBox/src/ListBoxOption.js +105 -0
- package/build/esm/core/src/ListBox/src/ListBoxOption.js.map +1 -0
- package/build/esm/core/src/ListBox/src/ListBoxSection.js +86 -0
- package/build/esm/core/src/ListBox/src/ListBoxSection.js.map +1 -0
- package/build/esm/core/src/ListBox/src/StatelessListBox.js +162 -0
- package/build/esm/core/src/ListBox/src/StatelessListBox.js.map +1 -0
- package/build/esm/core/src/Pagination/src/usePaginationContext.js +8 -0
- package/build/esm/core/src/Pagination/src/usePaginationContext.js.map +1 -0
- package/build/esm/core/src/Popover/src/Popover.js +62 -0
- package/build/esm/core/src/Popover/src/Popover.js.map +1 -0
- package/build/esm/core/src/Radio/src/RadioBox.js +58 -0
- package/build/esm/core/src/Radio/src/RadioBox.js.map +1 -0
- package/build/esm/core/src/Separator/src/Separator.js +32 -0
- package/build/esm/core/src/Separator/src/Separator.js.map +1 -0
- package/build/esm/core/src/Skeleton/src/Skeleton.js +19 -0
- package/build/esm/core/src/Skeleton/src/Skeleton.js.map +1 -0
- package/build/esm/core/src/Skeleton/src/SkeletonCircle.js +39 -0
- package/build/esm/core/src/Skeleton/src/SkeletonCircle.js.map +1 -0
- package/build/esm/core/src/Skeleton/src/SkeletonText.js +59 -0
- package/build/esm/core/src/Skeleton/src/SkeletonText.js.map +1 -0
- package/build/esm/core/src/Skeleton/src/animation.js +4 -0
- package/build/esm/core/src/Skeleton/src/animation.js.map +1 -0
- package/build/esm/core/src/ThemeRoot/src/ThemeRoot.js +42 -0
- package/build/esm/core/src/ThemeRoot/src/ThemeRoot.js.map +1 -0
- package/build/esm/core/src/View/src/View.js +60 -0
- package/build/esm/core/src/View/src/View.js.map +1 -0
- package/build/esm/core/src/utils/SapphireStyleProps.js +48 -0
- package/build/esm/core/src/utils/SapphireStyleProps.js.map +1 -0
- package/build/esm/core/src/utils/useCollectionFocusProxy.js +53 -0
- package/build/esm/core/src/utils/useCollectionFocusProxy.js.map +1 -0
- package/build/esm/core/src/utils/usePreventTouchEnd.js +16 -0
- package/build/esm/core/src/utils/usePreventTouchEnd.js.map +1 -0
- package/build/esm/core/src/utils/useSapphireStyleProps.js +179 -0
- package/build/esm/core/src/utils/useSapphireStyleProps.js.map +1 -0
- package/build/esm/core/src/utils/useSapphireTextStyleProps.js +9 -0
- package/build/esm/core/src/utils/useSapphireTextStyleProps.js.map +1 -0
- package/build/esm/core/src/utils/useScrollCheck.js +38 -0
- package/build/esm/core/src/utils/useScrollCheck.js.map +1 -0
- package/build/esm/core/src/utils/useThemeCheck.js +14 -0
- package/build/esm/core/src/utils/useThemeCheck.js.map +1 -0
- package/build/esm/core/src/utils/virtualization/ListWithLoadingStateLayout.js +158 -0
- package/build/esm/core/src/utils/virtualization/ListWithLoadingStateLayout.js.map +1 -0
- package/build/esm/core/src/utils/virtualization/VariableWidthListLayout.js +69 -0
- package/build/esm/core/src/utils/virtualization/VariableWidthListLayout.js.map +1 -0
- package/build/esm/core/src/utils/virtualization/VirtualizerWithLoadingSkeleton.js +40 -0
- package/build/esm/core/src/utils/virtualization/VirtualizerWithLoadingSkeleton.js.map +1 -0
- package/build/esm/core/src/utils/virtualization/useListWithLoadingStateLayout.js +35 -0
- package/build/esm/core/src/utils/virtualization/useListWithLoadingStateLayout.js.map +1 -0
- package/build/esm/index.js +23 -20
- package/build/esm/index.js.map +1 -1
- package/build/esm/lab/src/Accordion/index.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/Accordion.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/AccordionContext.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/AccordionHeading.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/AccordionItem.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/AccordionPanel.js.map +1 -0
- package/build/esm/lab/src/Accordion/src/utils.js.map +1 -0
- package/build/esm/lab/src/Alert/src/Alert.js.map +1 -0
- package/build/esm/lab/src/Amount/src/Amount.js.map +1 -0
- package/build/esm/lab/src/Amount/src/useGroupAmount.js.map +1 -0
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/da-DK.json.js +2 -2
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/de-DE.json.js +2 -2
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/en-US.json.js +2 -2
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/fi-FI.json.js +2 -2
- package/build/esm/lab/src/Autocomplete/i18n/index.js +20 -0
- package/build/esm/lab/src/Autocomplete/i18n/index.js.map +1 -0
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/nb-NO.json.js +2 -2
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/pl-PL.json.js +2 -2
- package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/sv-SE.json.js +2 -2
- package/build/esm/lab/src/Autocomplete/src/Autocomplete.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItem.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItemLink.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbItemStatic.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/Breadcrumbs.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/BreadcrumbsSeparator.js.map +1 -0
- package/build/esm/lab/src/Breadcrumbs/src/useBreadcrumbThreshold.js.map +1 -0
- package/build/esm/lab/src/DataGrid/index.js +9 -0
- package/build/esm/lab/src/DataGrid/index.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/DataGrid.js +463 -0
- package/build/esm/lab/src/DataGrid/src/DataGrid.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/DataGridCellContext.js +6 -0
- package/build/esm/lab/src/DataGrid/src/DataGridCellContext.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/EditableCellContent.js +125 -0
- package/build/esm/lab/src/DataGrid/src/EditableCellContent.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/createDataGridColumnHelper.js +15 -0
- package/build/esm/lab/src/DataGrid/src/createDataGridColumnHelper.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/useGridKeyboardNavigation.js +417 -0
- package/build/esm/lab/src/DataGrid/src/useGridKeyboardNavigation.js.map +1 -0
- package/build/esm/lab/src/DataGrid/src/useMeasureColumnWidths.js +55 -0
- package/build/esm/lab/src/DataGrid/src/useMeasureColumnWidths.js.map +1 -0
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/da-DK.json.js +2 -2
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/de-DE.json.js +2 -2
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/en-US.json.js +2 -2
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/fi-FI.json.js +2 -2
- package/build/esm/lab/src/FileDropzone/i18n/index.js.map +1 -0
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/nb-NO.json.js +2 -2
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/pl-PL.json.js +2 -2
- package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/sv-SE.json.js +2 -2
- package/build/esm/lab/src/FileDropzone/src/FileDropzone.js.map +1 -0
- package/build/esm/lab/src/FileDropzone/src/FileTrigger.js.map +1 -0
- package/build/esm/lab/src/FileDropzone/src/utils.js.map +1 -0
- package/build/esm/lab/src/Filtering/src/FilterDropdown.js.map +1 -0
- package/build/esm/{Filtering → lab/src/Filtering}/src/SearchableSelectFilter.js +2 -0
- package/build/esm/lab/src/Filtering/src/SearchableSelectFilter.js.map +1 -0
- package/build/esm/lab/src/Flag/src/Flag.js.map +1 -0
- package/build/esm/lab/src/LabeledValue/src/LabeledValue.js.map +1 -0
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/da-DK.json.js +2 -2
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/de-DE.json.js +2 -2
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/en-US.json.js +2 -2
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/fi-FI.json.js +2 -2
- package/build/esm/lab/src/NumberField/i18n/index.js.map +1 -0
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/nb-NO.json.js +2 -2
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/pl-PL.json.js +2 -2
- package/build/esm/{NumberField → lab/src/NumberField}/i18n/sv-SE.json.js +2 -2
- package/build/esm/lab/src/NumberField/src/NumberField.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/StepperButton.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/cursorHelpers.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/formatHelpers.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/keyboardHelpers.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/useAutofillStyle.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/useNumberFieldFormatting.js.map +1 -0
- package/build/esm/lab/src/NumberField/src/useSapphireNumberField.js.map +1 -0
- package/build/esm/lab/src/ProgressIndicator/src/ProgressIndicator.js.map +1 -0
- package/build/esm/lab/src/Sidebar/index.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Body.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/ExpandableItem.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Header.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Item.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/List.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Panel.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/ResponsiveSidebarContext.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/SecondarySidebarContext.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Section.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/Sidebar.js.map +1 -0
- package/build/esm/lab/src/Sidebar/src/useSidebar.js.map +1 -0
- package/build/esm/lab/src/Slider/index.js.map +1 -0
- package/build/esm/lab/src/Slider/src/Slider.js.map +1 -0
- package/build/esm/lab/src/TagGroup/src/Tag.js.map +1 -0
- package/build/esm/lab/src/TagGroup/src/TagGroup.js.map +1 -0
- package/build/esm/lab/src/TagGroup/src/TagItem.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/da-DK.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/da-DK.json.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/de-DE.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/de-DE.json.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/en-US.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/en-US.json.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/fi-FI.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/fi-FI.json.js.map +1 -0
- package/build/esm/lab/src/TimeField/i18n/index.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/nb-NO.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/nb-NO.json.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/pl-PL.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/pl-PL.json.js.map +1 -0
- package/build/esm/{TimeField → lab/src/TimeField}/i18n/sv-SE.json.js +2 -2
- package/build/esm/lab/src/TimeField/i18n/sv-SE.json.js.map +1 -0
- package/build/esm/lab/src/TimeField/src/TimeField.js.map +1 -0
- package/build/esm/lab/src/TimeField/src/TimeFieldSegment.js.map +1 -0
- package/build/esm/lab/src/TruncateOverflow/src/TruncateOverflow.js +46 -0
- package/build/esm/lab/src/TruncateOverflow/src/TruncateOverflow.js.map +1 -0
- package/build/index.d.ts +553 -10
- package/package.json +8 -8
- package/build/esm/Accordion/index.js.map +0 -1
- package/build/esm/Accordion/src/Accordion.js.map +0 -1
- package/build/esm/Accordion/src/AccordionContext.js.map +0 -1
- package/build/esm/Accordion/src/AccordionHeading.js.map +0 -1
- package/build/esm/Accordion/src/AccordionItem.js.map +0 -1
- package/build/esm/Accordion/src/AccordionPanel.js.map +0 -1
- package/build/esm/Accordion/src/utils.js.map +0 -1
- package/build/esm/Alert/src/Alert.js.map +0 -1
- package/build/esm/Amount/src/Amount.js.map +0 -1
- package/build/esm/Amount/src/useGroupAmount.js.map +0 -1
- package/build/esm/Autocomplete/i18n/index.js.map +0 -1
- package/build/esm/Autocomplete/src/Autocomplete.js.map +0 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItem.js.map +0 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItemLink.js.map +0 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbItemStatic.js.map +0 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbOverflowMenu.js.map +0 -1
- package/build/esm/Breadcrumbs/src/Breadcrumbs.js.map +0 -1
- package/build/esm/Breadcrumbs/src/BreadcrumbsSeparator.js.map +0 -1
- package/build/esm/Breadcrumbs/src/useBreadcrumbThreshold.js.map +0 -1
- package/build/esm/FileDropzone/i18n/index.js.map +0 -1
- package/build/esm/FileDropzone/src/FileDropzone.js.map +0 -1
- package/build/esm/FileDropzone/src/FileTrigger.js.map +0 -1
- package/build/esm/FileDropzone/src/utils.js.map +0 -1
- package/build/esm/Filtering/src/FilterDropdown.js.map +0 -1
- package/build/esm/Filtering/src/SearchableSelectFilter.js.map +0 -1
- package/build/esm/Flag/src/Flag.js.map +0 -1
- package/build/esm/LabeledValue/src/LabeledValue.js.map +0 -1
- package/build/esm/NumberField/i18n/index.js.map +0 -1
- package/build/esm/NumberField/src/NumberField.js.map +0 -1
- package/build/esm/NumberField/src/StepperButton.js.map +0 -1
- package/build/esm/NumberField/src/cursorHelpers.js.map +0 -1
- package/build/esm/NumberField/src/formatHelpers.js.map +0 -1
- package/build/esm/NumberField/src/keyboardHelpers.js.map +0 -1
- package/build/esm/NumberField/src/useAutofillStyle.js.map +0 -1
- package/build/esm/NumberField/src/useNumberFieldFormatting.js.map +0 -1
- package/build/esm/NumberField/src/useSapphireNumberField.js.map +0 -1
- package/build/esm/ProgressIndicator/src/ProgressIndicator.js.map +0 -1
- package/build/esm/Sidebar/index.js.map +0 -1
- package/build/esm/Sidebar/src/Body.js.map +0 -1
- package/build/esm/Sidebar/src/ExpandableItem.js.map +0 -1
- package/build/esm/Sidebar/src/Header.js.map +0 -1
- package/build/esm/Sidebar/src/Item.js.map +0 -1
- package/build/esm/Sidebar/src/List.js.map +0 -1
- package/build/esm/Sidebar/src/Panel.js.map +0 -1
- package/build/esm/Sidebar/src/ResponsiveSidebarContext.js.map +0 -1
- package/build/esm/Sidebar/src/SecondarySidebarContext.js.map +0 -1
- package/build/esm/Sidebar/src/Section.js.map +0 -1
- package/build/esm/Sidebar/src/Sidebar.js.map +0 -1
- package/build/esm/Sidebar/src/useSidebar.js.map +0 -1
- package/build/esm/Slider/index.js.map +0 -1
- package/build/esm/Slider/src/Slider.js.map +0 -1
- package/build/esm/TagGroup/src/Tag.js.map +0 -1
- package/build/esm/TagGroup/src/TagGroup.js.map +0 -1
- package/build/esm/TagGroup/src/TagItem.js.map +0 -1
- package/build/esm/TimeField/i18n/index.js.map +0 -1
- package/build/esm/TimeField/src/TimeField.js.map +0 -1
- package/build/esm/TimeField/src/TimeFieldSegment.js.map +0 -1
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/da-DK.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/de-DE.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/en-US.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/fi-FI.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/index.js +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/nb-NO.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/pl-PL.json.js.map +0 -0
- /package/build/esm/{TimeField → core/src/ListBox}/i18n/sv-SE.json.js.map +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/index.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/Accordion.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionContext.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionHeading.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionItem.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/AccordionPanel.js +0 -0
- /package/build/esm/{Accordion → lab/src/Accordion}/src/utils.js +0 -0
- /package/build/esm/{Alert → lab/src/Alert}/src/Alert.js +0 -0
- /package/build/esm/{Amount → lab/src/Amount}/src/Amount.js +0 -0
- /package/build/esm/{Amount → lab/src/Amount}/src/useGroupAmount.js +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/da-DK.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/de-DE.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/en-US.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/fi-FI.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/nb-NO.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/pl-PL.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/i18n/sv-SE.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/Autocomplete}/src/Autocomplete.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItem.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItemLink.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbItemStatic.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbOverflowMenu.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/Breadcrumbs.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/BreadcrumbsSeparator.js +0 -0
- /package/build/esm/{Breadcrumbs → lab/src/Breadcrumbs}/src/useBreadcrumbThreshold.js +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/da-DK.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/de-DE.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/en-US.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/fi-FI.json.js.map +0 -0
- /package/build/esm/{Autocomplete → lab/src/FileDropzone}/i18n/index.js +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/nb-NO.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/pl-PL.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/i18n/sv-SE.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/FileDropzone.js +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/FileTrigger.js +0 -0
- /package/build/esm/{FileDropzone → lab/src/FileDropzone}/src/utils.js +0 -0
- /package/build/esm/{Filtering → lab/src/Filtering}/src/FilterDropdown.js +0 -0
- /package/build/esm/{Flag → lab/src/Flag}/src/Flag.js +0 -0
- /package/build/esm/{LabeledValue → lab/src/LabeledValue}/src/LabeledValue.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/da-DK.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/de-DE.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/en-US.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/fi-FI.json.js.map +0 -0
- /package/build/esm/{FileDropzone → lab/src/NumberField}/i18n/index.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/nb-NO.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/pl-PL.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/i18n/sv-SE.json.js.map +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/NumberField.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/StepperButton.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/cursorHelpers.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/formatHelpers.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/keyboardHelpers.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/useAutofillStyle.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/useNumberFieldFormatting.js +0 -0
- /package/build/esm/{NumberField → lab/src/NumberField}/src/useSapphireNumberField.js +0 -0
- /package/build/esm/{ProgressIndicator → lab/src/ProgressIndicator}/src/ProgressIndicator.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/index.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Body.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/ExpandableItem.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Header.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Item.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/List.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Panel.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/ResponsiveSidebarContext.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/SecondarySidebarContext.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Section.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/Sidebar.js +0 -0
- /package/build/esm/{Sidebar → lab/src/Sidebar}/src/useSidebar.js +0 -0
- /package/build/esm/{Slider → lab/src/Slider}/index.js +0 -0
- /package/build/esm/{Slider → lab/src/Slider}/src/Slider.js +0 -0
- /package/build/esm/{TagGroup → lab/src/TagGroup}/src/Tag.js +0 -0
- /package/build/esm/{TagGroup → lab/src/TagGroup}/src/TagGroup.js +0 -0
- /package/build/esm/{TagGroup → lab/src/TagGroup}/src/TagItem.js +0 -0
- /package/build/esm/{NumberField → lab/src/TimeField}/i18n/index.js +0 -0
- /package/build/esm/{TimeField → lab/src/TimeField}/src/TimeField.js +0 -0
- /package/build/esm/{TimeField → lab/src/TimeField}/src/TimeFieldSegment.js +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import React, { forwardRef, useState, useLayoutEffect, useCallback } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { useListBox } from 'react-aria/useListBox';
|
|
4
|
+
import { VirtualizerItem } from 'react-aria/private/virtualizer/VirtualizerItem';
|
|
5
|
+
import { useObjectRef } from 'react-aria/useObjectRef';
|
|
6
|
+
import { mergeProps } from 'react-aria/mergeProps';
|
|
7
|
+
import styles from '@danske/sapphire-css/components/listbox/listbox.module.css';
|
|
8
|
+
import { ListBoxContext } from './ListBoxContext.js';
|
|
9
|
+
import { ListBoxItemSkeleton } from './ListBoxItemSkeleton.js';
|
|
10
|
+
import { ListBoxOption } from './ListBoxOption.js';
|
|
11
|
+
import { ListBoxSection } from './ListBoxSection.js';
|
|
12
|
+
import { useListWithLoadingStateLayout } from '../../utils/virtualization/useListWithLoadingStateLayout.js';
|
|
13
|
+
import { VirtualizerWithLoadingSkeleton } from '../../utils/virtualization/VirtualizerWithLoadingSkeleton.js';
|
|
14
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
15
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
16
|
+
import '../../Popover/src/Popover.js';
|
|
17
|
+
import '@danske/sapphire-react-context';
|
|
18
|
+
import { useScrollCheck } from '../../utils/useScrollCheck.js';
|
|
19
|
+
import 'react-aria/useButton';
|
|
20
|
+
import { useCollectionFocusProxy } from '../../utils/useCollectionFocusProxy.js';
|
|
21
|
+
import { tokens } from '@danske/sapphire-css/themes';
|
|
22
|
+
import { ListBoxEmptyState } from './ListBoxEmptyState.js';
|
|
23
|
+
import { useMessageFormatter } from '@react-aria/i18n';
|
|
24
|
+
import intlMessages from '../i18n/index.js';
|
|
25
|
+
|
|
26
|
+
const _StatelessListBox = ({
|
|
27
|
+
loadingState,
|
|
28
|
+
loadingSkeletonRowsCount = 4,
|
|
29
|
+
state,
|
|
30
|
+
renderLoadingSkeleton = (index) => /* @__PURE__ */ React.createElement(ListBoxItemSkeleton, { key: index, index }),
|
|
31
|
+
onLoadMore,
|
|
32
|
+
hasScrollDividers = false,
|
|
33
|
+
connectedInputRef,
|
|
34
|
+
shouldUseVirtualFocus = Boolean(connectedInputRef),
|
|
35
|
+
disableSelectedStyles = false,
|
|
36
|
+
negativeSideMargin,
|
|
37
|
+
emptyState: emptyStateProp,
|
|
38
|
+
...otherProps
|
|
39
|
+
}, ref) => {
|
|
40
|
+
const { styleProps } = useSapphireStyleProps(otherProps);
|
|
41
|
+
const listBoxRef = useObjectRef(ref);
|
|
42
|
+
const { listBoxProps } = useListBox(
|
|
43
|
+
{
|
|
44
|
+
...otherProps,
|
|
45
|
+
shouldUseVirtualFocus,
|
|
46
|
+
isVirtualized: true
|
|
47
|
+
},
|
|
48
|
+
state,
|
|
49
|
+
listBoxRef
|
|
50
|
+
);
|
|
51
|
+
const formatMessage = useMessageFormatter(intlMessages);
|
|
52
|
+
const emptyState = emptyStateProp === null ? null : /* @__PURE__ */ React.createElement(ListBoxEmptyState, null, emptyStateProp || formatMessage("empty"));
|
|
53
|
+
const layout = useListWithLoadingStateLayout({
|
|
54
|
+
loadingState,
|
|
55
|
+
loadingSkeletonRowsCount,
|
|
56
|
+
sectionDividerHeight: 5,
|
|
57
|
+
headingHeight: 34
|
|
58
|
+
});
|
|
59
|
+
useCollectionFocusProxy({
|
|
60
|
+
state,
|
|
61
|
+
focusProxyRef: connectedInputRef,
|
|
62
|
+
collectionRef: listBoxRef
|
|
63
|
+
});
|
|
64
|
+
const { scrollCheckProps, isScrolled, isScrollable } = useScrollCheck(listBoxRef);
|
|
65
|
+
const constrainWidth = styleProps.style?.maxWidth !== void 0 || styleProps.style?.width !== void 0;
|
|
66
|
+
const [containerMaxWidth, setContainerMaxWidth] = useState(void 0);
|
|
67
|
+
useLayoutEffect(() => {
|
|
68
|
+
setContainerMaxWidth(
|
|
69
|
+
constrainWidth && listBoxRef.current ? listBoxRef.current.offsetWidth : void 0
|
|
70
|
+
);
|
|
71
|
+
}, [constrainWidth]);
|
|
72
|
+
const renderWrapper = useCallback(
|
|
73
|
+
(parent, reusableView, children, renderChildren) => {
|
|
74
|
+
if (reusableView.viewType === "section" && reusableView.content) {
|
|
75
|
+
return /* @__PURE__ */ React.createElement(
|
|
76
|
+
ListBoxSection,
|
|
77
|
+
{
|
|
78
|
+
key: reusableView.key,
|
|
79
|
+
item: reusableView.content,
|
|
80
|
+
layoutInfo: reusableView.layoutInfo,
|
|
81
|
+
virtualizer: reusableView.virtualizer,
|
|
82
|
+
childrenViews: children
|
|
83
|
+
},
|
|
84
|
+
renderChildren(children.filter((c) => c.viewType === "item"))
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
return /* @__PURE__ */ React.createElement(
|
|
88
|
+
VirtualizerItem,
|
|
89
|
+
{
|
|
90
|
+
key: reusableView.key,
|
|
91
|
+
layoutInfo: reusableView.layoutInfo,
|
|
92
|
+
virtualizer: reusableView.virtualizer,
|
|
93
|
+
parent: parent?.layoutInfo
|
|
94
|
+
},
|
|
95
|
+
reusableView.rendered
|
|
96
|
+
);
|
|
97
|
+
},
|
|
98
|
+
[]
|
|
99
|
+
);
|
|
100
|
+
return /* @__PURE__ */ React.createElement(
|
|
101
|
+
ListBoxContext.Provider,
|
|
102
|
+
{
|
|
103
|
+
value: {
|
|
104
|
+
state,
|
|
105
|
+
shouldUseVirtualFocus,
|
|
106
|
+
disableSelectedStyles,
|
|
107
|
+
containerMaxWidth
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/* @__PURE__ */ React.createElement(
|
|
111
|
+
VirtualizerWithLoadingSkeleton,
|
|
112
|
+
{
|
|
113
|
+
...mergeProps(listBoxProps, scrollCheckProps),
|
|
114
|
+
onLoadMore,
|
|
115
|
+
scrollDirection: "vertical",
|
|
116
|
+
autoFocus: Boolean(otherProps.autoFocus),
|
|
117
|
+
layout,
|
|
118
|
+
collection: state.collection,
|
|
119
|
+
persistedKeys: new Set(
|
|
120
|
+
[
|
|
121
|
+
...state.selectionManager.selectedKeys,
|
|
122
|
+
state.selectionManager.focusedKey
|
|
123
|
+
].filter((key) => key !== null)
|
|
124
|
+
),
|
|
125
|
+
className: clsx(
|
|
126
|
+
styles["sapphire-listbox"],
|
|
127
|
+
{
|
|
128
|
+
[styles["sapphire-listbox--selection"]]: !disableSelectedStyles
|
|
129
|
+
},
|
|
130
|
+
styleProps.className
|
|
131
|
+
),
|
|
132
|
+
style: {
|
|
133
|
+
...styleProps.style,
|
|
134
|
+
padding: void 0,
|
|
135
|
+
...negativeSideMargin ? {
|
|
136
|
+
marginLeft: typeof negativeSideMargin === "string" ? `calc(${negativeSideMargin} * -1)` : `-${negativeSideMargin}px`,
|
|
137
|
+
marginRight: typeof negativeSideMargin === "string" ? `calc(${negativeSideMargin} * -1)` : `-${negativeSideMargin}px`
|
|
138
|
+
} : {},
|
|
139
|
+
// Should be moved to css when we are a little more sure about what we want, and specially
|
|
140
|
+
// when/if we need the same feature in Sapphire Angular.
|
|
141
|
+
borderTop: hasScrollDividers && isScrolled ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}` : "",
|
|
142
|
+
borderBottom: hasScrollDividers && isScrollable ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}` : ""
|
|
143
|
+
},
|
|
144
|
+
renderWrapper,
|
|
145
|
+
renderLoadingSkeleton,
|
|
146
|
+
loadingSkeletonRowsCount,
|
|
147
|
+
emptyState,
|
|
148
|
+
ref: listBoxRef,
|
|
149
|
+
"aria-busy": loadingState && true
|
|
150
|
+
},
|
|
151
|
+
(kind, item) => {
|
|
152
|
+
const node = item;
|
|
153
|
+
if (kind === "item") {
|
|
154
|
+
return /* @__PURE__ */ React.createElement(ListBoxOption, { key: node.key, item: node });
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
);
|
|
160
|
+
};
|
|
161
|
+
forwardRef(_StatelessListBox);
|
|
162
|
+
//# sourceMappingURL=StatelessListBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatelessListBox.js","sources":["../../../../../../../core/src/ListBox/src/StatelessListBox.tsx"],"sourcesContent":["import React, {\n forwardRef,\n ForwardedRef,\n ReactElement,\n ReactNode,\n Ref,\n useCallback,\n useLayoutEffect,\n useState,\n RefObject,\n} from 'react';\nimport clsx from 'clsx';\nimport { AriaListBoxOptions, useListBox } from 'react-aria/useListBox';\nimport { VirtualizerItem } from 'react-aria/private/virtualizer/VirtualizerItem';\nimport { useObjectRef } from 'react-aria/useObjectRef';\nimport { mergeProps } from 'react-aria/mergeProps';\nimport { ListState } from 'react-stately/useListState';\nimport { ReusableView } from 'react-stately/useVirtualizerState';\nimport { Node } from '@react-types/shared';\nimport { AriaListBoxProps } from 'react-aria/useListBox';\nimport styles from '@danske/sapphire-css/components/listbox/listbox.module.css';\nimport { ListBoxContext } from './ListBoxContext';\nimport { ListBoxItemSkeleton } from './ListBoxItemSkeleton';\nimport { ListBoxOption } from './ListBoxOption';\nimport { ListBoxSection } from './ListBoxSection';\nimport { useListWithLoadingStateLayout } from '../../utils/virtualization/useListWithLoadingStateLayout';\nimport { VirtualizerWithLoadingSkeleton } from '../../utils/virtualization/VirtualizerWithLoadingSkeleton';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useScrollCheck,\n} from '../../utils';\nimport { useCollectionFocusProxy } from '../../utils/useCollectionFocusProxy';\nimport { tokens } from '@danske/sapphire-css/themes';\nimport {\n CollectionBaseKeys,\n GlobalDomAttributes,\n MultipleSelectionKeys,\n} from '../../utils/types';\nimport { ListBoxEmptyState } from './ListBoxEmptyState';\nimport { useMessageFormatter } from '@react-aria/i18n';\nimport intlMessages from '../i18n';\n\n/**\n * Component not exported externally which can render and manage the UI of the\n * listbox.\n * The `state` needs to be provided.\n */\nexport type StatelessListBoxProps<T> = Pick<\n AriaListBoxOptions<T>,\n | 'shouldUseVirtualFocus'\n | 'onAction'\n | 'autoFocus'\n | MultipleSelectionKeys\n | CollectionBaseKeys\n | 'id'\n | 'selectionMode'\n> &\n Pick<AriaListBoxProps<T>, 'children'> &\n SapphireStyleProps &\n GlobalDomAttributes & {\n loadingState?: 'loading';\n loadingSkeletonRowsCount?: number;\n /**\n * Callback called when the user scrolled to the bottom of the listbox.\n * Useful when implementing infinite scroll.\n */\n onLoadMore?: () => void;\n disableSelectedStyles?: boolean;\n state: ListState<T>;\n renderLoadingSkeleton?: (index: number) => React.ReactNode;\n\n /**\n * Renders a message indicating the list is empty.\n * Default is a simple \"No results\" (in given language) message.\n * Passing `null` will hide the empty state message.\n */\n emptyState?: React.ReactNode;\n\n // TODO(v5): remove. Check usages in Sapphire Insights before writing a codemod.\n // The usage is likely to be very limited if any.\n /**\n * @deprecated use marginX instead. negativeSideMargin={x} => marginX={`calc(-1 * ${x})`}\n */\n negativeSideMargin?: number | string;\n\n /**\n * Allows for connecting a (search) input to the ListBox, so that the ListBox\n * items can be navigated and selected by keyboard when the input is focused.\n */\n connectedInputRef?: RefObject<HTMLElement>;\n\n /**\n * Whether top and bottom dividers should be shown to mark ListBox's scrollable area.\n * The top divider will be shown when the list is **scrolled** down,\n * and the bottom divider will be shown when the list is **scrollable**.\n */\n hasScrollDividers?: boolean;\n\n /**\n * Whether the listbox items should use virtual focus instead of being focused directly.\n *\n * @default `true` if `connectedInputRef` is provided, `false` otherwise\n */\n shouldUseVirtualFocus?: boolean;\n };\n\nconst _StatelessListBox = <T extends object>(\n {\n loadingState,\n loadingSkeletonRowsCount = 4,\n state,\n renderLoadingSkeleton = (index: number) => (\n <ListBoxItemSkeleton key={index} index={index} />\n ),\n onLoadMore,\n hasScrollDividers = false,\n connectedInputRef,\n shouldUseVirtualFocus = Boolean(connectedInputRef),\n disableSelectedStyles = false,\n negativeSideMargin,\n emptyState: emptyStateProp,\n ...otherProps\n }: StatelessListBoxProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n): JSX.Element => {\n const { styleProps } = useSapphireStyleProps(otherProps);\n\n const listBoxRef = useObjectRef(ref);\n const { listBoxProps } = useListBox(\n {\n ...otherProps,\n shouldUseVirtualFocus,\n isVirtualized: true,\n },\n state,\n listBoxRef\n );\n\n const formatMessage = useMessageFormatter(intlMessages);\n\n const emptyState =\n emptyStateProp === null ? null : (\n <ListBoxEmptyState>\n {emptyStateProp || formatMessage('empty')}\n </ListBoxEmptyState>\n );\n\n const layout = useListWithLoadingStateLayout<T>({\n loadingState,\n loadingSkeletonRowsCount,\n sectionDividerHeight: 5,\n headingHeight: 34,\n });\n\n useCollectionFocusProxy({\n state,\n focusProxyRef: connectedInputRef,\n collectionRef: listBoxRef,\n });\n\n const { scrollCheckProps, isScrolled, isScrollable } =\n useScrollCheck(listBoxRef);\n\n const constrainWidth =\n styleProps.style?.maxWidth !== undefined ||\n styleProps.style?.width !== undefined;\n const [containerMaxWidth, setContainerMaxWidth] = useState<\n number | undefined\n >(undefined);\n useLayoutEffect(() => {\n setContainerMaxWidth(\n constrainWidth && listBoxRef.current\n ? listBoxRef.current.offsetWidth\n : undefined\n );\n }, [constrainWidth]);\n\n type View = ReusableView<Node<T>, ReactNode>;\n\n const renderWrapper = useCallback(\n (\n parent: View | null,\n reusableView: View,\n children: View[],\n renderChildren: (views: View[]) => ReactElement[]\n ) => {\n if (reusableView.viewType === 'section' && reusableView.content) {\n return (\n <ListBoxSection\n key={reusableView.key}\n item={reusableView.content!}\n layoutInfo={reusableView.layoutInfo!}\n virtualizer={reusableView.virtualizer}\n childrenViews={children}\n >\n {renderChildren(children.filter((c) => c.viewType === 'item'))}\n </ListBoxSection>\n );\n }\n\n return (\n <VirtualizerItem\n key={reusableView.key}\n layoutInfo={reusableView.layoutInfo!}\n virtualizer={reusableView.virtualizer}\n parent={parent?.layoutInfo}\n >\n {reusableView.rendered}\n </VirtualizerItem>\n );\n },\n []\n );\n\n return (\n <ListBoxContext.Provider\n value={{\n state,\n shouldUseVirtualFocus,\n disableSelectedStyles,\n containerMaxWidth,\n }}\n >\n <VirtualizerWithLoadingSkeleton\n {...mergeProps(listBoxProps, scrollCheckProps)}\n onLoadMore={onLoadMore}\n scrollDirection=\"vertical\"\n autoFocus={Boolean(otherProps.autoFocus)}\n layout={layout}\n collection={state.collection}\n persistedKeys={\n new Set(\n [\n ...state.selectionManager.selectedKeys,\n state.selectionManager.focusedKey,\n ].filter((key): key is React.Key => key !== null)\n )\n }\n className={clsx(\n styles['sapphire-listbox'],\n {\n [styles['sapphire-listbox--selection']]: !disableSelectedStyles,\n },\n styleProps.className\n )}\n style={{\n ...styleProps.style,\n padding:\n undefined /* virtualizer tries to take control of padding. this stops that */,\n ...(negativeSideMargin\n ? {\n marginLeft:\n typeof negativeSideMargin === 'string'\n ? `calc(${negativeSideMargin} * -1)`\n : `-${negativeSideMargin}px`,\n marginRight:\n typeof negativeSideMargin === 'string'\n ? `calc(${negativeSideMargin} * -1)`\n : `-${negativeSideMargin}px`,\n }\n : {}),\n // Should be moved to css when we are a little more sure about what we want, and specially\n // when/if we need the same feature in Sapphire Angular.\n borderTop:\n hasScrollDividers && isScrolled\n ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}`\n : '',\n borderBottom:\n hasScrollDividers && isScrollable\n ? `${tokens.size.borderSm} solid ${tokens.color.borderSecondary}`\n : '',\n }}\n renderWrapper={renderWrapper as any}\n renderLoadingSkeleton={renderLoadingSkeleton}\n loadingSkeletonRowsCount={loadingSkeletonRowsCount}\n emptyState={emptyState}\n ref={listBoxRef}\n aria-busy={loadingState && true}\n >\n {(kind, item) => {\n const node = item as Node<T>;\n if (kind === 'item') {\n return <ListBoxOption key={node.key} item={node} />;\n }\n return null;\n }}\n </VirtualizerWithLoadingSkeleton>\n </ListBoxContext.Provider>\n );\n};\n\nexport const StatelessListBox = forwardRef(_StatelessListBox) as <\n T extends object\n>(\n props: StatelessListBoxProps<T> & { ref?: Ref<HTMLUListElement> }\n) => React.ReactElement;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2GA,MAAM,oBAAoB,CACxB;AAAA,EACE,YAAA;AAAA,EACA,wBAAA,GAA2B,CAAA;AAAA,EAC3B,KAAA;AAAA,EACA,wBAAwB,CAAC,KAAA,yCACtB,mBAAA,EAAA,EAAoB,GAAA,EAAK,OAAO,KAAA,EAAc,CAAA;AAAA,EAEjD,UAAA;AAAA,EACA,iBAAA,GAAoB,KAAA;AAAA,EACpB,iBAAA;AAAA,EACA,qBAAA,GAAwB,QAAQ,iBAAiB,CAAA;AAAA,EACjD,qBAAA,GAAwB,KAAA;AAAA,EACxB,kBAAA;AAAA,EACA,UAAA,EAAY,cAAA;AAAA,EACZ,GAAG;AACL,CAAA,EACA,GAAA,KACgB;AAChB,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,UAAU,CAAA;AAEvD,EAAA,MAAM,UAAA,GAAa,aAAa,GAAG,CAAA;AACnC,EAAA,MAAM,EAAE,cAAa,GAAI,UAAA;AAAA,IACvB;AAAA,MACE,GAAG,UAAA;AAAA,MACH,qBAAA;AAAA,MACA,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,aAAA,GAAgB,oBAAoB,YAAY,CAAA;AAEtD,EAAA,MAAM,UAAA,GACJ,mBAAmB,IAAA,GAAO,IAAA,uCACvB,iBAAA,EAAA,IAAA,EACE,cAAA,IAAkB,aAAA,CAAc,OAAO,CAC1C,CAAA;AAGJ,EAAA,MAAM,SAAS,6BAAA,CAAiC;AAAA,IAC9C,YAAA;AAAA,IACA,wBAAA;AAAA,IACA,oBAAA,EAAsB,CAAA;AAAA,IACtB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,uBAAA,CAAwB;AAAA,IACtB,KAAA;AAAA,IACA,aAAA,EAAe,iBAAA;AAAA,IACf,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,EAAE,gBAAA,EAAkB,UAAA,EAAY,YAAA,EAAa,GACjD,eAAe,UAAU,CAAA;AAE3B,EAAA,MAAM,iBACJ,UAAA,CAAW,KAAA,EAAO,aAAa,MAAA,IAC/B,UAAA,CAAW,OAAO,KAAA,KAAU,MAAA;AAC9B,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAEhD,MAAS,CAAA;AACX,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,oBAAA;AAAA,MACE,cAAA,IAAkB,UAAA,CAAW,OAAA,GACzB,UAAA,CAAW,QAAQ,WAAA,GACnB;AAAA,KACN;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAInB,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CACE,MAAA,EACA,YAAA,EACA,QAAA,EACA,cAAA,KACG;AACH,MAAA,IAAI,YAAA,CAAa,QAAA,KAAa,SAAA,IAAa,YAAA,CAAa,OAAA,EAAS;AAC/D,QAAA,uBACE,KAAA,CAAA,aAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,KAAK,YAAA,CAAa,GAAA;AAAA,YAClB,MAAM,YAAA,CAAa,OAAA;AAAA,YACnB,YAAY,YAAA,CAAa,UAAA;AAAA,YACzB,aAAa,YAAA,CAAa,WAAA;AAAA,YAC1B,aAAA,EAAe;AAAA,WAAA;AAAA,UAEd,cAAA,CAAe,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,MAAM,CAAC;AAAA,SAC/D;AAAA,MAEJ;AAEA,MAAA,uBACE,KAAA,CAAA,aAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,YAAY,YAAA,CAAa,UAAA;AAAA,UACzB,aAAa,YAAA,CAAa,WAAA;AAAA,UAC1B,QAAQ,MAAA,EAAQ;AAAA,SAAA;AAAA,QAEf,YAAA,CAAa;AAAA,OAChB;AAAA,IAEJ,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,cAAA,CAAe,QAAA;AAAA,IAAf;AAAA,MACC,KAAA,EAAO;AAAA,QACL,KAAA;AAAA,QACA,qBAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA;AACF,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,8BAAA;AAAA,MAAA;AAAA,QACE,GAAG,UAAA,CAAW,YAAA,EAAc,gBAAgB,CAAA;AAAA,QAC7C,UAAA;AAAA,QACA,eAAA,EAAgB,UAAA;AAAA,QAChB,SAAA,EAAW,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA;AAAA,QACvC,MAAA;AAAA,QACA,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,eACE,IAAI,GAAA;AAAA,UACF;AAAA,YACE,GAAG,MAAM,gBAAA,CAAiB,YAAA;AAAA,YAC1B,MAAM,gBAAA,CAAiB;AAAA,WACzB,CAAE,MAAA,CAAO,CAAC,GAAA,KAA0B,QAAQ,IAAI;AAAA,SAClD;AAAA,QAEF,SAAA,EAAW,IAAA;AAAA,UACT,OAAO,kBAAkB,CAAA;AAAA,UACzB;AAAA,YACE,CAAC,MAAA,CAAO,6BAA6B,CAAC,GAAG,CAAC;AAAA,WAC5C;AAAA,UACA,UAAA,CAAW;AAAA,SACb;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAG,UAAA,CAAW,KAAA;AAAA,UACd,OAAA,EACE,MAAA;AAAA,UACF,GAAI,kBAAA,GACA;AAAA,YACE,UAAA,EACE,OAAO,kBAAA,KAAuB,QAAA,GAC1B,QAAQ,kBAAkB,CAAA,MAAA,CAAA,GAC1B,IAAI,kBAAkB,CAAA,EAAA,CAAA;AAAA,YAC5B,WAAA,EACE,OAAO,kBAAA,KAAuB,QAAA,GAC1B,QAAQ,kBAAkB,CAAA,MAAA,CAAA,GAC1B,IAAI,kBAAkB,CAAA,EAAA;AAAA,cAE9B,EAAC;AAAA;AAAA;AAAA,UAGL,SAAA,EACE,iBAAA,IAAqB,UAAA,GACjB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA,CAAA,GAC7D,EAAA;AAAA,UACN,YAAA,EACE,iBAAA,IAAqB,YAAA,GACjB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,OAAA,EAAU,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA,CAAA,GAC7D;AAAA,SACR;AAAA,QACA,aAAA;AAAA,QACA,qBAAA;AAAA,QACA,wBAAA;AAAA,QACA,UAAA;AAAA,QACA,GAAA,EAAK,UAAA;AAAA,QACL,aAAW,YAAA,IAAgB;AAAA,OAAA;AAAA,MAE1B,CAAC,MAAM,IAAA,KAAS;AACf,QAAA,MAAM,IAAA,GAAO,IAAA;AACb,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,2CAAQ,aAAA,EAAA,EAAc,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAA,EAAM,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAAA;AACF,GACF;AAEJ,CAAA;AAEgC,WAAW,iBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePaginationContext.js","sources":["../../../../../../../core/src/Pagination/src/usePaginationContext.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface PaginationContextValue {\n scrollableRef?: React.RefObject<HTMLElement>;\n}\n\nexport const PaginationContext = React.createContext<PaginationContextValue>({\n scrollableRef: undefined,\n});\nexport const usePaginationContext = (): PaginationContextValue => {\n return React.useContext(PaginationContext);\n};\n"],"names":[],"mappings":";;AAMO,MAAM,iBAAA,GAAoB,MAAM,aAAA,CAAsC;AAAA,EAC3E,aAAA,EAAe;AACjB,CAAC;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React, { forwardRef, useEffect } from 'react';
|
|
2
|
+
import { Popover, OverlayTriggerStateContext } from 'react-aria-components';
|
|
3
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
import popoverStyles from '@danske/sapphire-css/components/popover/popover.module.css';
|
|
6
|
+
import { FocusScope } from 'react-aria/FocusScope';
|
|
7
|
+
import { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside';
|
|
8
|
+
import { useObjectRef } from 'react-aria/useObjectRef';
|
|
9
|
+
|
|
10
|
+
forwardRef(function Popover2({
|
|
11
|
+
children,
|
|
12
|
+
padded,
|
|
13
|
+
defaultMaxWidth,
|
|
14
|
+
maxHeight,
|
|
15
|
+
state,
|
|
16
|
+
restoreFocus = false,
|
|
17
|
+
...props
|
|
18
|
+
}, forwardedRef) {
|
|
19
|
+
const ref = useObjectRef(forwardedRef);
|
|
20
|
+
const { styleProps } = useSapphireStyleProps({ ...props, maxHeight });
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (state && state.isOpen && props.isNonModal) {
|
|
23
|
+
return ariaHideOutside([
|
|
24
|
+
props.triggerRef?.current,
|
|
25
|
+
ref?.current
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
}, [state?.isOpen, props.isNonModal, ref, props.triggerRef]);
|
|
29
|
+
const popover = /* @__PURE__ */ React.createElement(
|
|
30
|
+
Popover,
|
|
31
|
+
{
|
|
32
|
+
...props,
|
|
33
|
+
ref,
|
|
34
|
+
style: styleProps.style,
|
|
35
|
+
className: clsx(styleProps.className, popoverStyles["sapphire-popover"], {
|
|
36
|
+
[popoverStyles["sapphire-popover--padded"]]: padded,
|
|
37
|
+
[popoverStyles["sapphire-popover--max-width"]]: defaultMaxWidth
|
|
38
|
+
})
|
|
39
|
+
},
|
|
40
|
+
/* @__PURE__ */ React.createElement(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
className: popoverStyles["sapphire-popover__content"],
|
|
44
|
+
role: "presentation"
|
|
45
|
+
},
|
|
46
|
+
/* @__PURE__ */ React.createElement(
|
|
47
|
+
FocusScope,
|
|
48
|
+
{
|
|
49
|
+
autoFocus: !props.isNonModal,
|
|
50
|
+
contain: !props.isNonModal,
|
|
51
|
+
restoreFocus
|
|
52
|
+
},
|
|
53
|
+
children
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
);
|
|
57
|
+
if (state) {
|
|
58
|
+
return /* @__PURE__ */ React.createElement(OverlayTriggerStateContext.Provider, { value: state }, popover);
|
|
59
|
+
}
|
|
60
|
+
return popover;
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=Popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.js","sources":["../../../../../../../core/src/Popover/src/Popover.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useEffect } from 'react';\nimport {\n OverlayTriggerState,\n Popover as AriaPopover,\n PopoverProps as RACPopoverProps,\n OverlayTriggerStateContext,\n} from 'react-aria-components';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n} from '../../utils/useSapphireStyleProps';\nimport clsx from 'clsx';\nimport popoverStyles from '@danske/sapphire-css/components/popover/popover.module.css';\nimport { AriaPositionPropsKeys, GlobalDomAttributes } from '../../utils/types';\nimport { FocusScope } from 'react-aria/FocusScope';\nimport { ariaHideOutside } from 'react-aria/private/overlays/ariaHideOutside';\nimport { useObjectRef } from 'react-aria/useObjectRef';\n\nexport interface PopoverProps\n extends Pick<\n RACPopoverProps,\n | 'triggerRef'\n | 'isNonModal'\n | 'isKeyboardDismissDisabled'\n | 'shouldCloseOnInteractOutside'\n | AriaPositionPropsKeys\n >,\n SapphireStyleProps,\n GlobalDomAttributes {\n state?: OverlayTriggerState;\n children: React.ReactNode;\n /**\n * Whether to include the default popover padding.\n * @default false\n */\n padded?: boolean;\n /**\n * Whether it has a predefined size constraint. Useful when the popover is\n * used as a dropdown of selects, menus etc.\n * @default false\n */\n defaultMaxWidth?: boolean;\n\n restoreFocus?: boolean;\n}\n\n/**\n * Helper component intended for internal use within Sapphire in components\n * like Select and Menu.\n *\n * *Popovers* are containers used to display transient content such as menus,\n * options, additional actions etc.\n *\n * @internal\n */\nexport const Popover = forwardRef(function Popover(\n {\n children,\n padded,\n defaultMaxWidth,\n maxHeight,\n state,\n restoreFocus = false,\n ...props\n }: PopoverProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const ref = useObjectRef(forwardedRef);\n const { styleProps } = useSapphireStyleProps({ ...props, maxHeight });\n\n /*\n * We need this effect to fix an issue in react-aria's \"usePopover\". The\n * issue is that a popover which is not a modal (see prop \"isNonModal\") will\n * get aria-hidden if opened in an existing modal. See more here\n * https://github.com/adobe/react-spectrum/issues/4213\n *\n * This same hack is present in react-aria's useComboBox.\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/combobox/src/useComboBox.ts#L300-L304\n */\n useEffect(() => {\n if (state && state.isOpen && props.isNonModal) {\n // input to ariaHideOutside is what NOT to hide (and their ancestors).\n return ariaHideOutside([\n props.triggerRef?.current as Element,\n ref?.current as Element,\n ]);\n }\n }, [state?.isOpen, props.isNonModal, ref, props.triggerRef]);\n\n const popover = (\n <AriaPopover\n {...props}\n ref={ref}\n style={styleProps.style}\n className={clsx(styleProps.className, popoverStyles['sapphire-popover'], {\n [popoverStyles['sapphire-popover--padded']]: padded,\n [popoverStyles['sapphire-popover--max-width']]: defaultMaxWidth,\n })}\n >\n <div\n className={popoverStyles['sapphire-popover__content']}\n role=\"presentation\"\n >\n {/*\n * TODO UC-5016\n * The Overlay component (from react-aria-components) already wraps the\n * portal content in a FocusScope with restoreFocus and contain.\n * We only need autoFocus here to focus the first focusable child\n * (rather than the popover container itself, which is what RAC does by default).\n */}\n <FocusScope\n autoFocus={!props.isNonModal}\n contain={!props.isNonModal}\n restoreFocus={restoreFocus}\n >\n {children}\n </FocusScope>\n </div>\n </AriaPopover>\n );\n\n if (state) {\n return (\n <OverlayTriggerStateContext.Provider value={state}>\n {popover}\n </OverlayTriggerStateContext.Provider>\n );\n }\n\n return popover;\n});\n"],"names":["Popover","AriaPopover"],"mappings":";;;;;;;;;AAuDuB,UAAA,CAAW,SAASA,QAAAA,CACzC;AAAA,EACE,QAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,GAAG;AACL,CAAA,EACA,YAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,aAAa,YAAY,CAAA;AACrC,EAAA,MAAM,EAAE,YAAW,GAAI,qBAAA,CAAsB,EAAE,GAAG,KAAA,EAAO,WAAW,CAAA;AAWpE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,UAAA,EAAY;AAE7C,MAAA,OAAO,eAAA,CAAgB;AAAA,QACrB,MAAM,UAAA,EAAY,OAAA;AAAA,QAClB,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAM,UAAA,EAAY,GAAA,EAAK,KAAA,CAAM,UAAU,CAAC,CAAA;AAE3D,EAAA,MAAM,OAAA,mBACJ,KAAA,CAAA,aAAA;AAAA,IAACC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA;AAAA,MACA,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,WAAW,IAAA,CAAK,UAAA,CAAW,SAAA,EAAW,aAAA,CAAc,kBAAkB,CAAA,EAAG;AAAA,QACvE,CAAC,aAAA,CAAc,0BAA0B,CAAC,GAAG,MAAA;AAAA,QAC7C,CAAC,aAAA,CAAc,6BAA6B,CAAC,GAAG;AAAA,OACjD;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,cAAc,2BAA2B,CAAA;AAAA,QACpD,IAAA,EAAK;AAAA,OAAA;AAAA,sBASL,KAAA,CAAA,aAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,CAAC,KAAA,CAAM,UAAA;AAAA,UAClB,OAAA,EAAS,CAAC,KAAA,CAAM,UAAA;AAAA,UAChB;AAAA,SAAA;AAAA,QAEC;AAAA;AACH;AACF,GACF;AAGF,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,2CACG,0BAAA,CAA2B,QAAA,EAA3B,EAAoC,KAAA,EAAO,SACzC,OACH,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,OAAA;AACT,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from '@danske/sapphire-css/components/radio/radio.module.css';
|
|
4
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
5
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
6
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
7
|
+
import '../../Popover/src/Popover.js';
|
|
8
|
+
import '@danske/sapphire-react-context';
|
|
9
|
+
import 'react-aria/mergeProps';
|
|
10
|
+
import 'react-aria/useButton';
|
|
11
|
+
import { useContextProps, CheckboxContext } from 'react-aria-components';
|
|
12
|
+
|
|
13
|
+
const RadioBox = forwardRef(function RadioBox2(props, ref) {
|
|
14
|
+
[props, ref] = useContextProps(props, ref, CheckboxContext);
|
|
15
|
+
const {
|
|
16
|
+
elementType: CustomElement = "div",
|
|
17
|
+
size,
|
|
18
|
+
isDisabled,
|
|
19
|
+
isHovered,
|
|
20
|
+
isFocusVisible,
|
|
21
|
+
isPressed,
|
|
22
|
+
isSelected,
|
|
23
|
+
label,
|
|
24
|
+
role,
|
|
25
|
+
children,
|
|
26
|
+
slot,
|
|
27
|
+
...otherProps
|
|
28
|
+
} = props;
|
|
29
|
+
const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);
|
|
30
|
+
const ariaProps = role === "checkbox" ? { role, "aria-checked": isSelected } : { role };
|
|
31
|
+
return /* @__PURE__ */ React.createElement(
|
|
32
|
+
CustomElement,
|
|
33
|
+
{
|
|
34
|
+
...filteredProps,
|
|
35
|
+
...ariaProps,
|
|
36
|
+
ref,
|
|
37
|
+
className: clsx(
|
|
38
|
+
styles["sapphire-radio"],
|
|
39
|
+
{
|
|
40
|
+
[styles["sapphire-radio--checked"]]: isSelected,
|
|
41
|
+
[styles["sapphire-radio--md"]]: size === "md",
|
|
42
|
+
[styles["is-hover"]]: isHovered,
|
|
43
|
+
[styles["is-focus"]]: isFocusVisible,
|
|
44
|
+
[styles["is-active"]]: isPressed
|
|
45
|
+
},
|
|
46
|
+
styles["js-focus"],
|
|
47
|
+
styleProps.className
|
|
48
|
+
),
|
|
49
|
+
style: styleProps.style
|
|
50
|
+
},
|
|
51
|
+
children,
|
|
52
|
+
/* @__PURE__ */ React.createElement("span", { className: clsx(styles["sapphire-radio__box"]) }),
|
|
53
|
+
label && /* @__PURE__ */ React.createElement("span", { className: clsx(styles["sapphire-radio__label"]) }, label)
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export { RadioBox };
|
|
58
|
+
//# sourceMappingURL=RadioBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioBox.js","sources":["../../../../../../../core/src/Radio/src/RadioBox.tsx"],"sourcesContent":["import React, { AriaRole, ForwardedRef, forwardRef, ReactNode } from 'react';\nimport clsx from 'clsx';\nimport styles from '@danske/sapphire-css/components/radio/radio.module.css';\nimport { SapphireStyleProps, useSapphireStyleProps } from '../../utils';\nimport { GlobalDomAttributes } from '../../utils/types';\nimport {\n CheckboxContext,\n SlotProps,\n useContextProps,\n} from 'react-aria-components';\n\nexport type RadioBoxProps = GlobalDomAttributes &\n SapphireStyleProps &\n SlotProps & {\n elementType?: 'div' | 'label';\n size?: 'lg' | 'md';\n isDisabled?: boolean;\n isHovered?: boolean;\n isFocusVisible?: boolean;\n isPressed?: boolean;\n isSelected?: boolean;\n label?: ReactNode;\n children?: ReactNode;\n role?: AriaRole;\n };\n\n/**\n * Internal \"dumb\" component which allows one to render the radio box. This\n * does not come with any radio-related functionality. It is just the plain UI\n * element.\n */\nexport const RadioBox = forwardRef(function RadioBox(\n props: RadioBoxProps,\n ref: ForwardedRef<HTMLLabelElement>\n) {\n [props, ref] = useContextProps(props, ref, CheckboxContext);\n const {\n elementType: CustomElement = 'div',\n size,\n isDisabled,\n isHovered,\n isFocusVisible,\n isPressed,\n isSelected,\n label,\n role,\n children,\n slot,\n ...otherProps\n } = props;\n const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);\n const ariaProps =\n role === 'checkbox' ? { role, 'aria-checked': isSelected } : { role };\n\n return (\n <CustomElement\n {...filteredProps}\n {...ariaProps}\n ref={ref as ForwardedRef<any>}\n className={clsx(\n styles['sapphire-radio'],\n {\n [styles['sapphire-radio--checked']]: isSelected,\n [styles['sapphire-radio--md']]: size === 'md',\n [styles['is-hover']]: isHovered,\n [styles['is-focus']]: isFocusVisible,\n [styles['is-active']]: isPressed,\n },\n styles['js-focus'],\n styleProps.className\n )}\n style={styleProps.style}\n >\n {children}\n <span className={clsx(styles['sapphire-radio__box'])} />\n {label && (\n <span className={clsx(styles['sapphire-radio__label'])}>{label}</span>\n )}\n </CustomElement>\n );\n});\n"],"names":["RadioBox"],"mappings":";;;;;;;;;;;;AA+BO,MAAM,QAAA,GAAW,UAAA,CAAW,SAASA,SAAAA,CAC1C,OACA,GAAA,EACA;AACA,EAAA,CAAC,OAAO,GAAG,CAAA,GAAI,eAAA,CAAgB,KAAA,EAAO,KAAK,eAAe,CAAA;AAC1D,EAAA,MAAM;AAAA,IACJ,aAAa,aAAA,GAAgB,KAAA;AAAA,IAC7B,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,sBAAsB,UAAU,CAAA;AACtE,EAAA,MAAM,SAAA,GACJ,SAAS,UAAA,GAAa,EAAE,MAAM,cAAA,EAAgB,UAAA,EAAW,GAAI,EAAE,IAAA,EAAK;AAEtE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACJ,GAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,QACT,OAAO,gBAAgB,CAAA;AAAA,QACvB;AAAA,UACE,CAAC,MAAA,CAAO,yBAAyB,CAAC,GAAG,UAAA;AAAA,UACrC,CAAC,MAAA,CAAO,oBAAoB,CAAC,GAAG,IAAA,KAAS,IAAA;AAAA,UACzC,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,SAAA;AAAA,UACtB,CAAC,MAAA,CAAO,UAAU,CAAC,GAAG,cAAA;AAAA,UACtB,CAAC,MAAA,CAAO,WAAW,CAAC,GAAG;AAAA,SACzB;AAAA,QACA,OAAO,UAAU,CAAA;AAAA,QACjB,UAAA,CAAW;AAAA,OACb;AAAA,MACA,OAAO,UAAA,CAAW;AAAA,KAAA;AAAA,IAEjB,QAAA;AAAA,wCACA,MAAA,EAAA,EAAK,SAAA,EAAW,KAAK,MAAA,CAAO,qBAAqB,CAAC,CAAA,EAAG,CAAA;AAAA,IACrD,KAAA,wCACE,MAAA,EAAA,EAAK,SAAA,EAAW,KAAK,MAAA,CAAO,uBAAuB,CAAC,CAAA,EAAA,EAAI,KAAM;AAAA,GAEnE;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { Separator as Separator$1 } from 'react-aria-components';
|
|
4
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
5
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
6
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
7
|
+
import '../../Popover/src/Popover.js';
|
|
8
|
+
import { useThemeCheck } from '../../utils/useThemeCheck.js';
|
|
9
|
+
import 'react-aria/mergeProps';
|
|
10
|
+
import 'react-aria/useButton';
|
|
11
|
+
import { filterDOMProps } from 'react-aria/filterDOMProps';
|
|
12
|
+
import styles from '@danske/sapphire-css/components/separator/separator.module.css';
|
|
13
|
+
|
|
14
|
+
const Separator = forwardRef(function Separator2(props, ref) {
|
|
15
|
+
useThemeCheck();
|
|
16
|
+
const { orientation = "horizontal", ...otherProps } = props;
|
|
17
|
+
const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);
|
|
18
|
+
return /* @__PURE__ */ React.createElement(
|
|
19
|
+
Separator$1,
|
|
20
|
+
{
|
|
21
|
+
ref,
|
|
22
|
+
...filteredProps,
|
|
23
|
+
...filterDOMProps(props, { global: true }),
|
|
24
|
+
style: styleProps.style,
|
|
25
|
+
className: clsx(styles["sapphire-separator"], styleProps.className),
|
|
26
|
+
orientation
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export { Separator };
|
|
32
|
+
//# sourceMappingURL=Separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Separator.js","sources":["../../../../../../../core/src/Separator/src/Separator.tsx"],"sourcesContent":["/**\n * Based on: https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/divider/src/Divider.tsx\n */\nimport React, { forwardRef } from 'react';\nimport clsx from 'clsx';\nimport { DOMProps } from '@react-types/shared';\nimport { Separator as RACSeparator } from 'react-aria-components';\nimport {\n SapphireStyleProps,\n useSapphireStyleProps,\n useThemeCheck,\n} from '../../utils';\nimport { GlobalDomAttributes } from '../../utils/types';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\nimport styles from '@danske/sapphire-css/components/separator/separator.module.css';\n\nexport interface SeparatorProps\n extends DOMProps,\n GlobalDomAttributes,\n SapphireStyleProps {\n /**\n * The orientation of the separator.\n *\n * @default 'horizontal'\n */\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Separator = forwardRef(function Separator(\n props: SeparatorProps,\n ref: React.ForwardedRef<HTMLElement>\n) {\n useThemeCheck();\n const { orientation = 'horizontal', ...otherProps } = props;\n const { styleProps, filteredProps } = useSapphireStyleProps(otherProps);\n\n return (\n <RACSeparator\n ref={ref}\n {...filteredProps}\n {...filterDOMProps(props, { global: true })}\n style={styleProps.style}\n className={clsx(styles['sapphire-separator'], styleProps.className)}\n orientation={orientation}\n />\n );\n});\n"],"names":["Separator","RACSeparator"],"mappings":";;;;;;;;;;;;;AA4BO,MAAM,SAAA,GAAY,UAAA,CAAW,SAASA,UAAAA,CAC3C,OACA,GAAA,EACA;AACA,EAAA,aAAA,EAAc;AACd,EAAA,MAAM,EAAE,WAAA,GAAc,YAAA,EAAc,GAAG,YAAW,GAAI,KAAA;AACtD,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,sBAAsB,UAAU,CAAA;AAEtE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAACC,WAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,aAAA;AAAA,MACH,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC1C,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,WAAW,IAAA,CAAK,MAAA,CAAO,oBAAoB,CAAA,EAAG,WAAW,SAAS,CAAA;AAAA,MAClE;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import 'react';
|
|
2
|
+
import 'clsx';
|
|
3
|
+
import '@danske/sapphire-css/components/skeleton/skeleton.module.css';
|
|
4
|
+
import '@danske/sapphire-react-context';
|
|
5
|
+
import 'react-aria/useId';
|
|
6
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
7
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
8
|
+
import '../../Popover/src/Popover.js';
|
|
9
|
+
import 'react-aria/mergeProps';
|
|
10
|
+
import 'react-aria/useButton';
|
|
11
|
+
import { SkeletonText } from './SkeletonText.js';
|
|
12
|
+
import { SkeletonCircle } from './SkeletonCircle.js';
|
|
13
|
+
|
|
14
|
+
const Skeleton = {
|
|
15
|
+
Circle: SkeletonCircle,
|
|
16
|
+
Text: SkeletonText};
|
|
17
|
+
|
|
18
|
+
export { Skeleton };
|
|
19
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sources":["../../../../../../../core/src/Skeleton/src/Skeleton.tsx"],"sourcesContent":["import { SkeletonBlock, type SkeletonBlockProps } from './SkeletonBlock';\nimport { SkeletonText, type SkeletonTextProps } from './SkeletonText';\nimport { SkeletonCircle, type SkeletonCircleProps } from './SkeletonCircle';\nimport { SkeletonFrom, type SkeletonFromProps } from './SkeletonFrom';\n\nexport const Skeleton = {\n Block: SkeletonBlock,\n Circle: SkeletonCircle,\n Text: SkeletonText,\n From: SkeletonFrom,\n};\n\nexport type {\n SkeletonBlockProps,\n SkeletonCircleProps,\n SkeletonFromProps,\n SkeletonTextProps,\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAKO,MAAM,QAAA,GAAW;AAAA,EAEtB,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,YAER;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';
|
|
4
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
5
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
6
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
7
|
+
import '../../Popover/src/Popover.js';
|
|
8
|
+
import { useThemeCheck } from '../../utils/useThemeCheck.js';
|
|
9
|
+
import 'react-aria/mergeProps';
|
|
10
|
+
import 'react-aria/useButton';
|
|
11
|
+
import { getAnimationDelay } from './animation.js';
|
|
12
|
+
|
|
13
|
+
const SkeletonCircle = ({
|
|
14
|
+
index,
|
|
15
|
+
children,
|
|
16
|
+
...rest
|
|
17
|
+
}) => {
|
|
18
|
+
useThemeCheck();
|
|
19
|
+
const { styleProps } = useSapphireStyleProps(rest);
|
|
20
|
+
const animationDelay = getAnimationDelay(index);
|
|
21
|
+
return /* @__PURE__ */ React.createElement(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
...rest,
|
|
25
|
+
style: {
|
|
26
|
+
animationDelay,
|
|
27
|
+
...styleProps.style
|
|
28
|
+
},
|
|
29
|
+
className: clsx(
|
|
30
|
+
styles["sapphire-skeleton"],
|
|
31
|
+
styles["sapphire-skeleton--circle"],
|
|
32
|
+
styleProps.className
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { SkeletonCircle };
|
|
39
|
+
//# sourceMappingURL=SkeletonCircle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkeletonCircle.js","sources":["../../../../../../../core/src/Skeleton/src/SkeletonCircle.tsx"],"sourcesContent":["import React from 'react';\nimport cx from 'clsx';\n\nimport styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';\n\nimport { useSapphireStyleProps, useThemeCheck } from '../../utils';\nimport { getAnimationDelay } from './animation';\nimport { SkeletonProps } from './skeleton.model';\n\nexport type SkeletonCircleProps = SkeletonProps;\n\nexport const SkeletonCircle: React.FC<SkeletonCircleProps> = ({\n index,\n children,\n ...rest\n}) => {\n useThemeCheck();\n\n const { styleProps } = useSapphireStyleProps(rest);\n\n const animationDelay = getAnimationDelay(index);\n\n return (\n <div\n {...rest}\n style={{\n animationDelay,\n ...styleProps.style,\n }}\n className={cx(\n styles['sapphire-skeleton'],\n styles['sapphire-skeleton--circle'],\n styleProps.className\n )}\n />\n );\n};\n"],"names":["cx"],"mappings":";;;;;;;;;;;;AAWO,MAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,IAAI,CAAA;AAEjD,EAAA,MAAM,cAAA,GAAiB,kBAAkB,KAAK,CAAA;AAE9C,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,cAAA;AAAA,QACA,GAAG,UAAA,CAAW;AAAA,OAChB;AAAA,MACA,SAAA,EAAWA,IAAA;AAAA,QACT,OAAO,mBAAmB,CAAA;AAAA,QAC1B,OAAO,2BAA2B,CAAA;AAAA,QAClC,UAAA,CAAW;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';
|
|
4
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
5
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
6
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
7
|
+
import '../../Popover/src/Popover.js';
|
|
8
|
+
import { useThemeCheck } from '../../utils/useThemeCheck.js';
|
|
9
|
+
import 'react-aria/mergeProps';
|
|
10
|
+
import 'react-aria/useButton';
|
|
11
|
+
import { getAnimationDelay } from './animation.js';
|
|
12
|
+
|
|
13
|
+
const isFixedWidthType = (props) => {
|
|
14
|
+
return props.widthType === "fixed";
|
|
15
|
+
};
|
|
16
|
+
const SkeletonText = (props) => {
|
|
17
|
+
useThemeCheck();
|
|
18
|
+
const {
|
|
19
|
+
index,
|
|
20
|
+
widthType = "randomPct",
|
|
21
|
+
UNSAFE_className,
|
|
22
|
+
UNSAFE_style,
|
|
23
|
+
children,
|
|
24
|
+
minWidth = 50,
|
|
25
|
+
maxWidth = 100,
|
|
26
|
+
...rest
|
|
27
|
+
} = props;
|
|
28
|
+
const animationDelay = getAnimationDelay(index);
|
|
29
|
+
const { styleProps } = useSapphireStyleProps({
|
|
30
|
+
UNSAFE_className,
|
|
31
|
+
UNSAFE_style
|
|
32
|
+
});
|
|
33
|
+
const skeletonWidth = useMemo(() => {
|
|
34
|
+
if (isFixedWidthType(props)) {
|
|
35
|
+
return props.width;
|
|
36
|
+
}
|
|
37
|
+
const calculatedWidth = Math.random() * (maxWidth - minWidth) + minWidth;
|
|
38
|
+
return widthType === "randomPct" ? `${calculatedWidth}%` : calculatedWidth;
|
|
39
|
+
}, []);
|
|
40
|
+
return /* @__PURE__ */ React.createElement(
|
|
41
|
+
"span",
|
|
42
|
+
{
|
|
43
|
+
...rest,
|
|
44
|
+
style: {
|
|
45
|
+
width: skeletonWidth,
|
|
46
|
+
animationDelay,
|
|
47
|
+
...styleProps.style
|
|
48
|
+
},
|
|
49
|
+
className: clsx(
|
|
50
|
+
styles["sapphire-skeleton"],
|
|
51
|
+
styles["sapphire-skeleton--text"],
|
|
52
|
+
styleProps.className
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { SkeletonText };
|
|
59
|
+
//# sourceMappingURL=SkeletonText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkeletonText.js","sources":["../../../../../../../core/src/Skeleton/src/SkeletonText.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport cx from 'clsx';\n\nimport styles from '@danske/sapphire-css/components/skeleton/skeleton.module.css';\n\nimport { useSapphireStyleProps, useThemeCheck } from '../../utils';\nimport { SkeletonProps } from './skeleton.model';\nimport { getAnimationDelay } from './animation';\n\ninterface SkeletonTextFixedWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n * */\n widthType?: 'fixed';\n /** Allowed width of a skeleton */\n width: number;\n minWidth?: never;\n maxWidth?: never;\n}\n\ninterface SkeletonTextRandomPxWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n */\n widthType?: 'randomPx';\n /** Min width of skeleton. Used internally to calculate width of a component */\n minWidth?: number;\n /** Max width of skeleton. Used internally to calculate width of a component */\n maxWidth?: number;\n}\n\ninterface SkeletonTextRandomPcWidth {\n /**\n * Width type. Will be used to determine width calculation.\n * @default 'randomPct'\n */\n widthType?: 'randomPct';\n /** Min width of skeleton. Used internally to calculate width of a component */\n minWidth?: number;\n /** Max width of skeleton. Used internally to calculate width of a component */\n maxWidth?: number;\n}\n\nexport type SkeletonTextProps = SkeletonProps &\n (\n | SkeletonTextFixedWidth\n | SkeletonTextRandomPxWidth\n | SkeletonTextRandomPcWidth\n );\n\nconst isFixedWidthType = (\n props: SkeletonTextProps\n): props is SkeletonProps & SkeletonTextFixedWidth => {\n return props.widthType === 'fixed';\n};\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n useThemeCheck();\n\n const {\n index,\n widthType = 'randomPct',\n UNSAFE_className,\n UNSAFE_style,\n children,\n minWidth = 50,\n maxWidth = 100,\n ...rest\n } = props;\n\n const animationDelay = getAnimationDelay(index);\n // Excluding minWidth & maxWidth props here as they're used only to calculate relevant width but not to define constraints.\n const { styleProps } = useSapphireStyleProps({\n UNSAFE_className,\n UNSAFE_style,\n });\n\n const skeletonWidth = useMemo(() => {\n if (isFixedWidthType(props)) {\n return props.width;\n }\n\n const calculatedWidth = Math.random() * (maxWidth - minWidth) + minWidth;\n\n return widthType === 'randomPct' ? `${calculatedWidth}%` : calculatedWidth;\n }, []);\n\n return (\n <span\n {...rest}\n style={{\n width: skeletonWidth,\n animationDelay,\n ...styleProps.style,\n }}\n className={cx(\n styles['sapphire-skeleton'],\n styles['sapphire-skeleton--text'],\n styleProps.className\n )}\n />\n );\n};\n"],"names":["cx"],"mappings":";;;;;;;;;;;;AAoDA,MAAM,gBAAA,GAAmB,CACvB,KAAA,KACoD;AACpD,EAAA,OAAO,MAAM,SAAA,KAAc,OAAA;AAC7B,CAAA;AAEO,MAAM,YAAA,GAA4C,CAAC,KAAA,KAAU;AAClE,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,SAAA,GAAY,WAAA;AAAA,IACZ,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,EAAA;AAAA,IACX,QAAA,GAAW,GAAA;AAAA,IACX,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,cAAA,GAAiB,kBAAkB,KAAK,CAAA;AAE9C,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB;AAAA,IAC3C,gBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,MAAA,EAAO,IAAK,WAAW,QAAA,CAAA,GAAY,QAAA;AAEhE,IAAA,OAAO,SAAA,KAAc,WAAA,GAAc,CAAA,EAAG,eAAe,CAAA,CAAA,CAAA,GAAM,eAAA;AAAA,EAC7D,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,cAAA;AAAA,QACA,GAAG,UAAA,CAAW;AAAA,OAChB;AAAA,MACA,SAAA,EAAWA,IAAA;AAAA,QACT,OAAO,mBAAmB,CAAA;AAAA,QAC1B,OAAO,yBAAyB,CAAA;AAAA,QAChC,UAAA,CAAW;AAAA;AACb;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sources":["../../../../../../../core/src/Skeleton/src/animation.ts"],"sourcesContent":["export const getAnimationDelay = (order?: number): string | undefined =>\n order ? `${order * 80}ms` : undefined;\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,CAAC,KAAA,KAChC,QAAQ,CAAA,EAAG,KAAA,GAAQ,EAAE,CAAA,EAAA,CAAA,GAAO;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React, { forwardRef, useContext } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { ThemeContext } from '@danske/sapphire-react-context';
|
|
4
|
+
import { useSapphireStyleProps } from '../../utils/useSapphireStyleProps.js';
|
|
5
|
+
import '../../utils/useSapphireTextStyleProps.js';
|
|
6
|
+
import '../../ListBox/src/StatelessListBox.js';
|
|
7
|
+
import '../../Popover/src/Popover.js';
|
|
8
|
+
import 'react-aria/mergeProps';
|
|
9
|
+
import 'react-aria/useButton';
|
|
10
|
+
import surfaceStyles from '@danske/sapphire-css/components/surface/surface.module.css';
|
|
11
|
+
import { viewStylePropHandlers } from '../../View/src/View.js';
|
|
12
|
+
import { filterDOMProps } from 'react-aria/filterDOMProps';
|
|
13
|
+
|
|
14
|
+
forwardRef(function ThemeRoot2({ children, variant, noSurface = false, ...props }, ref) {
|
|
15
|
+
const themeContext = useContext(ThemeContext);
|
|
16
|
+
if (typeof themeContext.theme === "undefined") {
|
|
17
|
+
throw new Error(
|
|
18
|
+
"<ThemeRoot> must be rendered inside a <SapphireProvider>."
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
const { styleProps } = useSapphireStyleProps(props, viewStylePropHandlers);
|
|
22
|
+
const theme = themeContext.theme;
|
|
23
|
+
const themeVariant = variant || themeContext.themeVariant;
|
|
24
|
+
const themeClassName = theme?.themeClassName;
|
|
25
|
+
const colorScheme = themeClassName?.includes("dark") ? "dark" : "light";
|
|
26
|
+
return /* @__PURE__ */ React.createElement(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
className: clsx(
|
|
30
|
+
themeClassName,
|
|
31
|
+
themeVariant === "secondary" ? theme?.themeSecondaryModifierClassName : themeVariant === "tertiary" ? theme?.themeTertiaryModifierClassName : themeVariant === "contrast" ? theme?.themeContrastModifierClassName : null,
|
|
32
|
+
styleProps.className,
|
|
33
|
+
!noSurface && surfaceStyles["sapphire-surface"]
|
|
34
|
+
),
|
|
35
|
+
style: { ...styleProps.style, colorScheme },
|
|
36
|
+
ref,
|
|
37
|
+
...filterDOMProps(props, { global: true })
|
|
38
|
+
},
|
|
39
|
+
children
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=ThemeRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeRoot.js","sources":["../../../../../../../core/src/ThemeRoot/src/ThemeRoot.tsx"],"sourcesContent":["import React, { ReactNode, useContext, forwardRef, ForwardedRef } from 'react';\nimport clsx from 'clsx';\nimport { ThemeContext, ThemeContextProps } from '@danske/sapphire-react-context';\nimport { Theme } from '@danske/sapphire-css/themes';\nimport { SapphireStyleProps, useSapphireStyleProps } from '../../utils';\nimport { ThemeVariant } from '../../SapphireProvider/src';\nimport surfaceStyles from '@danske/sapphire-css/components/surface/surface.module.css';\nimport { SapphireViewStyleProps } from '../../View';\nimport { DOMProps, DOMAttributes } from '@react-types/shared';\nimport { viewStylePropHandlers } from '../../View/src/View';\nimport { filterDOMProps } from 'react-aria/filterDOMProps';\n\nexport interface ThemeRootProps\n extends SapphireStyleProps,\n Omit<SapphireViewStyleProps, 'backgroundColor' | 'color'>,\n DOMProps,\n Omit<\n DOMAttributes,\n 'children' | 'style' | 'className' | 'dangerouslySetInnerHTML'\n > {\n /**\n * The theme variation, if the theme supports any.\n */\n variant?: ThemeVariant;\n noSurface?: boolean;\n children: ReactNode;\n}\n\n/**\n * ThemeRoot wraps the children with an element that provides the design tokens\n * in the DOM subtree. Also renders the necessary background surface for the\n * theme's components to be rendered on.\n */\nexport const ThemeRoot = forwardRef(function ThemeRoot(\n { children, variant, noSurface = false, ...props }: ThemeRootProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const themeContext = useContext(ThemeContext);\n\n if (typeof themeContext.theme === 'undefined') {\n throw new Error(\n '<ThemeRoot> must be rendered inside a <SapphireProvider>.'\n );\n }\n const { styleProps } = useSapphireStyleProps(props, viewStylePropHandlers);\n const theme = themeContext.theme as ThemeContextProps<\n Theme,\n ThemeVariant\n >['theme'];\n const themeVariant =\n variant ||\n (themeContext.themeVariant as ThemeContextProps<\n Theme,\n ThemeVariant\n >['themeVariant']);\n\n const themeClassName = theme?.themeClassName;\n const colorScheme = themeClassName?.includes('dark') ? 'dark' : 'light';\n\n return (\n <div\n className={clsx(\n themeClassName,\n themeVariant === 'secondary'\n ? theme?.themeSecondaryModifierClassName\n : themeVariant === 'tertiary'\n ? theme?.themeTertiaryModifierClassName\n : themeVariant === 'contrast'\n ? theme?.themeContrastModifierClassName\n : null,\n styleProps.className,\n !noSurface && surfaceStyles['sapphire-surface']\n )}\n style={{ ...styleProps.style, colorScheme }}\n ref={ref}\n {...filterDOMProps(props, { global: true })}\n >\n {children}\n </div>\n );\n});\n"],"names":["ThemeRoot"],"mappings":";;;;;;;;;;;;;AAiCyB,UAAA,CAAW,SAASA,UAAAA,CAC3C,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,GAAG,KAAA,EAAM,EACjD,GAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAe,WAAW,YAAY,CAAA;AAE5C,EAAA,IAAI,OAAO,YAAA,CAAa,KAAA,KAAU,WAAA,EAAa;AAC7C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,qBAAA,CAAsB,OAAO,qBAAqB,CAAA;AACzE,EAAA,MAAM,QAAQ,YAAA,CAAa,KAAA;AAI3B,EAAA,MAAM,YAAA,GACJ,WACC,YAAA,CAAa,YAAA;AAKhB,EAAA,MAAM,iBAAiB,KAAA,EAAO,cAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,cAAA,EAAgB,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,OAAA;AAEhE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA;AAAA,QACT,cAAA;AAAA,QACA,YAAA,KAAiB,WAAA,GACb,KAAA,EAAO,+BAAA,GACP,YAAA,KAAiB,UAAA,GACjB,KAAA,EAAO,8BAAA,GACP,YAAA,KAAiB,UAAA,GACjB,KAAA,EAAO,8BAAA,GACP,IAAA;AAAA,QACJ,UAAA,CAAW,SAAA;AAAA,QACX,CAAC,SAAA,IAAa,aAAA,CAAc,kBAAkB;AAAA,OAChD;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,UAAA,CAAW,OAAO,WAAA,EAAY;AAAA,MAC1C,GAAA;AAAA,MACC,GAAG,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,KAAA;AAAA,IAEzC;AAAA,GACH;AAEJ,CAAC"}
|