@react-md/core 1.0.0-next.2 → 1.0.0-next.3
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 +5 -5
- package/.turbo/turbo-lint.log +12 -0
- package/.turbo/turbo-test.log +179 -0
- package/.turbo/turbo-typecheck.log +4 -0
- package/CHANGELOG.md +103 -0
- package/coverage/clover.xml +437 -3
- package/coverage/coverage-final.json +4 -1
- package/coverage/lcov-report/Avatar.tsx.html +472 -0
- package/coverage/lcov-report/IconRotator.tsx.html +322 -0
- package/coverage/lcov-report/ListItem.tsx.html +892 -0
- package/coverage/lcov-report/Portal.tsx.html +223 -0
- package/coverage/lcov-report/PortalContainerProvider.tsx.html +367 -0
- package/coverage/lcov-report/SkeletonPlaceholder.tsx.html +613 -0
- package/coverage/lcov-report/Tab.tsx.html +261 -147
- package/coverage/lcov-report/TreeGroup.tsx.html +313 -0
- package/coverage/lcov-report/app-bar/AppBar.tsx.html +178 -28
- package/coverage/lcov-report/app-bar/index.html +7 -7
- package/coverage/lcov-report/button/TooltippedButton.tsx.html +445 -0
- package/coverage/lcov-report/button/index.html +10 -10
- package/coverage/lcov-report/card/Card.tsx.html +349 -0
- package/coverage/lcov-report/card/CardContent.tsx.html +223 -0
- package/coverage/lcov-report/card/ClickableCard.tsx.html +400 -0
- package/coverage/lcov-report/card/index.html +21 -21
- package/coverage/lcov-report/card/styles.ts.html +428 -392
- package/coverage/lcov-report/cssUtils.ts.html +86 -59
- package/coverage/lcov-report/draggable/index.html +21 -36
- package/coverage/lcov-report/draggable/useDraggable.ts.html +377 -368
- package/coverage/lcov-report/draggable/utils.ts.html +96 -195
- package/coverage/lcov-report/expansion-panel/ExpansionList.tsx.html +211 -0
- package/coverage/lcov-report/expansion-panel/ExpansionPanel.tsx.html +12 -15
- package/coverage/lcov-report/expansion-panel/index.html +34 -19
- package/coverage/lcov-report/expansion-panel/useExpansionPanels.ts.html +928 -0
- package/coverage/lcov-report/form/MenuItemInputToggle.tsx.html +2 -2
- package/coverage/lcov-report/form/Select.tsx.html +1663 -0
- package/coverage/lcov-report/form/Slider.tsx.html +163 -40
- package/coverage/lcov-report/form/index.html +21 -21
- package/coverage/lcov-report/icon/FontIcon.tsx.html +28 -28
- package/coverage/lcov-report/icon/index.html +1 -1
- package/coverage/lcov-report/index.html +41 -11
- package/coverage/lcov-report/interaction/UserInteractionModeProvider.tsx.html +679 -0
- package/coverage/lcov-report/interaction/config.ts.html +181 -0
- package/coverage/lcov-report/interaction/index.html +33 -18
- package/coverage/lcov-report/list/List.tsx.html +490 -0
- package/coverage/lcov-report/list/ListItem.tsx.html +886 -0
- package/coverage/lcov-report/list/ListItemAddon.tsx.html +286 -0
- package/coverage/lcov-report/list/ListItemChildren.tsx.html +445 -0
- package/coverage/lcov-report/list/ListItemLink.tsx.html +5 -5
- package/coverage/lcov-report/list/index.html +81 -6
- package/coverage/lcov-report/list/listItemStyles.ts.html +703 -0
- package/coverage/lcov-report/media-queries/appSize.ts.html +1 -1
- package/coverage/lcov-report/media-queries/index.html +1 -1
- package/coverage/lcov-report/menu/Menu.tsx.html +37 -19
- package/coverage/lcov-report/menu/index.html +14 -44
- package/coverage/lcov-report/sheet/index.html +8 -8
- package/coverage/lcov-report/sheet/styles.ts.html +376 -0
- package/coverage/lcov-report/skeletonPlaceholderUtils.ts.html +400 -0
- package/coverage/lcov-report/src/CoreProviders.tsx.html +20 -20
- package/coverage/lcov-report/src/NoSsr.tsx.html +1 -1
- package/coverage/lcov-report/src/SsrProvider.tsx.html +10 -10
- package/coverage/lcov-report/src/app-bar/AppBar.tsx.html +143 -23
- package/coverage/lcov-report/src/app-bar/AppBarTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/app-bar/index.html +5 -5
- package/coverage/lcov-report/src/avatar/Avatar.tsx.html +2 -2
- package/coverage/lcov-report/src/avatar/index.html +1 -1
- package/coverage/lcov-report/src/avatar/styles.ts.html +1 -1
- package/coverage/lcov-report/src/badge/Badge.tsx.html +1 -1
- package/coverage/lcov-report/src/badge/index.html +1 -1
- package/coverage/lcov-report/src/box/Box.tsx.html +1 -1
- package/coverage/lcov-report/src/box/index.html +23 -8
- package/coverage/lcov-report/src/box/styles.ts.html +46 -46
- package/coverage/lcov-report/src/button/AsyncButton.tsx.html +1 -1
- package/coverage/lcov-report/src/button/Button.tsx.html +84 -84
- package/coverage/lcov-report/src/button/ButtonUnstyled.tsx.html +1 -1
- package/coverage/lcov-report/src/button/FloatingActionButton.tsx.html +11 -11
- package/coverage/lcov-report/src/button/TooltippedButton.tsx.html +445 -0
- package/coverage/lcov-report/src/button/buttonStyles.ts.html +52 -52
- package/coverage/lcov-report/src/button/buttonUnstyledStyles.ts.html +1 -1
- package/coverage/lcov-report/src/button/index.html +83 -8
- package/coverage/lcov-report/src/card/Card.tsx.html +37 -31
- package/coverage/lcov-report/src/card/CardContent.tsx.html +4 -4
- package/coverage/lcov-report/src/card/CardFooter.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardSubtitle.tsx.html +1 -1
- package/coverage/lcov-report/src/card/CardTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/card/ClickableCard.tsx.html +400 -0
- package/coverage/lcov-report/src/card/index.html +24 -9
- package/coverage/lcov-report/src/card/styles.ts.html +58 -31
- package/coverage/lcov-report/src/chip/Chip.tsx.html +1 -1
- package/coverage/lcov-report/src/chip/index.html +7 -7
- package/coverage/lcov-report/src/chip/styles.ts.html +9 -12
- package/coverage/lcov-report/src/cssUtils.ts.html +53 -53
- package/coverage/lcov-report/src/delegateEvent.ts.html +109 -109
- package/coverage/lcov-report/src/dialog/Dialog.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogContent.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogFooter.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/DialogTitle.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/FixedDialog.tsx.html +1 -1
- package/coverage/lcov-report/src/dialog/NestedDialogProvider.ts.html +1 -1
- package/coverage/lcov-report/src/dialog/index.html +129 -9
- package/coverage/lcov-report/src/dialog/styles.ts.html +1 -1
- package/coverage/lcov-report/src/divider/Divider.tsx.html +4 -7
- package/coverage/lcov-report/src/divider/index.html +5 -5
- package/coverage/lcov-report/src/divider/styles.ts.html +1 -1
- package/coverage/lcov-report/src/draggable/index.html +27 -27
- package/coverage/lcov-report/src/draggable/useDraggable.ts.html +47 -44
- package/coverage/lcov-report/src/draggable/utils.ts.html +29 -131
- package/coverage/lcov-report/src/expansion-panel/ExpansionList.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/ExpansionPanel.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/ExpansionPanelHeader.tsx.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/index.html +8 -8
- package/coverage/lcov-report/src/expansion-panel/useExpansionList.ts.html +1 -1
- package/coverage/lcov-report/src/expansion-panel/useExpansionPanels.ts.html +36 -24
- package/coverage/lcov-report/src/focus/index.html +1 -1
- package/coverage/lcov-report/src/focus/useFocusContainer.ts.html +1 -1
- package/coverage/lcov-report/src/focus/utils.ts.html +1 -1
- package/coverage/lcov-report/src/form/Checkbox.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Fieldset.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FileInput.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Form.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FormMessage.tsx.html +1 -1
- package/coverage/lcov-report/src/form/FormMessageContainer.tsx.html +5 -5
- package/coverage/lcov-report/src/form/FormMessageCounter.tsx.html +1 -1
- package/coverage/lcov-report/src/form/InputToggle.tsx.html +110 -110
- package/coverage/lcov-report/src/form/InputToggleIcon.tsx.html +63 -63
- package/coverage/lcov-report/src/form/Label.tsx.html +98 -98
- package/coverage/lcov-report/src/form/Legend.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemCheckbox.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemFileInput.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemInputToggle.tsx.html +2 -2
- package/coverage/lcov-report/src/form/MenuItemRadio.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemSwitch.tsx.html +1 -1
- package/coverage/lcov-report/src/form/MenuItemTextField.tsx.html +1 -1
- package/coverage/lcov-report/src/form/NativeSelect.tsx.html +1 -1
- package/coverage/lcov-report/src/form/OptGroup.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Option.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Password.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Radio.tsx.html +3 -3
- package/coverage/lcov-report/src/form/Select.tsx.html +29 -5
- package/coverage/lcov-report/src/form/SelectValue.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Slider.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderMark.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderMarkLabel.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderThumb.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderTrack.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderValueMarks.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SliderValueTooltip.tsx.html +1 -1
- package/coverage/lcov-report/src/form/Switch.tsx.html +1 -1
- package/coverage/lcov-report/src/form/SwitchTrack.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextArea.tsx.html +2 -2
- package/coverage/lcov-report/src/form/TextField.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldAddon.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/form/TextFieldContainerStyles.ts.html +8 -8
- package/coverage/lcov-report/src/form/fileUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/formConfig.ts.html +1 -1
- package/coverage/lcov-report/src/form/formMessageStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/index.html +940 -10
- package/coverage/lcov-report/src/form/inputToggleStyles.ts.html +30 -30
- package/coverage/lcov-report/src/form/nativeSelectStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/optionStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/passwordStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/selectStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/selectUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/sliderUtils.ts.html +1 -1
- package/coverage/lcov-report/src/form/switchStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/textAreaStyles.ts.html +3 -3
- package/coverage/lcov-report/src/form/textFieldStyles.ts.html +1 -1
- package/coverage/lcov-report/src/form/useCheckboxGroup.ts.html +1 -1
- package/coverage/lcov-report/src/form/useFileUpload.ts.html +1 -1
- package/coverage/lcov-report/src/form/useListboxProvider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useNumberField.ts.html +1 -1
- package/coverage/lcov-report/src/form/useRadioGroup.ts.html +47 -47
- package/coverage/lcov-report/src/form/useRangeSlider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useResizingTextArea.ts.html +1 -1
- package/coverage/lcov-report/src/form/useSlider.ts.html +1 -1
- package/coverage/lcov-report/src/form/useTextField.ts.html +1 -1
- package/coverage/lcov-report/src/form/utils.ts.html +1 -1
- package/coverage/lcov-report/src/form/validation.ts.html +1 -1
- package/coverage/lcov-report/src/hoverMode/index.html +1 -1
- package/coverage/lcov-report/src/hoverMode/useHoverMode.ts.html +98 -98
- package/coverage/lcov-report/src/hoverMode/useHoverModeProvider.ts.html +19 -19
- package/coverage/lcov-report/src/icon/FontIcon.tsx.html +28 -28
- package/coverage/lcov-report/src/icon/IconRotator.tsx.html +5 -8
- package/coverage/lcov-report/src/icon/MaterialIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/MaterialSymbol.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/SVGIcon.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/TextIconSpacing.tsx.html +1 -1
- package/coverage/lcov-report/src/icon/iconConfig.tsx.html +8 -8
- package/coverage/lcov-report/src/icon/index.html +7 -7
- package/coverage/lcov-report/src/icon/material.ts.html +1 -1
- package/coverage/lcov-report/src/icon/materialConfig.ts.html +1 -1
- package/coverage/lcov-report/src/icon/styles.ts.html +38 -38
- package/coverage/lcov-report/src/index.html +354 -9
- package/coverage/lcov-report/src/interaction/Ripple.tsx.html +1 -1
- package/coverage/lcov-report/src/interaction/RippleContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/interaction/UserInteractionModeProvider.tsx.html +87 -87
- package/coverage/lcov-report/src/interaction/config.ts.html +7 -7
- package/coverage/lcov-report/src/interaction/index.html +1 -1
- package/coverage/lcov-report/src/interaction/useElementInteraction.tsx.html +123 -123
- package/coverage/lcov-report/src/interaction/useHigherContrastChildren.tsx.html +17 -17
- package/coverage/lcov-report/src/interaction/utils.ts.html +1 -1
- package/coverage/lcov-report/src/layout/LayoutAppBar.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/LayoutNav.tsx.html +60 -60
- package/coverage/lcov-report/src/layout/LayoutWindowSplitter.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/Main.tsx.html +1 -1
- package/coverage/lcov-report/src/layout/index.html +15 -15
- package/coverage/lcov-report/src/layout/layoutNavStyles.ts.html +5 -5
- package/coverage/lcov-report/src/layout/layoutWindowSplitterStyles.ts.html +1 -1
- package/coverage/lcov-report/src/layout/mainStyles.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useExpandableLayout.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useHorizontalLayoutTransition.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useLayoutAppBarHeight.ts.html +20 -32
- package/coverage/lcov-report/src/layout/useLayoutTree.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useLayoutWindowSplitter.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useMainTabIndex.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useResizableLayout.ts.html +1 -1
- package/coverage/lcov-report/src/layout/useTemporaryLayout.ts.html +1 -1
- package/coverage/lcov-report/src/link/Link.tsx.html +1 -1
- package/coverage/lcov-report/src/link/SkipToMainContent.tsx.html +1 -1
- package/coverage/lcov-report/src/link/index.html +1 -1
- package/coverage/lcov-report/src/link/styles.ts.html +1 -1
- package/coverage/lcov-report/src/list/List.tsx.html +30 -30
- package/coverage/lcov-report/src/list/ListItem.tsx.html +37 -16
- package/coverage/lcov-report/src/list/ListItemAddon.tsx.html +13 -7
- package/coverage/lcov-report/src/list/ListItemChildren.tsx.html +12 -6
- package/coverage/lcov-report/src/list/ListItemLink.tsx.html +4 -4
- package/coverage/lcov-report/src/list/ListItemText.tsx.html +1 -1
- package/coverage/lcov-report/src/list/ListSubheader.tsx.html +1 -1
- package/coverage/lcov-report/src/list/getListItemHeight.ts.html +1 -1
- package/coverage/lcov-report/src/list/index.html +11 -11
- package/coverage/lcov-report/src/list/listItemStyles.ts.html +39 -9
- package/coverage/lcov-report/src/media-queries/AppSizeProvider.tsx.html +54 -54
- package/coverage/lcov-report/src/media-queries/appSize.ts.html +1 -1
- package/coverage/lcov-report/src/media-queries/index.html +1 -1
- package/coverage/lcov-report/src/media-queries/useMediaQuery.ts.html +25 -25
- package/coverage/lcov-report/src/menu/DropdownMenu.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/Menu.tsx.html +2 -2
- package/coverage/lcov-report/src/menu/MenuBar.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuButton.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuConfigurationProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItem.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemButton.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemGroup.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuItemSeparator.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuSheet.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuVisibilityProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuWidget.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/MenuWidgetKeyboardProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/menu/index.html +1 -1
- package/coverage/lcov-report/src/menu/useContextMenu.ts.html +1 -1
- package/coverage/lcov-report/src/menu/useMenuBarProvider.ts.html +1 -1
- package/coverage/lcov-report/src/menu/utils.ts.html +1 -1
- package/coverage/lcov-report/src/movement/constants.ts.html +1 -1
- package/coverage/lcov-report/src/movement/findMatchIndex.ts.html +1 -1
- package/coverage/lcov-report/src/movement/index.html +1 -1
- package/coverage/lcov-report/src/movement/useKeyboardMovementProvider.ts.html +3 -3
- package/coverage/lcov-report/src/movement/utils.ts.html +1 -1
- package/coverage/lcov-report/src/overlay/Overlay.tsx.html +1 -1
- package/coverage/lcov-report/src/overlay/index.html +1 -1
- package/coverage/lcov-report/src/overlay/overlayStyles.ts.html +1 -1
- package/coverage/lcov-report/src/portal/Portal.tsx.html +7 -7
- package/coverage/lcov-report/src/portal/PortalContainerProvider.tsx.html +59 -35
- package/coverage/lcov-report/src/portal/index.html +7 -7
- package/coverage/lcov-report/src/positioning/constants.ts.html +1 -1
- package/coverage/lcov-report/src/positioning/createHorizontalPosition.ts.html +47 -47
- package/coverage/lcov-report/src/positioning/createVerticalPosition.ts.html +55 -55
- package/coverage/lcov-report/src/positioning/getFixedPosition.ts.html +89 -89
- package/coverage/lcov-report/src/positioning/index.html +1 -1
- package/coverage/lcov-report/src/positioning/useFixedPositioning.ts.html +193 -193
- package/coverage/lcov-report/src/positioning/utils.ts.html +59 -59
- package/coverage/lcov-report/src/progress/CircularProgress.tsx.html +3 -3
- package/coverage/lcov-report/src/progress/LinearProgress.tsx.html +3 -3
- package/coverage/lcov-report/src/progress/getProgressA11y.ts.html +1 -1
- package/coverage/lcov-report/src/progress/index.html +20 -5
- package/coverage/lcov-report/src/responsive-item/ResponsiveItemContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/responsive-item/ResponsiveItemOverlay.tsx.html +1 -1
- package/coverage/lcov-report/src/responsive-item/index.html +1 -1
- package/coverage/lcov-report/src/responsive-item/styles.ts.html +1 -1
- package/coverage/lcov-report/src/scroll/ScrollLock.tsx.html +1 -1
- package/coverage/lcov-report/src/scroll/getScrollbarWidth.ts.html +1 -1
- package/coverage/lcov-report/src/scroll/index.html +1 -1
- package/coverage/lcov-report/src/scroll/useScrollLock.ts.html +1 -1
- package/coverage/lcov-report/src/segmented-button/SegmentedButton.tsx.html +1 -1
- package/coverage/lcov-report/src/segmented-button/SegmentedButtonContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/segmented-button/index.html +1 -1
- package/coverage/lcov-report/src/segmented-button/segmentedButtonContainerStyles.ts.html +1 -1
- package/coverage/lcov-report/src/segmented-button/segmentedButtonStyles.ts.html +1 -1
- package/coverage/lcov-report/src/sheet/Sheet.tsx.html +1 -1
- package/coverage/lcov-report/src/sheet/index.html +5 -5
- package/coverage/lcov-report/src/sheet/styles.ts.html +45 -48
- package/coverage/lcov-report/src/snackbar/DefaultToastRenderer.tsx.html +80 -80
- package/coverage/lcov-report/src/snackbar/Snackbar.tsx.html +21 -45
- package/coverage/lcov-report/src/snackbar/Toast.tsx.html +108 -93
- package/coverage/lcov-report/src/snackbar/ToastActionButton.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastCloseButton.tsx.html +1 -1
- package/coverage/lcov-report/src/snackbar/ToastContent.tsx.html +48 -48
- package/coverage/lcov-report/src/snackbar/ToastManager.tsx.html +278 -275
- package/coverage/lcov-report/src/snackbar/ToastManagerProvider.tsx.html +6 -6
- package/coverage/lcov-report/src/snackbar/index.html +19 -19
- package/coverage/lcov-report/src/snackbar/snackbarStyles.ts.html +15 -15
- package/coverage/lcov-report/src/snackbar/toastContentStyles.ts.html +14 -14
- package/coverage/lcov-report/src/snackbar/toastStyles.ts.html +27 -27
- package/coverage/lcov-report/src/snackbar/useCurrentToastActions.ts.html +1 -1
- package/coverage/lcov-report/src/suspense/CircularProgressSuspense.tsx.html +1 -1
- package/coverage/lcov-report/src/suspense/NullSuspense.tsx.html +1 -1
- package/coverage/lcov-report/src/suspense/index.html +20 -5
- package/coverage/lcov-report/src/table/Table.tsx.html +45 -114
- package/coverage/lcov-report/src/table/TableBody.tsx.html +43 -43
- package/coverage/lcov-report/src/table/TableCell.tsx.html +109 -298
- package/coverage/lcov-report/src/table/TableCellContent.tsx.html +81 -27
- package/coverage/lcov-report/src/table/TableCheckbox.tsx.html +16 -10
- package/coverage/lcov-report/src/table/TableConfigurationProvider.tsx.html +20 -20
- package/coverage/lcov-report/src/table/TableContainer.tsx.html +7 -28
- package/coverage/lcov-report/src/table/TableContainerProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/table/TableFooter.tsx.html +64 -43
- package/coverage/lcov-report/src/table/TableHeader.tsx.html +41 -92
- package/coverage/lcov-report/src/table/TableRadio.tsx.html +676 -0
- package/coverage/lcov-report/src/table/TableRow.tsx.html +38 -119
- package/coverage/lcov-report/src/table/index.html +151 -46
- package/coverage/lcov-report/src/table/tableCellStyles.ts.html +334 -0
- package/coverage/lcov-report/src/table/tableContainerStyles.ts.html +142 -0
- package/coverage/lcov-report/src/table/tableFooterStyles.ts.html +166 -0
- package/coverage/lcov-report/src/table/tableHeaderStyles.ts.html +172 -0
- package/coverage/lcov-report/src/table/tableRowStyles.ts.html +169 -0
- package/coverage/lcov-report/src/table/tableStyles.ts.html +157 -0
- package/coverage/lcov-report/src/tabs/Tab.tsx.html +263 -143
- package/coverage/lcov-report/src/tabs/TabList.tsx.html +1 -1
- package/coverage/lcov-report/src/tabs/TabListScrollButton.tsx.html +1 -1
- package/coverage/lcov-report/src/tabs/index.html +25 -25
- package/coverage/lcov-report/src/tabs/tabIndicatorStyles.ts.html +37 -7
- package/coverage/lcov-report/src/tabs/tabListScrollButtonStyles.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/tabListStyles.ts.html +2 -2
- package/coverage/lcov-report/src/tabs/tabStyles.ts.html +64 -28
- package/coverage/lcov-report/src/tabs/useTabList.ts.html +44 -38
- package/coverage/lcov-report/src/tabs/useTabs.ts.html +1 -1
- package/coverage/lcov-report/src/tabs/utils.ts.html +3 -3
- package/coverage/lcov-report/src/test-utils/IntersectionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/ResizeObserver.ts.html +205 -205
- package/coverage/lcov-report/src/test-utils/data-testid.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/drag.ts.html +1 -1
- package/coverage/lcov-report/src/test-utils/index.html +4 -4
- package/coverage/lcov-report/src/test-utils/jest-setup.ts.html +9 -9
- package/coverage/lcov-report/src/test-utils/matchMedia.ts.html +4 -4
- package/coverage/lcov-report/src/test-utils/polyfills/IntersectionObserver.ts.html +4 -4
- package/coverage/lcov-report/src/test-utils/polyfills/ResizeObserver.ts.html +3 -3
- package/coverage/lcov-report/src/test-utils/polyfills/index.html +1 -1
- package/coverage/lcov-report/src/test-utils/polyfills/matchMedia.ts.html +6 -6
- package/coverage/lcov-report/src/test-utils/polyfills/offsetParent.ts.html +14 -14
- package/coverage/lcov-report/src/test-utils/polyfills/scrollIntoView.ts.html +5 -5
- package/coverage/lcov-report/src/test-utils/render.tsx.html +21 -21
- package/coverage/lcov-report/src/test-utils/timers.ts.html +1 -1
- package/coverage/lcov-report/src/theme/LocalStorageColorSchemeProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/theme/ThemeProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/theme/colors.ts.html +1 -1
- package/coverage/lcov-report/src/theme/cssVars.ts.html +1 -1
- package/coverage/lcov-report/src/theme/index.html +1 -1
- package/coverage/lcov-report/src/theme/useCSSVariables.ts.html +25 -25
- package/coverage/lcov-report/src/theme/useColorScheme.ts.html +1 -1
- package/coverage/lcov-report/src/theme/useColorSchemeMetaTag.ts.html +1 -1
- package/coverage/lcov-report/src/theme/useColorSchemeProvider.ts.html +1 -1
- package/coverage/lcov-report/src/theme/usePrefersColorScheme.ts.html +1 -1
- package/coverage/lcov-report/src/theme/utils.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/Tooltip.tsx.html +62 -62
- package/coverage/lcov-report/src/tooltip/TooltipHoverModeProvider.tsx.html +3 -3
- package/coverage/lcov-report/src/tooltip/constants.ts.html +1 -1
- package/coverage/lcov-report/src/tooltip/index.html +9 -9
- package/coverage/lcov-report/src/tooltip/tooltipStyles.ts.html +12 -12
- package/coverage/lcov-report/src/tooltip/useTooltip.ts.html +243 -222
- package/coverage/lcov-report/src/tooltip/useTooltipPosition.ts.html +27 -27
- package/coverage/lcov-report/src/tooltip/utils.ts.html +22 -22
- package/coverage/lcov-report/src/transition/CSSTransition.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/Collapse.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/CrossFade.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/ScaleTransition.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/SkeletonPlaceholder.tsx.html +374 -338
- package/coverage/lcov-report/src/transition/Slide.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/SlideContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/transition/collapseStyles.ts.html +13 -13
- package/coverage/lcov-report/src/transition/config.ts.html +5 -5
- package/coverage/lcov-report/src/transition/index.html +47 -32
- package/coverage/lcov-report/src/transition/maxWidthTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/skeletonPlaceholderUtils.ts.html +400 -0
- package/coverage/lcov-report/src/transition/useCSSTransition.ts.html +68 -68
- package/coverage/lcov-report/src/transition/useCarousel.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useCollapseTransition.ts.html +87 -87
- package/coverage/lcov-report/src/transition/useCrossFadeTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useMaxWidthTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useScaleTransition.ts.html +18 -18
- package/coverage/lcov-report/src/transition/useSkeletonPlaceholder.ts.html +607 -562
- package/coverage/lcov-report/src/transition/useSlideTransition.ts.html +1 -1
- package/coverage/lcov-report/src/transition/useTransition.ts.html +237 -237
- package/coverage/lcov-report/src/transition/utils.ts.html +43 -43
- package/coverage/lcov-report/src/tree/DefaultTreeItemRenderer.tsx.html +18 -6
- package/coverage/lcov-report/src/tree/Tree.tsx.html +20 -8
- package/coverage/lcov-report/src/tree/TreeGroup.tsx.html +45 -45
- package/coverage/lcov-report/src/tree/TreeItem.tsx.html +7 -10
- package/coverage/lcov-report/src/tree/TreeItemExpander.tsx.html +1 -1
- package/coverage/lcov-report/src/tree/TreeProvider.tsx.html +8 -8
- package/coverage/lcov-report/src/tree/index.html +11 -11
- package/coverage/lcov-report/src/tree/styles.ts.html +8 -35
- package/coverage/lcov-report/src/tree/useTree.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeExpansion.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeItems.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeMovement.ts.html +1 -1
- package/coverage/lcov-report/src/tree/useTreeSelection.ts.html +1 -1
- package/coverage/lcov-report/src/tree/utils.ts.html +1 -1
- package/coverage/lcov-report/src/typography/SrOnly.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/TextContainer.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/Typography.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/WritingDirectionProvider.tsx.html +1 -1
- package/coverage/lcov-report/src/typography/index.html +1 -1
- package/coverage/lcov-report/src/useAsyncAction.ts.html +1 -1
- package/coverage/lcov-report/src/useDebouncedFunction.ts.html +1 -1
- package/coverage/lcov-report/src/useDropzone.ts.html +1 -1
- package/coverage/lcov-report/src/useElementSize.ts.html +334 -0
- package/coverage/lcov-report/src/useEnsuredId.ts.html +8 -8
- package/coverage/lcov-report/src/useEnsuredRef.ts.html +14 -14
- package/coverage/lcov-report/src/useEnsuredState.ts.html +1 -1
- package/coverage/lcov-report/src/useHtmlClassName.ts.html +1 -1
- package/coverage/lcov-report/src/useIntersectionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/useIsomorphicLayoutEffect.ts.html +1 -1
- package/coverage/lcov-report/src/useLocalStorage.ts.html +1 -1
- package/coverage/lcov-report/src/useOrientation.ts.html +32 -32
- package/coverage/lcov-report/src/usePageInactive.ts.html +30 -30
- package/coverage/lcov-report/src/useResizeListener.ts.html +38 -32
- package/coverage/lcov-report/src/useResizeObserver.ts.html +68 -179
- package/coverage/lcov-report/src/useThrottledFunction.ts.html +1 -1
- package/coverage/lcov-report/src/useToggle.ts.html +1 -1
- package/coverage/lcov-report/src/useUnmounted.ts.html +1 -1
- package/coverage/lcov-report/src/useWindowSize.ts.html +124 -94
- package/coverage/lcov-report/src/utils/RenderRecursively.tsx.html +1 -1
- package/coverage/lcov-report/src/utils/alphaNumericSort.ts.html +1 -1
- package/coverage/lcov-report/src/utils/applyRef.ts.html +11 -11
- package/coverage/lcov-report/src/utils/bem.ts.html +45 -45
- package/coverage/lcov-report/src/utils/filters.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getClientPosition.ts.html +1 -1
- package/coverage/lcov-report/src/utils/getMiddleOfRange.ts.html +163 -0
- package/coverage/lcov-report/src/utils/getPercentage.ts.html +9 -9
- package/coverage/lcov-report/src/utils/getRangeDefaultValue.ts.html +66 -87
- package/coverage/lcov-report/src/utils/getRangeSteps.ts.html +7 -7
- package/coverage/lcov-report/src/utils/identity.ts.html +1 -1
- package/coverage/lcov-report/src/utils/index.html +46 -31
- package/coverage/lcov-report/src/utils/isElementVisible.ts.html +1 -1
- package/coverage/lcov-report/src/utils/isValidNumber.ts.html +118 -0
- package/coverage/lcov-report/src/utils/loop.ts.html +1 -1
- package/coverage/lcov-report/src/utils/nearest.ts.html +21 -21
- package/coverage/lcov-report/src/utils/parseCssLengthUnit.ts.html +18 -18
- package/coverage/lcov-report/src/utils/randomInt.ts.html +52 -52
- package/coverage/lcov-report/src/utils/wait.ts.html +1 -1
- package/coverage/lcov-report/src/utils/withinRange.ts.html +1 -1
- package/coverage/lcov-report/src/window-splitter/WindowSplitter.tsx.html +1 -1
- package/coverage/lcov-report/src/window-splitter/index.html +14 -14
- package/coverage/lcov-report/src/window-splitter/useWindowSplitter.ts.html +19 -67
- package/coverage/lcov-report/src/window-splitter/useWindowSplitterMaxValue.ts.html +256 -0
- package/coverage/lcov-report/suspense/CircularProgressSuspense.tsx.html +283 -0
- package/coverage/lcov-report/suspense/NullSuspense.tsx.html +202 -0
- package/coverage/lcov-report/suspense/index.html +131 -0
- package/coverage/lcov-report/tabIndicatorStyles.ts.html +43 -13
- package/coverage/lcov-report/tabListStyles.ts.html +35 -26
- package/coverage/lcov-report/tabStyles.ts.html +68 -26
- package/coverage/lcov-report/tabs/Tab.tsx.html +233 -143
- package/coverage/lcov-report/tabs/TabList.tsx.html +85 -85
- package/coverage/lcov-report/tabs/index.html +56 -11
- package/coverage/lcov-report/tabs/tabIndicatorStyles.ts.html +187 -0
- package/coverage/lcov-report/tabs/tabListStyles.ts.html +241 -0
- package/coverage/lcov-report/tabs/tabStyles.ts.html +253 -0
- package/coverage/lcov-report/tabs/useTabList.ts.html +736 -0
- package/coverage/lcov-report/tabs/useTabs.ts.html +1 -1
- package/coverage/lcov-report/tabs/utils.ts.html +1 -1
- package/coverage/lcov-report/test-utils/index.html +21 -21
- package/coverage/lcov-report/test-utils/use.ts.html +187 -0
- package/coverage/lcov-report/tooltip/Tooltip.tsx.html +62 -62
- package/coverage/lcov-report/tooltip/index.html +10 -70
- package/coverage/lcov-report/tooltip/useTooltip.ts.html +243 -222
- package/coverage/lcov-report/transition/SkeletonPlaceholder.tsx.html +595 -0
- package/coverage/lcov-report/transition/config.ts.html +5 -5
- package/coverage/lcov-report/transition/index.html +1 -1
- package/coverage/lcov-report/transition/skeletonPlaceholderUtils.ts.html +400 -0
- package/coverage/lcov-report/transition/useSkeletonPlaceholder.ts.html +952 -0
- package/coverage/lcov-report/tree/TreeItem.tsx.html +7 -10
- package/coverage/lcov-report/tree/index.html +12 -27
- package/coverage/lcov-report/tree/styles.ts.html +538 -0
- package/coverage/lcov-report/typography/Typography.tsx.html +110 -110
- package/coverage/lcov-report/typography/WritingDirectionProvider.tsx.html +75 -75
- package/coverage/lcov-report/typography/index.html +15 -15
- package/coverage/lcov-report/useSkeletonPlaceholder.ts.html +952 -0
- package/coverage/lcov-report/useTabList.ts.html +142 -136
- package/coverage/lcov-report/useWindowSplitter.ts.html +640 -0
- package/coverage/lcov-report/useWindowSplitterMaxValue.ts.html +256 -0
- package/coverage/lcov-report/utils/index.html +16 -31
- package/coverage/lcov-report/utils/isElementVisible.ts.html +14 -14
- package/coverage/lcov-report/utils/randomInt.ts.html +148 -0
- package/coverage/lcov-report/utils/wait.ts.html +1 -1
- package/coverage/lcov-report/window-splitter/index.html +21 -36
- package/coverage/lcov-report/window-splitter/useWindowSplitter.ts.html +406 -328
- package/coverage/lcov.info +474 -0
- package/dist/_box-shadows.scss +12 -2
- package/dist/_core.scss +0 -2
- package/dist/_utils.scss +22 -0
- package/dist/app-bar/AppBar.d.ts +4 -9
- package/dist/app-bar/AppBar.js +29 -7
- package/dist/app-bar/AppBar.js.map +1 -1
- package/dist/app-bar/_app-bar.scss +7 -9
- package/dist/avatar/Avatar.d.ts +1 -1
- package/dist/avatar/Avatar.js.map +1 -1
- package/dist/badge/_badge.scss +12 -7
- package/dist/button/TooltippedButton.d.ts +62 -0
- package/dist/button/TooltippedButton.js +62 -0
- package/dist/button/TooltippedButton.js.map +1 -0
- package/dist/card/Card.js +3 -2
- package/dist/card/Card.js.map +1 -1
- package/dist/card/CardContent.js +1 -1
- package/dist/card/CardContent.js.map +1 -1
- package/dist/card/ClickableCard.d.ts +42 -0
- package/dist/card/ClickableCard.js +73 -0
- package/dist/card/ClickableCard.js.map +1 -0
- package/dist/card/_card.scss +15 -9
- package/dist/card/styles.d.ts +8 -0
- package/dist/card/styles.js +6 -3
- package/dist/card/styles.js.map +1 -1
- package/dist/dialog/_dialog.scss +28 -15
- package/dist/divider/_divider.scss +9 -10
- package/dist/draggable/useDraggable.d.ts +12 -23
- package/dist/draggable/useDraggable.js +15 -6
- package/dist/draggable/useDraggable.js.map +1 -1
- package/dist/draggable/utils.d.ts +4 -17
- package/dist/draggable/utils.js +9 -25
- package/dist/draggable/utils.js.map +1 -1
- package/dist/expansion-panel/_expansion-panel.scss +25 -16
- package/dist/expansion-panel/useExpansionPanels.d.ts +5 -3
- package/dist/expansion-panel/useExpansionPanels.js +16 -9
- package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
- package/dist/form/MenuItemInputToggle.d.ts +1 -1
- package/dist/form/MenuItemInputToggle.js.map +1 -1
- package/dist/form/Select.js +6 -1
- package/dist/form/Select.js.map +1 -1
- package/dist/form/_form.scss +40 -22
- package/dist/icon/IconRotator.js +2 -3
- package/dist/icon/IconRotator.js.map +1 -1
- package/dist/icon/_icon.scss +7 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/interaction/_interaction.scss +12 -9
- package/dist/layout/useLayoutAppBarHeight.js +5 -9
- package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
- package/dist/link/_link.scss +26 -12
- package/dist/list/ListItem.d.ts +8 -3
- package/dist/list/ListItem.js +4 -3
- package/dist/list/ListItem.js.map +1 -1
- package/dist/list/ListItemAddon.js +2 -1
- package/dist/list/ListItemAddon.js.map +1 -1
- package/dist/list/ListItemChildren.js +3 -2
- package/dist/list/ListItemChildren.js.map +1 -1
- package/dist/list/ListItemLink.js +3 -3
- package/dist/list/ListItemLink.js.map +1 -1
- package/dist/list/_list.scss +29 -18
- package/dist/list/listItemStyles.d.ts +9 -1
- package/dist/list/listItemStyles.js +5 -5
- package/dist/list/listItemStyles.js.map +1 -1
- package/dist/list/types.d.ts +14 -4
- package/dist/list/types.js.map +1 -1
- package/dist/menu/Menu.d.ts +1 -1
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/_menu.scss +3 -14
- package/dist/portal/PortalContainerProvider.d.ts +2 -2
- package/dist/portal/PortalContainerProvider.js +6 -1
- package/dist/portal/PortalContainerProvider.js.map +1 -1
- package/dist/sheet/styles.d.ts +14 -15
- package/dist/sheet/styles.js.map +1 -1
- package/dist/table/TableCheckbox.d.ts +3 -2
- package/dist/table/TableCheckbox.js +4 -2
- package/dist/table/TableCheckbox.js.map +1 -1
- package/dist/table/TableRadio.d.ts +3 -2
- package/dist/table/TableRadio.js +4 -2
- package/dist/table/TableRadio.js.map +1 -1
- package/dist/table/tableCellStyles.d.ts +1 -1
- package/dist/table/tableCellStyles.js.map +1 -1
- package/dist/tabs/Tab.d.ts +24 -3
- package/dist/tabs/Tab.js +15 -8
- package/dist/tabs/Tab.js.map +1 -1
- package/dist/tabs/_tabs.scss +28 -16
- package/dist/tabs/tabIndicatorStyles.d.ts +2 -1
- package/dist/tabs/tabIndicatorStyles.js +6 -3
- package/dist/tabs/tabIndicatorStyles.js.map +1 -1
- package/dist/tabs/tabListStyles.js +2 -1
- package/dist/tabs/tabListStyles.js.map +1 -1
- package/dist/tabs/tabStyles.d.ts +2 -0
- package/dist/tabs/tabStyles.js +6 -3
- package/dist/tabs/tabStyles.js.map +1 -1
- package/dist/tabs/useTabList.d.ts +3 -3
- package/dist/tabs/useTabList.js +9 -6
- package/dist/tabs/useTabList.js.map +1 -1
- package/dist/tooltip/useTooltip.d.ts +14 -14
- package/dist/tooltip/useTooltip.js.map +1 -1
- package/dist/transition/SkeletonPlaceholder.d.ts +2 -2
- package/dist/transition/SkeletonPlaceholder.js +8 -3
- package/dist/transition/SkeletonPlaceholder.js.map +1 -1
- package/dist/transition/_transition.scss +12 -7
- package/dist/transition/skeletonPlaceholderUtils.d.ts +77 -0
- package/dist/transition/skeletonPlaceholderUtils.js +38 -0
- package/dist/transition/skeletonPlaceholderUtils.js.map +1 -0
- package/dist/transition/useSkeletonPlaceholder.d.ts +12 -7
- package/dist/transition/useSkeletonPlaceholder.js +38 -37
- package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
- package/dist/tree/DefaultTreeItemRenderer.d.ts +2 -2
- package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
- package/dist/tree/Tree.d.ts +8 -4
- package/dist/tree/Tree.js.map +1 -1
- package/dist/tree/TreeItem.js +3 -4
- package/dist/tree/TreeItem.js.map +1 -1
- package/dist/tree/_tree.scss +29 -22
- package/dist/tree/styles.d.ts +0 -6
- package/dist/tree/styles.js +1 -2
- package/dist/tree/styles.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/dist/typography/_typography.scss +12 -2
- package/dist/useElementSize.d.ts +40 -0
- package/dist/useElementSize.js +53 -0
- package/dist/useElementSize.js.map +1 -0
- package/dist/useResizeListener.d.ts +1 -1
- package/dist/useResizeListener.js +1 -0
- package/dist/useResizeListener.js.map +1 -1
- package/dist/useResizeObserver.d.ts +4 -43
- package/dist/useResizeObserver.js +3 -42
- package/dist/useResizeObserver.js.map +1 -1
- package/dist/useWindowSize.d.ts +14 -11
- package/dist/useWindowSize.js +12 -7
- package/dist/useWindowSize.js.map +1 -1
- package/dist/utils/getMiddleOfRange.d.ts +13 -0
- package/dist/utils/getMiddleOfRange.js +20 -0
- package/dist/utils/getMiddleOfRange.js.map +1 -0
- package/dist/utils/getRangeDefaultValue.d.ts +3 -5
- package/dist/utils/getRangeDefaultValue.js +3 -13
- package/dist/utils/getRangeDefaultValue.js.map +1 -1
- package/dist/utils/getRangeSteps.d.ts +1 -1
- package/dist/utils/getRangeSteps.js +2 -2
- package/dist/utils/getRangeSteps.js.map +1 -1
- package/dist/utils/nearest.js +1 -1
- package/dist/utils/nearest.js.map +1 -1
- package/dist/window-splitter/_window-splitter.scss +11 -16
- package/dist/window-splitter/useWindowSplitter.d.ts +3 -5
- package/dist/window-splitter/useWindowSplitter.js +3 -11
- package/dist/window-splitter/useWindowSplitter.js.map +1 -1
- package/package.json +18 -18
- package/src/__tests__/useElementSize.tsx +181 -0
- package/src/__tests__/useWindowSize.node.tsx +56 -0
- package/src/__tests__/useWindowSize.tsx +156 -0
- package/src/_box-shadows.scss +12 -2
- package/src/_core.scss +0 -2
- package/src/_utils.scss +22 -0
- package/src/app-bar/AppBar.tsx +59 -19
- package/src/app-bar/__tests__/__snapshots__/AppBar.tsx.snap +21 -21
- package/src/app-bar/_app-bar.scss +7 -9
- package/src/avatar/Avatar.tsx +1 -1
- package/src/badge/_badge.scss +12 -7
- package/src/button/TooltippedButton.tsx +120 -0
- package/src/button/__tests__/TooltippedButton.tsx +60 -0
- package/src/button/__tests__/__snapshots__/TooltippedButton.tsx.snap +26 -0
- package/src/card/Card.tsx +5 -3
- package/src/card/CardContent.tsx +3 -3
- package/src/card/ClickableCard.tsx +105 -0
- package/src/card/__tests__/ClickableCard.tsx +66 -0
- package/src/card/__tests__/__snapshots__/CardHeader.tsx.snap +1 -1
- package/src/card/__tests__/__snapshots__/CardSubtitle.tsx.snap +2 -2
- package/src/card/__tests__/__snapshots__/ClickableCard.tsx.snap +20 -0
- package/src/card/__tests__/__snapshots__/styles.ts.snap +1 -1
- package/src/card/_card.scss +15 -9
- package/src/card/styles.ts +19 -10
- package/src/dialog/_dialog.scss +28 -15
- package/src/divider/_divider.scss +9 -10
- package/src/draggable/useDraggable.ts +26 -25
- package/src/draggable/utils.ts +16 -50
- package/src/expansion-panel/__tests__/ExpansionPanel.tsx +2 -2
- package/src/expansion-panel/_expansion-panel.scss +25 -16
- package/src/expansion-panel/useExpansionPanels.ts +20 -16
- package/src/form/MenuItemInputToggle.tsx +1 -1
- package/src/form/Select.tsx +9 -1
- package/src/form/_form.scss +40 -22
- package/src/icon/IconRotator.tsx +1 -2
- package/src/icon/_icon.scss +7 -2
- package/src/index.ts +5 -0
- package/src/interaction/_interaction.scss +12 -9
- package/src/layout/__tests__/__snapshots__/LayoutAppBar.tsx.snap +4 -4
- package/src/layout/__tests__/__snapshots__/useExpandableLayout.tsx.snap +1 -1
- package/src/layout/__tests__/__snapshots__/useLayoutTree.tsx.snap +18 -18
- package/src/layout/__tests__/__snapshots__/useResizableLayout.tsx.snap +1 -1
- package/src/layout/__tests__/__snapshots__/useTemporaryLayout.tsx.snap +1 -1
- package/src/layout/useLayoutAppBarHeight.ts +5 -9
- package/src/link/_link.scss +26 -12
- package/src/list/ListItem.tsx +19 -12
- package/src/list/ListItemAddon.tsx +5 -3
- package/src/list/ListItemChildren.tsx +4 -2
- package/src/list/ListItemLink.tsx +3 -3
- package/src/list/__tests__/ListItem.tsx +1 -1
- package/src/list/__tests__/__snapshots__/ListItem.tsx.snap +1 -1
- package/src/list/_list.scss +29 -18
- package/src/list/listItemStyles.ts +15 -5
- package/src/list/types.ts +15 -4
- package/src/menu/Menu.tsx +1 -1
- package/src/menu/_menu.scss +3 -14
- package/src/portal/PortalContainerProvider.tsx +10 -2
- package/src/portal/__tests__/PortalContainerProvider.tsx +23 -0
- package/src/sheet/styles.ts +14 -15
- package/src/suspense/__tests__/CircularProgressSuspense.tsx +90 -0
- package/src/suspense/__tests__/NullSuspense.tsx +46 -0
- package/src/suspense/__tests__/__snapshots__/CircularProgressSuspense.tsx.snap +24 -0
- package/src/table/TableCheckbox.tsx +4 -2
- package/src/table/TableRadio.tsx +4 -2
- package/src/table/tableCellStyles.ts +1 -1
- package/src/tabs/Tab.tsx +110 -70
- package/src/tabs/__tests__/Tab.tsx +25 -2
- package/src/tabs/__tests__/TabList.tsx +4 -4
- package/src/tabs/__tests__/__snapshots__/TabList.tsx.snap +2 -2
- package/src/tabs/_tabs.scss +28 -16
- package/src/tabs/tabIndicatorStyles.ts +13 -3
- package/src/tabs/tabListStyles.ts +1 -1
- package/src/tabs/tabStyles.ts +16 -4
- package/src/tabs/useTabList.ts +10 -8
- package/src/tooltip/useTooltip.ts +23 -16
- package/src/transition/SkeletonPlaceholder.tsx +18 -6
- package/src/transition/__tests__/SkeletonPlaceholder.tsx +72 -0
- package/src/transition/__tests__/__snapshots__/SkeletonPlaceholder.tsx.snap +24 -0
- package/src/transition/_transition.scss +12 -7
- package/src/transition/skeletonPlaceholderUtils.ts +105 -0
- package/src/transition/useSkeletonPlaceholder.ts +62 -47
- package/src/tree/DefaultTreeItemRenderer.tsx +6 -2
- package/src/tree/Tree.tsx +8 -4
- package/src/tree/TreeItem.tsx +3 -4
- package/src/tree/__tests__/Tree.tsx +1 -1
- package/src/tree/__tests__/__snapshots__/Tree.tsx.snap +124 -124
- package/src/tree/_tree.scss +29 -22
- package/src/tree/styles.ts +0 -9
- package/src/types.ts +8 -0
- package/src/typography/_typography.scss +12 -2
- package/src/useElementSize.ts +83 -0
- package/src/useResizeListener.ts +3 -1
- package/src/useResizeObserver.ts +7 -44
- package/src/useWindowSize.ts +29 -19
- package/src/utils/__tests__/getMiddleOfRange.ts +12 -0
- package/src/utils/__tests__/getRangeDefaultValue.ts +47 -0
- package/src/utils/getMiddleOfRange.ts +26 -0
- package/src/utils/getRangeDefaultValue.ts +8 -15
- package/src/utils/getRangeSteps.ts +2 -2
- package/src/utils/nearest.ts +1 -1
- package/src/window-splitter/_window-splitter.scss +11 -16
- package/src/window-splitter/useWindowSplitter.ts +12 -28
|
@@ -80,13 +80,13 @@ import { useEnsuredId } from "../useEnsuredId.js";
|
|
|
80
80
|
* panel props based on the provided `count`, and the hook no longer supports
|
|
81
81
|
* having all panels expanded by default.
|
|
82
82
|
*/ export function useExpansionPanels(options = {}) {
|
|
83
|
-
const { baseId: propBaseId, multiple = false,
|
|
83
|
+
const { baseId: propBaseId, multiple = false, preventAllCollapsed = false, disableTransition = false, defaultExpandedIds, defaultExpandedIndex, disableContentPadding = false } = options;
|
|
84
84
|
const baseId = useEnsuredId(propBaseId, "expansion-panel");
|
|
85
85
|
const createId = (index)=>`${baseId}-${index + 1}`;
|
|
86
86
|
const [expandedIds, setExpandedIds] = useState(()=>{
|
|
87
87
|
if (typeof defaultExpandedIds === "undefined") {
|
|
88
88
|
const initialList = [];
|
|
89
|
-
if (typeof defaultExpandedIndex === "number" ||
|
|
89
|
+
if (typeof defaultExpandedIndex === "number" || preventAllCollapsed) {
|
|
90
90
|
initialList.push(createId(defaultExpandedIndex ?? 0));
|
|
91
91
|
}
|
|
92
92
|
return new Set(initialList);
|
|
@@ -98,9 +98,16 @@ import { useEnsuredId } from "../useEnsuredId.js";
|
|
|
98
98
|
expandedIds,
|
|
99
99
|
setExpandedIds,
|
|
100
100
|
getPanelProps (indexOrPanelId) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
let id;
|
|
102
|
+
let panelId;
|
|
103
|
+
if (typeof indexOrPanelId === "number") {
|
|
104
|
+
id = createId(indexOrPanelId);
|
|
105
|
+
panelId = id;
|
|
106
|
+
} else {
|
|
107
|
+
panelId = indexOrPanelId;
|
|
108
|
+
}
|
|
109
|
+
const expanded = expandedIds.has(panelId);
|
|
110
|
+
const disabled = expanded && preventAllCollapsed && expandedIds.size === 1;
|
|
104
111
|
return {
|
|
105
112
|
id,
|
|
106
113
|
disabled,
|
|
@@ -110,17 +117,17 @@ import { useEnsuredId } from "../useEnsuredId.js";
|
|
|
110
117
|
return;
|
|
111
118
|
}
|
|
112
119
|
setExpandedIds((prevIds)=>{
|
|
113
|
-
const expanded = prevIds.has(
|
|
120
|
+
const expanded = prevIds.has(panelId);
|
|
114
121
|
if (!multiple) {
|
|
115
122
|
return new Set(expanded ? [] : [
|
|
116
|
-
|
|
123
|
+
panelId
|
|
117
124
|
]);
|
|
118
125
|
}
|
|
119
126
|
const nextIds = new Set(prevIds);
|
|
120
127
|
if (expanded) {
|
|
121
|
-
nextIds.delete(
|
|
128
|
+
nextIds.delete(panelId);
|
|
122
129
|
} else {
|
|
123
|
-
nextIds.add(
|
|
130
|
+
nextIds.add(panelId);
|
|
124
131
|
}
|
|
125
132
|
return nextIds;
|
|
126
133
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expansion-panel/useExpansionPanels.ts"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport type { UseStateInitializer, UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport type { ExpansionPanelProps } from \"./ExpansionPanel.js\";\n\n/** @remarks \\@since 6.0.0 */\nexport interface ExpansionPanelHookOptions {\n /**\n * An optional id to prefix each panel with.\n *\n * @defaultValue `\"expansion-panel-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to `true` if multiple panels can be open at the same time.\n *\n * @defaultValue `false`\n */\n multiple?: boolean;\n\n /**\n * Set this to `true` to enforce that at least one panel must always be\n * expanded.\n *\n * @defaultValue `false`\n */\n
|
|
1
|
+
{"version":3,"sources":["../../src/expansion-panel/useExpansionPanels.ts"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport type { UseStateInitializer, UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport type { ExpansionPanelProps } from \"./ExpansionPanel.js\";\n\n/** @remarks \\@since 6.0.0 */\nexport interface ExpansionPanelHookOptions {\n /**\n * An optional id to prefix each panel with.\n *\n * @defaultValue `\"expansion-panel-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to `true` if multiple panels can be open at the same time.\n *\n * @defaultValue `false`\n */\n multiple?: boolean;\n\n /**\n * Set this to `true` to enforce that at least one panel must always be\n * expanded.\n *\n * @defaultValue `false`\n */\n preventAllCollapsed?: boolean;\n\n /**\n * This is a convenience option to disable the expansion transition for all\n * panels.\n *\n * @defaultValue `false`\n */\n disableTransition?: boolean;\n\n /**\n * @defaultValue `preventAllCollapsed ? [\"expansion-panel-\" + useId() + \"-1\"] : []`\n */\n defaultExpandedIds?: UseStateInitializer<string[]>;\n\n /**\n * This can only be used if the {@link defaultExpandedIds} was not provided\n * and using index based panels.\n *\n * @example\n * ```tsx\n * const { getPanelProps } = useExpansionPanels({\n * defaultExpandedIndex: 2,\n * });\n *\n * return (\n * <ExpansionPanel {...getPanelProps(0)} />\n * <ExpansionPanel {...getPanelProps(1)} />\n * // expanded on first render\n * <ExpansionPanel {...getPanelProps(2)} />\n * <ExpansionPanel {...getPanelProps(3)} />\n * );\n * ```\n */\n defaultExpandedIndex?: number;\n\n /**\n * @defaultValue `false`\n */\n disableContentPadding?: boolean;\n}\n\n/** @remarks \\@since 6.0.0 */\nexport type ProvidedExpansionPanelProps = Pick<\n Required<ExpansionPanelProps>,\n | \"disabled\"\n | \"expanded\"\n | \"onExpandClick\"\n | \"disableTransition\"\n | \"disableContentPadding\"\n> & { id?: string };\n\n/**\n * @param indexOrPanelId - This should either be a DOM id to use for the panel\n * or the panel's index.\n * @returns Props to pass to an `ExpansionPanel` for it to work correctly.\n * @remarks \\@since 6.0.0\n */\nexport type GetExpansionPanelProps = (\n indexOrPanelId: string | number\n) => ProvidedExpansionPanelProps;\n\n/** @remarks \\@since 6.0.0 */\nexport interface ExpansionPanelImplementation {\n /**\n * The current set of expanded panel ids if you need this for some reason.\n */\n expandedIds: ReadonlySet<string>;\n\n /**\n * This can be used to manually control which panels are expanded if the\n * default behavior does not work for your use case.\n */\n setExpandedIds: UseStateSetter<ReadonlySet<string>>;\n\n /**\n * @example\n * Index Based Panels\n * ```tsx\n * <ExpansionPanel {...getPanelProps(0)} />\n * <ExpansionPanel {...getPanelProps(1)} />\n * <ExpansionPanel {...getPanelProps(2)} />\n * ```\n *\n * @example\n * Custom Panel Ids\n * ```tsx\n * <ExpansionPanel {...getPanelProps(\"address-panel\")} />\n * <ExpansionPanel {...getPanelProps(\"billing-panel\")} />\n * <ExpansionPanel {...getPanelProps(\"confirmation-panel\")} />\n * ```\n */\n getPanelProps: GetExpansionPanelProps;\n}\n\n/**\n * Use this hook to control the expanded state for a group of `ExpansionPanel`.\n *\n * @example\n * Index Based Panels\n * ```tsx\n * import {\n * ExpansionList,\n * ExpansionPanel,\n * useExpansionPanels,\n * } from \"@react-md/core\";\n * import { type ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const { getPanelProps } = useExpansionPanels();\n *\n * return (\n * <ExpansionList>\n * <ExpansionPanel {...getPanelProps(0)} headerChildren=\"Panel 1\">\n * Panel 1 Contents\n * </ExpansionPanel>\n * <ExpansionPanel {...getPanelProps(1)} headerChildren=\"Panel 2\">\n * Panel 2 Contents\n * </ExpansionPanel>\n * <ExpansionPanel {...getPanelProps(2)} headerChildren=\"Panel 3\">\n * Panel 3 Contents\n * </ExpansionPanel>\n * </ExpansionList>\n * );\n * }\n * ```\n *\n * @example\n * Custom Panel Ids and Expand All Panels by Default\n * ```tsx\n * import {\n * ExpansionList,\n * ExpansionPanel,\n * useExpansionPanels,\n * } from \"@react-md/core\";\n * import { type ReactElement } from \"react\";\n *\n * import { BillingAddress } from \"./BillingAddress\";\n * import { BillingInformation } from \"./BillingInformation\";\n * import { PersonalInformation } from \"./PersonalInformation\";\n *\n * const panel1Id = \"personal-information-panel\";\n * const panel2Id = \"billing-information-panel\";\n * const panel3Id = \"billing-address-panel\";\n *\n * function Example(): ReactElement {\n * const { getPanelProps } = useExpansionPanels({\n * multiple: true,\n * defaultExpandedIds: () => [panel1Id, panel2Id, panel3Id],\n * });\n *\n * return (\n * <ExpansionList>\n * <ExpansionPanel {...getPanelProps(panel1Id)} headerChildren=\"Personal Information\">\n * <PersonalInformation />\n * </ExpansionPanel>\n * <ExpansionPanel {...getPanelProps(panel2Id)} headerChildren=\"Billing Information\">\n * <BillingInformation />\n * </ExpansionPanel>\n * <ExpansionPanel {...getPanelProps(panel3Id)} headerChildren=\"Billing Address\">\n * <BillingAddress />\n * </ExpansionPanel>\n * </ExpansionList>\n * );\n * }\n * ```\n *\n *\n * @remarks\n * \\@since 6.0.0 The hook was renamed from `usePanels` to `useExpansionPanels`,\n * the API changed to return `getPanelProps` instead of a generated list of\n * panel props based on the provided `count`, and the hook no longer supports\n * having all panels expanded by default.\n */\nexport function useExpansionPanels(\n options: ExpansionPanelHookOptions = {}\n): ExpansionPanelImplementation {\n const {\n baseId: propBaseId,\n multiple = false,\n preventAllCollapsed = false,\n disableTransition = false,\n defaultExpandedIds,\n defaultExpandedIndex,\n disableContentPadding = false,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"expansion-panel\");\n const createId = (index: number): string => `${baseId}-${index + 1}`;\n const [expandedIds, setExpandedIds] = useState<ReadonlySet<string>>(() => {\n if (typeof defaultExpandedIds === \"undefined\") {\n const initialList: string[] = [];\n if (typeof defaultExpandedIndex === \"number\" || preventAllCollapsed) {\n initialList.push(createId(defaultExpandedIndex ?? 0));\n }\n\n return new Set(initialList);\n }\n\n const ids =\n typeof defaultExpandedIds === \"function\"\n ? defaultExpandedIds()\n : defaultExpandedIds;\n return new Set(ids);\n });\n\n return {\n expandedIds,\n setExpandedIds,\n getPanelProps(indexOrPanelId) {\n let id: string | undefined;\n let panelId: string;\n if (typeof indexOrPanelId === \"number\") {\n id = createId(indexOrPanelId);\n panelId = id;\n } else {\n panelId = indexOrPanelId;\n }\n\n const expanded = expandedIds.has(panelId);\n const disabled =\n expanded && preventAllCollapsed && expandedIds.size === 1;\n return {\n id,\n disabled,\n expanded,\n onExpandClick() {\n if (disabled) {\n return;\n }\n\n setExpandedIds((prevIds) => {\n const expanded = prevIds.has(panelId);\n if (!multiple) {\n return new Set(expanded ? [] : [panelId]);\n }\n\n const nextIds = new Set(prevIds);\n if (expanded) {\n nextIds.delete(panelId);\n } else {\n nextIds.add(panelId);\n }\n\n return nextIds;\n });\n },\n disableTransition,\n disableContentPadding,\n };\n },\n };\n}\n"],"names":["useState","useEnsuredId","useExpansionPanels","options","baseId","propBaseId","multiple","preventAllCollapsed","disableTransition","defaultExpandedIds","defaultExpandedIndex","disableContentPadding","createId","index","expandedIds","setExpandedIds","initialList","push","Set","ids","getPanelProps","indexOrPanelId","id","panelId","expanded","has","disabled","size","onExpandClick","prevIds","nextIds","delete","add"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,QAAQ;AAEjC,SAASC,YAAY,QAAQ,qBAAqB;AAwHlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EC,GACD,OAAO,SAASC,mBACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,WAAW,KAAK,EAChBC,sBAAsB,KAAK,EAC3BC,oBAAoB,KAAK,EACzBC,kBAAkB,EAClBC,oBAAoB,EACpBC,wBAAwB,KAAK,EAC9B,GAAGR;IAEJ,MAAMC,SAASH,aAAaI,YAAY;IACxC,MAAMO,WAAW,CAACC,QAA0B,CAAC,EAAET,OAAO,CAAC,EAAES,QAAQ,EAAE,CAAC;IACpE,MAAM,CAACC,aAAaC,eAAe,GAAGf,SAA8B;QAClE,IAAI,OAAOS,uBAAuB,aAAa;YAC7C,MAAMO,cAAwB,EAAE;YAChC,IAAI,OAAON,yBAAyB,YAAYH,qBAAqB;gBACnES,YAAYC,IAAI,CAACL,SAASF,wBAAwB;YACpD;YAEA,OAAO,IAAIQ,IAAIF;QACjB;QAEA,MAAMG,MACJ,OAAOV,uBAAuB,aAC1BA,uBACAA;QACN,OAAO,IAAIS,IAAIC;IACjB;IAEA,OAAO;QACLL;QACAC;QACAK,eAAcC,cAAc;YAC1B,IAAIC;YACJ,IAAIC;YACJ,IAAI,OAAOF,mBAAmB,UAAU;gBACtCC,KAAKV,SAASS;gBACdE,UAAUD;YACZ,OAAO;gBACLC,UAAUF;YACZ;YAEA,MAAMG,WAAWV,YAAYW,GAAG,CAACF;YACjC,MAAMG,WACJF,YAAYjB,uBAAuBO,YAAYa,IAAI,KAAK;YAC1D,OAAO;gBACLL;gBACAI;gBACAF;gBACAI;oBACE,IAAIF,UAAU;wBACZ;oBACF;oBAEAX,eAAe,CAACc;wBACd,MAAML,WAAWK,QAAQJ,GAAG,CAACF;wBAC7B,IAAI,CAACjB,UAAU;4BACb,OAAO,IAAIY,IAAIM,WAAW,EAAE,GAAG;gCAACD;6BAAQ;wBAC1C;wBAEA,MAAMO,UAAU,IAAIZ,IAAIW;wBACxB,IAAIL,UAAU;4BACZM,QAAQC,MAAM,CAACR;wBACjB,OAAO;4BACLO,QAAQE,GAAG,CAACT;wBACd;wBAEA,OAAOO;oBACT;gBACF;gBACAtB;gBACAG;YACF;QACF;IACF;AACF"}
|
|
@@ -47,7 +47,7 @@ export interface BaseMenuItemInputToggleProps extends HTMLAttributes<HTMLLIEleme
|
|
|
47
47
|
/** @defaultValue `"auto"` */
|
|
48
48
|
height?: ListItemHeight;
|
|
49
49
|
/** @defaultValue `false` */
|
|
50
|
-
|
|
50
|
+
multiline?: boolean;
|
|
51
51
|
/** @defaultValue `false` */
|
|
52
52
|
disableTextChildren?: boolean;
|
|
53
53
|
/** @defaultValue `false` */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/MenuItemInputToggle.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { ListItem } from \"../list/ListItem.js\";\nimport {\n type ListItemAddonPosition,\n type ListItemAddonType,\n type ListItemHeight,\n} from \"../list/types.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { bem } from \"../utils/bem.js\";\nimport {\n type IndeterminateCheckboxProps,\n type InputToggleIconProps,\n} from \"./InputToggle.js\";\nimport { InputToggleIcon } from \"./InputToggleIcon.js\";\nimport { SwitchTrack } from \"./SwitchTrack.js\";\nimport { type InputToggleSize } from \"./inputToggleStyles.js\";\n\nconst noop = (): void => {\n // do nothing\n};\nconst styles = bem(\"rmd-menu-item-input-toggle\");\n\n/** @remarks \\@since 6.0.0 */\nexport interface MenuItemInputToggleClassNameOptions {\n className?: string;\n type: \"radio\" | \"checkbox\" | \"switch\";\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport function menuItemInputToggle(\n options: MenuItemInputToggleClassNameOptions\n): string {\n const { className, type } = options;\n return cnb(\n `rmd-${type}-menu-item`,\n styles({ switch: type === \"switch\" }),\n className\n );\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type MenuItemInputToggleCheckedCallback = (\n checked: boolean,\n event: MouseEvent<HTMLLIElement>\n) => void;\n\n/** @remarks \\@since 2.8.0 */\nexport interface BaseMenuItemInputToggleProps\n extends HTMLAttributes<HTMLLIElement>,\n InputToggleIconProps {\n checked: boolean;\n onCheckedChange: MenuItemInputToggleCheckedCallback;\n\n /**\n * @defaultValue `\"menu-item-\" + useId()`\n */\n id?: string;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /**\n * Set this to `true` if the `Menu` should not close when the input toggle is\n * clicked. This can be useful when interacting with a checkbox group within a\n * menu or allowing the user to select multiple options before closing the\n * menu.\n *\n * @defaultValue `false`\n */\n preventMenuHideOnClick?: boolean;\n\n /**\n * This is set to `\"auto\"` by default so the icon shrinks back down to the\n * default icon size instead of relative to the current font size. You\n * probably don't want to change this since it'll also modify the height of\n * the menu item\n *\n * @defaultValue `\"auto\"`\n */\n size?: InputToggleSize;\n\n /** @defaultValue `\"auto\"` */\n height?: ListItemHeight;\n\n /** @defaultValue `false` */\n threeLines?: boolean;\n\n /** @defaultValue `false` */\n disableTextChildren?: boolean;\n\n /** @defaultValue `false` */\n iconAfter?: boolean;\n\n addon?: ReactNode;\n addonType?: ListItemAddonType;\n addonPosition?: ListItemAddonPosition;\n\n /** @defaultValue `false` */\n addonForceWrap?: boolean;\n\n /** @defaultValue `false` */\n disableAddonCenteredMedia?: boolean;\n}\n\nexport interface MenuItemCheckboxProps\n extends BaseMenuItemInputToggleProps,\n IndeterminateCheckboxProps {}\n\nexport type MenuItemRadioProps = BaseMenuItemInputToggleProps;\n\n/**\n * @remarks\n * \\@since 2.8.0\n * \\@since 6.0.0 Added additional props for styling the track and ball.\n */\nexport interface MenuItemSwitchProps extends BaseMenuItemInputToggleProps {\n trackProps?: PropsWithRef<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n trackStyle?: CSSProperties;\n trackClassName?: string;\n ballProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n ballStyle?: CSSProperties;\n ballClassName?: string;\n}\n\n/**\n * @remarks\n * \\@since 2.8.0\n * \\@since 6.0.0 Updated to be a union of the different props to enforce the\n * correct props based on `type`\n */\nexport type MenuItemInputToggleProps =\n | (MenuItemCheckboxProps & { type: \"checkbox\" })\n | (MenuItemRadioProps & { type: \"radio\" })\n | (MenuItemSwitchProps & { type: \"switch\" });\n\n/**\n * **Client Component**\n *\n * This is a low-level component that should probably not be used externally and\n * instead the `MenuItemCheckbox`, `MenuItemRadio`, or `MenuItemSwitch` should\n * be used instead.\n *\n * @see {@link MenuItemCheckbox} for checkbox examples\n * @see {@link MenuItemRadio} for radio examples\n * @see {@link MenuItemSwitch} for switch examples\n * @remarks \\@since 2.8.0\n */\nexport const MenuItemInputToggle = forwardRef<\n HTMLLIElement,\n MenuItemInputToggleProps\n>(function MenuItemInputToggle(props, ref) {\n const {\n id: propId,\n type,\n disabled = false,\n checked,\n onCheckedChange,\n preventMenuHideOnClick = false,\n onClick = noop,\n className,\n tabIndex = -1,\n children,\n size = \"auto\",\n icon: propIcon,\n iconAfter = false,\n iconProps,\n iconStyle,\n iconClassName,\n checkedIcon,\n indeterminate,\n indeterminateIcon,\n addon,\n addonType,\n addonPosition,\n addonForceWrap,\n disableAddonCenteredMedia,\n ballProps,\n ballStyle,\n ballClassName,\n trackProps,\n trackStyle,\n trackClassName,\n ...remaining\n } = props as MenuItemSwitchProps &\n MenuItemCheckboxProps & { type: \"checkbox\" | \"radio\" | \"switch\" };\n const id = useEnsuredId(propId, \"menu-item\");\n\n let icon = propIcon;\n if (typeof propIcon === \"undefined\") {\n if (type === \"switch\") {\n icon = (\n <SwitchTrack\n style={trackStyle}\n {...trackProps}\n className={cnb(\n styles(\"track\"),\n trackClassName,\n trackProps?.className\n )}\n active={checked}\n ballProps={ballProps}\n ballStyle={ballStyle}\n ballClassName={cnb(styles(\"ball\"), ballClassName)}\n />\n );\n } else {\n icon = (\n <InputToggleIcon\n style={iconStyle}\n disableEm\n {...iconProps}\n className={cnb(styles(\"icon\"), iconClassName, iconProps?.className)}\n size={size}\n type={type}\n checked={checked}\n disabled={disabled}\n icon={propIcon}\n checkedIcon={checkedIcon}\n indeterminate={indeterminate}\n indeterminateIcon={indeterminateIcon}\n />\n );\n }\n }\n\n let leftAddon: ReactNode;\n let leftAddonType: ListItemAddonType | undefined;\n let leftAddonPosition: ListItemAddonPosition | undefined;\n let leftAddonForceWrap: boolean | undefined;\n let disableLeftAddonCenteredMedia: boolean | undefined;\n let rightAddon: ReactNode;\n let rightAddonType: ListItemAddonType | undefined;\n let rightAddonPosition: ListItemAddonPosition | undefined;\n let rightAddonForceWrap: boolean | undefined;\n let disableRightAddonCenteredMedia: boolean | undefined;\n if (iconAfter) {\n leftAddon = addon;\n leftAddonType = addonType;\n leftAddonPosition = addonPosition;\n leftAddonForceWrap = addonForceWrap;\n disableLeftAddonCenteredMedia = disableAddonCenteredMedia;\n rightAddon = icon;\n } else {\n leftAddon = icon;\n rightAddon = addon;\n rightAddonType = addonType;\n rightAddonPosition = addonPosition;\n rightAddonForceWrap = addonForceWrap;\n disableRightAddonCenteredMedia = disableAddonCenteredMedia;\n }\n\n return (\n <ListItem\n {...remaining}\n // I'm not actually sure if this is correct\n aria-checked={indeterminate && checked ? \"mixed\" : checked}\n id={id}\n role={type === \"radio\" ? \"menuitemradio\" : \"menuitemcheckbox\"}\n onClick={(event) => {\n onClick(event);\n onCheckedChange(!checked, event);\n\n if (preventMenuHideOnClick) {\n event.stopPropagation();\n }\n }}\n ref={ref}\n className={menuItemInputToggle({ type, className })}\n disabled={disabled}\n tabIndex={tabIndex}\n leftAddon={leftAddon}\n leftAddonType={leftAddonType}\n leftAddonPosition={leftAddonPosition}\n leftAddonForceWrap={leftAddonForceWrap}\n disableLeftAddonCenteredMedia={disableLeftAddonCenteredMedia}\n rightAddon={rightAddon}\n rightAddonType={rightAddonType}\n rightAddonPosition={rightAddonPosition}\n rightAddonForceWrap={rightAddonForceWrap}\n disableRightAddonCenteredMedia={disableRightAddonCenteredMedia}\n >\n {children}\n </ListItem>\n );\n});\n"],"names":["cnb","forwardRef","ListItem","useEnsuredId","bem","InputToggleIcon","SwitchTrack","noop","styles","menuItemInputToggle","options","className","type","switch","MenuItemInputToggle","props","ref","id","propId","disabled","checked","onCheckedChange","preventMenuHideOnClick","onClick","tabIndex","children","size","icon","propIcon","iconAfter","iconProps","iconStyle","iconClassName","checkedIcon","indeterminate","indeterminateIcon","addon","addonType","addonPosition","addonForceWrap","disableAddonCenteredMedia","ballProps","ballStyle","ballClassName","trackProps","trackStyle","trackClassName","remaining","style","active","disableEm","leftAddon","leftAddonType","leftAddonPosition","leftAddonForceWrap","disableLeftAddonCenteredMedia","rightAddon","rightAddonType","rightAddonPosition","rightAddonForceWrap","disableRightAddonCenteredMedia","aria-checked","role","event","stopPropagation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/form/MenuItemInputToggle.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n} from \"react\";\nimport { ListItem } from \"../list/ListItem.js\";\nimport {\n type ListItemAddonPosition,\n type ListItemAddonType,\n type ListItemHeight,\n} from \"../list/types.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { bem } from \"../utils/bem.js\";\nimport {\n type IndeterminateCheckboxProps,\n type InputToggleIconProps,\n} from \"./InputToggle.js\";\nimport { InputToggleIcon } from \"./InputToggleIcon.js\";\nimport { SwitchTrack } from \"./SwitchTrack.js\";\nimport { type InputToggleSize } from \"./inputToggleStyles.js\";\n\nconst noop = (): void => {\n // do nothing\n};\nconst styles = bem(\"rmd-menu-item-input-toggle\");\n\n/** @remarks \\@since 6.0.0 */\nexport interface MenuItemInputToggleClassNameOptions {\n className?: string;\n type: \"radio\" | \"checkbox\" | \"switch\";\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport function menuItemInputToggle(\n options: MenuItemInputToggleClassNameOptions\n): string {\n const { className, type } = options;\n return cnb(\n `rmd-${type}-menu-item`,\n styles({ switch: type === \"switch\" }),\n className\n );\n}\n\n/**\n * @remarks \\@since 6.0.0\n */\nexport type MenuItemInputToggleCheckedCallback = (\n checked: boolean,\n event: MouseEvent<HTMLLIElement>\n) => void;\n\n/** @remarks \\@since 2.8.0 */\nexport interface BaseMenuItemInputToggleProps\n extends HTMLAttributes<HTMLLIElement>,\n InputToggleIconProps {\n checked: boolean;\n onCheckedChange: MenuItemInputToggleCheckedCallback;\n\n /**\n * @defaultValue `\"menu-item-\" + useId()`\n */\n id?: string;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /**\n * Set this to `true` if the `Menu` should not close when the input toggle is\n * clicked. This can be useful when interacting with a checkbox group within a\n * menu or allowing the user to select multiple options before closing the\n * menu.\n *\n * @defaultValue `false`\n */\n preventMenuHideOnClick?: boolean;\n\n /**\n * This is set to `\"auto\"` by default so the icon shrinks back down to the\n * default icon size instead of relative to the current font size. You\n * probably don't want to change this since it'll also modify the height of\n * the menu item\n *\n * @defaultValue `\"auto\"`\n */\n size?: InputToggleSize;\n\n /** @defaultValue `\"auto\"` */\n height?: ListItemHeight;\n\n /** @defaultValue `false` */\n multiline?: boolean;\n\n /** @defaultValue `false` */\n disableTextChildren?: boolean;\n\n /** @defaultValue `false` */\n iconAfter?: boolean;\n\n addon?: ReactNode;\n addonType?: ListItemAddonType;\n addonPosition?: ListItemAddonPosition;\n\n /** @defaultValue `false` */\n addonForceWrap?: boolean;\n\n /** @defaultValue `false` */\n disableAddonCenteredMedia?: boolean;\n}\n\nexport interface MenuItemCheckboxProps\n extends BaseMenuItemInputToggleProps,\n IndeterminateCheckboxProps {}\n\nexport type MenuItemRadioProps = BaseMenuItemInputToggleProps;\n\n/**\n * @remarks\n * \\@since 2.8.0\n * \\@since 6.0.0 Added additional props for styling the track and ball.\n */\nexport interface MenuItemSwitchProps extends BaseMenuItemInputToggleProps {\n trackProps?: PropsWithRef<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n trackStyle?: CSSProperties;\n trackClassName?: string;\n ballProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n ballStyle?: CSSProperties;\n ballClassName?: string;\n}\n\n/**\n * @remarks\n * \\@since 2.8.0\n * \\@since 6.0.0 Updated to be a union of the different props to enforce the\n * correct props based on `type`\n */\nexport type MenuItemInputToggleProps =\n | (MenuItemCheckboxProps & { type: \"checkbox\" })\n | (MenuItemRadioProps & { type: \"radio\" })\n | (MenuItemSwitchProps & { type: \"switch\" });\n\n/**\n * **Client Component**\n *\n * This is a low-level component that should probably not be used externally and\n * instead the `MenuItemCheckbox`, `MenuItemRadio`, or `MenuItemSwitch` should\n * be used instead.\n *\n * @see {@link MenuItemCheckbox} for checkbox examples\n * @see {@link MenuItemRadio} for radio examples\n * @see {@link MenuItemSwitch} for switch examples\n * @remarks \\@since 2.8.0\n */\nexport const MenuItemInputToggle = forwardRef<\n HTMLLIElement,\n MenuItemInputToggleProps\n>(function MenuItemInputToggle(props, ref) {\n const {\n id: propId,\n type,\n disabled = false,\n checked,\n onCheckedChange,\n preventMenuHideOnClick = false,\n onClick = noop,\n className,\n tabIndex = -1,\n children,\n size = \"auto\",\n icon: propIcon,\n iconAfter = false,\n iconProps,\n iconStyle,\n iconClassName,\n checkedIcon,\n indeterminate,\n indeterminateIcon,\n addon,\n addonType,\n addonPosition,\n addonForceWrap,\n disableAddonCenteredMedia,\n ballProps,\n ballStyle,\n ballClassName,\n trackProps,\n trackStyle,\n trackClassName,\n ...remaining\n } = props as MenuItemSwitchProps &\n MenuItemCheckboxProps & { type: \"checkbox\" | \"radio\" | \"switch\" };\n const id = useEnsuredId(propId, \"menu-item\");\n\n let icon = propIcon;\n if (typeof propIcon === \"undefined\") {\n if (type === \"switch\") {\n icon = (\n <SwitchTrack\n style={trackStyle}\n {...trackProps}\n className={cnb(\n styles(\"track\"),\n trackClassName,\n trackProps?.className\n )}\n active={checked}\n ballProps={ballProps}\n ballStyle={ballStyle}\n ballClassName={cnb(styles(\"ball\"), ballClassName)}\n />\n );\n } else {\n icon = (\n <InputToggleIcon\n style={iconStyle}\n disableEm\n {...iconProps}\n className={cnb(styles(\"icon\"), iconClassName, iconProps?.className)}\n size={size}\n type={type}\n checked={checked}\n disabled={disabled}\n icon={propIcon}\n checkedIcon={checkedIcon}\n indeterminate={indeterminate}\n indeterminateIcon={indeterminateIcon}\n />\n );\n }\n }\n\n let leftAddon: ReactNode;\n let leftAddonType: ListItemAddonType | undefined;\n let leftAddonPosition: ListItemAddonPosition | undefined;\n let leftAddonForceWrap: boolean | undefined;\n let disableLeftAddonCenteredMedia: boolean | undefined;\n let rightAddon: ReactNode;\n let rightAddonType: ListItemAddonType | undefined;\n let rightAddonPosition: ListItemAddonPosition | undefined;\n let rightAddonForceWrap: boolean | undefined;\n let disableRightAddonCenteredMedia: boolean | undefined;\n if (iconAfter) {\n leftAddon = addon;\n leftAddonType = addonType;\n leftAddonPosition = addonPosition;\n leftAddonForceWrap = addonForceWrap;\n disableLeftAddonCenteredMedia = disableAddonCenteredMedia;\n rightAddon = icon;\n } else {\n leftAddon = icon;\n rightAddon = addon;\n rightAddonType = addonType;\n rightAddonPosition = addonPosition;\n rightAddonForceWrap = addonForceWrap;\n disableRightAddonCenteredMedia = disableAddonCenteredMedia;\n }\n\n return (\n <ListItem\n {...remaining}\n // I'm not actually sure if this is correct\n aria-checked={indeterminate && checked ? \"mixed\" : checked}\n id={id}\n role={type === \"radio\" ? \"menuitemradio\" : \"menuitemcheckbox\"}\n onClick={(event) => {\n onClick(event);\n onCheckedChange(!checked, event);\n\n if (preventMenuHideOnClick) {\n event.stopPropagation();\n }\n }}\n ref={ref}\n className={menuItemInputToggle({ type, className })}\n disabled={disabled}\n tabIndex={tabIndex}\n leftAddon={leftAddon}\n leftAddonType={leftAddonType}\n leftAddonPosition={leftAddonPosition}\n leftAddonForceWrap={leftAddonForceWrap}\n disableLeftAddonCenteredMedia={disableLeftAddonCenteredMedia}\n rightAddon={rightAddon}\n rightAddonType={rightAddonType}\n rightAddonPosition={rightAddonPosition}\n rightAddonForceWrap={rightAddonForceWrap}\n disableRightAddonCenteredMedia={disableRightAddonCenteredMedia}\n >\n {children}\n </ListItem>\n );\n});\n"],"names":["cnb","forwardRef","ListItem","useEnsuredId","bem","InputToggleIcon","SwitchTrack","noop","styles","menuItemInputToggle","options","className","type","switch","MenuItemInputToggle","props","ref","id","propId","disabled","checked","onCheckedChange","preventMenuHideOnClick","onClick","tabIndex","children","size","icon","propIcon","iconAfter","iconProps","iconStyle","iconClassName","checkedIcon","indeterminate","indeterminateIcon","addon","addonType","addonPosition","addonForceWrap","disableAddonCenteredMedia","ballProps","ballStyle","ballClassName","trackProps","trackStyle","trackClassName","remaining","style","active","disableEm","leftAddon","leftAddonType","leftAddonPosition","leftAddonForceWrap","disableLeftAddonCenteredMedia","rightAddon","rightAddonType","rightAddonPosition","rightAddonForceWrap","disableRightAddonCenteredMedia","aria-checked","role","event","stopPropagation"],"mappings":"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"}
|
package/dist/form/Select.js
CHANGED
|
@@ -203,7 +203,7 @@ const getNonDisabledOptions = (container)=>[
|
|
|
203
203
|
ref: containerRefCallback
|
|
204
204
|
};
|
|
205
205
|
const { onEntering, onEntered, onExiting, onExited, disableTransition } = menuProps;
|
|
206
|
-
const handleMounting = (callback = noop, skipped
|
|
206
|
+
const handleMounting = (callback = noop, skipped)=>(appearing)=>{
|
|
207
207
|
callback(appearing);
|
|
208
208
|
const menu = menuRef.current;
|
|
209
209
|
if (!menu || skipped) {
|
|
@@ -289,6 +289,11 @@ const getNonDisabledOptions = (container)=>[
|
|
|
289
289
|
onEntered: handleMounting(onEntered, !disableTransition),
|
|
290
290
|
onExiting: handleUnmounting(onExiting, false),
|
|
291
291
|
onExited: handleUnmounting(onExited, !disableTransition),
|
|
292
|
+
sheetProps: {
|
|
293
|
+
...menuProps.sheetProps,
|
|
294
|
+
onEntering: handleMounting(menuProps.sheetProps?.onEntering, false),
|
|
295
|
+
onEntered: handleMounting(menuProps.sheetProps?.onEntered, !disableTransition)
|
|
296
|
+
},
|
|
292
297
|
children: children
|
|
293
298
|
})
|
|
294
299
|
]
|
package/dist/form/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { Menu, type MenuProps } from \"../menu/Menu.js\";\nimport { findMatchIndex } from \"../movement/findMatchIndex.js\";\nimport {\n KeyboardMovementProvider,\n useKeyboardMovementProvider,\n} from \"../movement/useKeyboardMovementProvider.js\";\nimport { isSearchableEvent } from \"../movement/utils.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { loop } from \"../utils/loop.js\";\nimport { SelectValue } from \"./SelectValue.js\";\nimport { TextField, type TextFieldProps } from \"./TextField.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport {\n type FormFieldOptions,\n type UserAgentAutoCompleteProps,\n} from \"./types.js\";\nimport { ListboxProvider } from \"./useListboxProvider.js\";\nimport { triggerManualChangeEvent, tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\nconst getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example\n * Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @remarks \\@since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldProps, \"placeholder\" | \"type\" | \"onChange\">,\n UserAgentAutoCompleteProps,\n FormFieldOptions {\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?(event: SelectChangeEvent<Value>): void;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={containerId}`\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableValueAddon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: SelectProps<Value>\n): ReactElement {\n const {\n id: propId,\n className,\n active = false,\n inputRef: propInputRef,\n inputClassName,\n menuProps = {},\n containerProps: propContainerProps = {},\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n leftAddon,\n rightAddon: propRightAddon,\n disableValueAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { disabled = false, form } = props;\n\n const id = useEnsuredId(propId, \"select\");\n const containerId = useEnsuredId(propContainerProps.id, \"select-container\");\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n\n const { toggled: visible, enable: show, disable: hide } = useToggle();\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n const [containerRef, containerRefCallback] = useEnsuredRef(\n propContainerProps.ref\n );\n const [menuRef, menuRefCallback] = useEnsuredRef(menuProps.nodeRef);\n const [currentValue, setCurrentValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const initialValue = useRef(currentValue);\n\n useEffect(() => {\n const select = inputRef.current;\n if (!select) {\n return;\n }\n\n const formElement =\n select.closest<HTMLFormElement>(\"form\") ||\n (form && document.getElementById(form)) ||\n null;\n\n if (!formElement) {\n return;\n }\n\n const handleReset = (): void => {\n triggerManualChangeEvent(select, initialValue.current);\n };\n\n formElement.addEventListener(\"reset\", handleReset);\n return () => {\n formElement.removeEventListener(\"reset\", handleReset);\n };\n }, [form, inputRef]);\n\n const { options, searchValues, currentOption, currentIndex } =\n extractOptionsFromChildren(\n children,\n typeof value === \"undefined\" ? currentValue : value\n );\n const totalOptions = options.length - 1;\n\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n const listboxContext = useMemo(\n () => ({\n inputRef,\n currentValue: typeof value === \"undefined\" ? currentValue : value,\n disableSelectedIcon,\n }),\n [currentValue, disableSelectedIcon, inputRef, value]\n );\n\n // TODO: Need to update this to support editable listboxes where these props\n // would go to the input element instead of the container\n const a11yProps = {\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": visible,\n role: \"combobox\",\n tabIndex: disabled ? -1 : 0,\n } as const;\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<HTMLDivElement>({\n onFocus: propContainerProps.onFocus,\n onClick(event) {\n propContainerProps.onClick?.(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n onKeyDown(event) {\n propContainerProps.onKeyDown?.(event);\n if (disabled) {\n return;\n }\n\n if (visible) {\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n event.stopPropagation();\n hide();\n }\n\n return;\n }\n\n if (isSearchableEvent(event)) {\n event.stopPropagation();\n\n const nextIndex = findMatchIndex({\n value: event.key,\n values: searchValues,\n startIndex: event.shiftKey ? -1 : currentIndex,\n });\n\n if (nextIndex !== -1) {\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n }\n return;\n }\n\n switch (event.key) {\n case \" \":\n event.preventDefault();\n event.stopPropagation();\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n case \"Home\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== 0) {\n triggerManualChangeEvent(inputRef.current, options[0].value);\n }\n break;\n case \"End\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== totalOptions) {\n triggerManualChangeEvent(\n inputRef.current,\n options[totalOptions].value\n );\n }\n break;\n case \"ArrowDown\":\n case \"ArrowUp\": {\n event.preventDefault();\n event.stopPropagation();\n\n const increment = event.key === \"ArrowDown\";\n if (currentIndex === -1 && !increment) {\n // this matches the native select behavior where it will do\n // nothing if there is no current value\n return;\n }\n\n const nextIndex = loop({\n max: totalOptions,\n value: currentIndex,\n minmax: true,\n increment,\n });\n\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n break;\n }\n }\n },\n loopable: false,\n searchable: true,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getDefaultFocusedIndex(focusOptions) {\n if (typeof menuProps.getDefaultFocusedIndex === \"function\") {\n return menuProps.getDefaultFocusedIndex(focusOptions);\n }\n\n const val = typeof value === \"undefined\" ? currentValue : value;\n return options.findIndex((option) => option.value === val);\n },\n getFocusableElements() {\n const menu = menuRef.current;\n if (!menu) {\n return [];\n }\n\n return [\n ...menu.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n ];\n },\n });\n\n const containerProps: Required<SelectProps<Value>>[\"containerProps\"] = {\n ...propContainerProps,\n ...movementProps,\n ...a11yProps,\n ref: containerRefCallback,\n };\n\n const { onEntering, onEntered, onExiting, onExited, disableTransition } =\n menuProps;\n const handleMounting =\n (callback: TransitionEnterHandler | undefined = noop, skipped = false) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const menu = menuRef.current;\n if (!menu || skipped) {\n return;\n }\n\n // Since the keyboard movement behavior is tied to the\n // `TextFieldContainer` or `input` element instead of the menu for this\n // widget, the focus index and active descendant must manually be updated\n // whenever the menu becomes visible. Without this, no items will be\n // focused until the first keyboard event that would move focus\n const val = typeof value === \"undefined\" ? currentValue : value;\n const focusables = getNonDisabledOptions(menu);\n const index = Math.max(\n 0,\n options.findIndex((option) => option.value === val)\n );\n focusables[index].scrollIntoView({ block: \"nearest\" });\n currentFocusIndex.current = index;\n setActiveDescendantId(focusables[index]?.id || \"\");\n };\n\n const handleUnmounting =\n (callback: TransitionExitHandler | undefined = noop, skipped = false) =>\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 return (\n <ListboxProvider value={listboxContext}>\n <KeyboardMovementProvider value={movementContext}>\n <TextField\n {...remaining}\n aria-hidden\n id={id}\n ref={inputRefCallback}\n containerProps={containerProps}\n type=\"text\"\n tabIndex={-1}\n theme={theme}\n value={value}\n defaultValue={defaultValue}\n active={active || visible}\n leftAddon={leftAddon}\n rightAddon={rightAddon}\n className={cnb(\"rmd-select-container\", className)}\n inputClassName={select({\n theme,\n className: inputClassName,\n })}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const valueAsNumber = parseFloat(nextValue);\n const nextOption = options.find(\n (option) =>\n // need to compare both here since\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n option.value === nextValue || option.value === valueAsNumber\n );\n\n setCurrentValue(\n nextOption ? nextOption.value : initialValue.current\n );\n }}\n >\n <SelectValue disableAddon={disableValueAddon} {...currentOption} />\n </TextField>\n <Menu\n aria-labelledby={containerId}\n anchor={BELOW_CENTER_ANCHOR}\n role=\"listbox\"\n width=\"min\"\n {...menuProps}\n ref={menuRefCallback}\n visible={visible}\n fixedTo={containerRef}\n onRequestClose={hide}\n onEntering={handleMounting(onEntering, false)}\n onEntered={handleMounting(onEntered, !disableTransition)}\n onExiting={handleUnmounting(onExiting, false)}\n onExited={handleUnmounting(onExited, !disableTransition)}\n >\n {children}\n </Menu>\n </KeyboardMovementProvider>\n </ListboxProvider>\n );\n}\n"],"names":["cnb","useEffect","useMemo","useRef","useState","IconRotator","getIcon","Menu","findMatchIndex","KeyboardMovementProvider","useKeyboardMovementProvider","isSearchableEvent","BELOW_CENTER_ANCHOR","useEnsuredId","useEnsuredRef","useToggle","loop","SelectValue","TextField","getFormConfig","select","extractOptionsFromChildren","ListboxProvider","triggerManualChangeEvent","tryToSubmitRelatedForm","EMPTY_STRING","noop","getNonDisabledOptions","container","querySelectorAll","Select","props","id","propId","className","active","inputRef","propInputRef","inputClassName","menuProps","containerProps","propContainerProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","leftAddon","rightAddon","propRightAddon","disableValueAddon","disableSelectedIcon","children","remaining","disabled","form","containerId","toggled","visible","enable","show","disable","hide","inputRefCallback","containerRef","containerRefCallback","ref","menuRef","menuRefCallback","nodeRef","currentValue","setCurrentValue","initialValue","current","formElement","closest","document","getElementById","handleReset","addEventListener","removeEventListener","options","searchValues","currentOption","currentIndex","totalOptions","length","rotated","listboxContext","a11yProps","role","tabIndex","movementProps","movementContext","currentFocusIndex","setActiveDescendantId","onFocus","onClick","event","onKeyDown","key","stopPropagation","nextIndex","values","startIndex","shiftKey","preventDefault","increment","max","minmax","loopable","searchable","programmatic","includeDisabled","tabIndexBehavior","getDefaultFocusedIndex","focusOptions","val","findIndex","option","getFocusableElements","menu","onEntering","onEntered","onExiting","onExited","disableTransition","handleMounting","callback","skipped","appearing","focusables","index","Math","scrollIntoView","block","handleUnmounting","aria-hidden","type","nextValue","currentTarget","valueAsNumber","parseFloat","nextOption","find","disableAddon","aria-labelledby","anchor","width","fixedTo","onRequestClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { Menu, type MenuProps } from \"../menu/Menu.js\";\nimport { findMatchIndex } from \"../movement/findMatchIndex.js\";\nimport {\n KeyboardMovementProvider,\n useKeyboardMovementProvider,\n} from \"../movement/useKeyboardMovementProvider.js\";\nimport { isSearchableEvent } from \"../movement/utils.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { loop } from \"../utils/loop.js\";\nimport { SelectValue } from \"./SelectValue.js\";\nimport { TextField, type TextFieldProps } from \"./TextField.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport {\n type FormFieldOptions,\n type UserAgentAutoCompleteProps,\n} from \"./types.js\";\nimport { ListboxProvider } from \"./useListboxProvider.js\";\nimport { triggerManualChangeEvent, tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\nconst getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example\n * Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @remarks \\@since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldProps, \"placeholder\" | \"type\" | \"onChange\">,\n UserAgentAutoCompleteProps,\n FormFieldOptions {\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?(event: SelectChangeEvent<Value>): void;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={containerId}`\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableValueAddon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @remarks \\@since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: SelectProps<Value>\n): ReactElement {\n const {\n id: propId,\n className,\n active = false,\n inputRef: propInputRef,\n inputClassName,\n menuProps = {},\n containerProps: propContainerProps = {},\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n leftAddon,\n rightAddon: propRightAddon,\n disableValueAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { disabled = false, form } = props;\n\n const id = useEnsuredId(propId, \"select\");\n const containerId = useEnsuredId(propContainerProps.id, \"select-container\");\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n\n const { toggled: visible, enable: show, disable: hide } = useToggle();\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n const [containerRef, containerRefCallback] = useEnsuredRef(\n propContainerProps.ref\n );\n const [menuRef, menuRefCallback] = useEnsuredRef(menuProps.nodeRef);\n const [currentValue, setCurrentValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const initialValue = useRef(currentValue);\n\n useEffect(() => {\n const select = inputRef.current;\n if (!select) {\n return;\n }\n\n const formElement =\n select.closest<HTMLFormElement>(\"form\") ||\n (form && document.getElementById(form)) ||\n null;\n\n if (!formElement) {\n return;\n }\n\n const handleReset = (): void => {\n triggerManualChangeEvent(select, initialValue.current);\n };\n\n formElement.addEventListener(\"reset\", handleReset);\n return () => {\n formElement.removeEventListener(\"reset\", handleReset);\n };\n }, [form, inputRef]);\n\n const { options, searchValues, currentOption, currentIndex } =\n extractOptionsFromChildren(\n children,\n typeof value === \"undefined\" ? currentValue : value\n );\n const totalOptions = options.length - 1;\n\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n const listboxContext = useMemo(\n () => ({\n inputRef,\n currentValue: typeof value === \"undefined\" ? currentValue : value,\n disableSelectedIcon,\n }),\n [currentValue, disableSelectedIcon, inputRef, value]\n );\n\n // TODO: Need to update this to support editable listboxes where these props\n // would go to the input element instead of the container\n const a11yProps = {\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": visible,\n role: \"combobox\",\n tabIndex: disabled ? -1 : 0,\n } as const;\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<HTMLDivElement>({\n onFocus: propContainerProps.onFocus,\n onClick(event) {\n propContainerProps.onClick?.(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n onKeyDown(event) {\n propContainerProps.onKeyDown?.(event);\n if (disabled) {\n return;\n }\n\n if (visible) {\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n event.stopPropagation();\n hide();\n }\n\n return;\n }\n\n if (isSearchableEvent(event)) {\n event.stopPropagation();\n\n const nextIndex = findMatchIndex({\n value: event.key,\n values: searchValues,\n startIndex: event.shiftKey ? -1 : currentIndex,\n });\n\n if (nextIndex !== -1) {\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n }\n return;\n }\n\n switch (event.key) {\n case \" \":\n event.preventDefault();\n event.stopPropagation();\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n case \"Home\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== 0) {\n triggerManualChangeEvent(inputRef.current, options[0].value);\n }\n break;\n case \"End\":\n event.preventDefault();\n event.stopPropagation();\n if (currentIndex !== totalOptions) {\n triggerManualChangeEvent(\n inputRef.current,\n options[totalOptions].value\n );\n }\n break;\n case \"ArrowDown\":\n case \"ArrowUp\": {\n event.preventDefault();\n event.stopPropagation();\n\n const increment = event.key === \"ArrowDown\";\n if (currentIndex === -1 && !increment) {\n // this matches the native select behavior where it will do\n // nothing if there is no current value\n return;\n }\n\n const nextIndex = loop({\n max: totalOptions,\n value: currentIndex,\n minmax: true,\n increment,\n });\n\n triggerManualChangeEvent(inputRef.current, options[nextIndex].value);\n break;\n }\n }\n },\n loopable: false,\n searchable: true,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getDefaultFocusedIndex(focusOptions) {\n if (typeof menuProps.getDefaultFocusedIndex === \"function\") {\n return menuProps.getDefaultFocusedIndex(focusOptions);\n }\n\n const val = typeof value === \"undefined\" ? currentValue : value;\n return options.findIndex((option) => option.value === val);\n },\n getFocusableElements() {\n const menu = menuRef.current;\n if (!menu) {\n return [];\n }\n\n return [\n ...menu.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n ];\n },\n });\n\n const containerProps: Required<SelectProps<Value>>[\"containerProps\"] = {\n ...propContainerProps,\n ...movementProps,\n ...a11yProps,\n ref: containerRefCallback,\n };\n\n const { onEntering, onEntered, onExiting, onExited, disableTransition } =\n menuProps;\n const handleMounting =\n (callback: TransitionEnterHandler | undefined = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const menu = menuRef.current;\n if (!menu || skipped) {\n return;\n }\n\n // Since the keyboard movement behavior is tied to the\n // `TextFieldContainer` or `input` element instead of the menu for this\n // widget, the focus index and active descendant must manually be updated\n // whenever the menu becomes visible. Without this, no items will be\n // focused until the first keyboard event that would move focus\n const val = typeof value === \"undefined\" ? currentValue : value;\n const focusables = getNonDisabledOptions(menu);\n const index = Math.max(\n 0,\n options.findIndex((option) => option.value === val)\n );\n focusables[index].scrollIntoView({ block: \"nearest\" });\n currentFocusIndex.current = index;\n setActiveDescendantId(focusables[index]?.id || \"\");\n };\n\n const handleUnmounting =\n (callback: TransitionExitHandler | undefined = noop, skipped = false) =>\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 return (\n <ListboxProvider value={listboxContext}>\n <KeyboardMovementProvider value={movementContext}>\n <TextField\n {...remaining}\n aria-hidden\n id={id}\n ref={inputRefCallback}\n containerProps={containerProps}\n type=\"text\"\n tabIndex={-1}\n theme={theme}\n value={value}\n defaultValue={defaultValue}\n active={active || visible}\n leftAddon={leftAddon}\n rightAddon={rightAddon}\n className={cnb(\"rmd-select-container\", className)}\n inputClassName={select({\n theme,\n className: inputClassName,\n })}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const valueAsNumber = parseFloat(nextValue);\n const nextOption = options.find(\n (option) =>\n // need to compare both here since\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n option.value === nextValue || option.value === valueAsNumber\n );\n\n setCurrentValue(\n nextOption ? nextOption.value : initialValue.current\n );\n }}\n >\n <SelectValue disableAddon={disableValueAddon} {...currentOption} />\n </TextField>\n <Menu\n aria-labelledby={containerId}\n anchor={BELOW_CENTER_ANCHOR}\n role=\"listbox\"\n width=\"min\"\n {...menuProps}\n ref={menuRefCallback}\n visible={visible}\n fixedTo={containerRef}\n onRequestClose={hide}\n onEntering={handleMounting(onEntering, false)}\n onEntered={handleMounting(onEntered, !disableTransition)}\n onExiting={handleUnmounting(onExiting, false)}\n onExited={handleUnmounting(onExited, !disableTransition)}\n sheetProps={{\n ...menuProps.sheetProps,\n onEntering: handleMounting(menuProps.sheetProps?.onEntering, false),\n onEntered: handleMounting(\n menuProps.sheetProps?.onEntered,\n !disableTransition\n ),\n }}\n >\n {children}\n </Menu>\n </KeyboardMovementProvider>\n </ListboxProvider>\n );\n}\n"],"names":["cnb","useEffect","useMemo","useRef","useState","IconRotator","getIcon","Menu","findMatchIndex","KeyboardMovementProvider","useKeyboardMovementProvider","isSearchableEvent","BELOW_CENTER_ANCHOR","useEnsuredId","useEnsuredRef","useToggle","loop","SelectValue","TextField","getFormConfig","select","extractOptionsFromChildren","ListboxProvider","triggerManualChangeEvent","tryToSubmitRelatedForm","EMPTY_STRING","noop","getNonDisabledOptions","container","querySelectorAll","Select","props","id","propId","className","active","inputRef","propInputRef","inputClassName","menuProps","containerProps","propContainerProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","leftAddon","rightAddon","propRightAddon","disableValueAddon","disableSelectedIcon","children","remaining","disabled","form","containerId","toggled","visible","enable","show","disable","hide","inputRefCallback","containerRef","containerRefCallback","ref","menuRef","menuRefCallback","nodeRef","currentValue","setCurrentValue","initialValue","current","formElement","closest","document","getElementById","handleReset","addEventListener","removeEventListener","options","searchValues","currentOption","currentIndex","totalOptions","length","rotated","listboxContext","a11yProps","role","tabIndex","movementProps","movementContext","currentFocusIndex","setActiveDescendantId","onFocus","onClick","event","onKeyDown","key","stopPropagation","nextIndex","values","startIndex","shiftKey","preventDefault","increment","max","minmax","loopable","searchable","programmatic","includeDisabled","tabIndexBehavior","getDefaultFocusedIndex","focusOptions","val","findIndex","option","getFocusableElements","menu","onEntering","onEntered","onExiting","onExited","disableTransition","handleMounting","callback","skipped","appearing","focusables","index","Math","scrollIntoView","block","handleUnmounting","aria-hidden","type","nextValue","currentTarget","valueAsNumber","parseFloat","nextOption","find","disableAddon","aria-labelledby","anchor","width","fixedTo","onRequestClose","sheetProps"],"mappings":"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"}
|
package/dist/form/_form.scss
CHANGED
|
@@ -427,8 +427,14 @@ $variables: (
|
|
|
427
427
|
}
|
|
428
428
|
|
|
429
429
|
@mixin file-input-styles {
|
|
430
|
-
|
|
431
|
-
|
|
430
|
+
@if utils.$disable-has-selectors or utils.$disable-focus-visible {
|
|
431
|
+
.rmd-file-input:focus-within::before {
|
|
432
|
+
@include utils.keyboard-only {
|
|
433
|
+
@include interaction.focus-styles;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
} @else {
|
|
437
|
+
.rmd-file-input:has(:focus-visible)::before {
|
|
432
438
|
@include interaction.focus-styles;
|
|
433
439
|
}
|
|
434
440
|
}
|
|
@@ -1193,7 +1199,14 @@ $variables: (
|
|
|
1193
1199
|
@mixin input-toggle-styles {
|
|
1194
1200
|
.rmd-input-toggle {
|
|
1195
1201
|
@include interaction.surface(
|
|
1196
|
-
$focus-selector:
|
|
1202
|
+
$focus-selector:
|
|
1203
|
+
if(
|
|
1204
|
+
utils.$disable-has-selectors or utils.$disable-focus-visible,
|
|
1205
|
+
"&:focus-within",
|
|
1206
|
+
"&:has(:focus-visible)"
|
|
1207
|
+
),
|
|
1208
|
+
$keyboard-only-focus: utils.$disable-has-selectors or
|
|
1209
|
+
utils.$disable-focus-visible,
|
|
1197
1210
|
$disabled-selector: "&--disabled",
|
|
1198
1211
|
$higher-contrast: false
|
|
1199
1212
|
);
|
|
@@ -1280,8 +1293,14 @@ $variables: (
|
|
|
1280
1293
|
}
|
|
1281
1294
|
|
|
1282
1295
|
&__input {
|
|
1283
|
-
@
|
|
1284
|
-
|
|
1296
|
+
@if utils.$disable-focus-visible {
|
|
1297
|
+
@include utils.keyboard-only {
|
|
1298
|
+
&:focus + .rmd-switch__ball::before {
|
|
1299
|
+
@include interaction.focus-styles;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
} @else {
|
|
1303
|
+
&:focus-visible + .rmd-switch__ball::before {
|
|
1285
1304
|
@include interaction.focus-styles;
|
|
1286
1305
|
}
|
|
1287
1306
|
}
|
|
@@ -1613,18 +1632,6 @@ $variables: (
|
|
|
1613
1632
|
background-color,
|
|
1614
1633
|
if($slider-track-color, slider-color, slider-active-color)
|
|
1615
1634
|
);
|
|
1616
|
-
@include utils.keyboard-only {
|
|
1617
|
-
&:focus::after {
|
|
1618
|
-
transform: scale($slider-thumb-focus-scale);
|
|
1619
|
-
}
|
|
1620
|
-
}
|
|
1621
|
-
@include utils.touch-only {
|
|
1622
|
-
&:hover::after,
|
|
1623
|
-
&--active:after,
|
|
1624
|
-
&--active:hover::after {
|
|
1625
|
-
transform: none;
|
|
1626
|
-
}
|
|
1627
|
-
}
|
|
1628
1635
|
|
|
1629
1636
|
border-radius: $slider-thumb-border-radius;
|
|
1630
1637
|
height: $slider-thumb-size;
|
|
@@ -1642,13 +1649,24 @@ $variables: (
|
|
|
1642
1649
|
$slider-transition-timing-function;
|
|
1643
1650
|
}
|
|
1644
1651
|
|
|
1645
|
-
|
|
1646
|
-
|
|
1652
|
+
@if utils.$disable-focus-visible {
|
|
1653
|
+
@include utils.keyboard-only {
|
|
1654
|
+
&:focus::after {
|
|
1655
|
+
transform: scale($slider-thumb-focus-scale);
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
} @else {
|
|
1659
|
+
&:focus-visible::after {
|
|
1660
|
+
transform: scale($slider-thumb-focus-scale);
|
|
1661
|
+
}
|
|
1647
1662
|
}
|
|
1648
1663
|
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1664
|
+
@include utils.mouse-hover(false) {
|
|
1665
|
+
&:hover::after,
|
|
1666
|
+
&--active::after,
|
|
1667
|
+
&--active:hover::after {
|
|
1668
|
+
transform: scale($slider-thumb-active-scale);
|
|
1669
|
+
}
|
|
1652
1670
|
}
|
|
1653
1671
|
|
|
1654
1672
|
&--animate {
|
package/dist/icon/IconRotator.js
CHANGED
|
@@ -8,7 +8,7 @@ import { iconRotator } from "./styles.js";
|
|
|
8
8
|
* The `IconRotator` is a simple component that is used to rotate an icon from a
|
|
9
9
|
* one degrees to another.
|
|
10
10
|
*/ export const IconRotator = /*#__PURE__*/ forwardRef(function IconRotator(props, ref) {
|
|
11
|
-
const {
|
|
11
|
+
const { className: propClassName, rotated, children, forceIconWrap = false, disableTransition = false, ...remaining } = props;
|
|
12
12
|
const className = iconRotator({
|
|
13
13
|
rotated,
|
|
14
14
|
className: propClassName,
|
|
@@ -22,9 +22,8 @@ import { iconRotator } from "./styles.js";
|
|
|
22
22
|
}
|
|
23
23
|
return /*#__PURE__*/ _jsx("span", {
|
|
24
24
|
...remaining,
|
|
25
|
-
style: style,
|
|
26
|
-
className: className,
|
|
27
25
|
ref: ref,
|
|
26
|
+
className: className,
|
|
28
27
|
children: children
|
|
29
28
|
});
|
|
30
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/icon/IconRotator.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { iconRotator, type IconRotatorClassNameOptions } from \"./styles.js\";\n\n/**\n * @remarks \\@since 6.0.0 Removed `animate` prop and added `disableTransition`\n */\nexport interface IconRotatorBaseProps\n extends HTMLAttributes<HTMLSpanElement>,\n IconRotatorClassNameOptions {\n /**\n * An optional style to apply to the surrounding span when the `forceIconWrap`\n * prop is enabled or the children is not a single react element.\n */\n style?: CSSProperties;\n\n /**\n * Boolean if the child icon should be \"forcefully\" wrapped in a `<span>`\n * element. This should be enabled if you have a custom icon that does not\n * pass the `className` prop down.\n *\n * @defaultValue `false`\n */\n forceIconWrap?: boolean;\n}\n\nexport interface IconRotatorProps extends IconRotatorBaseProps {\n /**\n * The icon that should be rotated. If this is a valid React Element, the\n * class names will be cloned into that icon, otherwise the icon will be\n * wrapped in a span with the correct class names applied.\n */\n children: ReactNode;\n}\n\n/**\n * **Server Component**\n *\n * The `IconRotator` is a simple component that is used to rotate an icon from a\n * one degrees to another.\n */\nexport const IconRotator = forwardRef<HTMLSpanElement, IconRotatorProps>(\n function IconRotator(props, ref) {\n const {\n
|
|
1
|
+
{"version":3,"sources":["../../src/icon/IconRotator.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { iconRotator, type IconRotatorClassNameOptions } from \"./styles.js\";\n\n/**\n * @remarks \\@since 6.0.0 Removed `animate` prop and added `disableTransition`\n */\nexport interface IconRotatorBaseProps\n extends HTMLAttributes<HTMLSpanElement>,\n IconRotatorClassNameOptions {\n /**\n * An optional style to apply to the surrounding span when the `forceIconWrap`\n * prop is enabled or the children is not a single react element.\n */\n style?: CSSProperties;\n\n /**\n * Boolean if the child icon should be \"forcefully\" wrapped in a `<span>`\n * element. This should be enabled if you have a custom icon that does not\n * pass the `className` prop down.\n *\n * @defaultValue `false`\n */\n forceIconWrap?: boolean;\n}\n\nexport interface IconRotatorProps extends IconRotatorBaseProps {\n /**\n * The icon that should be rotated. If this is a valid React Element, the\n * class names will be cloned into that icon, otherwise the icon will be\n * wrapped in a span with the correct class names applied.\n */\n children: ReactNode;\n}\n\n/**\n * **Server Component**\n *\n * The `IconRotator` is a simple component that is used to rotate an icon from a\n * one degrees to another.\n */\nexport const IconRotator = forwardRef<HTMLSpanElement, IconRotatorProps>(\n function IconRotator(props, ref) {\n const {\n className: propClassName,\n rotated,\n children,\n forceIconWrap = false,\n disableTransition = false,\n ...remaining\n } = props;\n\n const className = iconRotator({\n rotated,\n className: propClassName,\n disableTransition,\n });\n if (!forceIconWrap && isValidElement<{ className?: string }>(children)) {\n const child = Children.only(children);\n return cloneElement(child, {\n className: cnb(className, child.props.className),\n });\n }\n\n return (\n <span {...remaining} ref={ref} className={className}>\n {children}\n </span>\n );\n }\n);\n"],"names":["cnb","Children","cloneElement","forwardRef","isValidElement","iconRotator","IconRotator","props","ref","className","propClassName","rotated","children","forceIconWrap","disableTransition","remaining","child","only","span"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SACEC,QAAQ,EACRC,YAAY,EACZC,UAAU,EACVC,cAAc,QAIT,QAAQ;AACf,SAASC,WAAW,QAA0C,cAAc;AAiC5E;;;;;CAKC,GACD,OAAO,MAAMC,4BAAcH,WACzB,SAASG,YAAYC,KAAK,EAAEC,GAAG;IAC7B,MAAM,EACJC,WAAWC,aAAa,EACxBC,OAAO,EACPC,QAAQ,EACRC,gBAAgB,KAAK,EACrBC,oBAAoB,KAAK,EACzB,GAAGC,WACJ,GAAGR;IAEJ,MAAME,YAAYJ,YAAY;QAC5BM;QACAF,WAAWC;QACXI;IACF;IACA,IAAI,CAACD,+BAAiBT,eAAuCQ,WAAW;QACtE,MAAMI,QAAQf,SAASgB,IAAI,CAACL;QAC5B,qBAAOV,aAAac,OAAO;YACzBP,WAAWT,IAAIS,WAAWO,MAAMT,KAAK,CAACE,SAAS;QACjD;IACF;IAEA,qBACE,KAACS;QAAM,GAAGH,SAAS;QAAEP,KAAKA;QAAKC,WAAWA;kBACvCG;;AAGP,GACA"}
|
package/dist/icon/_icon.scss
CHANGED
|
@@ -108,6 +108,11 @@ $variables: (
|
|
|
108
108
|
@include set-var(symbol-weight, $symbol-weight);
|
|
109
109
|
@include set-var(symbol-optical-size, $symbol-optical-size);
|
|
110
110
|
}
|
|
111
|
+
|
|
112
|
+
@if not $disable-rotator {
|
|
113
|
+
@include set-var(rotate-from, $rotate-from);
|
|
114
|
+
@include set-var(rotate-to, $rotate-to);
|
|
115
|
+
}
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
@mixin styles {
|
|
@@ -170,13 +175,13 @@ $variables: (
|
|
|
170
175
|
|
|
171
176
|
@if not $disable-spacing-above {
|
|
172
177
|
&--above {
|
|
173
|
-
@include use-var(margin-
|
|
178
|
+
@include use-var(margin-bottom, spacing);
|
|
174
179
|
}
|
|
175
180
|
}
|
|
176
181
|
|
|
177
182
|
@if not $disable-spacing-below {
|
|
178
183
|
&--below {
|
|
179
|
-
@include use-var(margin-
|
|
184
|
+
@include use-var(margin-top, spacing);
|
|
180
185
|
}
|
|
181
186
|
}
|
|
182
187
|
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export * from "./button/AsyncButton.js";
|
|
|
13
13
|
export * from "./button/Button.js";
|
|
14
14
|
export * from "./button/ButtonUnstyled.js";
|
|
15
15
|
export * from "./button/FloatingActionButton.js";
|
|
16
|
+
export * from "./button/TooltippedButton.js";
|
|
16
17
|
export * from "./button/buttonStyles.js";
|
|
17
18
|
export * from "./button/buttonUnstyledStyles.js";
|
|
18
19
|
export * from "./card/Card.js";
|
|
@@ -21,6 +22,7 @@ export * from "./card/CardFooter.js";
|
|
|
21
22
|
export * from "./card/CardHeader.js";
|
|
22
23
|
export * from "./card/CardSubtitle.js";
|
|
23
24
|
export * from "./card/CardTitle.js";
|
|
25
|
+
export * from "./card/ClickableCard.js";
|
|
24
26
|
export * from "./card/styles.js";
|
|
25
27
|
export * from "./chip/Chip.js";
|
|
26
28
|
export * from "./chip/styles.js";
|
|
@@ -257,6 +259,7 @@ export * from "./transition/Slide.js";
|
|
|
257
259
|
export * from "./transition/SlideContainer.js";
|
|
258
260
|
export * from "./transition/config.js";
|
|
259
261
|
export * from "./transition/maxWidthTransition.js";
|
|
262
|
+
export * from "./transition/skeletonPlaceholderUtils.js";
|
|
260
263
|
export * from "./transition/types.js";
|
|
261
264
|
export * from "./transition/useCSSTransition.js";
|
|
262
265
|
export * from "./transition/useCarousel.js";
|
|
@@ -288,6 +291,7 @@ export * from "./typography/WritingDirectionProvider.js";
|
|
|
288
291
|
export * from "./useAsyncAction.js";
|
|
289
292
|
export * from "./useDebouncedFunction.js";
|
|
290
293
|
export * from "./useDropzone.js";
|
|
294
|
+
export * from "./useElementSize.js";
|
|
291
295
|
export * from "./useEnsuredId.js";
|
|
292
296
|
export * from "./useEnsuredRef.js";
|
|
293
297
|
export * from "./useHtmlClassName.js";
|
|
@@ -308,6 +312,7 @@ export * from "./utils/applyRef.js";
|
|
|
308
312
|
export * from "./utils/bem.js";
|
|
309
313
|
export * from "./utils/filters.js";
|
|
310
314
|
export * from "./utils/getClientPosition.js";
|
|
315
|
+
export * from "./utils/getMiddleOfRange.js";
|
|
311
316
|
export * from "./utils/getPercentage.js";
|
|
312
317
|
export * from "./utils/getRangeDefaultValue.js";
|
|
313
318
|
export * from "./utils/getRangeSteps.js";
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export * from "./button/AsyncButton.js";
|
|
|
13
13
|
export * from "./button/Button.js";
|
|
14
14
|
export * from "./button/ButtonUnstyled.js";
|
|
15
15
|
export * from "./button/FloatingActionButton.js";
|
|
16
|
+
export * from "./button/TooltippedButton.js";
|
|
16
17
|
export * from "./button/buttonStyles.js";
|
|
17
18
|
export * from "./button/buttonUnstyledStyles.js";
|
|
18
19
|
export * from "./card/Card.js";
|
|
@@ -21,6 +22,7 @@ export * from "./card/CardFooter.js";
|
|
|
21
22
|
export * from "./card/CardHeader.js";
|
|
22
23
|
export * from "./card/CardSubtitle.js";
|
|
23
24
|
export * from "./card/CardTitle.js";
|
|
25
|
+
export * from "./card/ClickableCard.js";
|
|
24
26
|
export * from "./card/styles.js";
|
|
25
27
|
export * from "./chip/Chip.js";
|
|
26
28
|
export * from "./chip/styles.js";
|
|
@@ -256,6 +258,7 @@ export * from "./transition/Slide.js";
|
|
|
256
258
|
export * from "./transition/SlideContainer.js";
|
|
257
259
|
export * from "./transition/config.js";
|
|
258
260
|
export * from "./transition/maxWidthTransition.js";
|
|
261
|
+
export * from "./transition/skeletonPlaceholderUtils.js";
|
|
259
262
|
export * from "./transition/types.js";
|
|
260
263
|
export * from "./transition/useCSSTransition.js";
|
|
261
264
|
export * from "./transition/useCarousel.js";
|
|
@@ -287,6 +290,7 @@ export * from "./typography/WritingDirectionProvider.js";
|
|
|
287
290
|
export * from "./useAsyncAction.js";
|
|
288
291
|
export * from "./useDebouncedFunction.js";
|
|
289
292
|
export * from "./useDropzone.js";
|
|
293
|
+
export * from "./useElementSize.js";
|
|
290
294
|
export * from "./useEnsuredId.js";
|
|
291
295
|
export * from "./useEnsuredRef.js";
|
|
292
296
|
export * from "./useHtmlClassName.js";
|
|
@@ -307,6 +311,7 @@ export * from "./utils/applyRef.js";
|
|
|
307
311
|
export * from "./utils/bem.js";
|
|
308
312
|
export * from "./utils/filters.js";
|
|
309
313
|
export * from "./utils/getClientPosition.js";
|
|
314
|
+
export * from "./utils/getMiddleOfRange.js";
|
|
310
315
|
export * from "./utils/getPercentage.js";
|
|
311
316
|
export * from "./utils/getRangeDefaultValue.js";
|
|
312
317
|
export * from "./utils/getRangeSteps.js";
|