@react-md/core 1.0.0-next.12 → 1.0.0-next.13
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/.turbo/turbo-build.log +22 -22
- package/CHANGELOG.md +30 -0
- package/coverage/clover.xml +255 -3
- package/coverage/coverage-final.json +5 -1
- package/coverage/lcov-report/DefaultNavigationRenderer.tsx.html +298 -0
- package/coverage/lcov-report/Navigation.tsx.html +358 -0
- package/coverage/lcov-report/app-bar/AppBar.tsx.html +125 -134
- package/coverage/lcov-report/app-bar/AppBarTitle.tsx.html +54 -75
- package/coverage/lcov-report/app-bar/index.html +24 -9
- package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +34 -181
- package/coverage/lcov-report/autocomplete/AutocompleteGeneric.tsx.html +1 -1
- package/coverage/lcov-report/autocomplete/index.html +11 -11
- package/coverage/lcov-report/autocomplete/useAutocomplete.ts.html +102 -336
- package/coverage/lcov-report/autocomplete/useAutocompleteAgain.ts.html +1 -1
- package/coverage/lcov-report/autocomplete/useAutocompletev2.ts.html +1 -1
- package/coverage/lcov-report/autocomplete/useInlineAutocomplete.ts.html +31 -7
- package/coverage/lcov-report/autocomplete/useInlineSelection.ts.html +67 -4
- package/coverage/lcov-report/autocomplete/utils.ts.html +1 -1
- package/coverage/lcov-report/box/Box.tsx.html +115 -103
- package/coverage/lcov-report/box/index.html +22 -7
- package/coverage/lcov-report/box/styles.ts.html +622 -0
- package/coverage/lcov-report/button/Button.tsx.html +93 -105
- package/coverage/lcov-report/button/TooltippedButton.tsx.html +55 -67
- package/coverage/lcov-report/button/index.html +10 -10
- package/coverage/lcov-report/form/Form.tsx.html +18 -18
- package/coverage/lcov-report/form/Radio.tsx.html +8 -14
- package/coverage/lcov-report/form/index.html +35 -95
- package/coverage/lcov-report/form/useRadioGroup.ts.html +68 -80
- package/coverage/lcov-report/getHrefFromParents.ts.html +133 -0
- package/coverage/lcov-report/icon/FontIcon.tsx.html +65 -65
- package/coverage/lcov-report/icon/index.html +19 -19
- package/coverage/lcov-report/index.html +41 -11
- package/coverage/lcov-report/layout/LayoutNav.tsx.html +74 -86
- package/coverage/lcov-report/layout/Main.tsx.html +47 -38
- package/coverage/lcov-report/layout/index.html +54 -9
- package/coverage/lcov-report/layout/useExpandableLayout.ts.html +275 -89
- package/coverage/lcov-report/layout/useHorizontalLayoutTransition.ts.html +18 -18
- package/coverage/lcov-report/media-queries/AppSizeProvider.tsx.html +79 -64
- package/coverage/lcov-report/media-queries/index.html +18 -18
- package/coverage/lcov-report/navigation/CollapsibleNavGroup.tsx.html +334 -0
- package/coverage/lcov-report/navigation/DefaultNavigationRenderer.tsx.html +298 -0
- package/coverage/lcov-report/navigation/NavGroup.tsx.html +193 -0
- package/coverage/lcov-report/navigation/NavItem.tsx.html +160 -0
- package/coverage/lcov-report/navigation/NavItemButton.tsx.html +397 -0
- package/coverage/lcov-report/navigation/NavItemLink.tsx.html +574 -0
- package/coverage/lcov-report/navigation/NavSubheader.tsx.html +184 -0
- package/coverage/lcov-report/navigation/Navigation.tsx.html +358 -0
- package/coverage/lcov-report/navigation/getHrefFromParents.ts.html +130 -0
- package/coverage/lcov-report/navigation/index.html +146 -0
- package/coverage/lcov-report/navigation/navGroupStyles.ts.html +148 -0
- package/coverage/lcov-report/navigation/navItemStyles.ts.html +298 -0
- package/coverage/lcov-report/sheet/Sheet.tsx.html +50 -56
- package/coverage/lcov-report/sheet/index.html +8 -8
- package/coverage/lcov-report/snackbar/DefaultToastRenderer.tsx.html +307 -304
- package/coverage/lcov-report/snackbar/ToastManager.tsx.html +377 -356
- package/coverage/lcov-report/snackbar/index.html +16 -106
- package/coverage/lcov-report/src/autocomplete/Autocomplete.tsx.html +56 -92
- package/coverage/lcov-report/src/autocomplete/AutocompleteGeneric.tsx.html +1 -1
- package/coverage/lcov-report/src/autocomplete/index.html +11 -11
- package/coverage/lcov-report/src/autocomplete/useAutocomplete.ts.html +513 -111
- package/coverage/lcov-report/src/autocomplete/useAutocompleteAgain.ts.html +7 -7
- package/coverage/lcov-report/src/autocomplete/useAutocompletev2.ts.html +1 -1
- package/coverage/lcov-report/src/autocomplete/useInlineAutocomplete.ts.html +32 -8
- package/coverage/lcov-report/src/autocomplete/useInlineSelection.ts.html +146 -14
- package/coverage/lcov-report/src/autocomplete/utils.ts.html +1 -1
- package/coverage/lcov-report/src/divider/Divider.tsx.html +6 -9
- package/coverage/lcov-report/src/divider/index.html +8 -23
- package/coverage/lcov-report/src/icon/FontIcon.tsx.html +29 -29
- package/coverage/lcov-report/src/icon/index.html +1 -1
- package/coverage/lcov-report/src/index.html +21 -21
- package/coverage/lcov-report/src/layout/LayoutAppBar.tsx.html +33 -42
- package/coverage/lcov-report/src/layout/Main.tsx.html +33 -36
- package/coverage/lcov-report/src/layout/index.html +15 -195
- package/coverage/lcov-report/src/layout/useLayoutAppBarHeight.ts.html +37 -46
- package/coverage/lcov-report/src/list/List.tsx.html +39 -42
- package/coverage/lcov-report/src/list/index.html +10 -130
- package/coverage/lcov-report/src/navigation/CollapsibleNavGroup.tsx.html +367 -0
- package/coverage/lcov-report/src/navigation/DefaultNavigationRenderer.tsx.html +325 -0
- package/coverage/lcov-report/src/navigation/NavGroup.tsx.html +202 -0
- package/coverage/lcov-report/src/navigation/NavItem.tsx.html +172 -0
- package/coverage/lcov-report/src/navigation/NavSubheader.tsx.html +193 -0
- package/coverage/lcov-report/src/navigation/Navigation.tsx.html +358 -0
- package/coverage/lcov-report/src/navigation/index.html +191 -0
- package/coverage/lcov-report/src/tree/Tree.tsx.html +12 -24
- package/coverage/lcov-report/src/tree/index.html +18 -18
- package/coverage/lcov-report/src/useElementSize.ts.html +115 -40
- package/coverage/lcov-report/src/useMutationObserver.ts.html +310 -0
- package/coverage/lcov-report/src/utils/RenderRecursively.tsx.html +151 -52
- package/coverage/lcov-report/src/utils/index.html +10 -10
- package/coverage/lcov-report/test-utils/index.html +21 -21
- package/coverage/lcov-report/test-utils/matchMedia.ts.html +98 -95
- package/coverage/lcov-report/transition/config.ts.html +7 -7
- package/coverage/lcov-report/transition/index.html +1 -1
- package/coverage/lcov-report/useExpandableLayout.ts.html +171 -105
- package/coverage/lcov-report/useMutationObserver.ts.html +310 -0
- package/coverage/lcov-report/utils/index.html +16 -16
- package/coverage/lcov-report/utils/isElementVisible.ts.html +21 -24
- package/coverage/lcov.info +302 -0
- package/dist/CoreProviders.d.ts +3 -3
- package/dist/CoreProviders.js +1 -1
- package/dist/CoreProviders.js.map +1 -1
- package/dist/NoSsr.d.ts +3 -4
- package/dist/NoSsr.js +2 -3
- package/dist/NoSsr.js.map +1 -1
- package/dist/RootHtml.d.ts +3 -4
- package/dist/RootHtml.js +2 -3
- package/dist/RootHtml.js.map +1 -1
- package/dist/SsrProvider.d.ts +3 -3
- package/dist/SsrProvider.js +2 -2
- package/dist/SsrProvider.js.map +1 -1
- package/dist/_core.scss +5 -0
- package/dist/app-bar/AppBar.d.ts +11 -14
- package/dist/app-bar/AppBar.js +3 -5
- package/dist/app-bar/AppBar.js.map +1 -1
- package/dist/app-bar/AppBarTitle.d.ts +7 -9
- package/dist/app-bar/AppBarTitle.js +4 -6
- package/dist/app-bar/AppBarTitle.js.map +1 -1
- package/dist/avatar/Avatar.d.ts +5 -6
- package/dist/avatar/Avatar.js +2 -3
- package/dist/avatar/Avatar.js.map +1 -1
- package/dist/avatar/styles.d.ts +4 -4
- package/dist/avatar/styles.js +2 -2
- package/dist/avatar/styles.js.map +1 -1
- package/dist/badge/Badge.d.ts +4 -6
- package/dist/badge/Badge.js +3 -5
- package/dist/badge/Badge.js.map +1 -1
- package/dist/box/Box.d.ts +6 -9
- package/dist/box/Box.js +14 -9
- package/dist/box/Box.js.map +1 -1
- package/dist/box/_box.scss +1 -1
- package/dist/box/styles.d.ts +9 -9
- package/dist/box/styles.js +1 -1
- package/dist/box/styles.js.map +1 -1
- package/dist/button/AsyncButton.d.ts +5 -7
- package/dist/button/AsyncButton.js +3 -5
- package/dist/button/AsyncButton.js.map +1 -1
- package/dist/button/Button.d.ts +4 -8
- package/dist/button/Button.js +4 -8
- package/dist/button/Button.js.map +1 -1
- package/dist/button/ButtonUnstyled.d.ts +2 -2
- package/dist/button/ButtonUnstyled.js +1 -1
- package/dist/button/ButtonUnstyled.js.map +1 -1
- package/dist/button/FloatingActionButton.d.ts +5 -5
- package/dist/button/FloatingActionButton.js +2 -2
- package/dist/button/FloatingActionButton.js.map +1 -1
- package/dist/button/TooltippedButton.d.ts +2 -2
- package/dist/button/TooltippedButton.js +2 -5
- package/dist/button/TooltippedButton.js.map +1 -1
- package/dist/button/buttonStyles.d.ts +3 -3
- package/dist/button/buttonStyles.js +1 -1
- package/dist/button/buttonStyles.js.map +1 -1
- package/dist/button/buttonUnstyledStyles.d.ts +2 -2
- package/dist/button/buttonUnstyledStyles.js +1 -1
- package/dist/button/buttonUnstyledStyles.js.map +1 -1
- package/dist/card/Card.d.ts +3 -4
- package/dist/card/Card.js +2 -3
- package/dist/card/Card.js.map +1 -1
- package/dist/card/CardContent.d.ts +2 -4
- package/dist/card/CardContent.js +1 -2
- package/dist/card/CardContent.js.map +1 -1
- package/dist/card/CardFooter.d.ts +2 -2
- package/dist/card/CardFooter.js +1 -1
- package/dist/card/CardFooter.js.map +1 -1
- package/dist/card/CardHeader.d.ts +10 -12
- package/dist/card/CardHeader.js +6 -7
- package/dist/card/CardHeader.js.map +1 -1
- package/dist/card/CardSubtitle.d.ts +2 -2
- package/dist/card/CardSubtitle.js +1 -1
- package/dist/card/CardSubtitle.js.map +1 -1
- package/dist/card/CardTitle.d.ts +2 -2
- package/dist/card/CardTitle.js +1 -1
- package/dist/card/CardTitle.js.map +1 -1
- package/dist/card/ClickableCard.d.ts +3 -4
- package/dist/card/ClickableCard.js +2 -3
- package/dist/card/ClickableCard.js.map +1 -1
- package/dist/card/styles.d.ts +15 -15
- package/dist/card/styles.js +7 -7
- package/dist/card/styles.js.map +1 -1
- package/dist/chip/Chip.d.ts +10 -14
- package/dist/chip/Chip.js +4 -7
- package/dist/chip/Chip.js.map +1 -1
- package/dist/chip/styles.d.ts +4 -4
- package/dist/chip/styles.js +2 -2
- package/dist/chip/styles.js.map +1 -1
- package/dist/cssUtils.d.ts +10 -10
- package/dist/cssUtils.js +1 -1
- package/dist/cssUtils.js.map +1 -1
- package/dist/dialog/Dialog.d.ts +5 -6
- package/dist/dialog/Dialog.js +4 -5
- package/dist/dialog/Dialog.js.map +1 -1
- package/dist/dialog/DialogContainer.d.ts +2 -2
- package/dist/dialog/DialogContainer.js +1 -1
- package/dist/dialog/DialogContainer.js.map +1 -1
- package/dist/dialog/DialogTitle.d.ts +1 -1
- package/dist/dialog/DialogTitle.js.map +1 -1
- package/dist/dialog/FixedDialog.d.ts +1 -2
- package/dist/dialog/FixedDialog.js +1 -2
- package/dist/dialog/FixedDialog.js.map +1 -1
- package/dist/dialog/styles.d.ts +9 -9
- package/dist/dialog/styles.js +4 -4
- package/dist/dialog/styles.js.map +1 -1
- package/dist/divider/Divider.d.ts +2 -3
- package/dist/divider/Divider.js +1 -2
- package/dist/divider/Divider.js.map +1 -1
- package/dist/divider/styles.d.ts +2 -2
- package/dist/divider/styles.js +1 -1
- package/dist/divider/styles.js.map +1 -1
- package/dist/draggable/useDraggable.d.ts +17 -18
- package/dist/draggable/useDraggable.js +2 -2
- package/dist/draggable/useDraggable.js.map +1 -1
- package/dist/draggable/utils.d.ts +2 -2
- package/dist/draggable/utils.js +1 -1
- package/dist/draggable/utils.js.map +1 -1
- package/dist/expansion-panel/ExpansionList.d.ts +2 -2
- package/dist/expansion-panel/ExpansionList.js +1 -1
- package/dist/expansion-panel/ExpansionList.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanel.d.ts +8 -9
- package/dist/expansion-panel/ExpansionPanel.js +2 -3
- package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanelHeader.d.ts +3 -4
- package/dist/expansion-panel/ExpansionPanelHeader.js +2 -3
- package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
- package/dist/expansion-panel/useExpansionList.d.ts +5 -6
- package/dist/expansion-panel/useExpansionList.js +4 -5
- package/dist/expansion-panel/useExpansionList.js.map +1 -1
- package/dist/expansion-panel/useExpansionPanels.d.ts +9 -14
- package/dist/expansion-panel/useExpansionPanels.js +3 -6
- package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
- package/dist/focus/useFocusContainer.d.ts +9 -10
- package/dist/focus/useFocusContainer.js +2 -3
- package/dist/focus/useFocusContainer.js.map +1 -1
- package/dist/focus/utils.d.ts +4 -5
- package/dist/focus/utils.js +3 -4
- package/dist/focus/utils.js.map +1 -1
- package/dist/form/Checkbox.d.ts +1 -2
- package/dist/form/Checkbox.js +1 -2
- package/dist/form/Checkbox.js.map +1 -1
- package/dist/form/Fieldset.d.ts +5 -6
- package/dist/form/Fieldset.js +2 -3
- package/dist/form/Fieldset.js.map +1 -1
- package/dist/form/FileInput.d.ts +6 -7
- package/dist/form/FileInput.js +3 -4
- package/dist/form/FileInput.js.map +1 -1
- package/dist/form/FormMessageContainer.d.ts +2 -2
- package/dist/form/FormMessageContainer.js +1 -1
- package/dist/form/FormMessageContainer.js.map +1 -1
- package/dist/form/FormMessageCounter.d.ts +4 -6
- package/dist/form/FormMessageCounter.js +2 -3
- package/dist/form/FormMessageCounter.js.map +1 -1
- package/dist/form/InputToggle.d.ts +11 -12
- package/dist/form/InputToggle.js +1 -1
- package/dist/form/InputToggle.js.map +1 -1
- package/dist/form/InputToggleIcon.d.ts +4 -6
- package/dist/form/InputToggleIcon.js +2 -3
- package/dist/form/InputToggleIcon.js.map +1 -1
- package/dist/form/Label.d.ts +2 -2
- package/dist/form/Label.js +2 -2
- package/dist/form/Label.js.map +1 -1
- package/dist/form/Legend.d.ts +2 -2
- package/dist/form/Legend.js +1 -1
- package/dist/form/Legend.js.map +1 -1
- package/dist/form/MenuItemCheckbox.d.ts +2 -3
- package/dist/form/MenuItemCheckbox.js +2 -3
- package/dist/form/MenuItemCheckbox.js.map +1 -1
- package/dist/form/MenuItemFileInput.d.ts +3 -5
- package/dist/form/MenuItemFileInput.js +2 -3
- package/dist/form/MenuItemFileInput.js.map +1 -1
- package/dist/form/MenuItemInputToggle.d.ts +7 -9
- package/dist/form/MenuItemInputToggle.js +1 -1
- package/dist/form/MenuItemInputToggle.js.map +1 -1
- package/dist/form/MenuItemRadio.d.ts +3 -5
- package/dist/form/MenuItemRadio.js +3 -5
- package/dist/form/MenuItemRadio.js.map +1 -1
- package/dist/form/MenuItemSwitch.d.ts +2 -3
- package/dist/form/MenuItemSwitch.js +2 -3
- package/dist/form/MenuItemSwitch.js.map +1 -1
- package/dist/form/MenuItemTextField.d.ts +2 -2
- package/dist/form/MenuItemTextField.js +1 -1
- package/dist/form/MenuItemTextField.js.map +1 -1
- package/dist/form/NativeSelect.d.ts +3 -5
- package/dist/form/NativeSelect.js +2 -4
- package/dist/form/NativeSelect.js.map +1 -1
- package/dist/form/OptGroup.d.ts +3 -4
- package/dist/form/OptGroup.js +2 -3
- package/dist/form/OptGroup.js.map +1 -1
- package/dist/form/Option.d.ts +5 -7
- package/dist/form/Option.js +3 -4
- package/dist/form/Option.js.map +1 -1
- package/dist/form/Password.d.ts +7 -13
- package/dist/form/Password.js +1 -2
- package/dist/form/Password.js.map +1 -1
- package/dist/form/Radio.d.ts +1 -2
- package/dist/form/Radio.js +1 -2
- package/dist/form/Radio.js.map +1 -1
- package/dist/form/ResizingTextAreaWrapper.d.ts +2 -2
- package/dist/form/ResizingTextAreaWrapper.js +1 -1
- package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
- package/dist/form/Select.d.ts +6 -9
- package/dist/form/Select.js +3 -5
- package/dist/form/Select.js.map +1 -1
- package/dist/form/SelectedOption.d.ts +2 -2
- package/dist/form/SelectedOption.js +1 -1
- package/dist/form/SelectedOption.js.map +1 -1
- package/dist/form/Slider.d.ts +16 -25
- package/dist/form/Slider.js.map +1 -1
- package/dist/form/SliderContainer.d.ts +6 -9
- package/dist/form/SliderContainer.js +2 -3
- package/dist/form/SliderContainer.js.map +1 -1
- package/dist/form/SliderMark.d.ts +2 -2
- package/dist/form/SliderMark.js +1 -1
- package/dist/form/SliderMark.js.map +1 -1
- package/dist/form/SliderMarkLabel.d.ts +3 -3
- package/dist/form/SliderMarkLabel.js +1 -1
- package/dist/form/SliderMarkLabel.js.map +1 -1
- package/dist/form/SliderThumb.d.ts +6 -8
- package/dist/form/SliderThumb.js +3 -4
- package/dist/form/SliderThumb.js.map +1 -1
- package/dist/form/SliderTrack.d.ts +4 -6
- package/dist/form/SliderTrack.js +2 -3
- package/dist/form/SliderTrack.js.map +1 -1
- package/dist/form/SliderValueMarks.d.ts +7 -9
- package/dist/form/SliderValueMarks.js +1 -1
- package/dist/form/SliderValueMarks.js.map +1 -1
- package/dist/form/SliderValueTooltip.d.ts +4 -6
- package/dist/form/SliderValueTooltip.js +2 -3
- package/dist/form/SliderValueTooltip.js.map +1 -1
- package/dist/form/Switch.d.ts +3 -4
- package/dist/form/Switch.js +2 -3
- package/dist/form/Switch.js.map +1 -1
- package/dist/form/TextArea.d.ts +2 -3
- package/dist/form/TextArea.js +1 -2
- package/dist/form/TextArea.js.map +1 -1
- package/dist/form/TextField.d.ts +7 -10
- package/dist/form/TextField.js +2 -4
- package/dist/form/TextField.js.map +1 -1
- package/dist/form/TextFieldAddon.d.ts +3 -3
- package/dist/form/TextFieldAddon.js +1 -1
- package/dist/form/TextFieldAddon.js.map +1 -1
- package/dist/form/fileUtils.d.ts +33 -36
- package/dist/form/fileUtils.js +14 -14
- package/dist/form/fileUtils.js.map +1 -1
- package/dist/form/formConfig.d.ts +2 -2
- package/dist/form/formConfig.js +2 -2
- package/dist/form/formConfig.js.map +1 -1
- package/dist/form/formMessageStyles.d.ts +5 -5
- package/dist/form/formMessageStyles.js +3 -3
- package/dist/form/formMessageStyles.js.map +1 -1
- package/dist/form/inputToggleStyles.d.ts +3 -3
- package/dist/form/inputToggleStyles.js +1 -1
- package/dist/form/inputToggleStyles.js.map +1 -1
- package/dist/form/menuItemInputToggleStyles.d.ts +8 -8
- package/dist/form/menuItemInputToggleStyles.js +4 -4
- package/dist/form/menuItemInputToggleStyles.js.map +1 -1
- package/dist/form/nativeSelectStyles.d.ts +4 -4
- package/dist/form/nativeSelectStyles.js +2 -2
- package/dist/form/nativeSelectStyles.js.map +1 -1
- package/dist/form/optionStyles.d.ts +2 -2
- package/dist/form/optionStyles.js +1 -1
- package/dist/form/optionStyles.js.map +1 -1
- package/dist/form/passwordStyles.d.ts +4 -4
- package/dist/form/passwordStyles.js +1 -1
- package/dist/form/passwordStyles.js.map +1 -1
- package/dist/form/selectStyles.d.ts +2 -2
- package/dist/form/selectStyles.js +1 -1
- package/dist/form/selectStyles.js.map +1 -1
- package/dist/form/selectUtils.d.ts +3 -3
- package/dist/form/selectUtils.js +2 -2
- package/dist/form/selectUtils.js.map +1 -1
- package/dist/form/sliderUtils.d.ts +9 -9
- package/dist/form/sliderUtils.js +4 -4
- package/dist/form/sliderUtils.js.map +1 -1
- package/dist/form/switchStyles.d.ts +2 -2
- package/dist/form/switchStyles.js +1 -1
- package/dist/form/switchStyles.js.map +1 -1
- package/dist/form/textAreaStyles.d.ts +4 -4
- package/dist/form/textAreaStyles.js +2 -2
- package/dist/form/textAreaStyles.js.map +1 -1
- package/dist/form/textFieldContainerStyles.d.ts +2 -2
- package/dist/form/textFieldContainerStyles.js +1 -1
- package/dist/form/textFieldContainerStyles.js.map +1 -1
- package/dist/form/textFieldStyles.d.ts +2 -2
- package/dist/form/textFieldStyles.js +1 -1
- package/dist/form/textFieldStyles.js.map +1 -1
- package/dist/form/types.d.ts +10 -10
- package/dist/form/types.js.map +1 -1
- package/dist/form/useCheckboxGroup.d.ts +15 -20
- package/dist/form/useCheckboxGroup.js.map +1 -1
- package/dist/form/useCombobox.d.ts +16 -16
- package/dist/form/useCombobox.js +2 -2
- package/dist/form/useCombobox.js.map +1 -1
- package/dist/form/useEditableCombobox.d.ts +3 -3
- package/dist/form/useEditableCombobox.js +1 -1
- package/dist/form/useEditableCombobox.js.map +1 -1
- package/dist/form/useFileUpload.d.ts +7 -8
- package/dist/form/useFileUpload.js +1 -1
- package/dist/form/useFileUpload.js.map +1 -1
- package/dist/form/useFormReset.d.ts +2 -2
- package/dist/form/useFormReset.js +1 -1
- package/dist/form/useFormReset.js.map +1 -1
- package/dist/form/useListboxProvider.d.ts +3 -3
- package/dist/form/useListboxProvider.js +2 -2
- package/dist/form/useListboxProvider.js.map +1 -1
- package/dist/form/useNumberField.d.ts +17 -25
- package/dist/form/useNumberField.js.map +1 -1
- package/dist/form/useRadioGroup.d.ts +12 -15
- package/dist/form/useRadioGroup.js +2 -3
- package/dist/form/useRadioGroup.js.map +1 -1
- package/dist/form/useRangeSlider.d.ts +8 -11
- package/dist/form/useRangeSlider.js +3 -5
- package/dist/form/useRangeSlider.js.map +1 -1
- package/dist/form/useSelectCombobox.d.ts +3 -3
- package/dist/form/useSelectCombobox.js +1 -1
- package/dist/form/useSelectCombobox.js.map +1 -1
- package/dist/form/useSlider.d.ts +7 -9
- package/dist/form/useSlider.js +3 -5
- package/dist/form/useSlider.js.map +1 -1
- package/dist/form/useTextField.d.ts +22 -31
- package/dist/form/useTextField.js.map +1 -1
- package/dist/form/utils.d.ts +7 -8
- package/dist/form/utils.js +5 -6
- package/dist/form/utils.js.map +1 -1
- package/dist/form/validation.d.ts +16 -16
- package/dist/form/validation.js +7 -7
- package/dist/form/validation.js.map +1 -1
- package/dist/hoverMode/useHoverMode.d.ts +9 -10
- package/dist/hoverMode/useHoverMode.js.map +1 -1
- package/dist/hoverMode/useHoverModeProvider.d.ts +11 -15
- package/dist/hoverMode/useHoverModeProvider.js +3 -4
- package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
- package/dist/icon/FontIcon.d.ts +1 -1
- package/dist/icon/FontIcon.js +1 -1
- package/dist/icon/FontIcon.js.map +1 -1
- package/dist/icon/IconRotator.d.ts +1 -1
- package/dist/icon/IconRotator.js.map +1 -1
- package/dist/icon/MaterialIcon.d.ts +2 -2
- package/dist/icon/MaterialIcon.js +1 -1
- package/dist/icon/MaterialIcon.js.map +1 -1
- package/dist/icon/MaterialSymbol.d.ts +3 -4
- package/dist/icon/MaterialSymbol.js +2 -3
- package/dist/icon/MaterialSymbol.js.map +1 -1
- package/dist/icon/SVGIcon.d.ts +0 -1
- package/dist/icon/SVGIcon.js.map +1 -1
- package/dist/icon/TextIconSpacing.d.ts +3 -5
- package/dist/icon/TextIconSpacing.js +2 -4
- package/dist/icon/TextIconSpacing.js.map +1 -1
- package/dist/icon/iconConfig.d.ts +14 -16
- package/dist/icon/iconConfig.js +5 -7
- package/dist/icon/iconConfig.js.map +1 -1
- package/dist/icon/material.d.ts +4 -4
- package/dist/icon/material.js +1 -1
- package/dist/icon/material.js.map +1 -1
- package/dist/icon/materialConfig.d.ts +12 -12
- package/dist/icon/materialConfig.js +2 -2
- package/dist/icon/materialConfig.js.map +1 -1
- package/dist/icon/styles.d.ts +8 -8
- package/dist/icon/styles.js +2 -2
- package/dist/icon/styles.js.map +1 -1
- package/dist/interaction/UserInteractionModeProvider.d.ts +1 -2
- package/dist/interaction/UserInteractionModeProvider.js +1 -2
- package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
- package/dist/interaction/config.d.ts +2 -2
- package/dist/interaction/config.js +1 -1
- package/dist/interaction/config.js.map +1 -1
- package/dist/interaction/types.d.ts +8 -8
- package/dist/interaction/types.js +1 -1
- package/dist/interaction/types.js.map +1 -1
- package/dist/interaction/useElementInteraction.d.ts +6 -7
- package/dist/interaction/useElementInteraction.js +3 -4
- package/dist/interaction/useElementInteraction.js.map +1 -1
- package/dist/interaction/useHigherContrastChildren.d.ts +2 -3
- package/dist/interaction/useHigherContrastChildren.js +2 -3
- package/dist/interaction/useHigherContrastChildren.js.map +1 -1
- package/dist/layout/LayoutAppBar.d.ts +4 -7
- package/dist/layout/LayoutAppBar.js +3 -6
- package/dist/layout/LayoutAppBar.js.map +1 -1
- package/dist/layout/LayoutNav.d.ts +4 -6
- package/dist/layout/LayoutNav.js +3 -5
- package/dist/layout/LayoutNav.js.map +1 -1
- package/dist/layout/LayoutWindowSplitter.d.ts +3 -4
- package/dist/layout/LayoutWindowSplitter.js +2 -3
- package/dist/layout/LayoutWindowSplitter.js.map +1 -1
- package/dist/layout/Main.d.ts +4 -5
- package/dist/layout/Main.js +2 -3
- package/dist/layout/Main.js.map +1 -1
- package/dist/layout/_layout.scss +12 -1
- package/dist/layout/layoutNavStyles.d.ts +2 -2
- package/dist/layout/layoutNavStyles.js +1 -1
- package/dist/layout/layoutNavStyles.js.map +1 -1
- package/dist/layout/layoutWindowSplitterStyles.d.ts +2 -2
- package/dist/layout/layoutWindowSplitterStyles.js +1 -1
- package/dist/layout/layoutWindowSplitterStyles.js.map +1 -1
- package/dist/layout/mainStyles.d.ts +2 -2
- package/dist/layout/mainStyles.js +1 -1
- package/dist/layout/mainStyles.js.map +1 -1
- package/dist/layout/useExpandableLayout.d.ts +66 -14
- package/dist/layout/useExpandableLayout.js +50 -5
- package/dist/layout/useExpandableLayout.js.map +1 -1
- package/dist/layout/useHorizontalLayoutTransition.d.ts +4 -4
- package/dist/layout/useHorizontalLayoutTransition.js +2 -2
- package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
- package/dist/layout/useLayoutAppBarHeight.d.ts +7 -9
- package/dist/layout/useLayoutAppBarHeight.js +7 -8
- package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
- package/dist/layout/useLayoutTree.d.ts +6 -6
- package/dist/layout/useLayoutTree.js +1 -1
- package/dist/layout/useLayoutTree.js.map +1 -1
- package/dist/layout/useLayoutWindowSplitter.d.ts +5 -6
- package/dist/layout/useLayoutWindowSplitter.js +2 -3
- package/dist/layout/useLayoutWindowSplitter.js.map +1 -1
- package/dist/layout/useMainTabIndex.d.ts +1 -1
- package/dist/layout/useMainTabIndex.js +1 -1
- package/dist/layout/useMainTabIndex.js.map +1 -1
- package/dist/layout/useResizableLayout.d.ts +54 -8
- package/dist/layout/useResizableLayout.js +51 -5
- package/dist/layout/useResizableLayout.js.map +1 -1
- package/dist/layout/useTemporaryLayout.d.ts +12 -12
- package/dist/layout/useTemporaryLayout.js +1 -1
- package/dist/layout/useTemporaryLayout.js.map +1 -1
- package/dist/link/Link.d.ts +10 -13
- package/dist/link/Link.js +5 -7
- package/dist/link/Link.js.map +1 -1
- package/dist/link/SkipToMainContent.d.ts +2 -4
- package/dist/link/SkipToMainContent.js +1 -2
- package/dist/link/SkipToMainContent.js.map +1 -1
- package/dist/link/styles.d.ts +4 -4
- package/dist/link/styles.js +2 -2
- package/dist/link/styles.js.map +1 -1
- package/dist/list/List.d.ts +3 -4
- package/dist/list/List.js +2 -3
- package/dist/list/List.js.map +1 -1
- package/dist/list/ListItem.d.ts +4 -6
- package/dist/list/ListItem.js +2 -4
- package/dist/list/ListItem.js.map +1 -1
- package/dist/list/ListItemChildren.d.ts +1 -2
- package/dist/list/ListItemChildren.js +1 -2
- package/dist/list/ListItemChildren.js.map +1 -1
- package/dist/list/ListSubheader.d.ts +3 -3
- package/dist/list/ListSubheader.js +1 -1
- package/dist/list/ListSubheader.js.map +1 -1
- package/dist/list/getListItemHeight.d.ts +1 -1
- package/dist/list/getListItemHeight.js.map +1 -1
- package/dist/list/listItemStyles.d.ts +9 -9
- package/dist/list/listItemStyles.js +3 -3
- package/dist/list/listItemStyles.js.map +1 -1
- package/dist/list/types.d.ts +11 -11
- package/dist/list/types.js.map +1 -1
- package/dist/media-queries/AppSizeProvider.d.ts +1 -2
- package/dist/media-queries/AppSizeProvider.js +1 -2
- package/dist/media-queries/AppSizeProvider.js.map +1 -1
- package/dist/media-queries/useMediaQuery.d.ts +2 -3
- package/dist/media-queries/useMediaQuery.js +2 -3
- package/dist/media-queries/useMediaQuery.js.map +1 -1
- package/dist/menu/DropdownMenu.d.ts +7 -11
- package/dist/menu/DropdownMenu.js +4 -7
- package/dist/menu/DropdownMenu.js.map +1 -1
- package/dist/menu/Menu.d.ts +10 -13
- package/dist/menu/Menu.js +2 -3
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/MenuBar.d.ts +3 -4
- package/dist/menu/MenuBar.js +3 -4
- package/dist/menu/MenuBar.js.map +1 -1
- package/dist/menu/MenuButton.d.ts +8 -8
- package/dist/menu/MenuButton.js +2 -2
- package/dist/menu/MenuButton.js.map +1 -1
- package/dist/menu/MenuConfigurationProvider.d.ts +8 -8
- package/dist/menu/MenuConfigurationProvider.js +5 -5
- package/dist/menu/MenuConfigurationProvider.js.map +1 -1
- package/dist/menu/MenuItem.d.ts +2 -2
- package/dist/menu/MenuItem.js +1 -1
- package/dist/menu/MenuItem.js.map +1 -1
- package/dist/menu/MenuItemButton.d.ts +2 -2
- package/dist/menu/MenuItemButton.js +1 -1
- package/dist/menu/MenuItemButton.js.map +1 -1
- package/dist/menu/MenuItemCircularProgress.d.ts +3 -4
- package/dist/menu/MenuItemCircularProgress.js +2 -3
- package/dist/menu/MenuItemCircularProgress.js.map +1 -1
- package/dist/menu/MenuItemGroup.d.ts +3 -4
- package/dist/menu/MenuItemGroup.js +2 -3
- package/dist/menu/MenuItemGroup.js.map +1 -1
- package/dist/menu/MenuItemSeparator.d.ts +2 -2
- package/dist/menu/MenuItemSeparator.js +1 -1
- package/dist/menu/MenuItemSeparator.js.map +1 -1
- package/dist/menu/MenuSheet.d.ts +7 -9
- package/dist/menu/MenuSheet.js +2 -3
- package/dist/menu/MenuSheet.js.map +1 -1
- package/dist/menu/MenuVisibilityProvider.d.ts +6 -8
- package/dist/menu/MenuVisibilityProvider.js +5 -6
- package/dist/menu/MenuVisibilityProvider.js.map +1 -1
- package/dist/menu/MenuWidget.d.ts +2 -2
- package/dist/menu/MenuWidget.js +1 -1
- package/dist/menu/MenuWidget.js.map +1 -1
- package/dist/menu/MenuWidgetKeyboardProvider.d.ts +2 -2
- package/dist/menu/MenuWidgetKeyboardProvider.js +1 -1
- package/dist/menu/MenuWidgetKeyboardProvider.js.map +1 -1
- package/dist/menu/useContextMenu.d.ts +8 -12
- package/dist/menu/useContextMenu.js +3 -5
- package/dist/menu/useContextMenu.js.map +1 -1
- package/dist/menu/useMenuBarProvider.d.ts +6 -6
- package/dist/menu/useMenuBarProvider.js +3 -3
- package/dist/menu/useMenuBarProvider.js.map +1 -1
- package/dist/menu/utils.d.ts +2 -2
- package/dist/menu/utils.js +1 -1
- package/dist/menu/utils.js.map +1 -1
- package/dist/movement/constants.d.ts +3 -3
- package/dist/movement/constants.js +3 -3
- package/dist/movement/constants.js.map +1 -1
- package/dist/movement/types.d.ts +16 -17
- package/dist/movement/types.js +1 -1
- package/dist/movement/types.js.map +1 -1
- package/dist/movement/useKeyboardMovementProvider.d.ts +5 -8
- package/dist/movement/useKeyboardMovementProvider.js +6 -9
- package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
- package/dist/movement/utils.d.ts +13 -13
- package/dist/movement/utils.js +10 -10
- package/dist/movement/utils.js.map +1 -1
- package/dist/navigation/CollapsibleNavGroup.d.ts +29 -0
- package/dist/navigation/CollapsibleNavGroup.js +49 -0
- package/dist/navigation/CollapsibleNavGroup.js.map +1 -0
- package/dist/navigation/DefaultNavigationRenderer.d.ts +22 -0
- package/dist/navigation/DefaultNavigationRenderer.js +58 -0
- package/dist/navigation/DefaultNavigationRenderer.js.map +1 -0
- package/dist/navigation/NavGroup.d.ts +18 -0
- package/dist/navigation/NavGroup.js +29 -0
- package/dist/navigation/NavGroup.js.map +1 -0
- package/dist/navigation/NavItem.d.ts +17 -0
- package/dist/navigation/NavItem.js +24 -0
- package/dist/navigation/NavItem.js.map +1 -0
- package/dist/navigation/NavItemButton.d.ts +26 -0
- package/dist/navigation/NavItemButton.js +65 -0
- package/dist/navigation/NavItemButton.js.map +1 -0
- package/dist/navigation/NavItemLink.d.ts +40 -0
- package/dist/navigation/NavItemLink.js +88 -0
- package/dist/navigation/NavItemLink.js.map +1 -0
- package/dist/navigation/NavSubheader.d.ts +16 -0
- package/dist/navigation/NavSubheader.js +26 -0
- package/dist/navigation/NavSubheader.js.map +1 -0
- package/dist/navigation/Navigation.d.ts +31 -0
- package/dist/navigation/Navigation.js +46 -0
- package/dist/navigation/Navigation.js.map +1 -0
- package/dist/navigation/_navigation.scss +99 -0
- package/dist/navigation/getHrefFromParents.d.ts +5 -0
- package/dist/navigation/getHrefFromParents.js +13 -0
- package/dist/navigation/getHrefFromParents.js.map +1 -0
- package/dist/navigation/navGroupStyles.d.ts +11 -0
- package/dist/navigation/navGroupStyles.js +13 -0
- package/dist/navigation/navGroupStyles.js.map +1 -0
- package/dist/navigation/navItemStyles.d.ts +33 -0
- package/dist/navigation/navItemStyles.js +31 -0
- package/dist/navigation/navItemStyles.js.map +1 -0
- package/dist/navigation/types.d.ts +137 -0
- package/dist/navigation/types.js +5 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/navigation/useActiveHeadingId.d.ts +54 -0
- package/dist/navigation/useActiveHeadingId.js +117 -0
- package/dist/navigation/useActiveHeadingId.js.map +1 -0
- package/dist/overlay/Overlay.d.ts +5 -6
- package/dist/overlay/Overlay.js +2 -3
- package/dist/overlay/Overlay.js.map +1 -1
- package/dist/overlay/overlayStyles.d.ts +4 -4
- package/dist/overlay/overlayStyles.js +3 -3
- package/dist/overlay/overlayStyles.js.map +1 -1
- package/dist/portal/Portal.d.ts +1 -2
- package/dist/portal/Portal.js +1 -2
- package/dist/portal/Portal.js.map +1 -1
- package/dist/portal/PortalContainerProvider.d.ts +4 -4
- package/dist/portal/PortalContainerProvider.js +2 -2
- package/dist/portal/PortalContainerProvider.js.map +1 -1
- package/dist/positioning/createVerticalPosition.d.ts +1 -1
- package/dist/positioning/createVerticalPosition.js.map +1 -1
- package/dist/positioning/getFixedPosition.js +1 -1
- package/dist/positioning/getFixedPosition.js.map +1 -1
- package/dist/positioning/types.d.ts +4 -4
- package/dist/positioning/types.js.map +1 -1
- package/dist/positioning/useFixedPositioning.d.ts +8 -9
- package/dist/positioning/useFixedPositioning.js +2 -3
- package/dist/positioning/useFixedPositioning.js.map +1 -1
- package/dist/positioning/utils.d.ts +3 -3
- package/dist/positioning/utils.js +1 -1
- package/dist/positioning/utils.js.map +1 -1
- package/dist/progress/CircularProgress.d.ts +7 -10
- package/dist/progress/CircularProgress.js +3 -5
- package/dist/progress/CircularProgress.js.map +1 -1
- package/dist/progress/LinearProgress.d.ts +4 -6
- package/dist/progress/LinearProgress.js +3 -5
- package/dist/progress/LinearProgress.js.map +1 -1
- package/dist/progress/types.d.ts +5 -5
- package/dist/progress/types.js +1 -1
- package/dist/progress/types.js.map +1 -1
- package/dist/responsive-item/ResponsiveItemContainer.d.ts +10 -15
- package/dist/responsive-item/ResponsiveItemContainer.js +5 -8
- package/dist/responsive-item/ResponsiveItemContainer.js.map +1 -1
- package/dist/responsive-item/ResponsiveItemOverlay.d.ts +6 -7
- package/dist/responsive-item/ResponsiveItemOverlay.js +3 -4
- package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
- package/dist/responsive-item/styles.d.ts +2 -2
- package/dist/responsive-item/styles.js +1 -1
- package/dist/responsive-item/styles.js.map +1 -1
- package/dist/scroll/ScrollLock.d.ts +1 -1
- package/dist/scroll/ScrollLock.js +1 -1
- package/dist/scroll/ScrollLock.js.map +1 -1
- package/dist/scroll/useScrollLock.d.ts +2 -3
- package/dist/scroll/useScrollLock.js +2 -3
- package/dist/scroll/useScrollLock.js.map +1 -1
- package/dist/searching/caseInsensitive.d.ts +9 -13
- package/dist/searching/caseInsensitive.js +1 -1
- package/dist/searching/caseInsensitive.js.map +1 -1
- package/dist/searching/fuzzy.d.ts +4 -5
- package/dist/searching/fuzzy.js +1 -1
- package/dist/searching/fuzzy.js.map +1 -1
- package/dist/searching/toSearchQuery.d.ts +1 -1
- package/dist/searching/toSearchQuery.js +1 -1
- package/dist/searching/toSearchQuery.js.map +1 -1
- package/dist/searching/types.d.ts +2 -2
- package/dist/searching/types.js +1 -1
- package/dist/searching/types.js.map +1 -1
- package/dist/searching/useFuzzyMatch.d.ts +3 -3
- package/dist/searching/useFuzzyMatch.js +1 -1
- package/dist/searching/useFuzzyMatch.js.map +1 -1
- package/dist/searching/utils.d.ts +3 -3
- package/dist/searching/utils.js +2 -2
- package/dist/searching/utils.js.map +1 -1
- package/dist/segmented-button/SegmentedButton.d.ts +3 -4
- package/dist/segmented-button/SegmentedButton.js +2 -3
- package/dist/segmented-button/SegmentedButton.js.map +1 -1
- package/dist/segmented-button/SegmentedButtonContainer.d.ts +3 -4
- package/dist/segmented-button/SegmentedButtonContainer.js +2 -3
- package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
- package/dist/segmented-button/segmentedButtonContainerStyles.d.ts +2 -2
- package/dist/segmented-button/segmentedButtonContainerStyles.js +1 -1
- package/dist/segmented-button/segmentedButtonContainerStyles.js.map +1 -1
- package/dist/segmented-button/segmentedButtonStyles.d.ts +2 -2
- package/dist/segmented-button/segmentedButtonStyles.js +1 -1
- package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
- package/dist/sheet/Sheet.d.ts +1 -1
- package/dist/sheet/Sheet.js.map +1 -1
- package/dist/sheet/styles.d.ts +3 -3
- package/dist/sheet/styles.js +1 -1
- package/dist/sheet/styles.js.map +1 -1
- package/dist/snackbar/DefaultToastRenderer.d.ts +2 -2
- package/dist/snackbar/DefaultToastRenderer.js +1 -1
- package/dist/snackbar/DefaultToastRenderer.js.map +1 -1
- package/dist/snackbar/Snackbar.d.ts +3 -4
- package/dist/snackbar/Snackbar.js +2 -3
- package/dist/snackbar/Snackbar.js.map +1 -1
- package/dist/snackbar/Toast.d.ts +3 -3
- package/dist/snackbar/Toast.js +1 -1
- package/dist/snackbar/Toast.js.map +1 -1
- package/dist/snackbar/ToastActionButton.d.ts +2 -2
- package/dist/snackbar/ToastActionButton.js +1 -1
- package/dist/snackbar/ToastActionButton.js.map +1 -1
- package/dist/snackbar/ToastCloseButton.d.ts +2 -2
- package/dist/snackbar/ToastCloseButton.js +1 -1
- package/dist/snackbar/ToastCloseButton.js.map +1 -1
- package/dist/snackbar/ToastContent.d.ts +2 -2
- package/dist/snackbar/ToastContent.js +1 -1
- package/dist/snackbar/ToastContent.js.map +1 -1
- package/dist/snackbar/ToastManager.d.ts +17 -18
- package/dist/snackbar/ToastManager.js +21 -19
- package/dist/snackbar/ToastManager.js.map +1 -1
- package/dist/snackbar/ToastManagerProvider.d.ts +6 -6
- package/dist/snackbar/ToastManagerProvider.js +5 -5
- package/dist/snackbar/ToastManagerProvider.js.map +1 -1
- package/dist/snackbar/snackbarStyles.d.ts +4 -5
- package/dist/snackbar/snackbarStyles.js +1 -1
- package/dist/snackbar/snackbarStyles.js.map +1 -1
- package/dist/snackbar/toastContentStyles.d.ts +2 -2
- package/dist/snackbar/toastContentStyles.js +1 -1
- package/dist/snackbar/toastContentStyles.js.map +1 -1
- package/dist/snackbar/toastStyles.d.ts +2 -2
- package/dist/snackbar/toastStyles.js +1 -1
- package/dist/snackbar/toastStyles.js.map +1 -1
- package/dist/snackbar/useCurrentToastActions.d.ts +3 -3
- package/dist/snackbar/useCurrentToastActions.js +2 -2
- package/dist/snackbar/useCurrentToastActions.js.map +1 -1
- package/dist/suspense/CircularProgressSuspense.d.ts +3 -4
- package/dist/suspense/CircularProgressSuspense.js +2 -3
- package/dist/suspense/CircularProgressSuspense.js.map +1 -1
- package/dist/suspense/NullSuspense.d.ts +3 -4
- package/dist/suspense/NullSuspense.js +2 -3
- package/dist/suspense/NullSuspense.js.map +1 -1
- package/dist/table/Table.d.ts +1 -2
- package/dist/table/Table.js +1 -2
- package/dist/table/Table.js.map +1 -1
- package/dist/table/TableCell.d.ts +7 -7
- package/dist/table/TableCell.js.map +1 -1
- package/dist/table/TableCellContent.d.ts +3 -3
- package/dist/table/TableCellContent.js.map +1 -1
- package/dist/table/TableCheckbox.d.ts +11 -15
- package/dist/table/TableCheckbox.js +4 -6
- package/dist/table/TableCheckbox.js.map +1 -1
- package/dist/table/TableContainerProvider.d.ts +3 -3
- package/dist/table/TableContainerProvider.js +2 -2
- package/dist/table/TableContainerProvider.js.map +1 -1
- package/dist/table/TableFooter.d.ts +2 -2
- package/dist/table/TableFooter.js +1 -1
- package/dist/table/TableFooter.js.map +1 -1
- package/dist/table/TableHeader.d.ts +2 -2
- package/dist/table/TableHeader.js +1 -1
- package/dist/table/TableHeader.js.map +1 -1
- package/dist/table/TableRadio.d.ts +7 -9
- package/dist/table/TableRadio.js +2 -3
- package/dist/table/TableRadio.js.map +1 -1
- package/dist/table/tableCellStyles.d.ts +2 -2
- package/dist/table/tableCellStyles.js +1 -1
- package/dist/table/tableCellStyles.js.map +1 -1
- package/dist/table/tableContainerStyles.d.ts +2 -2
- package/dist/table/tableContainerStyles.js +1 -1
- package/dist/table/tableContainerStyles.js.map +1 -1
- package/dist/table/tableFooterStyles.d.ts +1 -1
- package/dist/table/tableFooterStyles.js.map +1 -1
- package/dist/table/tableHeaderStyles.d.ts +2 -2
- package/dist/table/tableHeaderStyles.js +1 -1
- package/dist/table/tableHeaderStyles.js.map +1 -1
- package/dist/table/tableRowStyles.d.ts +2 -2
- package/dist/table/tableRowStyles.js +1 -1
- package/dist/table/tableRowStyles.js.map +1 -1
- package/dist/table/tableStyles.d.ts +2 -2
- package/dist/table/tableStyles.js +1 -1
- package/dist/table/tableStyles.js.map +1 -1
- package/dist/table/types.d.ts +7 -9
- package/dist/table/types.js +1 -1
- package/dist/table/types.js.map +1 -1
- package/dist/tabs/Tab.d.ts +4 -4
- package/dist/tabs/Tab.js +1 -1
- package/dist/tabs/Tab.js.map +1 -1
- package/dist/tabs/TabList.d.ts +2 -2
- package/dist/tabs/TabList.js +1 -1
- package/dist/tabs/TabList.js.map +1 -1
- package/dist/tabs/TabListScrollButton.d.ts +3 -3
- package/dist/tabs/TabListScrollButton.js +1 -1
- package/dist/tabs/TabListScrollButton.js.map +1 -1
- package/dist/tabs/tabIndicatorStyles.d.ts +2 -2
- package/dist/tabs/tabIndicatorStyles.js +1 -1
- package/dist/tabs/tabIndicatorStyles.js.map +1 -1
- package/dist/tabs/tabListScrollButtonStyles.d.ts +4 -4
- package/dist/tabs/tabListScrollButtonStyles.js +2 -2
- package/dist/tabs/tabListScrollButtonStyles.js.map +1 -1
- package/dist/tabs/tabListStyles.d.ts +2 -2
- package/dist/tabs/tabListStyles.js +1 -1
- package/dist/tabs/tabListStyles.js.map +1 -1
- package/dist/tabs/tabStyles.d.ts +2 -2
- package/dist/tabs/tabStyles.js +1 -1
- package/dist/tabs/tabStyles.js.map +1 -1
- package/dist/tabs/useTabs.d.ts +15 -20
- package/dist/tabs/useTabs.js +1 -1
- package/dist/tabs/useTabs.js.map +1 -1
- package/dist/tabs/utils.d.ts +3 -3
- package/dist/tabs/utils.js +1 -1
- package/dist/tabs/utils.js.map +1 -1
- package/dist/test-utils/ResizeObserver.d.ts +9 -11
- package/dist/test-utils/ResizeObserver.js +6 -8
- package/dist/test-utils/ResizeObserver.js.map +1 -1
- package/dist/test-utils/matchMedia.d.ts +13 -17
- package/dist/test-utils/matchMedia.js +9 -11
- package/dist/test-utils/matchMedia.js.map +1 -1
- package/dist/test-utils/render.d.ts +2 -2
- package/dist/test-utils/render.js +1 -1
- package/dist/test-utils/render.js.map +1 -1
- package/dist/test-utils/timers.d.ts +2 -3
- package/dist/test-utils/timers.js +2 -3
- package/dist/test-utils/timers.js.map +1 -1
- package/dist/theme/LocalStorageColorSchemeProvider.d.ts +2 -2
- package/dist/theme/LocalStorageColorSchemeProvider.js +1 -1
- package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
- package/dist/theme/ThemeProvider.d.ts +17 -20
- package/dist/theme/ThemeProvider.js +7 -8
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/types.d.ts +3 -3
- package/dist/theme/types.js +1 -1
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/useCSSVariables.d.ts +7 -9
- package/dist/theme/useCSSVariables.js +1 -1
- package/dist/theme/useCSSVariables.js.map +1 -1
- package/dist/theme/useColorScheme.d.ts +6 -7
- package/dist/theme/useColorScheme.js +2 -3
- package/dist/theme/useColorScheme.js.map +1 -1
- package/dist/theme/useColorSchemeMetaTag.d.ts +2 -2
- package/dist/theme/useColorSchemeMetaTag.js +1 -1
- package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
- package/dist/theme/useColorSchemeProvider.d.ts +2 -2
- package/dist/theme/useColorSchemeProvider.js.map +1 -1
- package/dist/theme/usePrefersColorScheme.d.ts +1 -1
- package/dist/theme/usePrefersColorScheme.js +1 -1
- package/dist/theme/usePrefersColorScheme.js.map +1 -1
- package/dist/theme/utils.d.ts +1 -1
- package/dist/theme/utils.js +1 -1
- package/dist/theme/utils.js.map +1 -1
- package/dist/tooltip/Tooltip.d.ts +3 -5
- package/dist/tooltip/Tooltip.js +1 -2
- package/dist/tooltip/Tooltip.js.map +1 -1
- package/dist/tooltip/TooltipHoverModeProvider.d.ts +5 -6
- package/dist/tooltip/TooltipHoverModeProvider.js +3 -4
- package/dist/tooltip/TooltipHoverModeProvider.js.map +1 -1
- package/dist/tooltip/constants.d.ts +9 -9
- package/dist/tooltip/constants.js +9 -9
- package/dist/tooltip/constants.js.map +1 -1
- package/dist/tooltip/tooltipStyles.d.ts +2 -2
- package/dist/tooltip/tooltipStyles.js +1 -1
- package/dist/tooltip/tooltipStyles.js.map +1 -1
- package/dist/tooltip/useTooltip.d.ts +18 -26
- package/dist/tooltip/useTooltip.js +4 -7
- package/dist/tooltip/useTooltip.js.map +1 -1
- package/dist/tooltip/useTooltipPosition.d.ts +4 -4
- package/dist/tooltip/useTooltipPosition.js +1 -1
- package/dist/tooltip/useTooltipPosition.js.map +1 -1
- package/dist/transition/CSSTransition.d.ts +3 -4
- package/dist/transition/CSSTransition.js +2 -3
- package/dist/transition/CSSTransition.js.map +1 -1
- package/dist/transition/Collapse.d.ts +5 -8
- package/dist/transition/Collapse.js +3 -5
- package/dist/transition/Collapse.js.map +1 -1
- package/dist/transition/CrossFade.d.ts +5 -8
- package/dist/transition/CrossFade.js +3 -5
- package/dist/transition/CrossFade.js.map +1 -1
- package/dist/transition/ScaleTransition.d.ts +7 -10
- package/dist/transition/ScaleTransition.js +4 -6
- package/dist/transition/ScaleTransition.js.map +1 -1
- package/dist/transition/SkeletonPlaceholder.d.ts +4 -6
- package/dist/transition/SkeletonPlaceholder.js +3 -5
- package/dist/transition/SkeletonPlaceholder.js.map +1 -1
- package/dist/transition/Slide.d.ts +2 -2
- package/dist/transition/Slide.js +1 -1
- package/dist/transition/Slide.js.map +1 -1
- package/dist/transition/SlideContainer.d.ts +9 -13
- package/dist/transition/SlideContainer.js +4 -6
- package/dist/transition/SlideContainer.js.map +1 -1
- package/dist/transition/collapseStyles.d.ts +2 -2
- package/dist/transition/collapseStyles.js +1 -1
- package/dist/transition/collapseStyles.js.map +1 -1
- package/dist/transition/config.d.ts +2 -2
- package/dist/transition/config.js +2 -2
- package/dist/transition/config.js.map +1 -1
- package/dist/transition/skeletonPlaceholderUtils.d.ts +3 -3
- package/dist/transition/skeletonPlaceholderUtils.js +2 -2
- package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
- package/dist/transition/types.d.ts +34 -37
- package/dist/transition/types.js +1 -1
- package/dist/transition/types.js.map +1 -1
- package/dist/transition/useCSSTransition.d.ts +4 -7
- package/dist/transition/useCSSTransition.js +4 -7
- package/dist/transition/useCSSTransition.js.map +1 -1
- package/dist/transition/useCarousel.d.ts +6 -7
- package/dist/transition/useCarousel.js +2 -3
- package/dist/transition/useCarousel.js.map +1 -1
- package/dist/transition/useCollapseTransition.d.ts +10 -13
- package/dist/transition/useCollapseTransition.js +4 -6
- package/dist/transition/useCollapseTransition.js.map +1 -1
- package/dist/transition/useCrossFadeTransition.d.ts +5 -6
- package/dist/transition/useCrossFadeTransition.js +4 -5
- package/dist/transition/useCrossFadeTransition.js.map +1 -1
- package/dist/transition/useMaxWidthTransition.d.ts +2 -2
- package/dist/transition/useMaxWidthTransition.js +1 -1
- package/dist/transition/useMaxWidthTransition.js.map +1 -1
- package/dist/transition/useScaleTransition.d.ts +8 -11
- package/dist/transition/useScaleTransition.js +7 -10
- package/dist/transition/useScaleTransition.js.map +1 -1
- package/dist/transition/useSkeletonPlaceholder.d.ts +6 -10
- package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
- package/dist/transition/useSlideTransition.d.ts +5 -6
- package/dist/transition/useSlideTransition.js +4 -5
- package/dist/transition/useSlideTransition.js.map +1 -1
- package/dist/transition/useTransition.d.ts +1 -1
- package/dist/transition/useTransition.js +1 -1
- package/dist/transition/useTransition.js.map +1 -1
- package/dist/transition/utils.d.ts +6 -6
- package/dist/transition/utils.js +3 -3
- package/dist/transition/utils.js.map +1 -1
- package/dist/tree/DefaultTreeItemRenderer.d.ts +1 -1
- package/dist/tree/DefaultTreeItemRenderer.js +1 -1
- package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
- package/dist/tree/Tree.d.ts +7 -11
- package/dist/tree/Tree.js +4 -6
- package/dist/tree/Tree.js.map +1 -1
- package/dist/tree/TreeGroup.d.ts +3 -3
- package/dist/tree/TreeGroup.js +1 -1
- package/dist/tree/TreeGroup.js.map +1 -1
- package/dist/tree/TreeItem.d.ts +3 -4
- package/dist/tree/TreeItem.js +2 -3
- package/dist/tree/TreeItem.js.map +1 -1
- package/dist/tree/TreeItemExpander.d.ts +2 -2
- package/dist/tree/TreeItemExpander.js +1 -1
- package/dist/tree/TreeItemExpander.js.map +1 -1
- package/dist/tree/TreeProvider.d.ts +6 -6
- package/dist/tree/TreeProvider.js +2 -2
- package/dist/tree/TreeProvider.js.map +1 -1
- package/dist/tree/styles.d.ts +10 -10
- package/dist/tree/styles.js +5 -5
- package/dist/tree/styles.js.map +1 -1
- package/dist/tree/types.d.ts +6 -7
- package/dist/tree/types.js.map +1 -1
- package/dist/tree/useTree.d.ts +4 -5
- package/dist/tree/useTree.js +2 -3
- package/dist/tree/useTree.js.map +1 -1
- package/dist/tree/useTreeExpansion.d.ts +2 -2
- package/dist/tree/useTreeExpansion.js +1 -1
- package/dist/tree/useTreeExpansion.js.map +1 -1
- package/dist/tree/useTreeItems.d.ts +7 -7
- package/dist/tree/useTreeItems.js +2 -2
- package/dist/tree/useTreeItems.js.map +1 -1
- package/dist/tree/useTreeMovement.d.ts +3 -3
- package/dist/tree/useTreeMovement.js +3 -3
- package/dist/tree/useTreeMovement.js.map +1 -1
- package/dist/tree/useTreeSelection.d.ts +2 -2
- package/dist/tree/useTreeSelection.js +1 -1
- package/dist/tree/useTreeSelection.js.map +1 -1
- package/dist/tree/utils.d.ts +2 -2
- package/dist/tree/utils.js +2 -2
- package/dist/tree/utils.js.map +1 -1
- package/dist/types.d.ts +14 -16
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/typography/SrOnly.d.ts +1 -2
- package/dist/typography/SrOnly.js +1 -2
- package/dist/typography/SrOnly.js.map +1 -1
- package/dist/typography/TextContainer.d.ts +3 -4
- package/dist/typography/TextContainer.js +2 -3
- package/dist/typography/TextContainer.js.map +1 -1
- package/dist/typography/Typography.d.ts +3 -4
- package/dist/typography/Typography.js +1 -2
- package/dist/typography/Typography.js.map +1 -1
- package/dist/typography/WritingDirectionProvider.d.ts +10 -13
- package/dist/typography/WritingDirectionProvider.js +6 -9
- package/dist/typography/WritingDirectionProvider.js.map +1 -1
- package/dist/typography/textContainerStyles.d.ts +3 -4
- package/dist/typography/textContainerStyles.js +2 -3
- package/dist/typography/textContainerStyles.js.map +1 -1
- package/dist/typography/typographyStyles.d.ts +6 -8
- package/dist/typography/typographyStyles.js +3 -5
- package/dist/typography/typographyStyles.js.map +1 -1
- package/dist/useAsyncAction.d.ts +7 -9
- package/dist/useAsyncAction.js +3 -5
- package/dist/useAsyncAction.js.map +1 -1
- package/dist/useDebouncedFunction.d.ts +3 -4
- package/dist/useDebouncedFunction.js +2 -3
- package/dist/useDebouncedFunction.js.map +1 -1
- package/dist/useDropzone.d.ts +9 -14
- package/dist/useDropzone.js +4 -7
- package/dist/useDropzone.js.map +1 -1
- package/dist/useElementSize.d.ts +26 -5
- package/dist/useElementSize.js +7 -5
- package/dist/useElementSize.js.map +1 -1
- package/dist/useEnsuredId.d.ts +2 -3
- package/dist/useEnsuredId.js +2 -3
- package/dist/useEnsuredId.js.map +1 -1
- package/dist/useEnsuredRef.d.ts +3 -4
- package/dist/useEnsuredRef.js +2 -3
- package/dist/useEnsuredRef.js.map +1 -1
- package/dist/useEnsuredState.d.ts +2 -2
- package/dist/useEnsuredState.js +1 -1
- package/dist/useEnsuredState.js.map +1 -1
- package/dist/useHtmlClassName.d.ts +1 -1
- package/dist/useHtmlClassName.js +1 -1
- package/dist/useHtmlClassName.js.map +1 -1
- package/dist/useIntersectionObserver.d.ts +13 -20
- package/dist/useIntersectionObserver.js +2 -3
- package/dist/useIntersectionObserver.js.map +1 -1
- package/dist/useLocalStorage.d.ts +17 -22
- package/dist/useLocalStorage.js +9 -13
- package/dist/useLocalStorage.js.map +1 -1
- package/dist/usePageInactive.d.ts +3 -3
- package/dist/usePageInactive.js +1 -1
- package/dist/usePageInactive.js.map +1 -1
- package/dist/useResizeListener.d.ts +3 -4
- package/dist/useResizeListener.js +2 -3
- package/dist/useResizeListener.js.map +1 -1
- package/dist/useResizeObserver.d.ts +8 -10
- package/dist/useResizeObserver.js +4 -5
- package/dist/useResizeObserver.js.map +1 -1
- package/dist/useThrottledFunction.d.ts +3 -4
- package/dist/useThrottledFunction.js +2 -3
- package/dist/useThrottledFunction.js.map +1 -1
- package/dist/useToggle.d.ts +2 -3
- package/dist/useToggle.js +1 -2
- package/dist/useToggle.js.map +1 -1
- package/dist/useUnmounted.d.ts +2 -3
- package/dist/useUnmounted.js +2 -3
- package/dist/useUnmounted.js.map +1 -1
- package/dist/useWindowSize.d.ts +3 -4
- package/dist/useWindowSize.js +2 -3
- package/dist/useWindowSize.js.map +1 -1
- package/dist/utils/RenderRecursively.d.ts +26 -7
- package/dist/utils/RenderRecursively.js +19 -3
- package/dist/utils/RenderRecursively.js.map +1 -1
- package/dist/utils/alphaNumericSort.d.ts +6 -11
- package/dist/utils/alphaNumericSort.js +1 -1
- package/dist/utils/alphaNumericSort.js.map +1 -1
- package/dist/utils/applyRef.d.ts +1 -2
- package/dist/utils/applyRef.js +1 -2
- package/dist/utils/applyRef.js.map +1 -1
- package/dist/utils/bem.d.ts +2 -3
- package/dist/utils/bem.js +2 -3
- package/dist/utils/bem.js.map +1 -1
- package/dist/utils/getClientPosition.d.ts +4 -4
- package/dist/utils/getClientPosition.js +2 -2
- package/dist/utils/getClientPosition.js.map +1 -1
- package/dist/utils/getMiddleOfRange.d.ts +2 -2
- package/dist/utils/getMiddleOfRange.js +1 -1
- package/dist/utils/getMiddleOfRange.js.map +1 -1
- package/dist/utils/getPercentage.d.ts +3 -4
- package/dist/utils/getPercentage.js +3 -4
- package/dist/utils/getPercentage.js.map +1 -1
- package/dist/utils/getRangeDefaultValue.d.ts +2 -2
- package/dist/utils/getRangeDefaultValue.js +1 -1
- package/dist/utils/getRangeDefaultValue.js.map +1 -1
- package/dist/utils/getRangeSteps.d.ts +3 -4
- package/dist/utils/getRangeSteps.js +3 -4
- package/dist/utils/getRangeSteps.js.map +1 -1
- package/dist/utils/identity.d.ts +1 -1
- package/dist/utils/identity.js +1 -1
- package/dist/utils/identity.js.map +1 -1
- package/dist/utils/isElementVisible.d.ts +3 -4
- package/dist/utils/isElementVisible.js +3 -4
- package/dist/utils/isElementVisible.js.map +1 -1
- package/dist/utils/loop.d.ts +2 -2
- package/dist/utils/loop.js +2 -2
- package/dist/utils/loop.js.map +1 -1
- package/dist/utils/nearest.d.ts +3 -4
- package/dist/utils/nearest.js +3 -4
- package/dist/utils/nearest.js.map +1 -1
- package/dist/utils/parseCssLengthUnit.d.ts +2 -4
- package/dist/utils/parseCssLengthUnit.js +2 -4
- package/dist/utils/parseCssLengthUnit.js.map +1 -1
- package/dist/utils/randomInt.d.ts +2 -2
- package/dist/utils/randomInt.js +2 -2
- package/dist/utils/randomInt.js.map +1 -1
- package/dist/utils/wait.d.ts +2 -3
- package/dist/utils/wait.js +2 -3
- package/dist/utils/wait.js.map +1 -1
- package/dist/utils/withinRange.d.ts +3 -4
- package/dist/utils/withinRange.js +3 -4
- package/dist/utils/withinRange.js.map +1 -1
- package/dist/window-splitter/WindowSplitter.d.ts +5 -5
- package/dist/window-splitter/WindowSplitter.js +2 -2
- package/dist/window-splitter/WindowSplitter.js.map +1 -1
- package/dist/window-splitter/useWindowSplitter.d.ts +6 -7
- package/dist/window-splitter/useWindowSplitter.js +2 -3
- package/dist/window-splitter/useWindowSplitter.js.map +1 -1
- package/package.json +19 -13
- package/src/CoreProviders.tsx +3 -3
- package/src/NoSsr.tsx +3 -4
- package/src/RootHtml.tsx +3 -4
- package/src/SsrProvider.tsx +3 -3
- package/src/_core.scss +5 -0
- package/src/app-bar/AppBar.tsx +11 -14
- package/src/app-bar/AppBarTitle.tsx +7 -9
- package/src/avatar/Avatar.tsx +5 -6
- package/src/avatar/__tests__/Avatar.tsx +1 -1
- package/src/avatar/styles.ts +4 -4
- package/src/badge/Badge.tsx +4 -6
- package/src/box/Box.tsx +16 -9
- package/src/box/__tests__/Box.tsx +158 -0
- package/src/box/__tests__/__snapshots__/Box.tsx.snap +544 -0
- package/src/box/_box.scss +1 -1
- package/src/box/styles.ts +9 -9
- package/src/button/AsyncButton.tsx +5 -7
- package/src/button/Button.tsx +4 -8
- package/src/button/ButtonUnstyled.tsx +2 -2
- package/src/button/FloatingActionButton.tsx +5 -5
- package/src/button/TooltippedButton.tsx +9 -13
- package/src/button/buttonStyles.ts +3 -3
- package/src/button/buttonUnstyledStyles.ts +2 -2
- package/src/card/Card.tsx +3 -4
- package/src/card/CardContent.tsx +2 -4
- package/src/card/CardFooter.tsx +2 -2
- package/src/card/CardHeader.tsx +10 -12
- package/src/card/CardSubtitle.tsx +2 -2
- package/src/card/CardTitle.tsx +2 -2
- package/src/card/ClickableCard.tsx +3 -4
- package/src/card/styles.ts +15 -15
- package/src/chip/Chip.tsx +10 -14
- package/src/chip/styles.ts +4 -4
- package/src/cssUtils.ts +10 -10
- package/src/dialog/Dialog.tsx +5 -6
- package/src/dialog/DialogContainer.tsx +2 -2
- package/src/dialog/DialogTitle.tsx +1 -1
- package/src/dialog/FixedDialog.tsx +1 -2
- package/src/dialog/styles.ts +9 -9
- package/src/divider/Divider.tsx +2 -3
- package/src/divider/styles.ts +2 -2
- package/src/draggable/useDraggable.ts +18 -19
- package/src/draggable/utils.ts +2 -2
- package/src/expansion-panel/ExpansionList.tsx +2 -2
- package/src/expansion-panel/ExpansionPanel.tsx +8 -9
- package/src/expansion-panel/ExpansionPanelHeader.tsx +3 -4
- package/src/expansion-panel/useExpansionList.ts +6 -7
- package/src/expansion-panel/useExpansionPanels.ts +9 -14
- package/src/focus/useFocusContainer.ts +9 -10
- package/src/focus/utils.ts +4 -5
- package/src/form/Checkbox.tsx +1 -2
- package/src/form/Fieldset.tsx +5 -6
- package/src/form/FileInput.tsx +6 -7
- package/src/form/FormMessageContainer.tsx +2 -2
- package/src/form/FormMessageCounter.tsx +4 -6
- package/src/form/InputToggle.tsx +11 -12
- package/src/form/InputToggleIcon.tsx +4 -6
- package/src/form/Label.tsx +2 -2
- package/src/form/Legend.tsx +2 -2
- package/src/form/MenuItemCheckbox.tsx +2 -3
- package/src/form/MenuItemFileInput.tsx +3 -5
- package/src/form/MenuItemInputToggle.tsx +7 -9
- package/src/form/MenuItemRadio.tsx +3 -5
- package/src/form/MenuItemSwitch.tsx +2 -3
- package/src/form/MenuItemTextField.tsx +2 -2
- package/src/form/NativeSelect.tsx +3 -5
- package/src/form/OptGroup.tsx +3 -4
- package/src/form/Option.tsx +5 -7
- package/src/form/Password.tsx +7 -13
- package/src/form/Radio.tsx +1 -2
- package/src/form/ResizingTextAreaWrapper.tsx +2 -2
- package/src/form/Select.tsx +6 -9
- package/src/form/SelectedOption.tsx +2 -2
- package/src/form/Slider.tsx +16 -25
- package/src/form/SliderContainer.tsx +6 -9
- package/src/form/SliderMark.tsx +2 -2
- package/src/form/SliderMarkLabel.tsx +3 -3
- package/src/form/SliderThumb.tsx +8 -10
- package/src/form/SliderTrack.tsx +4 -6
- package/src/form/SliderValueMarks.tsx +7 -9
- package/src/form/SliderValueTooltip.tsx +4 -6
- package/src/form/Switch.tsx +3 -4
- package/src/form/TextArea.tsx +2 -3
- package/src/form/TextField.tsx +7 -10
- package/src/form/TextFieldAddon.tsx +3 -3
- package/src/form/fileUtils.ts +33 -36
- package/src/form/formConfig.ts +2 -2
- package/src/form/formMessageStyles.ts +5 -5
- package/src/form/inputToggleStyles.ts +3 -3
- package/src/form/menuItemInputToggleStyles.ts +8 -8
- package/src/form/nativeSelectStyles.ts +4 -4
- package/src/form/optionStyles.ts +2 -2
- package/src/form/passwordStyles.ts +4 -4
- package/src/form/selectStyles.ts +2 -2
- package/src/form/selectUtils.ts +4 -4
- package/src/form/sliderUtils.ts +9 -9
- package/src/form/switchStyles.ts +2 -2
- package/src/form/textAreaStyles.ts +4 -4
- package/src/form/textFieldContainerStyles.ts +2 -2
- package/src/form/textFieldStyles.ts +2 -2
- package/src/form/types.ts +10 -10
- package/src/form/useCheckboxGroup.ts +15 -20
- package/src/form/useCombobox.ts +18 -16
- package/src/form/useEditableCombobox.ts +3 -3
- package/src/form/useFileUpload.ts +7 -8
- package/src/form/useFormReset.ts +2 -2
- package/src/form/useListboxProvider.ts +3 -3
- package/src/form/useNumberField.ts +17 -25
- package/src/form/useRadioGroup.ts +14 -18
- package/src/form/useRangeSlider.ts +8 -11
- package/src/form/useSelectCombobox.ts +3 -3
- package/src/form/useSlider.ts +7 -9
- package/src/form/useTextField.ts +22 -31
- package/src/form/utils.ts +7 -8
- package/src/form/validation.ts +18 -18
- package/src/hoverMode/useHoverMode.ts +9 -10
- package/src/hoverMode/useHoverModeProvider.ts +11 -15
- package/src/icon/FontIcon.tsx +1 -1
- package/src/icon/IconRotator.tsx +1 -1
- package/src/icon/MaterialIcon.tsx +2 -2
- package/src/icon/MaterialSymbol.tsx +3 -4
- package/src/icon/SVGIcon.tsx +0 -1
- package/src/icon/TextIconSpacing.tsx +3 -5
- package/src/icon/iconConfig.tsx +14 -16
- package/src/icon/material.ts +4 -4
- package/src/icon/materialConfig.ts +12 -12
- package/src/icon/styles.ts +8 -8
- package/src/interaction/UserInteractionModeProvider.tsx +1 -2
- package/src/interaction/config.ts +2 -2
- package/src/interaction/types.ts +8 -8
- package/src/interaction/useElementInteraction.tsx +6 -7
- package/src/interaction/useHigherContrastChildren.tsx +2 -3
- package/src/layout/LayoutAppBar.tsx +4 -7
- package/src/layout/LayoutNav.tsx +4 -6
- package/src/layout/LayoutWindowSplitter.tsx +3 -4
- package/src/layout/Main.tsx +4 -5
- package/src/layout/__tests__/LayoutAppBar.tsx +23 -0
- package/src/layout/__tests__/useExpandableLayout.tsx +8 -0
- package/src/layout/_layout.scss +12 -1
- package/src/layout/layoutNavStyles.ts +2 -2
- package/src/layout/layoutWindowSplitterStyles.ts +2 -2
- package/src/layout/mainStyles.ts +2 -2
- package/src/layout/useExpandableLayout.ts +85 -23
- package/src/layout/useHorizontalLayoutTransition.ts +8 -8
- package/src/layout/useLayoutAppBarHeight.ts +10 -13
- package/src/layout/useLayoutTree.ts +10 -10
- package/src/layout/useLayoutWindowSplitter.ts +5 -6
- package/src/layout/useMainTabIndex.ts +1 -1
- package/src/layout/useResizableLayout.ts +54 -8
- package/src/layout/useTemporaryLayout.ts +12 -13
- package/src/link/Link.tsx +10 -13
- package/src/link/SkipToMainContent.tsx +2 -4
- package/src/link/styles.ts +4 -4
- package/src/list/List.tsx +3 -4
- package/src/list/ListItem.tsx +4 -6
- package/src/list/ListItemChildren.tsx +1 -2
- package/src/list/ListSubheader.tsx +3 -3
- package/src/list/getListItemHeight.ts +1 -1
- package/src/list/listItemStyles.ts +9 -9
- package/src/list/types.ts +11 -11
- package/src/media-queries/AppSizeProvider.tsx +1 -2
- package/src/media-queries/useMediaQuery.ts +2 -3
- package/src/menu/DropdownMenu.tsx +7 -11
- package/src/menu/Menu.tsx +10 -13
- package/src/menu/MenuBar.tsx +3 -4
- package/src/menu/MenuButton.tsx +8 -8
- package/src/menu/MenuConfigurationProvider.tsx +10 -10
- package/src/menu/MenuItem.tsx +2 -2
- package/src/menu/MenuItemButton.tsx +2 -2
- package/src/menu/MenuItemCircularProgress.tsx +3 -4
- package/src/menu/MenuItemGroup.tsx +3 -4
- package/src/menu/MenuItemSeparator.tsx +2 -2
- package/src/menu/MenuSheet.tsx +7 -9
- package/src/menu/MenuVisibilityProvider.tsx +8 -10
- package/src/menu/MenuWidget.tsx +2 -2
- package/src/menu/MenuWidgetKeyboardProvider.tsx +2 -2
- package/src/menu/useContextMenu.ts +8 -12
- package/src/menu/useMenuBarProvider.ts +6 -6
- package/src/menu/utils.ts +2 -2
- package/src/movement/constants.ts +3 -3
- package/src/movement/types.ts +16 -17
- package/src/movement/useKeyboardMovementProvider.ts +6 -9
- package/src/movement/utils.ts +13 -13
- package/src/navigation/CollapsibleNavGroup.tsx +94 -0
- package/src/navigation/DefaultNavigationRenderer.tsx +71 -0
- package/src/navigation/NavGroup.tsx +39 -0
- package/src/navigation/NavItem.tsx +29 -0
- package/src/navigation/NavItemButton.tsx +104 -0
- package/src/navigation/NavItemLink.tsx +163 -0
- package/src/navigation/NavSubheader.tsx +36 -0
- package/src/navigation/Navigation.tsx +91 -0
- package/src/navigation/__tests__/Navigation.tsx +97 -0
- package/src/navigation/__tests__/__snapshots__/Navigation.tsx.snap +165 -0
- package/src/navigation/_navigation.scss +99 -0
- package/src/navigation/getHrefFromParents.ts +15 -0
- package/src/navigation/navGroupStyles.ts +21 -0
- package/src/navigation/navItemStyles.ts +71 -0
- package/src/navigation/types.ts +166 -0
- package/src/navigation/useActiveHeadingId.ts +190 -0
- package/src/overlay/Overlay.tsx +5 -6
- package/src/overlay/overlayStyles.ts +4 -4
- package/src/portal/Portal.tsx +1 -2
- package/src/portal/PortalContainerProvider.tsx +4 -4
- package/src/positioning/createVerticalPosition.ts +1 -1
- package/src/positioning/getFixedPosition.ts +1 -1
- package/src/positioning/types.ts +4 -4
- package/src/positioning/useFixedPositioning.ts +8 -9
- package/src/positioning/utils.ts +3 -3
- package/src/progress/CircularProgress.tsx +7 -10
- package/src/progress/LinearProgress.tsx +4 -6
- package/src/progress/types.ts +5 -5
- package/src/responsive-item/ResponsiveItemContainer.tsx +10 -15
- package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -7
- package/src/responsive-item/styles.ts +2 -2
- package/src/scroll/ScrollLock.tsx +1 -1
- package/src/scroll/useScrollLock.ts +2 -3
- package/src/searching/caseInsensitive.ts +9 -13
- package/src/searching/fuzzy.ts +4 -5
- package/src/searching/toSearchQuery.ts +1 -1
- package/src/searching/types.ts +2 -2
- package/src/searching/useFuzzyMatch.ts +3 -3
- package/src/searching/utils.ts +3 -3
- package/src/segmented-button/SegmentedButton.tsx +3 -4
- package/src/segmented-button/SegmentedButtonContainer.tsx +3 -4
- package/src/segmented-button/segmentedButtonContainerStyles.ts +2 -2
- package/src/segmented-button/segmentedButtonStyles.ts +2 -2
- package/src/sheet/Sheet.tsx +1 -1
- package/src/sheet/styles.ts +3 -3
- package/src/snackbar/DefaultToastRenderer.tsx +2 -2
- package/src/snackbar/Snackbar.tsx +3 -4
- package/src/snackbar/Toast.tsx +3 -3
- package/src/snackbar/ToastActionButton.tsx +2 -2
- package/src/snackbar/ToastCloseButton.tsx +2 -2
- package/src/snackbar/ToastContent.tsx +2 -2
- package/src/snackbar/ToastManager.tsx +30 -24
- package/src/snackbar/ToastManagerProvider.tsx +6 -6
- package/src/snackbar/__tests__/ToastManagerProvider.tsx +34 -0
- package/src/snackbar/__tests__/__snapshots__/ToastManagerProvider.tsx.snap +21 -21
- package/src/snackbar/snackbarStyles.ts +4 -5
- package/src/snackbar/toastContentStyles.ts +2 -2
- package/src/snackbar/toastStyles.ts +2 -2
- package/src/snackbar/useCurrentToastActions.ts +3 -3
- package/src/suspense/CircularProgressSuspense.tsx +3 -4
- package/src/suspense/NullSuspense.tsx +3 -4
- package/src/table/Table.tsx +1 -2
- package/src/table/TableCell.tsx +7 -7
- package/src/table/TableCellContent.tsx +3 -3
- package/src/table/TableCheckbox.tsx +11 -15
- package/src/table/TableContainerProvider.tsx +3 -3
- package/src/table/TableFooter.tsx +2 -2
- package/src/table/TableHeader.tsx +2 -2
- package/src/table/TableRadio.tsx +7 -9
- package/src/table/tableCellStyles.ts +2 -2
- package/src/table/tableContainerStyles.ts +2 -2
- package/src/table/tableFooterStyles.ts +1 -1
- package/src/table/tableHeaderStyles.ts +2 -2
- package/src/table/tableRowStyles.ts +2 -2
- package/src/table/tableStyles.ts +2 -2
- package/src/table/types.ts +7 -9
- package/src/tabs/Tab.tsx +4 -4
- package/src/tabs/TabList.tsx +2 -2
- package/src/tabs/TabListScrollButton.tsx +3 -3
- package/src/tabs/tabIndicatorStyles.ts +2 -2
- package/src/tabs/tabListScrollButtonStyles.ts +4 -4
- package/src/tabs/tabListStyles.ts +2 -2
- package/src/tabs/tabStyles.ts +2 -2
- package/src/tabs/useTabs.ts +16 -21
- package/src/tabs/utils.ts +3 -3
- package/src/test-utils/ResizeObserver.ts +9 -11
- package/src/test-utils/matchMedia.ts +13 -17
- package/src/test-utils/render.tsx +2 -2
- package/src/test-utils/timers.ts +2 -3
- package/src/theme/LocalStorageColorSchemeProvider.tsx +2 -2
- package/src/theme/ThemeProvider.tsx +18 -21
- package/src/theme/types.ts +3 -3
- package/src/theme/useCSSVariables.ts +8 -10
- package/src/theme/useColorScheme.ts +6 -7
- package/src/theme/useColorSchemeMetaTag.ts +2 -2
- package/src/theme/useColorSchemeProvider.ts +2 -2
- package/src/theme/usePrefersColorScheme.ts +1 -1
- package/src/theme/utils.ts +1 -1
- package/src/tooltip/Tooltip.tsx +3 -5
- package/src/tooltip/TooltipHoverModeProvider.tsx +5 -6
- package/src/tooltip/constants.ts +9 -9
- package/src/tooltip/tooltipStyles.ts +2 -2
- package/src/tooltip/useTooltip.ts +18 -26
- package/src/tooltip/useTooltipPosition.ts +4 -4
- package/src/transition/CSSTransition.tsx +3 -4
- package/src/transition/Collapse.tsx +5 -8
- package/src/transition/CrossFade.tsx +5 -8
- package/src/transition/ScaleTransition.tsx +7 -10
- package/src/transition/SkeletonPlaceholder.tsx +4 -6
- package/src/transition/Slide.tsx +2 -2
- package/src/transition/SlideContainer.tsx +9 -13
- package/src/transition/collapseStyles.ts +2 -2
- package/src/transition/config.ts +2 -2
- package/src/transition/skeletonPlaceholderUtils.ts +3 -3
- package/src/transition/types.ts +34 -37
- package/src/transition/useCSSTransition.ts +4 -7
- package/src/transition/useCarousel.ts +6 -7
- package/src/transition/useCollapseTransition.ts +10 -13
- package/src/transition/useCrossFadeTransition.ts +5 -6
- package/src/transition/useMaxWidthTransition.ts +2 -2
- package/src/transition/useScaleTransition.ts +8 -11
- package/src/transition/useSkeletonPlaceholder.ts +6 -10
- package/src/transition/useSlideTransition.ts +5 -6
- package/src/transition/useTransition.ts +1 -1
- package/src/transition/utils.ts +6 -6
- package/src/tree/DefaultTreeItemRenderer.tsx +1 -1
- package/src/tree/Tree.tsx +8 -12
- package/src/tree/TreeGroup.tsx +3 -3
- package/src/tree/TreeItem.tsx +3 -4
- package/src/tree/TreeItemExpander.tsx +2 -2
- package/src/tree/TreeProvider.tsx +6 -6
- package/src/tree/styles.ts +10 -10
- package/src/tree/types.ts +6 -7
- package/src/tree/useTree.ts +4 -5
- package/src/tree/useTreeExpansion.ts +2 -2
- package/src/tree/useTreeItems.ts +7 -7
- package/src/tree/useTreeMovement.ts +5 -5
- package/src/tree/useTreeSelection.ts +2 -2
- package/src/tree/utils.ts +2 -2
- package/src/types.ts +14 -16
- package/src/typography/SrOnly.tsx +1 -2
- package/src/typography/TextContainer.tsx +3 -4
- package/src/typography/Typography.tsx +3 -4
- package/src/typography/WritingDirectionProvider.tsx +10 -13
- package/src/typography/textContainerStyles.ts +3 -4
- package/src/typography/typographyStyles.ts +6 -8
- package/src/useAsyncAction.ts +7 -9
- package/src/useDebouncedFunction.ts +3 -4
- package/src/useDropzone.ts +9 -14
- package/src/useElementSize.ts +31 -6
- package/src/useEnsuredId.ts +2 -3
- package/src/useEnsuredRef.ts +3 -4
- package/src/useEnsuredState.ts +2 -2
- package/src/useHtmlClassName.ts +1 -1
- package/src/useIntersectionObserver.ts +13 -20
- package/src/useLocalStorage.ts +17 -22
- package/src/usePageInactive.ts +3 -3
- package/src/useResizeListener.ts +3 -4
- package/src/useResizeObserver.ts +8 -10
- package/src/useThrottledFunction.ts +3 -4
- package/src/useToggle.ts +2 -3
- package/src/useUnmounted.ts +2 -3
- package/src/useWindowSize.ts +3 -4
- package/src/utils/RenderRecursively.tsx +42 -9
- package/src/utils/__tests__/RenderRecursively.tsx +1 -1
- package/src/utils/alphaNumericSort.ts +6 -11
- package/src/utils/applyRef.ts +1 -2
- package/src/utils/bem.ts +2 -3
- package/src/utils/getClientPosition.ts +4 -4
- package/src/utils/getMiddleOfRange.ts +2 -2
- package/src/utils/getPercentage.ts +3 -4
- package/src/utils/getRangeDefaultValue.ts +2 -2
- package/src/utils/getRangeSteps.ts +3 -4
- package/src/utils/identity.ts +1 -1
- package/src/utils/isElementVisible.ts +3 -4
- package/src/utils/loop.ts +2 -2
- package/src/utils/nearest.ts +3 -4
- package/src/utils/parseCssLengthUnit.ts +2 -4
- package/src/utils/randomInt.ts +2 -2
- package/src/utils/wait.ts +2 -3
- package/src/utils/withinRange.ts +3 -4
- package/src/window-splitter/WindowSplitter.tsx +5 -5
- package/src/window-splitter/useWindowSplitter.ts +6 -7
- package/tsdoc.json +14 -0
- package/.turbo/turbo-lint.log +0 -12
- package/.turbo/turbo-typecheck.log +0 -4
- package/dist/index.d.ts +0 -346
- package/dist/index.js +0 -347
- package/dist/index.js.map +0 -1
- package/src/index.ts +0 -349
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/useCombobox.ts"],"sourcesContent":["\"use client\";\nimport {\n useRef,\n type FocusEventHandler,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type Ref,\n type RefCallback,\n type RefObject,\n} from \"react\";\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { type MenuSheetConfigurableProps } from \"../menu/MenuSheet.js\";\nimport {\n type GetDefaultFocusedIndex,\n type GetFocusableElements,\n type KeyboardMovementExtensionData,\n type KeyboardMovementProviderImplementation,\n type KeyboardMovementProviderOptions,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type PositionAnchor,\n type PositionWidth,\n} from \"../positioning/types.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\nimport {\n type TransitionCallbacks,\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport {\n type NonNullMutableRef,\n type UseStateInitializer,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport const getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type SupportedComboboxPopup = \"listbox\" | \"grid\" | \"dialog\";\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxKeyboardMovementData<\n E extends HTMLElement = HTMLInputElement,\n> extends KeyboardMovementExtensionData<E> {\n show(): void;\n hide(): void;\n visible: boolean;\n focusLast: NonNullMutableRef<boolean>;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type ExtendComboboxKeyDown<E extends HTMLElement = HTMLInputElement> = (\n movementData: ComboboxKeyboardMovementData<E>\n) => void;\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type ComboboxKeyboardMovementOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> = Pick<\n KeyboardMovementProviderOptions<ComboboxEl>,\n | \"onClick\"\n | \"onFocus\"\n | \"onKeyDown\"\n | \"disabled\"\n | \"loopable\"\n | \"searchable\"\n | \"onFocusChange\"\n | \"isNegativeOneAllowed\"\n>;\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface BaseComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ComboboxKeyboardMovementOptions<ComboboxEl> {\n /**\n * This is the {@link InputHTMLAttributes.form} attribute and is used to\n * attempt submitting a form when the enter key is pressed.\n */\n form?: string;\n\n /**\n * @defaultValue `\"combobox-popup-\" + useId()`\n */\n popupId?: string;\n popupRef?: Ref<PopupEl>;\n\n /**\n * @defaultValue `\"combobox-\" + useId()`\n */\n comboboxId?: string;\n comboboxRef?: Ref<ComboboxEl>;\n\n /**\n * @defaultValue `\"listbox\"`\n */\n popup?: \"listbox\" | \"grid\" | \"dialog\";\n\n /**\n * @defaultValue `false`\n */\n defaultVisible?: UseStateInitializer<boolean>;\n\n extendKeyDown?: ExtendComboboxKeyDown<ComboboxEl>;\n\n /**\n * @defaultValue {@link getNonDisabledOptions}\n */\n getFocusableElements?: GetFocusableElements;\n\n getDefaultFocusedIndex?: GetDefaultFocusedIndex;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends BaseComboboxOptions<ComboboxEl, PopupEl> {\n getEnterDefaultFocusedIndex(options: {\n focusLast: boolean;\n focusables: readonly HTMLElement[];\n currentFocusIndex: number;\n }): number;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxWidgetProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> {\n \"aria-controls\": string;\n \"aria-disabled\": true | undefined;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": SupportedComboboxPopup;\n id: string;\n ref: RefCallback<ComboboxEl>;\n role: \"combobox\";\n onClick: MouseEventHandler<ComboboxEl>;\n onFocus: FocusEventHandler<ComboboxEl>;\n onKeyDown: KeyboardEventHandler<ComboboxEl>;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxWidgetPopupProps<\n PopupEl extends HTMLElement = HTMLElement,\n> {\n id: string;\n ref: RefCallback<PopupEl>;\n role: \"listbox\" | \"dialog\" | \"grid\";\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type ComboboxTransitionCallbacks = Pick<\n TransitionCallbacks,\n \"onEntering\" | \"onEntered\" | \"onExiting\" | \"onExited\"\n>;\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxTransitionOptions extends ComboboxTransitionCallbacks {\n disableTransition?: boolean;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type ConfigurableComboboxMenuProps = Partial<\n Omit<\n MenuProps,\n \"fixedTo\" | \"visible\" | \"onRequestClose\" | keyof ComboboxWidgetPopupProps\n >\n>;\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ProvidedComboboxMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Required<ComboboxTransitionCallbacks>,\n ComboboxWidgetPopupProps<PopupEl> {\n visible: boolean;\n onRequestClose(): void;\n\n /** @defaultValue `\"min\"` */\n width: PositionWidth;\n\n /** @defaultValue `BELOW_CENTER_ANCHOR` */\n anchor: PositionAnchor;\n\n fixedTo: RefObject<ComboboxEl>;\n\n sheetProps: MenuSheetConfigurableProps &\n Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Omit<ConfigurableComboboxMenuProps, keyof ProvidedComboboxMenuProps>,\n ProvidedComboboxMenuProps<ComboboxEl, PopupEl> {}\n\n/**\n * Since the combobox usually uses the `Menu` as a popup element, this is a\n * helper util to create the required props and merge any additional props\n * with reasonable defaults.\n */\nexport type ComboboxGetMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> = (\n props?: ConfigurableComboboxMenuProps\n) => ComboboxMenuProps<ComboboxEl, PopupEl>;\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport interface ComboboxImplementation<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends KeyboardMovementProviderImplementation<ComboboxEl> {\n show(): void;\n hide(): void;\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n focusLast: NonNullMutableRef<boolean>;\n popupRef: RefObject<PopupEl>;\n popupProps: ComboboxWidgetPopupProps<PopupEl>;\n comboboxRef: RefObject<ComboboxEl>;\n comboboxProps: ComboboxWidgetProps<ComboboxEl>;\n\n getMenuProps: ComboboxGetMenuProps<ComboboxEl, PopupEl>;\n getTransitionCallbacks(\n options: ComboboxTransitionOptions\n ): Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport function useCombobox<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n>(\n options: ComboboxOptions<ComboboxEl, PopupEl>\n): ComboboxImplementation<ComboboxEl, PopupEl> {\n const {\n form,\n popup = \"listbox\",\n onClick = noop,\n onFocus,\n onKeyDown,\n searchable,\n isNegativeOneAllowed,\n loopable,\n disabled,\n comboboxId: propComboboxId,\n comboboxRef: propComboboxRef,\n popupId: propPopupId,\n popupRef: propPopupRef,\n defaultVisible = false,\n onFocusChange = noop,\n extendKeyDown = noop,\n getFocusableElements = getNonDisabledOptions,\n getEnterDefaultFocusedIndex,\n getDefaultFocusedIndex,\n } = options;\n\n const {\n toggled: visible,\n enable: show,\n disable: hide,\n setToggled: setVisible,\n } = useToggle(defaultVisible);\n const popupId = useEnsuredId(propPopupId, \"combobox-popup\");\n const comboboxId = useEnsuredId(propComboboxId, \"combobox\");\n const [comboboxRef, comboboxRefCallback] = useEnsuredRef(propComboboxRef);\n const [popupRef, popupRefCallback] = useEnsuredRef(propPopupRef);\n const focusLast = useRef(false);\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<ComboboxEl>({\n onFocus,\n onKeyDown,\n onClick(event) {\n onClick(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n extendKeyDown(movementData) {\n extendKeyDown({\n ...movementData,\n show,\n hide,\n visible,\n focusLast,\n });\n const { event } = movementData;\n if (event.isPropagationStopped()) {\n return;\n }\n\n if (visible) {\n switch (event.key) {\n case \"Tab\":\n case \"Escape\":\n event.stopPropagation();\n hide();\n break;\n case \"Enter\":\n event.preventDefault();\n break;\n }\n\n // while visible, always use the default keyboard movement behavior\n return;\n }\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n event.stopPropagation();\n focusLast.current = event.key === \"ArrowUp\";\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n }\n },\n disabled,\n loopable,\n searchable,\n onFocusChange,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getFocusableElements(container, programmatic) {\n const popup = popupRef.current;\n if (!popup) {\n return [];\n }\n\n return getFocusableElements(popup || container, programmatic);\n },\n isNegativeOneAllowed,\n getDefaultFocusedIndex,\n });\n const getTransitionCallbacks = (\n options: ComboboxTransitionOptions = {}\n ): Required<ComboboxTransitionCallbacks> => {\n const { onEntered, onEntering, onExiting, onExited, disableTransition } =\n options;\n\n const handleEntering =\n (callback: TransitionEnterHandler = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const popup = popupRef.current;\n if (!popup || skipped) {\n // Chrome does not trigger the scrollIntoView behavior correctly while\n // using a scale transition, so need to trigger this on the entered\n // flow to really make sure the item is in view.\n // An alternative would be to implement a custom scrollIntoView\n // behavior again like the previous versions of react-md, but this is\n // less lines of code\n const activeOption = document.getElementById(activeDescendantId);\n if (activeOption) {\n activeOption.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const focusables = getFocusableElements(popup, true);\n const index = getEnterDefaultFocusedIndex({\n focusLast: focusLast.current,\n focusables,\n currentFocusIndex: currentFocusIndex.current,\n });\n focusLast.current = false;\n currentFocusIndex.current = index;\n\n const option = focusables[index];\n if (!option) {\n return;\n }\n\n onFocusChange({\n index,\n element: option,\n });\n\n option.scrollIntoView({ block: \"nearest\" });\n setActiveDescendantId(option.id || \"\");\n };\n const handleExiting =\n (callback: TransitionExitHandler = noop, skipped: boolean) =>\n (): void => {\n callback();\n\n if (!skipped) {\n // since the menu is unmounted or set to hidden while not visible, need\n // to clear the aria-activedescendant and current focus index when\n // hiding\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n }\n };\n\n const isTransitionCompleteSkipped =\n !disableTransition && !TRANSITION_CONFIG.disabled;\n\n return {\n onEntering: handleEntering(onEntering, false),\n onEntered: handleEntering(onEntered, isTransitionCompleteSkipped),\n onExiting: handleExiting(onExiting, false),\n onExited: handleExiting(onExited, isTransitionCompleteSkipped),\n };\n };\n\n const popupProps: ComboboxWidgetPopupProps<PopupEl> = {\n id: popupId,\n ref: popupRefCallback,\n role: popup,\n };\n\n return {\n show,\n hide,\n visible,\n setVisible,\n focusLast,\n popupRef,\n popupProps,\n comboboxRef,\n comboboxProps: {\n ...movementProps,\n \"aria-controls\": popupId,\n \"aria-disabled\": disabled || undefined,\n \"aria-expanded\": visible,\n \"aria-haspopup\": popup,\n id: comboboxId,\n ref: comboboxRefCallback,\n role: \"combobox\",\n },\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n getTransitionCallbacks,\n getMenuProps(props = {}) {\n const { sheetProps, disableTransition } = props;\n return {\n anchor: BELOW_CENTER_ANCHOR,\n width: \"min\",\n ...props,\n ...popupProps,\n fixedTo: comboboxRef,\n visible,\n onRequestClose: hide,\n ...getTransitionCallbacks(props),\n sheetProps: {\n ...sheetProps,\n ...getTransitionCallbacks({\n ...sheetProps,\n disableTransition:\n sheetProps?.disableTransition ?? disableTransition,\n }),\n },\n };\n },\n };\n}\n"],"names":["useRef","useKeyboardMovementProvider","BELOW_CENTER_ANCHOR","TRANSITION_CONFIG","useEnsuredId","useEnsuredRef","useToggle","tryToSubmitRelatedForm","noop","getNonDisabledOptions","container","querySelectorAll","useCombobox","options","form","popup","onClick","onFocus","onKeyDown","searchable","isNegativeOneAllowed","loopable","disabled","comboboxId","propComboboxId","comboboxRef","propComboboxRef","popupId","propPopupId","popupRef","propPopupRef","defaultVisible","onFocusChange","extendKeyDown","getFocusableElements","getEnterDefaultFocusedIndex","getDefaultFocusedIndex","toggled","visible","enable","show","disable","hide","setToggled","setVisible","comboboxRefCallback","popupRefCallback","focusLast","movementProps","movementContext","currentFocusIndex","activeDescendantId","setActiveDescendantId","event","movementData","isPropagationStopped","key","stopPropagation","preventDefault","current","programmatic","includeDisabled","tabIndexBehavior","getTransitionCallbacks","onEntered","onEntering","onExiting","onExited","disableTransition","handleEntering","callback","skipped","appearing","activeOption","document","getElementById","scrollIntoView","block","focusables","index","option","element","id","handleExiting","isTransitionCompleteSkipped","popupProps","ref","role","comboboxProps","undefined","getMenuProps","props","sheetProps","anchor","width","fixedTo","onRequestClose"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/form/useCombobox.ts"],"sourcesContent":["\"use client\";\nimport {\n useRef,\n type FocusEventHandler,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type Ref,\n type RefCallback,\n type RefObject,\n} from \"react\";\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { type MenuSheetConfigurableProps } from \"../menu/MenuSheet.js\";\nimport {\n type GetDefaultFocusedIndex,\n type GetFocusableElements,\n type KeyboardMovementExtensionData,\n type KeyboardMovementProviderImplementation,\n type KeyboardMovementProviderOptions,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type PositionAnchor,\n type PositionWidth,\n} from \"../positioning/types.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\nimport {\n type TransitionCallbacks,\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport {\n type NonNullMutableRef,\n type UseStateInitializer,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @since 6.0.0\n */\nexport const getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * @since 6.0.0\n */\nexport type SupportedComboboxPopup = \"listbox\" | \"grid\" | \"dialog\";\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxKeyboardMovementData<\n E extends HTMLElement = HTMLInputElement,\n> extends KeyboardMovementExtensionData<E> {\n show(): void;\n hide(): void;\n visible: boolean;\n focusLast: NonNullMutableRef<boolean>;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ExtendComboboxKeyDown<E extends HTMLElement = HTMLInputElement> = (\n movementData: ComboboxKeyboardMovementData<E>\n) => void;\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxKeyboardMovementOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> = Pick<\n KeyboardMovementProviderOptions<ComboboxEl>,\n | \"onClick\"\n | \"onFocus\"\n | \"onKeyDown\"\n | \"disabled\"\n | \"loopable\"\n | \"searchable\"\n | \"onFocusChange\"\n | \"isNegativeOneAllowed\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface BaseComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ComboboxKeyboardMovementOptions<ComboboxEl> {\n /**\n * This is the {@link InputHTMLAttributes.form} attribute and is used to\n * attempt submitting a form when the enter key is pressed.\n */\n form?: string;\n\n /**\n * @defaultValue `\"combobox-popup-\" + useId()`\n */\n popupId?: string;\n popupRef?: Ref<PopupEl>;\n\n /**\n * @defaultValue `\"combobox-\" + useId()`\n */\n comboboxId?: string;\n comboboxRef?: Ref<ComboboxEl>;\n\n /**\n * @defaultValue `\"listbox\"`\n */\n popup?: \"listbox\" | \"grid\" | \"dialog\";\n\n /**\n * @defaultValue `false`\n */\n defaultVisible?: UseStateInitializer<boolean>;\n\n extendKeyDown?: ExtendComboboxKeyDown<ComboboxEl>;\n\n /**\n * @defaultValue {@link getNonDisabledOptions}\n */\n getFocusableElements?: GetFocusableElements;\n\n getDefaultFocusedIndex?: GetDefaultFocusedIndex;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends BaseComboboxOptions<ComboboxEl, PopupEl> {\n getEnterDefaultFocusedIndex(options: {\n focusLast: boolean;\n focusables: readonly HTMLElement[];\n currentFocusIndex: number;\n }): number;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> {\n \"aria-controls\": string;\n \"aria-disabled\": true | undefined;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": SupportedComboboxPopup;\n id: string;\n ref: RefCallback<ComboboxEl>;\n role: \"combobox\";\n onClick: MouseEventHandler<ComboboxEl>;\n onFocus: FocusEventHandler<ComboboxEl>;\n onKeyDown: KeyboardEventHandler<ComboboxEl>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetPopupProps<\n PopupEl extends HTMLElement = HTMLElement,\n> {\n id: string;\n ref: RefCallback<PopupEl>;\n role: \"listbox\" | \"dialog\" | \"grid\";\n}\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxTransitionCallbacks = Pick<\n TransitionCallbacks,\n \"onEntering\" | \"onEntered\" | \"onExiting\" | \"onExited\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxTransitionOptions extends ComboboxTransitionCallbacks {\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ConfigurableComboboxMenuProps = Partial<\n Omit<\n MenuProps,\n \"fixedTo\" | \"visible\" | \"onRequestClose\" | keyof ComboboxWidgetPopupProps\n >\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedComboboxMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Required<ComboboxTransitionCallbacks>,\n ComboboxWidgetPopupProps<PopupEl> {\n visible: boolean;\n onRequestClose(): void;\n\n /** @defaultValue `\"min\"` */\n width: PositionWidth;\n\n /** @defaultValue `BELOW_CENTER_ANCHOR` */\n anchor: PositionAnchor;\n\n fixedTo: RefObject<ComboboxEl>;\n\n sheetProps: MenuSheetConfigurableProps &\n Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Omit<ConfigurableComboboxMenuProps, keyof ProvidedComboboxMenuProps>,\n ProvidedComboboxMenuProps<ComboboxEl, PopupEl> {}\n\n/**\n * Since the combobox usually uses the `Menu` as a popup element, this is a\n * helper util to create the required props and merge any additional props\n * with reasonable defaults.\n */\nexport type ComboboxGetMenuProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLDivElement,\n> = (\n props?: ConfigurableComboboxMenuProps\n) => ComboboxMenuProps<ComboboxEl, PopupEl>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxImplementation<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends KeyboardMovementProviderImplementation<ComboboxEl> {\n show(): void;\n hide(): void;\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n focusLast: NonNullMutableRef<boolean>;\n popupRef: RefObject<PopupEl>;\n popupProps: ComboboxWidgetPopupProps<PopupEl>;\n comboboxRef: RefObject<ComboboxEl>;\n comboboxProps: ComboboxWidgetProps<ComboboxEl>;\n\n getMenuProps: ComboboxGetMenuProps<ComboboxEl, PopupEl>;\n getTransitionCallbacks(\n options: ComboboxTransitionOptions\n ): Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport function useCombobox<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n>(\n options: ComboboxOptions<ComboboxEl, PopupEl>\n): ComboboxImplementation<ComboboxEl, PopupEl> {\n const {\n form,\n popup = \"listbox\",\n onClick = noop,\n onFocus,\n onKeyDown,\n searchable,\n isNegativeOneAllowed,\n loopable,\n disabled,\n comboboxId: propComboboxId,\n comboboxRef: propComboboxRef,\n popupId: propPopupId,\n popupRef: propPopupRef,\n defaultVisible = false,\n onFocusChange = noop,\n extendKeyDown = noop,\n getFocusableElements = getNonDisabledOptions,\n getEnterDefaultFocusedIndex,\n getDefaultFocusedIndex,\n } = options;\n\n const {\n toggled: visible,\n enable: show,\n disable: hide,\n setToggled: setVisible,\n } = useToggle(defaultVisible);\n const popupId = useEnsuredId(propPopupId, \"combobox-popup\");\n const comboboxId = useEnsuredId(propComboboxId, \"combobox\");\n const [comboboxRef, comboboxRefCallback] = useEnsuredRef(propComboboxRef);\n const [popupRef, popupRefCallback] = useEnsuredRef(propPopupRef);\n const focusLast = useRef(false);\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<ComboboxEl>({\n onFocus,\n onKeyDown,\n onClick(event) {\n onClick(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n extendKeyDown(movementData) {\n extendKeyDown({\n ...movementData,\n show,\n hide,\n visible,\n focusLast,\n });\n const { event } = movementData;\n if (event.isPropagationStopped()) {\n return;\n }\n\n if (visible) {\n switch (event.key) {\n case \"Tab\":\n case \"Escape\":\n event.stopPropagation();\n hide();\n break;\n case \"Enter\":\n event.preventDefault();\n break;\n }\n\n // while visible, always use the default keyboard movement behavior\n return;\n }\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n event.stopPropagation();\n focusLast.current = event.key === \"ArrowUp\";\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n }\n },\n disabled,\n loopable,\n searchable,\n onFocusChange,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getFocusableElements(container, programmatic) {\n const popup = popupRef.current;\n if (!popup) {\n return [];\n }\n\n return getFocusableElements(popup || container, programmatic);\n },\n isNegativeOneAllowed,\n getDefaultFocusedIndex,\n });\n const getTransitionCallbacks = (\n options: ComboboxTransitionOptions = {}\n ): Required<ComboboxTransitionCallbacks> => {\n const { onEntered, onEntering, onExiting, onExited, disableTransition } =\n options;\n\n const handleEntering =\n (callback: TransitionEnterHandler = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const popup = popupRef.current;\n if (!popup || skipped) {\n // Chrome does not trigger the scrollIntoView behavior correctly while\n // using a scale transition, so need to trigger this on the entered\n // flow to really make sure the item is in view.\n // An alternative would be to implement a custom scrollIntoView\n // behavior again like the previous versions of react-md, but this is\n // less lines of code\n const activeOption = document.getElementById(activeDescendantId);\n if (activeOption) {\n activeOption.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const focusables = getFocusableElements(popup, true);\n const index = getEnterDefaultFocusedIndex({\n focusLast: focusLast.current,\n focusables,\n currentFocusIndex: currentFocusIndex.current,\n });\n focusLast.current = false;\n currentFocusIndex.current = index;\n\n const option = focusables[index];\n if (!option) {\n return;\n }\n\n onFocusChange({\n index,\n element: option,\n });\n\n option.scrollIntoView({ block: \"nearest\" });\n setActiveDescendantId(option.id || \"\");\n };\n const handleExiting =\n (callback: TransitionExitHandler = noop, skipped: boolean) =>\n (): void => {\n callback();\n\n if (!skipped) {\n // since the menu is unmounted or set to hidden while not visible, need\n // to clear the aria-activedescendant and current focus index when\n // hiding\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n }\n };\n\n const isTransitionCompleteSkipped =\n !disableTransition && !TRANSITION_CONFIG.disabled;\n\n return {\n onEntering: handleEntering(onEntering, false),\n onEntered: handleEntering(onEntered, isTransitionCompleteSkipped),\n onExiting: handleExiting(onExiting, false),\n onExited: handleExiting(onExited, isTransitionCompleteSkipped),\n };\n };\n\n const popupProps: ComboboxWidgetPopupProps<PopupEl> = {\n id: popupId,\n ref: popupRefCallback,\n role: popup,\n };\n\n return {\n show,\n hide,\n visible,\n setVisible,\n focusLast,\n popupRef,\n popupProps,\n comboboxRef,\n comboboxProps: {\n ...movementProps,\n \"aria-controls\": popupId,\n \"aria-disabled\": disabled || undefined,\n \"aria-expanded\": visible,\n \"aria-haspopup\": popup,\n id: comboboxId,\n ref: comboboxRefCallback,\n role: \"combobox\",\n },\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n getTransitionCallbacks,\n getMenuProps(props = {}) {\n const { sheetProps, disableTransition } = props;\n return {\n anchor: BELOW_CENTER_ANCHOR,\n width: \"min\",\n ...props,\n ...popupProps,\n fixedTo: comboboxRef,\n visible,\n onRequestClose: hide,\n ...getTransitionCallbacks(props),\n sheetProps: {\n ...sheetProps,\n ...getTransitionCallbacks({\n ...sheetProps,\n disableTransition:\n sheetProps?.disableTransition ?? disableTransition,\n }),\n },\n };\n },\n };\n}\n"],"names":["useRef","useKeyboardMovementProvider","BELOW_CENTER_ANCHOR","TRANSITION_CONFIG","useEnsuredId","useEnsuredRef","useToggle","tryToSubmitRelatedForm","noop","getNonDisabledOptions","container","querySelectorAll","useCombobox","options","form","popup","onClick","onFocus","onKeyDown","searchable","isNegativeOneAllowed","loopable","disabled","comboboxId","propComboboxId","comboboxRef","propComboboxRef","popupId","propPopupId","popupRef","propPopupRef","defaultVisible","onFocusChange","extendKeyDown","getFocusableElements","getEnterDefaultFocusedIndex","getDefaultFocusedIndex","toggled","visible","enable","show","disable","hide","setToggled","setVisible","comboboxRefCallback","popupRefCallback","focusLast","movementProps","movementContext","currentFocusIndex","activeDescendantId","setActiveDescendantId","event","movementData","isPropagationStopped","key","stopPropagation","preventDefault","current","programmatic","includeDisabled","tabIndexBehavior","getTransitionCallbacks","onEntered","onEntering","onExiting","onExited","disableTransition","handleEntering","callback","skipped","appearing","activeOption","document","getElementById","scrollIntoView","block","focusables","index","option","element","id","handleExiting","isTransitionCompleteSkipped","popupProps","ref","role","comboboxProps","undefined","getMenuProps","props","sheetProps","anchor","width","fixedTo","onRequestClose"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { type BaseComboboxOptions, type ComboboxImplementation } from "./useCombobox.js";
|
|
2
2
|
/**
|
|
3
|
-
* @
|
|
3
|
+
* @since 6.0.0
|
|
4
4
|
*/
|
|
5
5
|
export interface EditableComboboxOptions<ComboboxEl extends HTMLElement = HTMLInputElement, PopupEl extends HTMLElement = HTMLElement> extends BaseComboboxOptions<ComboboxEl, PopupEl> {
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
* @
|
|
8
|
+
* @since 6.0.0
|
|
9
9
|
*/
|
|
10
10
|
export interface EditableComboboxImplementation<ComboboxEl extends HTMLElement = HTMLInputElement, PopupEl extends HTMLElement = HTMLElement> extends ComboboxImplementation<ComboboxEl, PopupEl> {
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* @
|
|
13
|
+
* @since 6.0.0
|
|
14
14
|
*/
|
|
15
15
|
export declare function useEditableCombobox<ComboboxEl extends HTMLElement = HTMLInputElement, PopupEl extends HTMLElement = HTMLElement>(options?: EditableComboboxOptions<ComboboxEl, PopupEl>): EditableComboboxImplementation<ComboboxEl, PopupEl>;
|
|
@@ -4,7 +4,7 @@ import { isTypeEvent } from "../movement/utils.js";
|
|
|
4
4
|
import { useCombobox } from "./useCombobox.js";
|
|
5
5
|
import { isChangeableHTMLElement, triggerManualChangeEvent } from "./utils.js";
|
|
6
6
|
/**
|
|
7
|
-
* @
|
|
7
|
+
* @since 6.0.0
|
|
8
8
|
*/ export function useEditableCombobox(options = {}) {
|
|
9
9
|
const focusFirst = useRef(false);
|
|
10
10
|
const { getMenuProps, ...combobox } = useCombobox({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/useEditableCombobox.ts"],"sourcesContent":["\"use client\";\nimport { useRef } from \"react\";\nimport { isTypeEvent } from \"../movement/utils.js\";\nimport {\n useCombobox,\n type BaseComboboxOptions,\n type ComboboxImplementation,\n} from \"./useCombobox.js\";\nimport { isChangeableHTMLElement, triggerManualChangeEvent } from \"./utils.js\";\n\n/**\n * @
|
|
1
|
+
{"version":3,"sources":["../../src/form/useEditableCombobox.ts"],"sourcesContent":["\"use client\";\nimport { useRef } from \"react\";\nimport { isTypeEvent } from \"../movement/utils.js\";\nimport {\n useCombobox,\n type BaseComboboxOptions,\n type ComboboxImplementation,\n} from \"./useCombobox.js\";\nimport { isChangeableHTMLElement, triggerManualChangeEvent } from \"./utils.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface EditableComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends BaseComboboxOptions<ComboboxEl, PopupEl> {}\n\n/**\n * @since 6.0.0\n */\nexport interface EditableComboboxImplementation<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ComboboxImplementation<ComboboxEl, PopupEl> {}\n\n/**\n * @since 6.0.0\n */\nexport function useEditableCombobox<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n>(\n options: EditableComboboxOptions<ComboboxEl, PopupEl> = {}\n): EditableComboboxImplementation<ComboboxEl, PopupEl> {\n const focusFirst = useRef(false);\n const { getMenuProps, ...combobox } = useCombobox({\n ...options,\n loopable: true,\n searchable: false,\n isNegativeOneAllowed: true,\n getEnterDefaultFocusedIndex(options) {\n const { focusLast, focusables, currentFocusIndex } = options;\n if (focusFirst.current) {\n focusFirst.current = false;\n return 0;\n }\n\n if (focusLast) {\n return focusables.length - 1;\n }\n\n return currentFocusIndex;\n },\n extendKeyDown(movementData) {\n const {\n event,\n show,\n hide,\n visible,\n currentFocusIndex,\n setActiveDescendantId,\n } = movementData;\n\n const resetFocus = (): void => {\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n };\n\n switch (event.key) {\n case \"Escape\":\n if (!visible && isChangeableHTMLElement(event.currentTarget)) {\n event.preventDefault();\n event.stopPropagation();\n triggerManualChangeEvent(event.currentTarget, \"\");\n }\n break;\n case \"Home\":\n case \"End\":\n // do not attempt to jump to the start or end of the listbox so\n // natural text editing occurs\n event.stopPropagation();\n if (visible) {\n resetFocus();\n }\n break;\n case \"ArrowLeft\":\n case \"ArrowRight\":\n if (visible) {\n resetFocus();\n }\n break;\n case \"ArrowUp\":\n // Note: The non-altKey version is handled in the `useCombobox` hook\n //\n // if the popup is available and the altKey was pressed, return focus\n // to the combobox without closing. If the focus was already on the\n // combobox, hide the popup\n if (visible && event.altKey) {\n event.preventDefault();\n event.stopPropagation();\n\n if (currentFocusIndex.current !== -1) {\n resetFocus();\n } else {\n hide();\n }\n }\n break;\n case \"ArrowDown\":\n // if the popup is available, display the popup keep the focus on the\n // combobox if the altKey was pressed. Otherwise, move focus into the\n // listbox\n if (!visible) {\n event.preventDefault();\n event.stopPropagation();\n focusFirst.current = !event.altKey;\n show();\n }\n break;\n default:\n if (isTypeEvent(event)) {\n show();\n resetFocus();\n }\n }\n },\n });\n\n return {\n ...combobox,\n getMenuProps(props) {\n return {\n preventOverlap: true,\n ...getMenuProps(props),\n };\n },\n };\n}\n"],"names":["useRef","isTypeEvent","useCombobox","isChangeableHTMLElement","triggerManualChangeEvent","useEditableCombobox","options","focusFirst","getMenuProps","combobox","loopable","searchable","isNegativeOneAllowed","getEnterDefaultFocusedIndex","focusLast","focusables","currentFocusIndex","current","length","extendKeyDown","movementData","event","show","hide","visible","setActiveDescendantId","resetFocus","key","currentTarget","preventDefault","stopPropagation","altKey","props","preventOverlap"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,MAAM,QAAQ,QAAQ;AAC/B,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SACEC,WAAW,QAGN,mBAAmB;AAC1B,SAASC,uBAAuB,EAAEC,wBAAwB,QAAQ,aAAa;AAkB/E;;CAEC,GACD,OAAO,SAASC,oBAIdC,UAAwD,CAAC,CAAC;IAE1D,MAAMC,aAAaP,OAAO;IAC1B,MAAM,EAAEQ,YAAY,EAAE,GAAGC,UAAU,GAAGP,YAAY;QAChD,GAAGI,OAAO;QACVI,UAAU;QACVC,YAAY;QACZC,sBAAsB;QACtBC,6BAA4BP,OAAO;YACjC,MAAM,EAAEQ,SAAS,EAAEC,UAAU,EAAEC,iBAAiB,EAAE,GAAGV;YACrD,IAAIC,WAAWU,OAAO,EAAE;gBACtBV,WAAWU,OAAO,GAAG;gBACrB,OAAO;YACT;YAEA,IAAIH,WAAW;gBACb,OAAOC,WAAWG,MAAM,GAAG;YAC7B;YAEA,OAAOF;QACT;QACAG,eAAcC,YAAY;YACxB,MAAM,EACJC,KAAK,EACLC,IAAI,EACJC,IAAI,EACJC,OAAO,EACPR,iBAAiB,EACjBS,qBAAqB,EACtB,GAAGL;YAEJ,MAAMM,aAAa;gBACjBV,kBAAkBC,OAAO,GAAG,CAAC;gBAC7BQ,sBAAsB;YACxB;YAEA,OAAQJ,MAAMM,GAAG;gBACf,KAAK;oBACH,IAAI,CAACH,WAAWrB,wBAAwBkB,MAAMO,aAAa,GAAG;wBAC5DP,MAAMQ,cAAc;wBACpBR,MAAMS,eAAe;wBACrB1B,yBAAyBiB,MAAMO,aAAa,EAAE;oBAChD;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,+DAA+D;oBAC/D,8BAA8B;oBAC9BP,MAAMS,eAAe;oBACrB,IAAIN,SAAS;wBACXE;oBACF;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,IAAIF,SAAS;wBACXE;oBACF;oBACA;gBACF,KAAK;oBACH,oEAAoE;oBACpE,EAAE;oBACF,qEAAqE;oBACrE,mEAAmE;oBACnE,2BAA2B;oBAC3B,IAAIF,WAAWH,MAAMU,MAAM,EAAE;wBAC3BV,MAAMQ,cAAc;wBACpBR,MAAMS,eAAe;wBAErB,IAAId,kBAAkBC,OAAO,KAAK,CAAC,GAAG;4BACpCS;wBACF,OAAO;4BACLH;wBACF;oBACF;oBACA;gBACF,KAAK;oBACH,qEAAqE;oBACrE,qEAAqE;oBACrE,UAAU;oBACV,IAAI,CAACC,SAAS;wBACZH,MAAMQ,cAAc;wBACpBR,MAAMS,eAAe;wBACrBvB,WAAWU,OAAO,GAAG,CAACI,MAAMU,MAAM;wBAClCT;oBACF;oBACA;gBACF;oBACE,IAAIrB,YAAYoB,QAAQ;wBACtBC;wBACAI;oBACF;YACJ;QACF;IACF;IAEA,OAAO;QACL,GAAGjB,QAAQ;QACXD,cAAawB,KAAK;YAChB,OAAO;gBACLC,gBAAgB;gBAChB,GAAGzB,aAAawB,MAAM;YACxB;QACF;IACF;AACF"}
|
|
@@ -3,7 +3,7 @@ import { type FileUploadHandlers, type FileUploadStats, type FileValidationError
|
|
|
3
3
|
*
|
|
4
4
|
* @typeParam CustomError - An optional error type that gets returned from the
|
|
5
5
|
* {@link FilesValidator}.
|
|
6
|
-
* @
|
|
6
|
+
* @since 2.9.0
|
|
7
7
|
*/
|
|
8
8
|
export interface FileUploadState<CustomError = never> {
|
|
9
9
|
/**
|
|
@@ -30,7 +30,7 @@ export interface FileUploadState<CustomError = never> {
|
|
|
30
30
|
*
|
|
31
31
|
* @typeParam CustomError - An optional error type that gets returned from the
|
|
32
32
|
* {@link FilesValidator}.
|
|
33
|
-
* @
|
|
33
|
+
* @since 2.9.0
|
|
34
34
|
* @internal
|
|
35
35
|
*/
|
|
36
36
|
export interface FileUploadHookState<CustomError = never> extends FileUploadState<CustomError> {
|
|
@@ -47,7 +47,7 @@ export interface FileUploadHookState<CustomError = never> extends FileUploadStat
|
|
|
47
47
|
* {@link FileUploadHandlers}.
|
|
48
48
|
* @typeParam CustomError - An optional error type that gets returned from the
|
|
49
49
|
* {@link FilesValidator}.
|
|
50
|
-
* @
|
|
50
|
+
* @since 2.9.0
|
|
51
51
|
*/
|
|
52
52
|
export interface FileUploadOptions<E extends HTMLElement, CustomError = never> extends FileUploadHandlers<E>, FileValidationOptions {
|
|
53
53
|
/**
|
|
@@ -64,7 +64,7 @@ export interface FileUploadOptions<E extends HTMLElement, CustomError = never> e
|
|
|
64
64
|
/** {@inheritDoc GetFileParser} */
|
|
65
65
|
getFileParser?: GetFileParser;
|
|
66
66
|
}
|
|
67
|
-
/** @
|
|
67
|
+
/** @since 2.9.0 */
|
|
68
68
|
export interface FileUploadActions {
|
|
69
69
|
/**
|
|
70
70
|
* Reset everything related to uploads ensuring that all file readers have
|
|
@@ -91,7 +91,7 @@ export interface FileUploadActions {
|
|
|
91
91
|
* {@link FileUploadHandlers}.
|
|
92
92
|
* @typeParam CustomError - An optional error type that gets returned from the
|
|
93
93
|
* {@link FilesValidator}.
|
|
94
|
-
* @
|
|
94
|
+
* @since 2.9.0
|
|
95
95
|
*/
|
|
96
96
|
export interface FileUploadHookReturnValue<E extends HTMLElement = HTMLElement, CustomError = never> extends FileUploadActions, Required<FileUploadHandlers<E>> {
|
|
97
97
|
/** {@inheritDoc FileUploadState.errors} */
|
|
@@ -116,8 +116,7 @@ export interface FileUploadHookReturnValue<E extends HTMLElement = HTMLElement,
|
|
|
116
116
|
* when the {@link FileValidationOptions.extensions} list has been provided to
|
|
117
117
|
* limit which files the OS will _attempt_ to allow access to.
|
|
118
118
|
*
|
|
119
|
-
* @example
|
|
120
|
-
* Simple example
|
|
119
|
+
* @example Simple example
|
|
121
120
|
* ```ts
|
|
122
121
|
* const extensions = ['pdf', 'docx', 'ppt'];
|
|
123
122
|
* const { accept } = useFileUpload({ extensions, ...others });
|
|
@@ -144,6 +143,6 @@ export interface FileUploadHookReturnValue<E extends HTMLElement = HTMLElement,
|
|
|
144
143
|
* {@link FilesValidator}.
|
|
145
144
|
* @param options - All the {@link FileUploadOptions}
|
|
146
145
|
* @returns the {@link FileUploadHookReturnValue}
|
|
147
|
-
* @
|
|
146
|
+
* @since 2.9.0
|
|
148
147
|
*/
|
|
149
148
|
export declare function useFileUpload<E extends HTMLElement, CustomError = never>({ maxFiles, extensions, minFileSize, maxFileSize, totalFileSize, concurrency, onDrop: propOnDrop, onChange: propOnChange, validateFiles, getFileParser, isValidFileName, }?: FileUploadOptions<E, CustomError>): Readonly<FileUploadHookReturnValue<E, CustomError>>;
|
|
@@ -22,7 +22,7 @@ const noop = ()=>{
|
|
|
22
22
|
* {@link FilesValidator}.
|
|
23
23
|
* @param options - All the {@link FileUploadOptions}
|
|
24
24
|
* @returns the {@link FileUploadHookReturnValue}
|
|
25
|
-
* @
|
|
25
|
+
* @since 2.9.0
|
|
26
26
|
*/ export function useFileUpload({ maxFiles = -1, extensions = EMPTY_LIST, minFileSize = -1, maxFileSize = -1, totalFileSize = -1, concurrency = -1, onDrop: propOnDrop = noop, onChange: propOnChange = noop, validateFiles = defaultValidateFiles, getFileParser = defaultGetFileParser, isValidFileName = defaultIsValidFileName } = {}) {
|
|
27
27
|
const [state, dispatch] = useReducer(function reducer(state, action) {
|
|
28
28
|
switch(action.type){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/useFileUpload.ts"],"sourcesContent":["\"use client\";\nimport { nanoid } from \"nanoid\";\nimport {\n useCallback,\n useEffect,\n useReducer,\n type ChangeEvent,\n type DragEvent,\n} from \"react\";\nimport {\n FileAccessError,\n getFileParser as defaultGetFileParser,\n isValidFileName as defaultIsValidFileName,\n validateFiles as defaultValidateFiles,\n type CompletedFileUploadStats,\n type FileReaderResult,\n type FileUploadHandlers,\n type FileUploadStats,\n type FileValidationError,\n type FileValidationOptions,\n type FilesValidator,\n type GetFileParser,\n type ProcessingFileUploadStats,\n} from \"./fileUtils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n *\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @remarks \\@since 2.9.0\n */\nexport interface FileUploadState<CustomError = never> {\n /**\n * All the files that have been validated and are either:\n * - pending upload\n * - uploading\n * - complete\n *\n * Each key in this object is the {@link BaseFileUploadStats.key} generated\n * once the upload starts pending.\n */\n stats: Readonly<Record<string, Readonly<FileUploadStats>>>;\n\n /**\n * A list of validation errors that have occurred before starting the upload\n * process.\n *\n * @see {@link FileAccessError}\n * @see {@link TooManyFilesError}\n * @see {@link FileValidationError}\n */\n errors: readonly FileValidationError<CustomError>[];\n}\n\n/**\n *\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @remarks \\@since 2.9.0\n * @internal\n */\nexport interface FileUploadHookState<CustomError = never>\n extends FileUploadState<CustomError> {\n /**\n * All the current readers used for uploading files to the browser.\n *\n * Note: Once an upload has completed, the reader will be removed.\n */\n readers: Readonly<Record<string, FileReader>>;\n}\n\n/**\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @remarks \\@since 2.9.0\n */\nexport interface FileUploadOptions<E extends HTMLElement, CustomError = never>\n extends FileUploadHandlers<E>,\n FileValidationOptions {\n /**\n * Setting this value to a number greater than `0` will update the browser\n * upload process to queue the uploads in chunks instead of all at once. This\n * can help prevent the browser from freezing if dealing with large files that\n * are being converted to data urls.\n *\n * @defaultValue `-1`\n */\n concurrency?: number;\n\n /** {@inheritDoc FilesValidator} */\n validateFiles?: FilesValidator<CustomError>;\n /** {@inheritDoc GetFileParser} */\n getFileParser?: GetFileParser;\n}\n\n/** @internal */\ntype Action<E = never> =\n | {\n type: \"queue\";\n errors: readonly FileValidationError<E>[];\n files: readonly File[];\n }\n | { type: \"reset\" }\n | { type: \"remove\"; files: readonly string[] }\n | { type: \"start\"; key: string; reader: FileReader }\n | { type: \"progress\"; key: string; progress: number }\n | { type: \"complete\"; key: string; result: FileReaderResult }\n | { type: \"clearErrors\" };\n\n/** @remarks \\@since 2.9.0 */\nexport interface FileUploadActions {\n /**\n * Reset everything related to uploads ensuring that all file readers have\n * been aborted.\n */\n reset(): void;\n\n /**\n * Removes all the errors that exist in state without cancelling any of the\n * uploads already in progress.\n */\n clearErrors(): void;\n\n /**\n * This function is used to cancel pending and uploading files or removing\n * completed files.\n *\n * @param keyOrKeys - A single or list of {@link BaseFileUploadStats.key} to\n * remove from state.\n */\n remove(keyOrKeys: string | readonly string[]): void;\n}\n\n/**\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @remarks \\@since 2.9.0\n */\nexport interface FileUploadHookReturnValue<\n E extends HTMLElement = HTMLElement,\n CustomError = never,\n> extends FileUploadActions,\n Required<FileUploadHandlers<E>> {\n /** {@inheritDoc FileUploadState.errors} */\n errors: readonly FileValidationError<CustomError>[];\n\n /**\n * A list of all the {@link FileUploadStats}.\n *\n * @see {@link getSplitFileUploads} for separating by status\n */\n stats: readonly Readonly<FileUploadStats>[];\n\n /**\n * The total number of bytes for all the files that exist in the\n * {@link stats} list.\n */\n totalBytes: number;\n\n /**\n * The total number of files in the {@link stats} list.\n */\n totalFiles: number;\n\n /**\n * An `accept` string that can be passed to the {@link FileInput} component\n * when the {@link FileValidationOptions.extensions} list has been provided to\n * limit which files the OS will _attempt_ to allow access to.\n *\n * @example\n * Simple example\n * ```ts\n * const extensions = ['pdf', 'docx', 'ppt'];\n * const { accept } = useFileUpload({ extensions, ...others });\n *\n * expect(accept).toBe(\"*.pdf,*.docx,*.ppt\")\n * ```\n *\n * @defaultValue `\"*\"`\n */\n accept: string;\n}\n\n/** @internal */\nconst EMPTY_LIST = [] as const;\n/** @internal */\nconst EMPTY_OBJECT = {} as const;\n\n/**\n * This hook is generally used to upload files **to the browser** in different\n * formats to be previewed `<img>`, `<video>`, `<embed>`, etc tags. However, it\n * can also be used to upload the files as an `ArrayBuffer` and then uploaded to\n * a server.\n *\n * Note: If using the `aws-sdk` to upload files directly to S3, **do not use\n * this hook** since it uses its own upload process.\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @param options - All the {@link FileUploadOptions}\n * @returns the {@link FileUploadHookReturnValue}\n * @remarks \\@since 2.9.0\n */\nexport function useFileUpload<E extends HTMLElement, CustomError = never>({\n maxFiles = -1,\n extensions = EMPTY_LIST,\n minFileSize = -1,\n maxFileSize = -1,\n totalFileSize = -1,\n concurrency = -1,\n onDrop: propOnDrop = noop,\n onChange: propOnChange = noop,\n validateFiles = defaultValidateFiles,\n getFileParser = defaultGetFileParser,\n isValidFileName = defaultIsValidFileName,\n}: FileUploadOptions<E, CustomError> = {}): Readonly<\n FileUploadHookReturnValue<E, CustomError>\n> {\n const [state, dispatch] = useReducer(\n function reducer(\n state: FileUploadHookState<CustomError>,\n action: Action<CustomError>\n ): FileUploadHookState<CustomError> {\n switch (action.type) {\n case \"reset\":\n // need to reuse constants so that calling reset doesn't cause an\n // infinite loop in an effect\n return {\n stats: EMPTY_OBJECT,\n errors: EMPTY_LIST,\n readers: EMPTY_OBJECT,\n };\n case \"remove\": {\n const stats: Record<string, FileUploadStats> = {};\n for (const key in state.stats) {\n if (!action.files.includes(key)) {\n stats[key] = state.stats[key];\n }\n }\n\n return {\n ...state,\n stats,\n };\n }\n case \"queue\":\n return {\n ...state,\n stats: {\n ...state.stats,\n ...action.files.reduce<Record<string, ProcessingFileUploadStats>>(\n (files, file) => {\n const key = nanoid();\n files[key] = {\n key,\n file,\n progress: 0,\n status: \"pending\",\n };\n\n return files;\n },\n {}\n ),\n },\n errors: [...state.errors, ...action.errors],\n };\n case \"start\": {\n const { key, reader } = action;\n const fileStats: ProcessingFileUploadStats = {\n key,\n file: state.stats[key].file,\n progress: 0,\n status: \"uploading\",\n };\n\n return {\n ...state,\n readers: {\n ...state.readers,\n [key]: reader,\n },\n stats: {\n ...state.stats,\n [key]: fileStats,\n },\n };\n }\n case \"progress\": {\n const { key, progress } = action;\n return {\n ...state,\n stats: {\n ...state.stats,\n [key]: {\n ...state.stats[key],\n progress,\n },\n },\n };\n }\n case \"complete\": {\n const { key, result } = action;\n const file: CompletedFileUploadStats = {\n key,\n file: state.stats[key].file,\n status: \"complete\",\n result,\n progress: 100,\n };\n const { [key]: _reader, ...readers } = state.readers;\n\n return {\n ...state,\n readers,\n stats: {\n ...state.stats,\n [key]: file,\n },\n };\n }\n case \"clearErrors\":\n return { ...state, errors: [] };\n }\n },\n {\n stats: EMPTY_OBJECT,\n errors: EMPTY_LIST,\n readers: EMPTY_OBJECT,\n }\n );\n const { stats, errors, readers } = state;\n\n const statsList = Object.values(stats);\n const totalFiles = statsList.length;\n const totalBytes = statsList.reduce(\n (result, { file: { size } }) => result + size,\n 0\n );\n const queueFiles = useCallback(\n (files: readonly File[]) => {\n const { pending, errors } = validateFiles(files, {\n maxFiles,\n extensions,\n minFileSize,\n maxFileSize,\n totalBytes,\n totalFiles,\n totalFileSize,\n isValidFileName,\n });\n\n dispatch({ type: \"queue\", errors, files: pending });\n },\n [\n validateFiles,\n maxFiles,\n extensions,\n minFileSize,\n maxFileSize,\n totalBytes,\n totalFiles,\n totalFileSize,\n isValidFileName,\n ]\n );\n const onDrop = useCallback(\n (event: DragEvent<E>) => {\n propOnDrop(event);\n event.preventDefault();\n event.stopPropagation();\n\n try {\n const files = event.dataTransfer.files;\n if (files) {\n queueFiles(Array.from(files));\n }\n } catch (e) {\n dispatch({\n type: \"queue\",\n files: [],\n errors: [\n new FileAccessError(e instanceof Error ? e.message : undefined),\n ],\n });\n }\n },\n [queueFiles, propOnDrop]\n );\n const onChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n propOnChange(event);\n try {\n const files = event.currentTarget.files;\n if (files) {\n queueFiles(Array.from(files));\n } else {\n throw new Error();\n }\n } catch (e) {\n dispatch({\n type: \"queue\",\n files: [],\n errors: [\n new FileAccessError(e instanceof Error ? e.message : undefined),\n ],\n });\n }\n },\n [queueFiles, propOnChange]\n );\n\n const remove = useCallback(\n (keyOrKeys: string | readonly string[]) => {\n const files = typeof keyOrKeys === \"string\" ? [keyOrKeys] : keyOrKeys;\n files.forEach((fileKey) => {\n readers[fileKey]?.abort();\n });\n\n dispatch({ type: \"remove\", files });\n },\n [readers]\n );\n const reset = useCallback(() => {\n Object.values(readers).forEach((reader) => {\n reader.abort();\n });\n\n dispatch({ type: \"reset\" });\n }, [readers]);\n const clearErrors = useCallback(() => {\n dispatch({ type: \"clearErrors\" });\n }, []);\n const start = useCallback((key: string, reader: FileReader) => {\n dispatch({ type: \"start\", key, reader });\n }, []);\n const complete = useCallback(\n (key: string, result: FileReaderResult = null) => {\n dispatch({ type: \"complete\", key, result });\n },\n []\n );\n const createProgressEventHandler = useCallback(\n (key: string) => (event: ProgressEvent) => {\n if (event.lengthComputable) {\n const percentage = Math.round((event.loaded * 100) / event.total);\n dispatch({ type: \"progress\", key, progress: percentage });\n }\n },\n []\n );\n\n useEffect(() => {\n const pending: ProcessingFileUploadStats[] = [];\n const uploading: ProcessingFileUploadStats[] = [];\n Object.values(stats).forEach((file) => {\n if (file.status === \"pending\") {\n pending.push(file);\n } else if (file.status === \"uploading\") {\n uploading.push(file);\n }\n });\n\n const lastIndex =\n concurrency === -1\n ? pending.length\n : Math.max(0, concurrency - uploading.length);\n const queue = pending.slice(0, lastIndex);\n if (!queue.length) {\n return;\n }\n\n queue.forEach((stats) => {\n const { key, file } = stats;\n const reader = new FileReader();\n\n // using `addEventListener` instead of directly setting to\n // `reader.progress`/`reader.load` so it's easier to test\n reader.addEventListener(\"progress\", createProgressEventHandler(key));\n reader.addEventListener(\"load\", () => {\n complete(key, reader.result);\n });\n\n start(key, reader);\n const parser = getFileParser(file);\n /* istanbul ignore next */\n if (\n process.env.NODE_ENV !== \"production\" &&\n ![\n \"readAsText\",\n \"readAsDataURL\",\n \"readAsArrayBuffer\",\n \"readAsBinaryString\",\n ].includes(parser)\n ) {\n throw new Error(\"Invalid file reader parser\");\n }\n\n reader[parser](file);\n });\n }, [\n concurrency,\n stats,\n getFileParser,\n createProgressEventHandler,\n start,\n complete,\n ]);\n\n let accept = \"\";\n if (extensions.length) {\n accept = extensions.reduce((s, ext) => `${s ? `${s},` : \"\"}.${ext}`, \"\");\n }\n\n return {\n stats: statsList,\n errors,\n accept,\n totalBytes,\n totalFiles,\n onDrop,\n onChange,\n reset,\n remove,\n clearErrors,\n };\n}\n"],"names":["nanoid","useCallback","useEffect","useReducer","FileAccessError","getFileParser","defaultGetFileParser","isValidFileName","defaultIsValidFileName","validateFiles","defaultValidateFiles","noop","EMPTY_LIST","EMPTY_OBJECT","useFileUpload","maxFiles","extensions","minFileSize","maxFileSize","totalFileSize","concurrency","onDrop","propOnDrop","onChange","propOnChange","state","dispatch","reducer","action","type","stats","errors","readers","key","files","includes","reduce","file","progress","status","reader","fileStats","result","_reader","statsList","Object","values","totalFiles","length","totalBytes","size","queueFiles","pending","event","preventDefault","stopPropagation","dataTransfer","Array","from","e","Error","message","undefined","currentTarget","remove","keyOrKeys","forEach","fileKey","abort","reset","clearErrors","start","complete","createProgressEventHandler","lengthComputable","percentage","Math","round","loaded","total","uploading","push","lastIndex","max","queue","slice","FileReader","addEventListener","parser","process","env","NODE_ENV","accept","s","ext"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/form/useFileUpload.ts"],"sourcesContent":["\"use client\";\nimport { nanoid } from \"nanoid\";\nimport {\n useCallback,\n useEffect,\n useReducer,\n type ChangeEvent,\n type DragEvent,\n} from \"react\";\nimport {\n FileAccessError,\n getFileParser as defaultGetFileParser,\n isValidFileName as defaultIsValidFileName,\n validateFiles as defaultValidateFiles,\n type CompletedFileUploadStats,\n type FileReaderResult,\n type FileUploadHandlers,\n type FileUploadStats,\n type FileValidationError,\n type FileValidationOptions,\n type FilesValidator,\n type GetFileParser,\n type ProcessingFileUploadStats,\n} from \"./fileUtils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n *\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @since 2.9.0\n */\nexport interface FileUploadState<CustomError = never> {\n /**\n * All the files that have been validated and are either:\n * - pending upload\n * - uploading\n * - complete\n *\n * Each key in this object is the {@link BaseFileUploadStats.key} generated\n * once the upload starts pending.\n */\n stats: Readonly<Record<string, Readonly<FileUploadStats>>>;\n\n /**\n * A list of validation errors that have occurred before starting the upload\n * process.\n *\n * @see {@link FileAccessError}\n * @see {@link TooManyFilesError}\n * @see {@link FileValidationError}\n */\n errors: readonly FileValidationError<CustomError>[];\n}\n\n/**\n *\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @since 2.9.0\n * @internal\n */\nexport interface FileUploadHookState<CustomError = never>\n extends FileUploadState<CustomError> {\n /**\n * All the current readers used for uploading files to the browser.\n *\n * Note: Once an upload has completed, the reader will be removed.\n */\n readers: Readonly<Record<string, FileReader>>;\n}\n\n/**\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @since 2.9.0\n */\nexport interface FileUploadOptions<E extends HTMLElement, CustomError = never>\n extends FileUploadHandlers<E>,\n FileValidationOptions {\n /**\n * Setting this value to a number greater than `0` will update the browser\n * upload process to queue the uploads in chunks instead of all at once. This\n * can help prevent the browser from freezing if dealing with large files that\n * are being converted to data urls.\n *\n * @defaultValue `-1`\n */\n concurrency?: number;\n\n /** {@inheritDoc FilesValidator} */\n validateFiles?: FilesValidator<CustomError>;\n /** {@inheritDoc GetFileParser} */\n getFileParser?: GetFileParser;\n}\n\n/** @internal */\ntype Action<E = never> =\n | {\n type: \"queue\";\n errors: readonly FileValidationError<E>[];\n files: readonly File[];\n }\n | { type: \"reset\" }\n | { type: \"remove\"; files: readonly string[] }\n | { type: \"start\"; key: string; reader: FileReader }\n | { type: \"progress\"; key: string; progress: number }\n | { type: \"complete\"; key: string; result: FileReaderResult }\n | { type: \"clearErrors\" };\n\n/** @since 2.9.0 */\nexport interface FileUploadActions {\n /**\n * Reset everything related to uploads ensuring that all file readers have\n * been aborted.\n */\n reset(): void;\n\n /**\n * Removes all the errors that exist in state without cancelling any of the\n * uploads already in progress.\n */\n clearErrors(): void;\n\n /**\n * This function is used to cancel pending and uploading files or removing\n * completed files.\n *\n * @param keyOrKeys - A single or list of {@link BaseFileUploadStats.key} to\n * remove from state.\n */\n remove(keyOrKeys: string | readonly string[]): void;\n}\n\n/**\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @since 2.9.0\n */\nexport interface FileUploadHookReturnValue<\n E extends HTMLElement = HTMLElement,\n CustomError = never,\n> extends FileUploadActions,\n Required<FileUploadHandlers<E>> {\n /** {@inheritDoc FileUploadState.errors} */\n errors: readonly FileValidationError<CustomError>[];\n\n /**\n * A list of all the {@link FileUploadStats}.\n *\n * @see {@link getSplitFileUploads} for separating by status\n */\n stats: readonly Readonly<FileUploadStats>[];\n\n /**\n * The total number of bytes for all the files that exist in the\n * {@link stats} list.\n */\n totalBytes: number;\n\n /**\n * The total number of files in the {@link stats} list.\n */\n totalFiles: number;\n\n /**\n * An `accept` string that can be passed to the {@link FileInput} component\n * when the {@link FileValidationOptions.extensions} list has been provided to\n * limit which files the OS will _attempt_ to allow access to.\n *\n * @example Simple example\n * ```ts\n * const extensions = ['pdf', 'docx', 'ppt'];\n * const { accept } = useFileUpload({ extensions, ...others });\n *\n * expect(accept).toBe(\"*.pdf,*.docx,*.ppt\")\n * ```\n *\n * @defaultValue `\"*\"`\n */\n accept: string;\n}\n\n/** @internal */\nconst EMPTY_LIST = [] as const;\n/** @internal */\nconst EMPTY_OBJECT = {} as const;\n\n/**\n * This hook is generally used to upload files **to the browser** in different\n * formats to be previewed `<img>`, `<video>`, `<embed>`, etc tags. However, it\n * can also be used to upload the files as an `ArrayBuffer` and then uploaded to\n * a server.\n *\n * Note: If using the `aws-sdk` to upload files directly to S3, **do not use\n * this hook** since it uses its own upload process.\n *\n * @typeParam E - An optional HTMLElement type that is used for the\n * {@link FileUploadHandlers}.\n * @typeParam CustomError - An optional error type that gets returned from the\n * {@link FilesValidator}.\n * @param options - All the {@link FileUploadOptions}\n * @returns the {@link FileUploadHookReturnValue}\n * @since 2.9.0\n */\nexport function useFileUpload<E extends HTMLElement, CustomError = never>({\n maxFiles = -1,\n extensions = EMPTY_LIST,\n minFileSize = -1,\n maxFileSize = -1,\n totalFileSize = -1,\n concurrency = -1,\n onDrop: propOnDrop = noop,\n onChange: propOnChange = noop,\n validateFiles = defaultValidateFiles,\n getFileParser = defaultGetFileParser,\n isValidFileName = defaultIsValidFileName,\n}: FileUploadOptions<E, CustomError> = {}): Readonly<\n FileUploadHookReturnValue<E, CustomError>\n> {\n const [state, dispatch] = useReducer(\n function reducer(\n state: FileUploadHookState<CustomError>,\n action: Action<CustomError>\n ): FileUploadHookState<CustomError> {\n switch (action.type) {\n case \"reset\":\n // need to reuse constants so that calling reset doesn't cause an\n // infinite loop in an effect\n return {\n stats: EMPTY_OBJECT,\n errors: EMPTY_LIST,\n readers: EMPTY_OBJECT,\n };\n case \"remove\": {\n const stats: Record<string, FileUploadStats> = {};\n for (const key in state.stats) {\n if (!action.files.includes(key)) {\n stats[key] = state.stats[key];\n }\n }\n\n return {\n ...state,\n stats,\n };\n }\n case \"queue\":\n return {\n ...state,\n stats: {\n ...state.stats,\n ...action.files.reduce<Record<string, ProcessingFileUploadStats>>(\n (files, file) => {\n const key = nanoid();\n files[key] = {\n key,\n file,\n progress: 0,\n status: \"pending\",\n };\n\n return files;\n },\n {}\n ),\n },\n errors: [...state.errors, ...action.errors],\n };\n case \"start\": {\n const { key, reader } = action;\n const fileStats: ProcessingFileUploadStats = {\n key,\n file: state.stats[key].file,\n progress: 0,\n status: \"uploading\",\n };\n\n return {\n ...state,\n readers: {\n ...state.readers,\n [key]: reader,\n },\n stats: {\n ...state.stats,\n [key]: fileStats,\n },\n };\n }\n case \"progress\": {\n const { key, progress } = action;\n return {\n ...state,\n stats: {\n ...state.stats,\n [key]: {\n ...state.stats[key],\n progress,\n },\n },\n };\n }\n case \"complete\": {\n const { key, result } = action;\n const file: CompletedFileUploadStats = {\n key,\n file: state.stats[key].file,\n status: \"complete\",\n result,\n progress: 100,\n };\n const { [key]: _reader, ...readers } = state.readers;\n\n return {\n ...state,\n readers,\n stats: {\n ...state.stats,\n [key]: file,\n },\n };\n }\n case \"clearErrors\":\n return { ...state, errors: [] };\n }\n },\n {\n stats: EMPTY_OBJECT,\n errors: EMPTY_LIST,\n readers: EMPTY_OBJECT,\n }\n );\n const { stats, errors, readers } = state;\n\n const statsList = Object.values(stats);\n const totalFiles = statsList.length;\n const totalBytes = statsList.reduce(\n (result, { file: { size } }) => result + size,\n 0\n );\n const queueFiles = useCallback(\n (files: readonly File[]) => {\n const { pending, errors } = validateFiles(files, {\n maxFiles,\n extensions,\n minFileSize,\n maxFileSize,\n totalBytes,\n totalFiles,\n totalFileSize,\n isValidFileName,\n });\n\n dispatch({ type: \"queue\", errors, files: pending });\n },\n [\n validateFiles,\n maxFiles,\n extensions,\n minFileSize,\n maxFileSize,\n totalBytes,\n totalFiles,\n totalFileSize,\n isValidFileName,\n ]\n );\n const onDrop = useCallback(\n (event: DragEvent<E>) => {\n propOnDrop(event);\n event.preventDefault();\n event.stopPropagation();\n\n try {\n const files = event.dataTransfer.files;\n if (files) {\n queueFiles(Array.from(files));\n }\n } catch (e) {\n dispatch({\n type: \"queue\",\n files: [],\n errors: [\n new FileAccessError(e instanceof Error ? e.message : undefined),\n ],\n });\n }\n },\n [queueFiles, propOnDrop]\n );\n const onChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n propOnChange(event);\n try {\n const files = event.currentTarget.files;\n if (files) {\n queueFiles(Array.from(files));\n } else {\n throw new Error();\n }\n } catch (e) {\n dispatch({\n type: \"queue\",\n files: [],\n errors: [\n new FileAccessError(e instanceof Error ? e.message : undefined),\n ],\n });\n }\n },\n [queueFiles, propOnChange]\n );\n\n const remove = useCallback(\n (keyOrKeys: string | readonly string[]) => {\n const files = typeof keyOrKeys === \"string\" ? [keyOrKeys] : keyOrKeys;\n files.forEach((fileKey) => {\n readers[fileKey]?.abort();\n });\n\n dispatch({ type: \"remove\", files });\n },\n [readers]\n );\n const reset = useCallback(() => {\n Object.values(readers).forEach((reader) => {\n reader.abort();\n });\n\n dispatch({ type: \"reset\" });\n }, [readers]);\n const clearErrors = useCallback(() => {\n dispatch({ type: \"clearErrors\" });\n }, []);\n const start = useCallback((key: string, reader: FileReader) => {\n dispatch({ type: \"start\", key, reader });\n }, []);\n const complete = useCallback(\n (key: string, result: FileReaderResult = null) => {\n dispatch({ type: \"complete\", key, result });\n },\n []\n );\n const createProgressEventHandler = useCallback(\n (key: string) => (event: ProgressEvent) => {\n if (event.lengthComputable) {\n const percentage = Math.round((event.loaded * 100) / event.total);\n dispatch({ type: \"progress\", key, progress: percentage });\n }\n },\n []\n );\n\n useEffect(() => {\n const pending: ProcessingFileUploadStats[] = [];\n const uploading: ProcessingFileUploadStats[] = [];\n Object.values(stats).forEach((file) => {\n if (file.status === \"pending\") {\n pending.push(file);\n } else if (file.status === \"uploading\") {\n uploading.push(file);\n }\n });\n\n const lastIndex =\n concurrency === -1\n ? pending.length\n : Math.max(0, concurrency - uploading.length);\n const queue = pending.slice(0, lastIndex);\n if (!queue.length) {\n return;\n }\n\n queue.forEach((stats) => {\n const { key, file } = stats;\n const reader = new FileReader();\n\n // using `addEventListener` instead of directly setting to\n // `reader.progress`/`reader.load` so it's easier to test\n reader.addEventListener(\"progress\", createProgressEventHandler(key));\n reader.addEventListener(\"load\", () => {\n complete(key, reader.result);\n });\n\n start(key, reader);\n const parser = getFileParser(file);\n /* istanbul ignore next */\n if (\n process.env.NODE_ENV !== \"production\" &&\n ![\n \"readAsText\",\n \"readAsDataURL\",\n \"readAsArrayBuffer\",\n \"readAsBinaryString\",\n ].includes(parser)\n ) {\n throw new Error(\"Invalid file reader parser\");\n }\n\n reader[parser](file);\n });\n }, [\n concurrency,\n stats,\n getFileParser,\n createProgressEventHandler,\n start,\n complete,\n ]);\n\n let accept = \"\";\n if (extensions.length) {\n accept = extensions.reduce((s, ext) => `${s ? `${s},` : \"\"}.${ext}`, \"\");\n }\n\n return {\n stats: statsList,\n errors,\n accept,\n totalBytes,\n totalFiles,\n onDrop,\n onChange,\n reset,\n remove,\n clearErrors,\n };\n}\n"],"names":["nanoid","useCallback","useEffect","useReducer","FileAccessError","getFileParser","defaultGetFileParser","isValidFileName","defaultIsValidFileName","validateFiles","defaultValidateFiles","noop","EMPTY_LIST","EMPTY_OBJECT","useFileUpload","maxFiles","extensions","minFileSize","maxFileSize","totalFileSize","concurrency","onDrop","propOnDrop","onChange","propOnChange","state","dispatch","reducer","action","type","stats","errors","readers","key","files","includes","reduce","file","progress","status","reader","fileStats","result","_reader","statsList","Object","values","totalFiles","length","totalBytes","size","queueFiles","pending","event","preventDefault","stopPropagation","dataTransfer","Array","from","e","Error","message","undefined","currentTarget","remove","keyOrKeys","forEach","fileKey","abort","reset","clearErrors","start","complete","createProgressEventHandler","lengthComputable","percentage","Math","round","loaded","total","uploading","push","lastIndex","max","queue","slice","FileReader","addEventListener","parser","process","env","NODE_ENV","accept","s","ext"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type RefObject } from "react";
|
|
2
2
|
import { type ChangeableHTMLElement } from "./utils.js";
|
|
3
3
|
/**
|
|
4
|
-
* @
|
|
4
|
+
* @since 6.0.0
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
7
|
export interface FormResetOptions {
|
|
@@ -10,7 +10,7 @@ export interface FormResetOptions {
|
|
|
10
10
|
defaultValue: string;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* @
|
|
13
|
+
* @since 6.0.0
|
|
14
14
|
* @internal
|
|
15
15
|
*/
|
|
16
16
|
export declare function useFormReset(options: FormResetOptions): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/useFormReset.ts"],"sourcesContent":["\"use client\";\nimport { useEffect, type RefObject } from \"react\";\nimport {\n triggerManualChangeEvent,\n type ChangeableHTMLElement,\n} from \"./utils.js\";\n\n/**\n * @
|
|
1
|
+
{"version":3,"sources":["../../src/form/useFormReset.ts"],"sourcesContent":["\"use client\";\nimport { useEffect, type RefObject } from \"react\";\nimport {\n triggerManualChangeEvent,\n type ChangeableHTMLElement,\n} from \"./utils.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface FormResetOptions {\n form?: string;\n elementRef: RefObject<ChangeableHTMLElement>;\n defaultValue: string;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport function useFormReset(options: FormResetOptions): void {\n const { form, elementRef, defaultValue } = options;\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) {\n return;\n }\n\n const formElement =\n (form && document.getElementById(form)) ||\n element.closest<HTMLFormElement>(\"form\") ||\n null;\n if (!formElement) {\n return;\n }\n\n const handleReset = (): void => {\n triggerManualChangeEvent(element, defaultValue);\n };\n\n formElement.addEventListener(\"reset\", handleReset);\n return () => {\n formElement.removeEventListener(\"reset\", handleReset);\n };\n }, [defaultValue, elementRef, form]);\n}\n"],"names":["useEffect","triggerManualChangeEvent","useFormReset","options","form","elementRef","defaultValue","element","current","formElement","document","getElementById","closest","handleReset","addEventListener","removeEventListener"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,SAAS,QAAwB,QAAQ;AAClD,SACEC,wBAAwB,QAEnB,aAAa;AAYpB;;;CAGC,GACD,OAAO,SAASC,aAAaC,OAAyB;IACpD,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,YAAY,EAAE,GAAGH;IAE3CH,UAAU;QACR,MAAMO,UAAUF,WAAWG,OAAO;QAClC,IAAI,CAACD,SAAS;YACZ;QACF;QAEA,MAAME,cACJ,AAACL,QAAQM,SAASC,cAAc,CAACP,SACjCG,QAAQK,OAAO,CAAkB,WACjC;QACF,IAAI,CAACH,aAAa;YAChB;QACF;QAEA,MAAMI,cAAc;YAClBZ,yBAAyBM,SAASD;QACpC;QAEAG,YAAYK,gBAAgB,CAAC,SAASD;QACtC,OAAO;YACLJ,YAAYM,mBAAmB,CAAC,SAASF;QAC3C;IACF,GAAG;QAACP;QAAcD;QAAYD;KAAK;AACrC"}
|
|
@@ -2,7 +2,7 @@ import { type RefObject } from "react";
|
|
|
2
2
|
import { type ChangeableHTMLElement } from "./utils.js";
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
|
-
*
|
|
5
|
+
* @since 6.0.0
|
|
6
6
|
*/
|
|
7
7
|
export interface ListboxContext {
|
|
8
8
|
/**
|
|
@@ -21,11 +21,11 @@ export interface ListboxContext {
|
|
|
21
21
|
* **Client Component**
|
|
22
22
|
*
|
|
23
23
|
* @internal
|
|
24
|
-
* @
|
|
24
|
+
* @since 6.0.0
|
|
25
25
|
*/
|
|
26
26
|
export declare const ListboxProvider: import("react").Provider<ListboxContext | null>;
|
|
27
27
|
/**
|
|
28
28
|
* @internal
|
|
29
|
-
* @
|
|
29
|
+
* @since 6.0.0
|
|
30
30
|
*/
|
|
31
31
|
export declare function useListboxContext(): ListboxContext;
|
|
@@ -5,11 +5,11 @@ const context = createContext(null);
|
|
|
5
5
|
* **Client Component**
|
|
6
6
|
*
|
|
7
7
|
* @internal
|
|
8
|
-
* @
|
|
8
|
+
* @since 6.0.0
|
|
9
9
|
*/ export const { Provider: ListboxProvider } = context;
|
|
10
10
|
/**
|
|
11
11
|
* @internal
|
|
12
|
-
* @
|
|
12
|
+
* @since 6.0.0
|
|
13
13
|
*/ export function useListboxContext() {
|
|
14
14
|
const value = useContext(context);
|
|
15
15
|
if (!value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/useListboxProvider.ts"],"sourcesContent":["\"use client\";\nimport { createContext, useContext, type RefObject } from \"react\";\nimport { type ChangeableHTMLElement } from \"./utils.js\";\n\n/**\n * @internal\n *
|
|
1
|
+
{"version":3,"sources":["../../src/form/useListboxProvider.ts"],"sourcesContent":["\"use client\";\nimport { createContext, useContext, type RefObject } from \"react\";\nimport { type ChangeableHTMLElement } from \"./utils.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface ListboxContext {\n /**\n * This ref is used to trigger the change event when an option is clicked.\n */\n inputRef: RefObject<ChangeableHTMLElement>;\n\n /**\n * This is used within the `Option` component to determine if it is currently\n * selected or not.\n */\n currentValue: string | number | null;\n\n selectedIconAfter: boolean;\n disableSelectedIcon: boolean;\n}\n\nconst context = createContext<ListboxContext | null>(null);\n\n/**\n * **Client Component**\n *\n * @internal\n * @since 6.0.0\n */\nexport const { Provider: ListboxProvider } = context;\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function useListboxContext(): ListboxContext {\n const value = useContext(context);\n if (!value) {\n throw new Error(\"The `ListboxProvider` must be a parent component\");\n }\n return value;\n}\n"],"names":["createContext","useContext","context","Provider","ListboxProvider","useListboxContext","value","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAAA;AACA,SAASA,aAAa,EAAEC,UAAU,QAAwB,QAAQ;AAuBlE,MAAMC,UAAUF,cAAqC;AAErD;;;;;CAKC,GACD,OAAO,MAAM,EAAEG,UAAUC,eAAe,EAAE,GAAGF,QAAQ;AAErD;;;CAGC,GACD,OAAO,SAASG;IACd,MAAMC,QAAQL,WAAWC;IACzB,IAAI,CAACI,OAAO;QACV,MAAM,IAAIC,MAAM;IAClB;IACA,OAAOD;AACT"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type UseStateInitializer, type UseStateSetter } from "../types.js";
|
|
2
2
|
import { type ProvidedTextFieldMessageProps, type ProvidedTextFieldProps, type TextFieldHookOptions, type TextFieldHookState, type TextFieldImplementation, type ValidatedTextFieldImplementation } from "./useTextField.js";
|
|
3
|
-
/** @
|
|
3
|
+
/** @since 2.5.0 */
|
|
4
4
|
export interface NumberFieldConstraints {
|
|
5
5
|
/**
|
|
6
6
|
* An optional min value for the number field.
|
|
@@ -19,9 +19,8 @@ export interface NumberFieldConstraints {
|
|
|
19
19
|
step?: number;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* @
|
|
23
|
-
*
|
|
24
|
-
* \@since 6.0.0
|
|
22
|
+
* @since 2.5.0
|
|
23
|
+
* @since 6.0.0
|
|
25
24
|
* - Removed `updateOnChange` in favor of `updateValue`
|
|
26
25
|
* - Renamed `fixOnBlur` to `updateValueOnBlur`
|
|
27
26
|
*/
|
|
@@ -36,8 +35,7 @@ export interface NumberFieldHookOptions extends Omit<TextFieldHookOptions<HTMLIn
|
|
|
36
35
|
* other components, keep this as the default of `"change"`. Otherwise, set
|
|
37
36
|
* this to `"blur"`.
|
|
38
37
|
*
|
|
39
|
-
* @example
|
|
40
|
-
* Deferring Updates on Blur
|
|
38
|
+
* @example Deferring Updates on Blur
|
|
41
39
|
* ```tsx
|
|
42
40
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
43
41
|
* import type { ReactElement } from "react";
|
|
@@ -80,42 +78,41 @@ export interface NumberFieldHookOptions extends Omit<TextFieldHookOptions<HTMLIn
|
|
|
80
78
|
* fix any min/max errors manually and maintain weird formatting.
|
|
81
79
|
*
|
|
82
80
|
* @defaultValue `true`
|
|
83
|
-
* @
|
|
81
|
+
* @since 6.0.0 This was renamed from `fixOnBlur` and removed the
|
|
84
82
|
* `"min"` and `"max"` behavior.
|
|
85
83
|
*/
|
|
86
84
|
updateValueOnBlur?: boolean;
|
|
87
85
|
}
|
|
88
|
-
/** @
|
|
86
|
+
/** @since 6.0.0 */
|
|
89
87
|
export interface NumberFieldHookState extends Omit<TextFieldHookState, "value"> {
|
|
90
88
|
value: number | undefined;
|
|
91
89
|
}
|
|
92
|
-
/** @
|
|
90
|
+
/** @since 2.5.6 */
|
|
93
91
|
export interface ProvidedNumberFieldProps extends ProvidedTextFieldProps<HTMLInputElement>, NumberFieldConstraints {
|
|
94
92
|
type: "number";
|
|
95
93
|
}
|
|
96
|
-
/** @
|
|
94
|
+
/** @since 2.5.6 */
|
|
97
95
|
export interface ProvidedNumberFieldMessageProps extends ProvidedTextFieldMessageProps<HTMLInputElement>, NumberFieldConstraints {
|
|
98
96
|
type: "number";
|
|
99
97
|
}
|
|
100
|
-
/** @
|
|
98
|
+
/** @since 6.0.0 */
|
|
101
99
|
export interface NumberFieldImplementation extends Omit<TextFieldImplementation<HTMLInputElement>, "value" | "setState"> {
|
|
102
100
|
value: number | undefined;
|
|
103
101
|
setState: UseStateSetter<NumberFieldHookState>;
|
|
104
102
|
fieldProps: ProvidedNumberFieldProps;
|
|
105
103
|
}
|
|
106
|
-
/** @
|
|
104
|
+
/** @since 6.0.0 */
|
|
107
105
|
export interface NumberFieldWithMessageImplementation extends NumberFieldImplementation {
|
|
108
106
|
fieldProps: ProvidedNumberFieldMessageProps;
|
|
109
107
|
}
|
|
110
|
-
/** @
|
|
108
|
+
/** @since 6.0.0 */
|
|
111
109
|
export interface ValidatedNumberFieldImplementation extends Omit<ValidatedTextFieldImplementation<HTMLInputElement>, "value" | "setState"> {
|
|
112
110
|
value: number | undefined;
|
|
113
111
|
setState: UseStateSetter<NumberFieldHookState>;
|
|
114
112
|
fieldProps: ProvidedNumberFieldProps | ProvidedNumberFieldMessageProps;
|
|
115
113
|
}
|
|
116
114
|
/**
|
|
117
|
-
* @example
|
|
118
|
-
* Enforce Number Value and No Error Messages
|
|
115
|
+
* @example Enforce Number Value and No Error Messages
|
|
119
116
|
* ```tsx
|
|
120
117
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
121
118
|
* import type { ReactElement } from "react";
|
|
@@ -151,8 +148,7 @@ export declare function useNumberField(options: NumberFieldHookOptions & {
|
|
|
151
148
|
}>;
|
|
152
149
|
};
|
|
153
150
|
/**
|
|
154
|
-
* @example
|
|
155
|
-
* No Error Messages
|
|
151
|
+
* @example No Error Messages
|
|
156
152
|
* ```tsx
|
|
157
153
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
158
154
|
* import type { ReactElement } from "react";
|
|
@@ -182,8 +178,7 @@ export declare function useNumberField(options: NumberFieldHookOptions & {
|
|
|
182
178
|
disableMessage: true;
|
|
183
179
|
}): NumberFieldImplementation;
|
|
184
180
|
/**
|
|
185
|
-
* @example
|
|
186
|
-
* Enforce Number Value
|
|
181
|
+
* @example Enforce Number Value
|
|
187
182
|
* ```tsx
|
|
188
183
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
189
184
|
* import type { ReactElement } from "react";
|
|
@@ -205,8 +200,7 @@ export declare function useNumberField(options: NumberFieldHookOptions & {
|
|
|
205
200
|
* }
|
|
206
201
|
* ```
|
|
207
202
|
*
|
|
208
|
-
* @example
|
|
209
|
-
* Enforce Number Value and Deferring Updates
|
|
203
|
+
* @example Enforce Number Value and Deferring Updates
|
|
210
204
|
* ```tsx
|
|
211
205
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
212
206
|
* import type { ReactElement } from "react";
|
|
@@ -244,8 +238,7 @@ export declare function useNumberField(options: NumberFieldHookOptions & {
|
|
|
244
238
|
* The `useNumberField` hook is used to control the state of a `TextField` or
|
|
245
239
|
* `<input type="number">`
|
|
246
240
|
*
|
|
247
|
-
* @example
|
|
248
|
-
* Default Implementation
|
|
241
|
+
* @example Default Implementation
|
|
249
242
|
* ```tsx
|
|
250
243
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
251
244
|
* import type { ReactElement } from "react";
|
|
@@ -267,8 +260,7 @@ export declare function useNumberField(options: NumberFieldHookOptions & {
|
|
|
267
260
|
* }
|
|
268
261
|
* ```
|
|
269
262
|
*
|
|
270
|
-
* @example
|
|
271
|
-
* Adding Constraints
|
|
263
|
+
* @example Adding Constraints
|
|
272
264
|
* ```tsx
|
|
273
265
|
* import { TextField, useNumberField } from "@react-md/core";
|
|
274
266
|
* import type { ReactElement } from "react";
|