@smwb/ui-react 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_LESS_OVERRIDES.md +84 -21
- package/AI_THEMING.md +72 -28
- package/README.md +681 -0
- package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
- package/dist/assets/styles/less/components/button/button.entry.css +1 -1
- package/dist/assets/styles/less/components/card/card.entry.css +1 -1
- package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
- package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
- package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
- package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
- package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -0
- package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
- package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
- package/dist/assets/styles/less/components/list/list.entry.css +1 -1
- package/dist/assets/styles/less/components/menu/menu.entry.css +1 -1
- package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -1
- package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
- package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
- package/dist/assets/styles/less/components/rating/rating.entry.css +1 -1
- package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
- package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
- package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
- package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
- package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
- package/dist/assets/styles/less/components/table/table.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
- package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
- package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
- package/dist/assets/styles/less/components/thumbCard/thumbCard.entry.css +1 -1
- package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
- package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
- package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
- package/dist/assets/styles/less/connects/rt/table.entry.css +1 -1
- package/dist/assets/styles/less/tokens.entry.css +1 -1
- package/dist/components/base/icon/icon.d.ts +6 -2
- package/dist/components/base/icon/icon.js +49 -37
- package/dist/components/base/icon/icon.js.map +1 -1
- package/dist/components/base/ripple/ripple.d.ts +3 -0
- package/dist/components/base/ripple/ripple.js +38 -23
- package/dist/components/base/ripple/ripple.js.map +1 -1
- package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
- package/dist/components/dataDisplay/avatar/avatar.js +50 -37
- package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/components/dataDisplay/badge/badge.js +37 -28
- package/dist/components/dataDisplay/badge/badge.js.map +1 -1
- package/dist/components/dataDisplay/card/card.d.ts +30 -2
- package/dist/components/dataDisplay/card/card.js +50 -23
- package/dist/components/dataDisplay/card/card.js.map +1 -1
- package/dist/components/dataDisplay/carousel/carousel.js +70 -70
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/chart/chart.d.ts +2 -0
- package/dist/components/dataDisplay/chart/chart.js +66 -53
- package/dist/components/dataDisplay/chart/chart.js.map +1 -1
- package/dist/components/dataDisplay/chat/chat.d.ts +43 -1
- package/dist/components/dataDisplay/chat/chat.js +179 -150
- package/dist/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
- package/dist/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatIconButton.d.ts +1 -1
- package/dist/components/dataDisplay/chat/chatIconButton.js +30 -26
- package/dist/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatLayout.d.ts +3 -1
- package/dist/components/dataDisplay/chat/chatLayout.js +56 -55
- package/dist/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatOverlayLayout.d.ts +3 -1
- package/dist/components/dataDisplay/chat/index.d.ts +1 -1
- package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
- package/dist/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/components/dataDisplay/chip/chip.d.ts +31 -0
- package/dist/components/dataDisplay/chip/chip.js +110 -83
- package/dist/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/components/dataDisplay/chipGroup/chipGroup.js +34 -30
- package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/components/dataDisplay/dagView/dagLayout.d.ts +74 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/components/dataDisplay/dagView/dagView.d.ts +157 -0
- package/dist/components/dataDisplay/dagView/dagView.js +543 -0
- package/dist/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/components/dataDisplay/dagView/index.d.ts +4 -0
- package/dist/components/dataDisplay/dagView/panZoom.d.ts +75 -0
- package/dist/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +11 -3
- package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/components/dataDisplay/diffStat/diffStat.d.ts +54 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js +63 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/components/dataDisplay/kanban/kanban.d.ts +6 -0
- package/dist/components/dataDisplay/kanban/kanban.js +46 -35
- package/dist/components/dataDisplay/kanban/kanban.js.map +1 -1
- package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
- package/dist/components/dataDisplay/kbd/kbd.d.ts +40 -0
- package/dist/components/dataDisplay/kbd/kbd.js +27 -0
- package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/components/dataDisplay/lazyImage/lazyImage.js +31 -30
- package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/components/dataDisplay/list/list.d.ts +2 -0
- package/dist/components/dataDisplay/list/list.js +15 -14
- package/dist/components/dataDisplay/list/list.js.map +1 -1
- package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
- package/dist/components/dataDisplay/list/listItem.js +47 -24
- package/dist/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/components/dataDisplay/meter/meter.d.ts +2 -0
- package/dist/components/dataDisplay/meter/meter.js +24 -23
- package/dist/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/components/dataDisplay/personChip/personChip.d.ts +2 -0
- package/dist/components/dataDisplay/personChip/personChip.js +39 -27
- package/dist/components/dataDisplay/personChip/personChip.js.map +1 -1
- package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
- package/dist/components/dataDisplay/qrCode/qrCode.d.ts +28 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js +78 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/components/dataDisplay/stat/stat.d.ts +2 -0
- package/dist/components/dataDisplay/stat/stat.js +25 -13
- package/dist/components/dataDisplay/stat/stat.js.map +1 -1
- package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
- package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js +30 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +53 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js +357 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/components/dataDisplay/table/table.d.ts +16 -1
- package/dist/components/dataDisplay/table/table.js +40 -36
- package/dist/components/dataDisplay/table/table.js.map +1 -1
- package/dist/components/dataDisplay/table/tableBody.js +10 -4
- package/dist/components/dataDisplay/table/tableBody.js.map +1 -1
- package/dist/components/dataDisplay/table/tableCell.d.ts +10 -2
- package/dist/components/dataDisplay/table/tableCell.js +20 -13
- package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableColumns.d.ts +83 -0
- package/dist/components/dataDisplay/table/tableColumns.js +112 -0
- package/dist/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/components/dataDisplay/table/tableHead.js +9 -3
- package/dist/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/components/dataDisplay/table/tableHeadCell.d.ts +24 -3
- package/dist/components/dataDisplay/table/tableHeadCell.js +60 -65
- package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableRow.d.ts +3 -1
- package/dist/components/dataDisplay/table/tableRow.js +28 -16
- package/dist/components/dataDisplay/table/tableRow.js.map +1 -1
- package/dist/components/dataDisplay/thumbCard/thumbCard.d.ts +44 -3
- package/dist/components/dataDisplay/thumbCard/thumbCard.js +79 -59
- package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/components/dataDisplay/treeView/treeView.d.ts +19 -1
- package/dist/components/dataDisplay/treeView/treeView.js +113 -91
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/feedBack/emptyState/emptyState.d.ts +2 -0
- package/dist/components/feedBack/emptyState/emptyState.js +22 -12
- package/dist/components/feedBack/emptyState/emptyState.js.map +1 -1
- package/dist/components/feedBack/message/message.d.ts +2 -0
- package/dist/components/feedBack/message/message.js +30 -19
- package/dist/components/feedBack/message/message.js.map +1 -1
- package/dist/components/feedBack/modal/modal.js +84 -63
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/feedBack/skeleton/skeleton.d.ts +10 -2
- package/dist/components/feedBack/skeleton/skeleton.js +37 -34
- package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/components/feedBack/snackbar/snackbar.js +104 -103
- package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/components/feedBack/tooltip/tooltip.d.ts +9 -1
- package/dist/components/feedBack/tooltip/tooltip.js +67 -47
- package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +15 -1
- package/dist/components/inputs/button/button.js +73 -63
- package/dist/components/inputs/button/button.js.map +1 -1
- package/dist/components/inputs/buttonGroups/buttonGroup.d.ts +2 -0
- package/dist/components/inputs/buttonGroups/buttonGroup.js +40 -36
- package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/components/inputs/checkbox/checkbox.d.ts +10 -0
- package/dist/components/inputs/checkbox/checkbox.js +84 -59
- package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/components/inputs/composer/composer.d.ts +149 -0
- package/dist/components/inputs/composer/composer.js +219 -0
- package/dist/components/inputs/composer/composer.js.map +1 -0
- package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
- package/dist/components/inputs/composer/composerFiles.js +19 -0
- package/dist/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
- package/dist/components/inputs/composer/composerKeys.js +7 -0
- package/dist/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/components/inputs/composer/index.d.ts +3 -0
- package/dist/components/inputs/datePicker/datePicker.js +170 -164
- package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerDay.d.ts +1 -1
- package/dist/components/inputs/datePicker/datePickerDay.js +52 -44
- package/dist/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerIconButton.d.ts +1 -1
- package/dist/components/inputs/datePicker/datePickerIconButton.js +32 -28
- package/dist/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/components/inputs/floatingButton/floatingButton.js +32 -30
- package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/components/inputs/radioButton/radioButton.d.ts +9 -0
- package/dist/components/inputs/radioButton/radioButton.js +77 -58
- package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/components/inputs/rating/rating.d.ts +8 -0
- package/dist/components/inputs/rating/rating.js +85 -70
- package/dist/components/inputs/rating/rating.js.map +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.d.ts +20 -1
- package/dist/components/inputs/selectField/dropdownMenu.js +266 -113
- package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/components/inputs/selectField/optionNavigation.d.ts +17 -0
- package/dist/components/inputs/selectField/optionNavigation.js +38 -0
- package/dist/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/components/inputs/selectField/selectField.d.ts +31 -1
- package/dist/components/inputs/selectField/selectField.js +358 -218
- package/dist/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/components/inputs/slider/slider.d.ts +22 -1
- package/dist/components/inputs/slider/slider.js +330 -261
- package/dist/components/inputs/slider/slider.js.map +1 -1
- package/dist/components/inputs/textField/textField.d.ts +7 -0
- package/dist/components/inputs/textField/textField.js +118 -100
- package/dist/components/inputs/textField/textField.js.map +1 -1
- package/dist/components/inputs/textField/textFieldWrapper.d.ts +15 -1
- package/dist/components/inputs/textField/textFieldWrapper.js +45 -34
- package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/components/inputs/timePicker/timePicker.js +91 -85
- package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/components/inputs/toggle/toggle.d.ts +4 -0
- package/dist/components/inputs/toggle/toggle.js +80 -61
- package/dist/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/components/inputs/valueSlider/valueSlider.d.ts +12 -0
- package/dist/components/inputs/valueSlider/valueSlider.js +23 -22
- package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/components/layout/appLayout/appLayout.d.ts +2 -0
- package/dist/components/layout/appLayout/appLayout.js +25 -24
- package/dist/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/components/layout/divider/divider.d.ts +2 -0
- package/dist/components/layout/divider/divider.js +23 -22
- package/dist/components/layout/divider/divider.js.map +1 -1
- package/dist/components/layout/floatingWindow/floatingWindow.d.ts +2 -0
- package/dist/components/layout/floatingWindow/floatingWindow.js +145 -139
- package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/components/layout/grid/grid.d.ts +12 -1
- package/dist/components/layout/grid/grid.js +51 -36
- package/dist/components/layout/grid/grid.js.map +1 -1
- package/dist/components/layout/page/page.d.ts +2 -0
- package/dist/components/layout/page/page.js +16 -8
- package/dist/components/layout/page/page.js.map +1 -1
- package/dist/components/layout/pageHeader/pageHeader.d.ts +2 -0
- package/dist/components/layout/pageHeader/pageHeader.js +22 -13
- package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/components/layout/sectionHeader/sectionHeader.d.ts +2 -0
- package/dist/components/layout/sectionHeader/sectionHeader.js +37 -27
- package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -1
- package/dist/components/layout/sheet/sheet.d.ts +14 -0
- package/dist/components/layout/sheet/sheet.js +148 -132
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/stack/stack.d.ts +2 -0
- package/dist/components/layout/stack/stack.js +29 -17
- package/dist/components/layout/stack/stack.js.map +1 -1
- package/dist/components/layout/tabGroups/index.d.ts +4 -0
- package/dist/components/layout/tabGroups/tabGroups.d.ts +94 -0
- package/dist/components/layout/tabGroups/tabGroups.js +783 -0
- package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/components/navigation/appBar/appBar.d.ts +24 -0
- package/dist/components/navigation/appBar/appBar.js +39 -33
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/bottomBar/bottomBar.js +81 -77
- package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +2 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js +29 -27
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/navigation/commandPalette/commandPalette.d.ts +111 -0
- package/dist/components/navigation/commandPalette/commandPalette.js +337 -0
- package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
- package/dist/components/navigation/commandPalette/index.d.ts +4 -0
- package/dist/components/navigation/menu/menu.d.ts +12 -0
- package/dist/components/navigation/menu/menu.js.map +1 -1
- package/dist/components/navigation/menu/menuContext.d.ts +2 -0
- package/dist/components/navigation/menu/menuContext.js.map +1 -1
- package/dist/components/navigation/menu/menuFloating.js +42 -30
- package/dist/components/navigation/menu/menuFloating.js.map +1 -1
- package/dist/components/navigation/menu/menuItem.d.ts +4 -0
- package/dist/components/navigation/menu/menuItem.js +60 -48
- package/dist/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/components/navigation/menu/menuList.d.ts +5 -1
- package/dist/components/navigation/menu/menuList.js +30 -19
- package/dist/components/navigation/menu/menuList.js.map +1 -1
- package/dist/components/navigation/menu/menuSubmenu.js +53 -40
- package/dist/components/navigation/menu/menuSubmenu.js.map +1 -1
- package/dist/components/navigation/pagination/pagination.d.ts +2 -0
- package/dist/components/navigation/pagination/pagination.js +51 -49
- package/dist/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
- package/dist/components/navigation/sidebar/sidebar.js +65 -62
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/components/navigation/stepper/stepper.d.ts +2 -0
- package/dist/components/navigation/stepper/stepper.js +37 -28
- package/dist/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/components/navigation/tabs/index.d.ts +3 -1
- package/dist/components/navigation/tabs/tab/tab.d.ts +88 -1
- package/dist/components/navigation/tabs/tab/tab.js +116 -35
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +19 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js +27 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +80 -4
- package/dist/components/navigation/tabs/tabs.js +369 -148
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
- package/dist/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/components/navigation/tabs/tabsContext.d.ts +11 -0
- package/dist/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/connects/rt/table/headerCellRenderer.d.ts +4 -1
- package/dist/connects/rt/table/headerCellRenderer.js +45 -15
- package/dist/connects/rt/table/headerCellRenderer.js.map +1 -1
- package/dist/connects/rt/table/table.d.ts +15 -1
- package/dist/connects/rt/table/table.js +125 -131
- package/dist/connects/rt/table/table.js.map +1 -1
- package/dist/headless/components/base/icon/icon.js +49 -37
- package/dist/headless/components/base/icon/icon.js.map +1 -1
- package/dist/headless/components/base/ripple/ripple.js +42 -27
- package/dist/headless/components/base/ripple/ripple.js.map +1 -1
- package/dist/headless/components/dataDisplay/avatar/avatar.js +51 -38
- package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/headless/components/dataDisplay/badge/badge.js +37 -28
- package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
- package/dist/headless/components/dataDisplay/card/card.js +50 -23
- package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/carousel.js +55 -55
- package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chat.js +179 -150
- package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js +30 -26
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatLayout.js +56 -55
- package/dist/headless/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/headless/components/dataDisplay/chip/chip.js +108 -81
- package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +35 -31
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js +541 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js +61 -0
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/headless/components/dataDisplay/kanban/kanban.js +45 -34
- package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -1
- package/dist/headless/components/dataDisplay/kbd/kbd.js +25 -0
- package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +30 -29
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/list.js +15 -14
- package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/listItem.js +47 -24
- package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/headless/components/dataDisplay/meter/meter.js +19 -18
- package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/headless/components/dataDisplay/personChip/personChip.js +39 -27
- package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -1
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js +76 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/headless/components/dataDisplay/stat/stat.js +27 -15
- package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js +28 -0
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +355 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/table.js +40 -36
- package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableBody.js +10 -4
- package/dist/headless/components/dataDisplay/table/tableBody.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableCell.js +20 -13
- package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableColumns.js +112 -0
- package/dist/headless/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/tableHead.js +9 -3
- package/dist/headless/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js +60 -65
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableRow.js +28 -16
- package/dist/headless/components/dataDisplay/table/tableRow.js.map +1 -1
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +78 -58
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/headless/components/dataDisplay/treeView/treeView.js +113 -91
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/feedBack/emptyState/emptyState.js +21 -11
- package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -1
- package/dist/headless/components/feedBack/message/message.js +31 -20
- package/dist/headless/components/feedBack/message/message.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +84 -63
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/feedBack/skeleton/skeleton.js +38 -35
- package/dist/headless/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/headless/components/feedBack/snackbar/snackbar.js +108 -107
- package/dist/headless/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/headless/components/feedBack/tooltip/tooltip.js +67 -47
- package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +73 -63
- package/dist/headless/components/inputs/button/button.js.map +1 -1
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js +40 -36
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/headless/components/inputs/checkbox/checkbox.js +85 -60
- package/dist/headless/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/headless/components/inputs/composer/composer.js +217 -0
- package/dist/headless/components/inputs/composer/composer.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerFiles.js +19 -0
- package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
- package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/headless/components/inputs/datePicker/datePicker.js +170 -164
- package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerDay.js +52 -44
- package/dist/headless/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js +32 -28
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/headless/components/inputs/floatingButton/floatingButton.js +32 -30
- package/dist/headless/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/headless/components/inputs/radioButton/radioButton.js +77 -58
- package/dist/headless/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/headless/components/inputs/rating/rating.js +85 -70
- package/dist/headless/components/inputs/rating/rating.js.map +1 -1
- package/dist/headless/components/inputs/selectField/dropdownMenu.js +266 -113
- package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/headless/components/inputs/selectField/optionNavigation.js +38 -0
- package/dist/headless/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/headless/components/inputs/selectField/selectField.js +358 -218
- package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/headless/components/inputs/slider/slider.js +330 -261
- package/dist/headless/components/inputs/slider/slider.js.map +1 -1
- package/dist/headless/components/inputs/textField/textField.js +118 -100
- package/dist/headless/components/inputs/textField/textField.js.map +1 -1
- package/dist/headless/components/inputs/textField/textFieldWrapper.js +45 -34
- package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/headless/components/inputs/timePicker/timePicker.js +91 -85
- package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/headless/components/inputs/toggle/toggle.js +79 -60
- package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/headless/components/inputs/valueSlider/valueSlider.js +25 -24
- package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/headless/components/layout/appLayout/appLayout.js +27 -26
- package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/headless/components/layout/divider/divider.js +18 -17
- package/dist/headless/components/layout/divider/divider.js.map +1 -1
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js +145 -139
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/headless/components/layout/grid/grid.js +48 -33
- package/dist/headless/components/layout/grid/grid.js.map +1 -1
- package/dist/headless/components/layout/page/page.js +15 -7
- package/dist/headless/components/layout/page/page.js.map +1 -1
- package/dist/headless/components/layout/pageHeader/pageHeader.js +20 -11
- package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js +36 -26
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -1
- package/dist/headless/components/layout/sheet/sheet.js +156 -140
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/layout/stack/stack.js +29 -17
- package/dist/headless/components/layout/stack/stack.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroups.js +781 -0
- package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/headless/components/navigation/appBar/appBar.js +35 -29
- package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/headless/components/navigation/bottomBar/bottomBar.js +81 -77
- package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +32 -30
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/headless/components/navigation/commandPalette/commandPalette.js +335 -0
- package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/headless/components/navigation/menu/menu.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuContext.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuFloating.js +42 -30
- package/dist/headless/components/navigation/menu/menuFloating.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuItem.js +60 -48
- package/dist/headless/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuList.js +30 -19
- package/dist/headless/components/navigation/menu/menuList.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuSubmenu.js +53 -40
- package/dist/headless/components/navigation/menu/menuSubmenu.js.map +1 -1
- package/dist/headless/components/navigation/pagination/pagination.js +51 -49
- package/dist/headless/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/headless/components/navigation/sidebar/sidebar.js +55 -52
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/navigation/stepper/stepper.js +42 -33
- package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +117 -36
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +25 -0
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabs.js +362 -141
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/headless/hooks/useDismissOnEscape.js +16 -0
- package/dist/headless/hooks/useDismissOnEscape.js.map +1 -0
- package/dist/headless/hooks/useFocusTrap.js +24 -20
- package/dist/headless/hooks/useFocusTrap.js.map +1 -1
- package/dist/headless/hooks/useHelperText.js +13 -0
- package/dist/headless/hooks/useHelperText.js.map +1 -0
- package/dist/headless/hooks/useKeyboardShortcut.js +19 -0
- package/dist/headless/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/headless/index.js +360 -316
- package/dist/headless/index.js.map +1 -1
- package/dist/headless/utils/controlProps.js +14 -0
- package/dist/headless/utils/controlProps.js.map +1 -0
- package/dist/headless/utils/keyboardShortcut.js +49 -0
- package/dist/headless/utils/keyboardShortcut.js.map +1 -0
- package/dist/headless/utils/linkAttrs.js +13 -0
- package/dist/headless/utils/linkAttrs.js.map +1 -0
- package/dist/headless/utils/overlayLayer.js +14 -7
- package/dist/headless/utils/overlayLayer.js.map +1 -1
- package/dist/headless/utils/ownClick.js +40 -0
- package/dist/headless/utils/ownClick.js.map +1 -0
- package/dist/headless/utils/readOnlyToggle.js +14 -0
- package/dist/headless/utils/readOnlyToggle.js.map +1 -0
- package/dist/headless/utils/restoreFocus.js +10 -0
- package/dist/headless/utils/restoreFocus.js.map +1 -0
- package/dist/hooks/useDismissOnEscape.d.ts +11 -0
- package/dist/hooks/useDismissOnEscape.js +16 -0
- package/dist/hooks/useDismissOnEscape.js.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +8 -1
- package/dist/hooks/useFocusTrap.js +24 -20
- package/dist/hooks/useFocusTrap.js.map +1 -1
- package/dist/hooks/useHelperText.d.ts +21 -0
- package/dist/hooks/useHelperText.js +13 -0
- package/dist/hooks/useHelperText.js.map +1 -0
- package/dist/hooks/useKeyboardShortcut.d.ts +30 -0
- package/dist/hooks/useKeyboardShortcut.js +19 -0
- package/dist/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.js +360 -316
- package/dist/index.js.map +1 -1
- package/dist/utils/controlProps.d.ts +16 -0
- package/dist/utils/controlProps.js +14 -0
- package/dist/utils/controlProps.js.map +1 -0
- package/dist/utils/keyboardShortcut.d.ts +12 -0
- package/dist/utils/keyboardShortcut.js +49 -0
- package/dist/utils/keyboardShortcut.js.map +1 -0
- package/dist/utils/linkAttrs.d.ts +13 -0
- package/dist/utils/linkAttrs.js +13 -0
- package/dist/utils/linkAttrs.js.map +1 -0
- package/dist/utils/overlayLayer.d.ts +15 -3
- package/dist/utils/overlayLayer.js +14 -7
- package/dist/utils/overlayLayer.js.map +1 -1
- package/dist/utils/ownClick.d.ts +16 -0
- package/dist/utils/ownClick.js +40 -0
- package/dist/utils/ownClick.js.map +1 -0
- package/dist/utils/readOnlyToggle.d.ts +15 -0
- package/dist/utils/readOnlyToggle.js +14 -0
- package/dist/utils/readOnlyToggle.js.map +1 -0
- package/dist/utils/restoreFocus.d.ts +8 -0
- package/dist/utils/restoreFocus.js +10 -0
- package/dist/utils/restoreFocus.js.map +1 -0
- package/package.json +5 -3
|
@@ -1,138 +1,291 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
import { jsx as o, jsxs as y, Fragment as H } from "react/jsx-runtime";
|
|
2
|
+
import C, { useRef as E, useState as L, useEffect as me } from "react";
|
|
3
|
+
import q from "clsx";
|
|
4
|
+
import { useVirtualList as fe } from "../../../hooks/useVirtualList.js";
|
|
5
|
+
import { useSafeLayoutEffect as z } from "../../../hooks/useSafeLayoutEffect.js";
|
|
6
|
+
import { useForkRef as J } from "../../../hooks/useForkRef.js";
|
|
7
|
+
import { ProgressIndicator as pe } from "../../feedBack/progressIndicator/progressIndicator.js";
|
|
8
|
+
import { Ripple as _e } from "../../base/ripple/ripple.js";
|
|
9
|
+
import { createPortal as he } from "react-dom";
|
|
10
|
+
import { Menu as be } from "../../navigation/menu/menu.js";
|
|
11
|
+
import { MenuDivider as we } from "../../navigation/menu/menuDivider.js";
|
|
12
|
+
import { TextFieldWrapper as ge } from "../textField/textFieldWrapper.js";
|
|
13
|
+
function A(c, m) {
|
|
14
|
+
return `${c}-option-${m}`;
|
|
15
|
+
}
|
|
16
|
+
function ve(c, m) {
|
|
17
|
+
for (let n = c.parentElement; n; n = n.parentElement) {
|
|
18
|
+
if (n.scrollHeight > n.clientHeight) {
|
|
19
|
+
const l = n.getBoundingClientRect(), r = c.getBoundingClientRect();
|
|
20
|
+
r.top < l.top ? n.scrollTop -= l.top - r.top : r.bottom > l.bottom && (n.scrollTop += r.bottom - l.bottom);
|
|
21
|
+
}
|
|
22
|
+
if (n === m)
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function K(c) {
|
|
27
|
+
const { children: m, className: n, disabled: l, selected: r, value: N, onClick: u, optionRenderer: p, ..._ } = c, i = E(null);
|
|
28
|
+
return /* @__PURE__ */ y(
|
|
29
|
+
"li",
|
|
30
|
+
{
|
|
31
|
+
..._,
|
|
32
|
+
className: q("smwb-menu__item", n, {
|
|
33
|
+
"smwb-menu__item--disabled": l,
|
|
34
|
+
"smwb-menu__item--selected": r
|
|
35
|
+
}),
|
|
36
|
+
"data-value": N,
|
|
37
|
+
onClick: u,
|
|
38
|
+
onPointerDown: (f) => {
|
|
39
|
+
var h;
|
|
40
|
+
return (h = i.current) == null ? void 0 : h.onRipple(f);
|
|
41
|
+
},
|
|
42
|
+
children: [
|
|
43
|
+
/* @__PURE__ */ o("span", { className: "smwb-menu__item-inner", children: m }),
|
|
44
|
+
/* @__PURE__ */ o(_e, { actionRef: i })
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
function ye(c) {
|
|
50
|
+
const { value: m, onChange: n, inputProps: l, inputRef: r } = c, [N, u] = L(!1), p = E(null), _ = J(r, p);
|
|
51
|
+
return /* @__PURE__ */ o(
|
|
52
|
+
ge,
|
|
53
|
+
{
|
|
54
|
+
className: "smwb-select-field__menu-search-input",
|
|
55
|
+
variant: "outlined",
|
|
56
|
+
fullWidth: !0,
|
|
57
|
+
isFilledState: !!m,
|
|
58
|
+
isFocused: N,
|
|
59
|
+
onHolderMouseDown: (i) => {
|
|
60
|
+
p.current && i.currentTarget === i.target && (i.preventDefault(), p.current.focus());
|
|
61
|
+
},
|
|
62
|
+
children: /* @__PURE__ */ o(
|
|
63
|
+
"input",
|
|
45
64
|
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
65
|
+
...l,
|
|
66
|
+
ref: _,
|
|
67
|
+
type: "text",
|
|
68
|
+
className: "smwb-text-field__input smwb-text-field__input--show-placeholder",
|
|
69
|
+
placeholder: "Найти...",
|
|
70
|
+
autoComplete: "off",
|
|
71
|
+
value: m,
|
|
72
|
+
onChange: n,
|
|
73
|
+
onFocus: (i) => {
|
|
74
|
+
var f;
|
|
75
|
+
u(!0), (f = l == null ? void 0 : l.onFocus) == null || f.call(l, i);
|
|
51
76
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
e.key || e.value
|
|
77
|
+
onBlur: (i) => {
|
|
78
|
+
var f;
|
|
79
|
+
u(!1), (f = l == null ? void 0 : l.onBlur) == null || f.call(l, i);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
59
82
|
)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
function Ye({
|
|
87
|
+
menuMaxHeight: c,
|
|
88
|
+
menuMiddleware: m,
|
|
89
|
+
search: n,
|
|
90
|
+
onSearchInputChange: l,
|
|
91
|
+
items: r,
|
|
92
|
+
searchValue: N,
|
|
93
|
+
isOpen: u,
|
|
94
|
+
onClose: p,
|
|
95
|
+
anchorElementRef: _,
|
|
96
|
+
value: i,
|
|
97
|
+
onItemClick: f,
|
|
98
|
+
isLoading: h,
|
|
99
|
+
optionRenderer: F,
|
|
100
|
+
menuNoItemsMessage: Q,
|
|
101
|
+
container: k,
|
|
102
|
+
createOption: R,
|
|
103
|
+
virtualized: U,
|
|
104
|
+
itemHeight: g = 40,
|
|
105
|
+
listboxId: b,
|
|
106
|
+
labelledBy: X,
|
|
107
|
+
label: Z,
|
|
108
|
+
multiple: P,
|
|
109
|
+
activeIndex: v = -1,
|
|
110
|
+
showActive: M,
|
|
111
|
+
searchInputProps: I,
|
|
112
|
+
searchInputRef: O,
|
|
113
|
+
menuRef: ee
|
|
114
|
+
}) {
|
|
115
|
+
const te = Array.isArray(i) ? i : [i], Y = r.some((e) => !!e.group), le = r.length + (R ? 1 : 0), w = !!U && !Y && !h && r.length > 0, D = c || 240, { startIndex: x, endIndex: oe, totalHeight: re, offsetY: se, onScroll: $ } = fe({
|
|
116
|
+
itemCount: w ? r.length : 0,
|
|
117
|
+
itemHeight: g,
|
|
118
|
+
viewportHeight: D
|
|
119
|
+
}), G = E(null), ne = J(ee, G), S = E(null), V = (e, s, t, d) => ({
|
|
120
|
+
id: b ? A(b, e) : void 0,
|
|
121
|
+
role: "option",
|
|
122
|
+
"aria-selected": s,
|
|
123
|
+
"aria-disabled": t || void 0,
|
|
124
|
+
// With a virtual list only a window of the options exists.
|
|
125
|
+
"aria-setsize": w ? le : void 0,
|
|
126
|
+
"aria-posinset": w ? e + 1 : void 0,
|
|
127
|
+
// The virtual list places its rows at itemHeight: a row takes that height.
|
|
128
|
+
style: w && e < r.length ? { height: g } : void 0,
|
|
129
|
+
disabled: t,
|
|
130
|
+
selected: s,
|
|
131
|
+
...d,
|
|
132
|
+
className: q(
|
|
133
|
+
"smwb-select-field__option",
|
|
134
|
+
d.className,
|
|
135
|
+
M && e === v && "smwb-select-field__option--active"
|
|
136
|
+
)
|
|
137
|
+
}), B = (e, s) => {
|
|
138
|
+
var a, T;
|
|
139
|
+
const t = V(
|
|
140
|
+
s,
|
|
141
|
+
te.some((W) => W === e.value),
|
|
142
|
+
e.disabled,
|
|
143
|
+
{
|
|
144
|
+
value: e.value,
|
|
145
|
+
onClick: (W) => {
|
|
146
|
+
e.disabled || f(W, e);
|
|
147
|
+
},
|
|
148
|
+
optionRenderer: F,
|
|
149
|
+
children: /* @__PURE__ */ y(H, { children: [
|
|
150
|
+
e.text,
|
|
151
|
+
e.helperText ? /* @__PURE__ */ o("span", { className: "smwb-select-field__option__helper-text", children: e.helperText }) : null
|
|
152
|
+
] })
|
|
153
|
+
}
|
|
154
|
+
), d = (T = (a = e.key) != null ? a : e.value) != null ? T : s;
|
|
155
|
+
return F ? /* @__PURE__ */ o(C.Fragment, { children: F(t) }, d) : /* @__PURE__ */ o(K, { ...t }, d);
|
|
156
|
+
}, ie = () => {
|
|
157
|
+
const e = [];
|
|
158
|
+
let s, t;
|
|
159
|
+
const d = () => {
|
|
160
|
+
if (t)
|
|
161
|
+
if (t.group === void 0)
|
|
162
|
+
t.start > 0 && e.push(/* @__PURE__ */ o("li", { className: "smwb-select-field__group-label", role: "presentation" }, `group-${t.start}`)), e.push(...t.options);
|
|
163
|
+
else {
|
|
164
|
+
const a = `${b}-group-${t.start}`;
|
|
165
|
+
e.push(
|
|
166
|
+
/* @__PURE__ */ y("li", { role: "group", "aria-labelledby": a, className: "smwb-select-field__group", children: [
|
|
167
|
+
/* @__PURE__ */ o("div", { id: a, className: "smwb-select-field__group-label", children: t.group }),
|
|
168
|
+
/* @__PURE__ */ o("ul", { role: "presentation", className: "smwb-select-field__group-options", children: t.options })
|
|
169
|
+
] }, `group-${t.start}`)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
return r.forEach((a, T) => {
|
|
174
|
+
(!t || a.group !== s) && (d(), s = a.group, t = { group: a.group, start: T, options: [] }), t.options.push(B(a, T));
|
|
175
|
+
}), d(), e;
|
|
176
|
+
}, [ae, ce] = C.useState(), [j, ue] = L();
|
|
177
|
+
if (z(() => {
|
|
178
|
+
ue(k != null ? k : document.body);
|
|
179
|
+
}, [k]), me(() => {
|
|
180
|
+
u && _.current && ce(_.current.clientWidth);
|
|
181
|
+
}, [_, u]), C.useEffect(() => {
|
|
182
|
+
const e = (s) => {
|
|
183
|
+
u && s.key === "Escape" && !s.defaultPrevented && p();
|
|
69
184
|
};
|
|
70
185
|
return document.addEventListener("keydown", e), () => {
|
|
71
186
|
document.removeEventListener("keydown", e);
|
|
72
187
|
};
|
|
73
|
-
}, [
|
|
74
|
-
|
|
75
|
-
|
|
188
|
+
}, [u, p]), z(() => {
|
|
189
|
+
if (!u || !M || v < 0 || !b)
|
|
190
|
+
return;
|
|
191
|
+
const e = S.current;
|
|
192
|
+
if (w && e && v < r.length) {
|
|
193
|
+
const t = v * g, d = e.clientHeight || D, a = t < e.scrollTop ? t : t + g > e.scrollTop + d ? t + g - d : e.scrollTop;
|
|
194
|
+
a !== e.scrollTop && (e.scrollTop = a, $({ currentTarget: { scrollTop: a } }));
|
|
195
|
+
}
|
|
196
|
+
const s = document.getElementById(A(b, v));
|
|
197
|
+
s && ve(s, G.current);
|
|
198
|
+
}, [u, M, v, b, w, r.length, g, D, $]), !j)
|
|
199
|
+
return null;
|
|
200
|
+
const de = R ? /* @__PURE__ */ o(
|
|
201
|
+
K,
|
|
202
|
+
{
|
|
203
|
+
...V(r.length, !1, !1, {
|
|
204
|
+
value: "__create__",
|
|
205
|
+
className: "smwb-select-field__create-option",
|
|
206
|
+
onClick: (e) => R.onCreate(e),
|
|
207
|
+
children: R.text
|
|
208
|
+
})
|
|
209
|
+
},
|
|
210
|
+
"__create__"
|
|
211
|
+
) : null;
|
|
212
|
+
return he(
|
|
213
|
+
/* @__PURE__ */ y(
|
|
214
|
+
be,
|
|
76
215
|
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
216
|
+
ref: ne,
|
|
217
|
+
isOpen: u,
|
|
218
|
+
onClose: p,
|
|
219
|
+
anchorElement: _.current,
|
|
220
|
+
middleware: m,
|
|
81
221
|
"data-smwb-overlay-layer": "",
|
|
222
|
+
listRole: "presentation",
|
|
223
|
+
tabIndex: -1,
|
|
224
|
+
onMouseDown: (e) => {
|
|
225
|
+
e.target instanceof HTMLInputElement || e.preventDefault();
|
|
226
|
+
},
|
|
82
227
|
style: {
|
|
83
|
-
minWidth:
|
|
84
|
-
maxHeight:
|
|
85
|
-
overflowY:
|
|
228
|
+
minWidth: ae,
|
|
229
|
+
maxHeight: c || void 0,
|
|
230
|
+
overflowY: c ? "auto" : void 0
|
|
86
231
|
},
|
|
87
232
|
children: [
|
|
88
|
-
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
-
|
|
233
|
+
n && /* @__PURE__ */ y(H, { children: [
|
|
234
|
+
/* @__PURE__ */ o("li", { className: "smwb-select-field__menu-search", children: /* @__PURE__ */ o(
|
|
235
|
+
ye,
|
|
91
236
|
{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
onChange: (e, r) => n == null ? void 0 : n(e, r.value),
|
|
97
|
-
fullWidth: !0
|
|
237
|
+
value: N,
|
|
238
|
+
onChange: (e) => l == null ? void 0 : l(e, e.target.value),
|
|
239
|
+
inputProps: I,
|
|
240
|
+
inputRef: O
|
|
98
241
|
}
|
|
99
242
|
) }),
|
|
100
|
-
/* @__PURE__ */
|
|
243
|
+
/* @__PURE__ */ o(we, {})
|
|
101
244
|
] }),
|
|
102
|
-
|
|
103
|
-
|
|
245
|
+
h ? /* @__PURE__ */ o("li", { className: "smwb-select-field__menu-loading", children: /* @__PURE__ */ o(pe, { type: "indeterminate", variant: "circular", className: "smwb-select-field__menu__loader" }) }) : null,
|
|
246
|
+
/* @__PURE__ */ o("li", { children: /* @__PURE__ */ y(
|
|
247
|
+
"ul",
|
|
104
248
|
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
249
|
+
id: b,
|
|
250
|
+
role: "listbox",
|
|
251
|
+
className: "smwb-select-field__listbox",
|
|
252
|
+
"aria-labelledby": X,
|
|
253
|
+
"aria-label": Z,
|
|
254
|
+
"aria-multiselectable": P || void 0,
|
|
255
|
+
"aria-busy": h || void 0,
|
|
256
|
+
children: [
|
|
257
|
+
h ? null : w ? /* @__PURE__ */ o("li", { role: "presentation", className: "smwb-select-field__virtual-viewport", children: /* @__PURE__ */ o(
|
|
258
|
+
"div",
|
|
259
|
+
{
|
|
260
|
+
ref: S,
|
|
261
|
+
className: "smwb-select-field__virtual-scroller",
|
|
262
|
+
tabIndex: -1,
|
|
263
|
+
style: { maxHeight: D, overflowY: "auto" },
|
|
264
|
+
onScroll: $,
|
|
265
|
+
children: /* @__PURE__ */ o("div", { style: { height: re, position: "relative" }, children: /* @__PURE__ */ o(
|
|
266
|
+
"ul",
|
|
267
|
+
{
|
|
268
|
+
role: "presentation",
|
|
269
|
+
className: "smwb-select-field__virtual-list",
|
|
270
|
+
style: { transform: `translateY(${se}px)`, listStyle: "none", margin: 0, padding: 0 },
|
|
271
|
+
children: r.slice(x, oe).map((e, s) => B(e, x + s))
|
|
272
|
+
}
|
|
273
|
+
) })
|
|
274
|
+
}
|
|
275
|
+
) }) : Y ? ie() : r.map((e, s) => B(e, s)),
|
|
276
|
+
de
|
|
277
|
+
]
|
|
117
278
|
}
|
|
118
|
-
) })
|
|
119
|
-
|
|
120
|
-
N,
|
|
121
|
-
{
|
|
122
|
-
value: "__create__",
|
|
123
|
-
onClick: (e) => a.onCreate(e),
|
|
124
|
-
className: "smwb-select-field__create-option",
|
|
125
|
-
children: a.text
|
|
126
|
-
},
|
|
127
|
-
"__create__"
|
|
128
|
-
) : null
|
|
279
|
+
) }),
|
|
280
|
+
!h && !r.length && !R ? /* @__PURE__ */ o("li", { className: "smwb-select-field__empty-items", children: Q || "Опций не найдено." }) : null
|
|
129
281
|
]
|
|
130
282
|
}
|
|
131
283
|
),
|
|
132
|
-
|
|
133
|
-
)
|
|
284
|
+
j
|
|
285
|
+
);
|
|
134
286
|
}
|
|
135
287
|
export {
|
|
136
|
-
|
|
288
|
+
Ye as DropdownMenu,
|
|
289
|
+
A as dropdownOptionId
|
|
137
290
|
};
|
|
138
291
|
//# sourceMappingURL=dropdownMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useVirtualList } from \"../../../hooks/useVirtualList\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { Menu, MenuDivider, MenuItem, MenuItemProps } from \"../../navigation/menu\";\nimport { TextField } from \"../textField\";\nimport ProgressIndicator from \"../../feedBack/progressIndicator/progressIndicator\";\nimport { createPortal } from \"react-dom\";\nimport { MenuFloatingProps } from \"../../navigation/menu/menuFloating\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n /** Disables selection of this option. */\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\nexport interface DropdownItemProps<T extends HTMLElement = HTMLElement> {\n menuMaxHeight?: number;\n menuMiddleware?: MenuFloatingProps[\"middleware\"];\n menuNoItemsMessage?: React.ReactNode;\n search?: boolean;\n onSearchInputChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string | number | undefined) => void;\n items: DropdownItem[];\n searchValue?: string | number;\n isOpen: boolean;\n onClose: () => void;\n anchorElementRef: React.RefObject<T>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: React.SyntheticEvent, item: DropdownItem) => void;\n isLoading?: boolean;\n optionRenderer?: (args: MenuItemProps) => React.ReactNode;\n container?: HTMLElement;\n /** Renders a trailing \"create\" affordance (used by `creatable` SelectField). */\n createOption?: { text: React.ReactNode; onCreate: (event: React.SyntheticEvent) => void };\n /** Windows the option list for large datasets (fixed row height). */\n virtualized?: boolean;\n /** Row height (px) used when `virtualized`. */\n itemHeight?: number;\n}\n\nexport function DropdownMenu<T extends HTMLElement>({\n menuMaxHeight,\n menuMiddleware,\n search,\n onSearchInputChange,\n items,\n searchValue,\n isOpen,\n onClose,\n anchorElementRef,\n value,\n onItemClick,\n isLoading,\n optionRenderer,\n menuNoItemsMessage,\n container,\n createOption,\n virtualized,\n itemHeight = 40,\n}: DropdownItemProps<T>) {\n const valueArray = Array.isArray(value) ? value : [value];\n const hasGroups = items.some((i) => !!i.group);\n let lastGroup: string | undefined;\n\n const useVirtual = !!virtualized && !hasGroups && !isLoading && items.length > 0;\n const viewportHeight = menuMaxHeight || 240;\n const { startIndex, endIndex, totalHeight, offsetY, onScroll } = useVirtualList({\n itemCount: useVirtual ? items.length : 0,\n itemHeight,\n viewportHeight,\n });\n\n const renderItem = (el: DropdownItem) => {\n const node: React.ReactNode[] = [];\n if (hasGroups && el.group !== lastGroup) {\n lastGroup = el.group;\n node.push(\n <li key={`group-${el.group ?? \"ungrouped\"}`} className=\"smwb-select-field__group-label\" role=\"presentation\">\n {el.group}\n </li>\n );\n }\n node.push(\n <MenuItem\n key={el.key || el.value}\n value={el.value}\n disabled={el.disabled}\n selected={!!valueArray.find((v) => v === el.value)}\n onClick={(e: React.SyntheticEvent) => {\n if (!el.disabled) {\n onItemClick(e, el);\n }\n }}\n optionRenderer={optionRenderer}\n >\n {el.text}\n {el.helperText ? <span className=\"smwb-select-field__option__helper-text\">{el.helperText}</span> : null}\n </MenuItem>\n );\n return node;\n };\n const [menuMinWidth, setMenuMinWidth] = React.useState<number>();\n // The menu is portalled: its target is resolved in the browser only. A server\n // render (no document) and the first client render emit nothing here, so the\n // select renders and hydrates on a server-rendered page.\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n useSafeLayoutEffect(() => {\n setDomRoot(container ?? document.body);\n }, [container]);\n\n useEffect(() => {\n if (isOpen && anchorElementRef.current) {\n setMenuMinWidth(anchorElementRef.current.clientWidth);\n }\n }, [anchorElementRef, isOpen]);\n\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (isOpen && event.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, onClose]);\n\n if (!domRoot) {\n return null;\n }\n\n return createPortal(\n <Menu\n isOpen={isOpen}\n onClose={onClose}\n anchorElement={anchorElementRef.current}\n middleware={menuMiddleware}\n data-smwb-overlay-layer=\"\"\n style={{\n minWidth: menuMinWidth,\n maxHeight: menuMaxHeight || undefined,\n overflowY: menuMaxHeight ? \"auto\" : undefined,\n }}\n >\n {search && (\n <>\n <li className=\"smwb-select-field__menu-search\">\n <TextField\n className=\"smwb-select-field__menu-search-input\"\n type=\"text\"\n placeholder=\"Найти...\"\n value={searchValue}\n onChange={(e, data) => onSearchInputChange?.(e, data.value)}\n fullWidth\n />\n </li>\n <MenuDivider />\n </>\n )}\n {isLoading ? (\n <div className=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" className=\"smwb-select-field__menu__loader\" />\n </div>\n ) : useVirtual ? (\n <li role=\"presentation\" className=\"smwb-select-field__virtual-viewport\">\n <div\n className=\"smwb-select-field__virtual-scroller\"\n style={{ maxHeight: viewportHeight, overflowY: \"auto\" }}\n onScroll={onScroll}\n >\n <div style={{ height: totalHeight, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n className=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${offsetY}px)`, listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {items.slice(startIndex, endIndex).map((el) => renderItem(el))}\n </ul>\n </div>\n </div>\n </li>\n ) : items.length ? (\n items.map((el) => renderItem(el))\n ) : !createOption ? (\n <li className=\"smwb-select-field__empty-items\">{menuNoItemsMessage || \"Опций не найдено.\"}</li>\n ) : null}\n {createOption ? (\n <MenuItem\n key=\"__create__\"\n value=\"__create__\"\n onClick={(e: React.SyntheticEvent) => createOption.onCreate(e)}\n className=\"smwb-select-field__create-option\"\n >\n {createOption.text}\n </MenuItem>\n ) : null}\n </Menu>,\n domRoot\n );\n}\n"],"names":["DropdownMenu","menuMaxHeight","menuMiddleware","search","onSearchInputChange","items","searchValue","isOpen","onClose","anchorElementRef","value","onItemClick","isLoading","optionRenderer","menuNoItemsMessage","container","createOption","virtualized","itemHeight","valueArray","hasGroups","i","lastGroup","useVirtual","viewportHeight","startIndex","endIndex","totalHeight","offsetY","onScroll","useVirtualList","renderItem","el","node","jsx","_a","jsxs","MenuItem","v","e","menuMinWidth","setMenuMinWidth","React","domRoot","setDomRoot","useState","useSafeLayoutEffect","useEffect","onKeyDown","event","createPortal","Menu","Fragment","TextField","data","MenuDivider","ProgressIndicator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport { useVirtualList } from \"../../../hooks/useVirtualList\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport { Menu, MenuDivider, MenuItemProps } from \"../../navigation/menu\";\nimport { TextFieldWrapper } from \"../textField\";\nimport ProgressIndicator from \"../../feedBack/progressIndicator/progressIndicator\";\nimport { Ripple, RippleActionsRef } from \"../../base/ripple/ripple\";\nimport { createPortal } from \"react-dom\";\nimport { MenuFloatingProps } from \"../../navigation/menu/menuFloating\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n /** Disables selection of this option. */\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\nexport interface DropdownItemProps<T extends HTMLElement = HTMLElement> {\n menuMaxHeight?: number;\n menuMiddleware?: MenuFloatingProps[\"middleware\"];\n menuNoItemsMessage?: React.ReactNode;\n search?: boolean;\n onSearchInputChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string | number | undefined) => void;\n items: DropdownItem[];\n searchValue?: string | number;\n isOpen: boolean;\n onClose: () => void;\n anchorElementRef: React.RefObject<T>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: React.SyntheticEvent, item: DropdownItem) => void;\n isLoading?: boolean;\n optionRenderer?: (args: MenuItemProps) => React.ReactNode;\n container?: HTMLElement;\n /** Renders a trailing \"create\" affordance (used by `creatable` SelectField). */\n createOption?: { text: React.ReactNode; onCreate: (event: React.SyntheticEvent) => void };\n /** Windows the option list for large datasets (fixed row height). */\n virtualized?: boolean;\n /** Row height (px) used when `virtualized`. */\n itemHeight?: number;\n /** Id of the listbox; the options' ids follow from it (`dropdownOptionId`). */\n listboxId?: string;\n /** Ids of the elements that name the listbox and the search box in the menu. */\n labelledBy?: string;\n /** Names the listbox and the search box in the menu when no element does. */\n label?: string;\n /** Several options can be selected (`aria-multiselectable`). */\n multiple?: boolean;\n /** Index of the active option, counting `items` and then the create option; -1 for none. */\n activeIndex?: number;\n /** Marks the active option and keeps it in view: the keyboard moved to it. */\n showActive?: boolean;\n /** Attributes and handlers of the search box in the menu, which the field makes a combobox. */\n searchInputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n searchInputRef?: React.Ref<HTMLInputElement>;\n /** The menu's root element. */\n menuRef?: React.Ref<HTMLDivElement>;\n}\n\n/** Id of the option at `index` in the listbox `listboxId`. */\nexport function dropdownOptionId(listboxId: string, index: number): string {\n return `${listboxId}-option-${index}`;\n}\n\n// Scrolls each scrolling box from the element up to `root` so the element shows.\nfunction keepInView(element: HTMLElement, root: HTMLElement | null) {\n for (let box = element.parentElement; box; box = box.parentElement) {\n if (box.scrollHeight > box.clientHeight) {\n const outer = box.getBoundingClientRect();\n const inner = element.getBoundingClientRect();\n if (inner.top < outer.top) {\n box.scrollTop -= outer.top - inner.top;\n } else if (inner.bottom > outer.bottom) {\n box.scrollTop += inner.bottom - outer.bottom;\n }\n }\n if (box === root) {\n break;\n }\n }\n}\n\n// An option of the listbox. It takes no focus: the field keeps it and points at\n// the active option with aria-activedescendant.\nfunction DropdownOption(props: MenuItemProps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { children, className, disabled, selected, value, onClick, optionRenderer, ...rest } = props;\n const rippleRef = useRef<RippleActionsRef>(null);\n\n return (\n <li\n {...rest}\n className={cn(\"smwb-menu__item\", className, {\n \"smwb-menu__item--disabled\": disabled,\n \"smwb-menu__item--selected\": selected,\n })}\n data-value={value}\n onClick={onClick}\n onPointerDown={(event) => rippleRef.current?.onRipple(event)}\n >\n <span className=\"smwb-menu__item-inner\">{children}</span>\n <Ripple actionRef={rippleRef} />\n </li>\n );\n}\n\n// The search box at the top of the menu: drawn as a TextField, with the input\n// in the field's hands (TextField puts ARIA attributes on its wrapper).\nfunction MenuSearchInput(props: {\n value?: string | number;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n inputRef?: React.Ref<HTMLInputElement>;\n}) {\n const { value, onChange, inputProps, inputRef } = props;\n const [isFocused, setIsFocused] = useState(false);\n const ownRef = useRef<HTMLInputElement>(null);\n const ref = useForkRef<HTMLInputElement>(inputRef, ownRef);\n\n return (\n <TextFieldWrapper\n className=\"smwb-select-field__menu-search-input\"\n variant=\"outlined\"\n fullWidth\n isFilledState={Boolean(value)}\n isFocused={isFocused}\n onHolderMouseDown={(event) => {\n if (ownRef.current && event.currentTarget === event.target) {\n event.preventDefault();\n ownRef.current.focus();\n }\n }}\n >\n <input\n {...inputProps}\n ref={ref}\n type=\"text\"\n className=\"smwb-text-field__input smwb-text-field__input--show-placeholder\"\n placeholder=\"Найти...\"\n autoComplete=\"off\"\n value={value}\n onChange={onChange}\n onFocus={(event) => {\n setIsFocused(true);\n inputProps?.onFocus?.(event);\n }}\n onBlur={(event) => {\n setIsFocused(false);\n inputProps?.onBlur?.(event);\n }}\n />\n </TextFieldWrapper>\n );\n}\n\nexport function DropdownMenu<T extends HTMLElement>({\n menuMaxHeight,\n menuMiddleware,\n search,\n onSearchInputChange,\n items,\n searchValue,\n isOpen,\n onClose,\n anchorElementRef,\n value,\n onItemClick,\n isLoading,\n optionRenderer,\n menuNoItemsMessage,\n container,\n createOption,\n virtualized,\n itemHeight = 40,\n listboxId,\n labelledBy,\n label,\n multiple,\n activeIndex = -1,\n showActive,\n searchInputProps,\n searchInputRef,\n menuRef,\n}: DropdownItemProps<T>) {\n const valueArray = Array.isArray(value) ? value : [value];\n const hasGroups = items.some((i) => !!i.group);\n const optionCount = items.length + (createOption ? 1 : 0);\n\n const useVirtual = !!virtualized && !hasGroups && !isLoading && items.length > 0;\n const viewportHeight = menuMaxHeight || 240;\n const { startIndex, endIndex, totalHeight, offsetY, onScroll } = useVirtualList({\n itemCount: useVirtual ? items.length : 0,\n itemHeight,\n viewportHeight,\n });\n const menuElementRef = useRef<HTMLDivElement>(null);\n const forkedMenuRef = useForkRef<HTMLDivElement>(menuRef, menuElementRef);\n const scrollerRef = useRef<HTMLDivElement>(null);\n\n // Props of the option at `index`, as an optionRenderer gets them too: its\n // element needs the id, role and ARIA state for the field to point at it.\n const optionProps = (\n index: number,\n selected: boolean,\n disabled: boolean | undefined,\n extra: MenuItemProps\n ): MenuItemProps => ({\n id: listboxId ? dropdownOptionId(listboxId, index) : undefined,\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || undefined,\n // With a virtual list only a window of the options exists.\n \"aria-setsize\": useVirtual ? optionCount : undefined,\n \"aria-posinset\": useVirtual ? index + 1 : undefined,\n // The virtual list places its rows at itemHeight: a row takes that height.\n style: useVirtual && index < items.length ? { height: itemHeight } : undefined,\n disabled,\n selected,\n ...extra,\n className: cn(\n \"smwb-select-field__option\",\n extra.className,\n showActive && index === activeIndex && \"smwb-select-field__option--active\"\n ),\n });\n\n const renderItem = (el: DropdownItem, index: number) => {\n const props = optionProps(\n index,\n valueArray.some((v) => v === el.value),\n el.disabled,\n {\n value: el.value,\n onClick: (e: React.SyntheticEvent) => {\n if (!el.disabled) {\n onItemClick(e, el);\n }\n },\n optionRenderer,\n children: (\n <>\n {el.text}\n {el.helperText ? <span className=\"smwb-select-field__option__helper-text\">{el.helperText}</span> : null}\n </>\n ),\n }\n );\n const key = el.key ?? el.value ?? index;\n\n return optionRenderer ? (\n <React.Fragment key={key}>{optionRenderer(props)}</React.Fragment>\n ) : (\n <DropdownOption key={key} {...props} />\n );\n };\n\n // Consecutive items of one group sit in a `group` named by its header. Items\n // without a group before the first one stay loose; after a group, they get an\n // empty header, as they always did.\n const renderGroups = () => {\n const nodes: React.ReactNode[] = [];\n let lastGroup: string | undefined;\n let run: { group?: string; start: number; options: React.ReactNode[] } | undefined;\n const flush = () => {\n if (!run) {\n return;\n }\n if (run.group === undefined) {\n if (run.start > 0) {\n nodes.push(<li key={`group-${run.start}`} className=\"smwb-select-field__group-label\" role=\"presentation\" />);\n }\n nodes.push(...run.options);\n } else {\n const labelId = `${listboxId}-group-${run.start}`;\n nodes.push(\n <li key={`group-${run.start}`} role=\"group\" aria-labelledby={labelId} className=\"smwb-select-field__group\">\n <div id={labelId} className=\"smwb-select-field__group-label\">\n {run.group}\n </div>\n <ul role=\"presentation\" className=\"smwb-select-field__group-options\">\n {run.options}\n </ul>\n </li>\n );\n }\n };\n items.forEach((el, index) => {\n if (!run || el.group !== lastGroup) {\n flush();\n lastGroup = el.group;\n run = { group: el.group, start: index, options: [] };\n }\n run.options.push(renderItem(el, index));\n });\n flush();\n return nodes;\n };\n\n const [menuMinWidth, setMenuMinWidth] = React.useState<number>();\n // The menu is portalled: its target is resolved in the browser only. A server\n // render (no document) and the first client render emit nothing here, so the\n // select renders and hydrates on a server-rendered page.\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n useSafeLayoutEffect(() => {\n setDomRoot(container ?? document.body);\n }, [container]);\n\n useEffect(() => {\n if (isOpen && anchorElementRef.current) {\n setMenuMinWidth(anchorElementRef.current.clientWidth);\n }\n }, [anchorElementRef, isOpen]);\n\n // An Escape the field did not take (the focus is elsewhere) still closes the menu.\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (isOpen && event.key === \"Escape\" && !event.defaultPrevented) {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, onClose]);\n\n // The keyboard's active option stays in view. In a virtual list it may not\n // exist yet: scroll the window to it first.\n useSafeLayoutEffect(() => {\n if (!isOpen || !showActive || activeIndex < 0 || !listboxId) {\n return;\n }\n const scroller = scrollerRef.current;\n if (useVirtual && scroller && activeIndex < items.length) {\n const top = activeIndex * itemHeight;\n const height = scroller.clientHeight || viewportHeight;\n const scrollTop =\n top < scroller.scrollTop\n ? top\n : top + itemHeight > scroller.scrollTop + height\n ? top + itemHeight - height\n : scroller.scrollTop;\n if (scrollTop !== scroller.scrollTop) {\n scroller.scrollTop = scrollTop;\n onScroll({ currentTarget: { scrollTop } });\n }\n }\n const option = document.getElementById(dropdownOptionId(listboxId, activeIndex));\n if (option) {\n keepInView(option, menuElementRef.current);\n }\n }, [isOpen, showActive, activeIndex, listboxId, useVirtual, items.length, itemHeight, viewportHeight, onScroll]);\n\n if (!domRoot) {\n return null;\n }\n\n const createNode = createOption ? (\n <DropdownOption\n key=\"__create__\"\n {...optionProps(items.length, false, false, {\n value: \"__create__\",\n className: \"smwb-select-field__create-option\",\n onClick: (e: React.SyntheticEvent) => createOption.onCreate(e),\n children: createOption.text,\n })}\n />\n ) : null;\n\n return createPortal(\n <Menu\n ref={forkedMenuRef}\n isOpen={isOpen}\n onClose={onClose}\n anchorElement={anchorElementRef.current}\n middleware={menuMiddleware}\n data-smwb-overlay-layer=\"\"\n // The menu is a surface: the options are a listbox of their own inside,\n // with the search box and the messages beside it.\n listRole=\"presentation\"\n // A menu that scrolls, with nothing in it that takes the focus, would be a\n // tab stop of its own (browsers make such scrollers one): Tab from the field\n // would land in the closing menu and drop to the page.\n tabIndex={-1}\n // The field keeps the focus while the menu is used with the pointer; only\n // the search box in the menu takes it.\n onMouseDown={(event) => {\n if (!(event.target instanceof HTMLInputElement)) {\n event.preventDefault();\n }\n }}\n style={{\n minWidth: menuMinWidth,\n maxHeight: menuMaxHeight || undefined,\n overflowY: menuMaxHeight ? \"auto\" : undefined,\n }}\n >\n {search && (\n <>\n <li className=\"smwb-select-field__menu-search\">\n <MenuSearchInput\n value={searchValue}\n onChange={(e) => onSearchInputChange?.(e, e.target.value)}\n inputProps={searchInputProps}\n inputRef={searchInputRef}\n />\n </li>\n <MenuDivider />\n </>\n )}\n {isLoading ? (\n <li className=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" className=\"smwb-select-field__menu__loader\" />\n </li>\n ) : null}\n <li>\n <ul\n id={listboxId}\n role=\"listbox\"\n className=\"smwb-select-field__listbox\"\n aria-labelledby={labelledBy}\n aria-label={label}\n aria-multiselectable={multiple || undefined}\n aria-busy={isLoading || undefined}\n >\n {isLoading ? null : useVirtual ? (\n <li role=\"presentation\" className=\"smwb-select-field__virtual-viewport\">\n <div\n ref={scrollerRef}\n className=\"smwb-select-field__virtual-scroller\"\n tabIndex={-1}\n style={{ maxHeight: viewportHeight, overflowY: \"auto\" }}\n onScroll={onScroll}\n >\n <div style={{ height: totalHeight, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n className=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${offsetY}px)`, listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {items.slice(startIndex, endIndex).map((el, i) => renderItem(el, startIndex + i))}\n </ul>\n </div>\n </div>\n </li>\n ) : hasGroups ? (\n renderGroups()\n ) : (\n items.map((el, index) => renderItem(el, index))\n )}\n {createNode}\n </ul>\n </li>\n {!isLoading && !items.length && !createOption ? (\n <li className=\"smwb-select-field__empty-items\">{menuNoItemsMessage || \"Опций не найдено.\"}</li>\n ) : null}\n </Menu>,\n domRoot\n );\n}\n"],"names":["dropdownOptionId","listboxId","index","keepInView","element","root","box","outer","inner","DropdownOption","props","children","className","disabled","selected","value","onClick","optionRenderer","rest","rippleRef","useRef","jsxs","cn","event","_a","jsx","Ripple","MenuSearchInput","onChange","inputProps","inputRef","isFocused","setIsFocused","useState","ownRef","ref","useForkRef","TextFieldWrapper","DropdownMenu","menuMaxHeight","menuMiddleware","search","onSearchInputChange","items","searchValue","isOpen","onClose","anchorElementRef","onItemClick","isLoading","menuNoItemsMessage","container","createOption","virtualized","itemHeight","labelledBy","label","multiple","activeIndex","showActive","searchInputProps","searchInputRef","menuRef","valueArray","hasGroups","i","optionCount","useVirtual","viewportHeight","startIndex","endIndex","totalHeight","offsetY","onScroll","useVirtualList","menuElementRef","forkedMenuRef","scrollerRef","optionProps","extra","renderItem","el","v","e","Fragment","key","_b","React","renderGroups","nodes","lastGroup","run","flush","labelId","menuMinWidth","setMenuMinWidth","domRoot","setDomRoot","useSafeLayoutEffect","useEffect","onKeyDown","scroller","top","height","scrollTop","option","createNode","createPortal","Menu","MenuDivider","ProgressIndicator"],"mappings":";;;;;;;;;;;;AAiEO,SAASA,EAAiBC,GAAmBC,GAAuB;AACzE,SAAO,GAAGD,CAAS,WAAWC,CAAK;AACrC;AAGA,SAASC,GAAWC,GAAsBC,GAA0B;AAClE,WAASC,IAAMF,EAAQ,eAAeE,GAAKA,IAAMA,EAAI,eAAe;AAClE,QAAIA,EAAI,eAAeA,EAAI,cAAc;AACvC,YAAMC,IAAQD,EAAI,sBAAA,GACZE,IAAQJ,EAAQ,sBAAA;AACtB,MAAII,EAAM,MAAMD,EAAM,MACpBD,EAAI,aAAaC,EAAM,MAAMC,EAAM,MAC1BA,EAAM,SAASD,EAAM,WAC9BD,EAAI,aAAaE,EAAM,SAASD,EAAM;AAAA,IAE1C;AACA,QAAID,MAAQD;AACV;AAAA,EAEJ;AACF;AAIA,SAASI,EAAeC,GAAsB;AAE5C,QAAM,EAAE,UAAAC,GAAU,WAAAC,GAAW,UAAAC,GAAU,UAAAC,GAAU,OAAAC,GAAO,SAAAC,GAAS,gBAAAC,GAAgB,GAAGC,EAAA,IAASR,GACvFS,IAAYC,EAAyB,IAAI;AAE/C,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,WAAWI,EAAG,mBAAmBV,GAAW;AAAA,QAC1C,6BAA6BC;AAAA,QAC7B,6BAA6BC;AAAA,MAAA,CAC9B;AAAA,MACD,cAAYC;AAAA,MACZ,SAAAC;AAAA,MACA,eAAe,CAACO,MAAA;;AAAU,gBAAAC,IAAAL,EAAU,YAAV,gBAAAK,EAAmB,SAASD;AAAA;AAAA,MAEtD,UAAA;AAAA,QAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,yBAAyB,UAAAd,EAAA,CAAS;AAAA,QAClD,gBAAAc,EAACC,IAAA,EAAO,WAAWP,EAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpC;AAIA,SAASQ,GAAgBjB,GAKtB;AACD,QAAM,EAAE,OAAAK,GAAO,UAAAa,GAAU,YAAAC,GAAY,UAAAC,MAAapB,GAC5C,CAACqB,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAASd,EAAyB,IAAI,GACtCe,IAAMC,EAA6BN,GAAUI,CAAM;AAEzD,SACE,gBAAAT;AAAA,IAACY;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,WAAS;AAAA,MACT,eAAe,EAAQtB;AAAA,MACvB,WAAAgB;AAAA,MACA,mBAAmB,CAACR,MAAU;AAC5B,QAAIW,EAAO,WAAWX,EAAM,kBAAkBA,EAAM,WAClDA,EAAM,eAAA,GACNW,EAAO,QAAQ,MAAA;AAAA,MAEnB;AAAA,MAEA,UAAA,gBAAAT;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAGI;AAAA,UACJ,KAAAM;AAAA,UACA,MAAK;AAAA,UACL,WAAU;AAAA,UACV,aAAY;AAAA,UACZ,cAAa;AAAA,UACb,OAAApB;AAAA,UACA,UAAAa;AAAA,UACA,SAAS,CAACL,MAAU;;AAClB,YAAAS,EAAa,EAAI,IACjBR,IAAAK,KAAA,gBAAAA,EAAY,YAAZ,QAAAL,EAAA,KAAAK,GAAsBN;AAAA,UACxB;AAAA,UACA,QAAQ,CAACA,MAAU;;AACjB,YAAAS,EAAa,EAAK,IAClBR,IAAAK,KAAA,gBAAAA,EAAY,WAAZ,QAAAL,EAAA,KAAAK,GAAqBN;AAAA,UACvB;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAEO,SAASe,GAAoC;AAAA,EAClD,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,OAAAhC;AAAA,EACA,aAAAiC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAhC;AAAA,EACA,oBAAAiC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,WAAArD;AAAA,EACA,YAAAsD;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AACF,GAAyB;AACvB,QAAMC,KAAa,MAAM,QAAQhD,CAAK,IAAIA,IAAQ,CAACA,CAAK,GAClDiD,IAAYrB,EAAM,KAAK,CAACsB,MAAM,CAAC,CAACA,EAAE,KAAK,GACvCC,KAAcvB,EAAM,UAAUS,IAAe,IAAI,IAEjDe,IAAa,CAAC,CAACd,KAAe,CAACW,KAAa,CAACf,KAAaN,EAAM,SAAS,GACzEyB,IAAiB7B,KAAiB,KAClC,EAAE,YAAA8B,GAAY,UAAAC,IAAU,aAAAC,IAAa,SAAAC,IAAS,UAAAC,EAAA,IAAaC,GAAe;AAAA,IAC9E,WAAWP,IAAaxB,EAAM,SAAS;AAAA,IACvC,YAAAW;AAAA,IACA,gBAAAc;AAAA,EAAA,CACD,GACKO,IAAiBvD,EAAuB,IAAI,GAC5CwD,KAAgBxC,EAA2B0B,IAASa,CAAc,GAClEE,IAAczD,EAAuB,IAAI,GAIzC0D,IAAc,CAClB5E,GACAY,GACAD,GACAkE,OACmB;AAAA,IACnB,IAAI9E,IAAYD,EAAiBC,GAAWC,CAAK,IAAI;AAAA,IACrD,MAAM;AAAA,IACN,iBAAiBY;AAAA,IACjB,iBAAiBD,KAAY;AAAA;AAAA,IAE7B,gBAAgBsD,IAAaD,KAAc;AAAA,IAC3C,iBAAiBC,IAAajE,IAAQ,IAAI;AAAA;AAAA,IAE1C,OAAOiE,KAAcjE,IAAQyC,EAAM,SAAS,EAAE,QAAQW,MAAe;AAAA,IACrE,UAAAzC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGiE;AAAA,IACH,WAAWzD;AAAA,MACT;AAAA,MACAyD,EAAM;AAAA,MACNpB,KAAczD,MAAUwD,KAAe;AAAA,IAAA;AAAA,EACzC,IAGIsB,IAAa,CAACC,GAAkB/E,MAAkB;;AACtD,UAAMQ,IAAQoE;AAAA,MACZ5E;AAAA,MACA6D,GAAW,KAAK,CAACmB,MAAMA,MAAMD,EAAG,KAAK;AAAA,MACrCA,EAAG;AAAA,MACH;AAAA,QACE,OAAOA,EAAG;AAAA,QACV,SAAS,CAACE,MAA4B;AACpC,UAAKF,EAAG,YACNjC,EAAYmC,GAAGF,CAAE;AAAA,QAErB;AAAA,QACA,gBAAAhE;AAAA,QACA,UACE,gBAAAI,EAAA+D,GAAA,EACG,UAAA;AAAA,UAAAH,EAAG;AAAA,UACHA,EAAG,aAAa,gBAAAxD,EAAC,QAAA,EAAK,WAAU,0CAA0C,UAAAwD,EAAG,YAAW,IAAU;AAAA,QAAA,EAAA,CACrG;AAAA,MAAA;AAAA,IAEJ,GAEII,KAAMC,KAAA9D,IAAAyD,EAAG,QAAH,OAAAzD,IAAUyD,EAAG,UAAb,OAAAK,IAAsBpF;AAElC,WAAOe,IACL,gBAAAQ,EAAC8D,EAAM,UAAN,EAA0B,UAAAtE,EAAeP,CAAK,EAAA,GAA1B2E,CAA4B,IAEjD,gBAAA5D,EAAChB,GAAA,EAA0B,GAAGC,KAAT2E,CAAgB;AAAA,EAEzC,GAKMG,KAAe,MAAM;AACzB,UAAMC,IAA2B,CAAA;AACjC,QAAIC,GACAC;AACJ,UAAMC,IAAQ,MAAM;AAClB,UAAKD;AAGL,YAAIA,EAAI,UAAU;AAChB,UAAIA,EAAI,QAAQ,KACdF,EAAM,KAAK,gBAAAhE,EAAC,MAAA,EAA8B,WAAU,kCAAiC,MAAK,eAAA,GAAtE,SAASkE,EAAI,KAAK,EAAmE,CAAE,GAE7GF,EAAM,KAAK,GAAGE,EAAI,OAAO;AAAA,aACpB;AACL,gBAAME,IAAU,GAAG5F,CAAS,UAAU0F,EAAI,KAAK;AAC/C,UAAAF,EAAM;AAAA,8BACH,MAAA,EAA8B,MAAK,SAAQ,mBAAiBI,GAAS,WAAU,4BAC9E,UAAA;AAAA,cAAA,gBAAApE,EAAC,SAAI,IAAIoE,GAAS,WAAU,kCACzB,YAAI,OACP;AAAA,gCACC,MAAA,EAAG,MAAK,gBAAe,WAAU,oCAC/B,YAAI,QAAA,CACP;AAAA,YAAA,EAAA,GANO,SAASF,EAAI,KAAK,EAO3B;AAAA,UAAA;AAAA,QAEJ;AAAA,IACF;AACA,WAAAhD,EAAM,QAAQ,CAACsC,GAAI/E,MAAU;AAC3B,OAAI,CAACyF,KAAOV,EAAG,UAAUS,OACvBE,EAAA,GACAF,IAAYT,EAAG,OACfU,IAAM,EAAE,OAAOV,EAAG,OAAO,OAAO/E,GAAO,SAAS,GAAC,IAEnDyF,EAAI,QAAQ,KAAKX,EAAWC,GAAI/E,CAAK,CAAC;AAAA,IACxC,CAAC,GACD0F,EAAA,GACOH;AAAA,EACT,GAEM,CAACK,IAAcC,EAAe,IAAIR,EAAM,SAAA,GAIxC,CAACS,GAASC,EAAU,IAAIhE,EAAA;AAqD9B,MApDAiE,EAAoB,MAAM;AACxB,IAAAD,GAAW9C,KAAA,OAAAA,IAAa,SAAS,IAAI;AAAA,EACvC,GAAG,CAACA,CAAS,CAAC,GAEdgD,GAAU,MAAM;AACd,IAAItD,KAAUE,EAAiB,WAC7BgD,GAAgBhD,EAAiB,QAAQ,WAAW;AAAA,EAExD,GAAG,CAACA,GAAkBF,CAAM,CAAC,GAG7B0C,EAAM,UAAU,MAAM;AACpB,UAAMa,IAAY,CAAC7E,MAAyB;AAC1C,MAAIsB,KAAUtB,EAAM,QAAQ,YAAY,CAACA,EAAM,oBAC7CuB,EAAA;AAAA,IAEJ;AAEA,oBAAS,iBAAiB,WAAWsD,CAAS,GAEvC,MAAM;AACX,eAAS,oBAAoB,WAAWA,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAACvD,GAAQC,CAAO,CAAC,GAIpBoD,EAAoB,MAAM;AACxB,QAAI,CAACrD,KAAU,CAACc,KAAcD,IAAc,KAAK,CAACzD;AAChD;AAEF,UAAMoG,IAAWxB,EAAY;AAC7B,QAAIV,KAAckC,KAAY3C,IAAcf,EAAM,QAAQ;AACxD,YAAM2D,IAAM5C,IAAcJ,GACpBiD,IAASF,EAAS,gBAAgBjC,GAClCoC,IACJF,IAAMD,EAAS,YACXC,IACAA,IAAMhD,IAAa+C,EAAS,YAAYE,IACtCD,IAAMhD,IAAaiD,IACnBF,EAAS;AACjB,MAAIG,MAAcH,EAAS,cACzBA,EAAS,YAAYG,GACrB/B,EAAS,EAAE,eAAe,EAAE,WAAA+B,EAAA,GAAa;AAAA,IAE7C;AACA,UAAMC,IAAS,SAAS,eAAezG,EAAiBC,GAAWyD,CAAW,CAAC;AAC/E,IAAI+C,KACFtG,GAAWsG,GAAQ9B,EAAe,OAAO;AAAA,EAE7C,GAAG,CAAC9B,GAAQc,GAAYD,GAAazD,GAAWkE,GAAYxB,EAAM,QAAQW,GAAYc,GAAgBK,CAAQ,CAAC,GAE3G,CAACuB;AACH,WAAO;AAGT,QAAMU,KAAatD,IACjB,gBAAA3B;AAAA,IAAChB;AAAA,IAAA;AAAA,MAEE,GAAGqE,EAAYnC,EAAM,QAAQ,IAAO,IAAO;AAAA,QAC1C,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS,CAAC,MAA4BS,EAAa,SAAS,CAAC;AAAA,QAC7D,UAAUA,EAAa;AAAA,MAAA,CACxB;AAAA,IAAA;AAAA,IANG;AAAA,EAAA,IAQJ;AAEJ,SAAOuD;AAAA,IACL,gBAAAtF;AAAA,MAACuF;AAAA,MAAA;AAAA,QACC,KAAKhC;AAAA,QACL,QAAA/B;AAAA,QACA,SAAAC;AAAA,QACA,eAAeC,EAAiB;AAAA,QAChC,YAAYP;AAAA,QACZ,2BAAwB;AAAA,QAGxB,UAAS;AAAA,QAIT,UAAU;AAAA,QAGV,aAAa,CAACjB,MAAU;AACtB,UAAMA,EAAM,kBAAkB,oBAC5BA,EAAM,eAAA;AAAA,QAEV;AAAA,QACA,OAAO;AAAA,UACL,UAAUuE;AAAA,UACV,WAAWvD,KAAiB;AAAA,UAC5B,WAAWA,IAAgB,SAAS;AAAA,QAAA;AAAA,QAGrC,UAAA;AAAA,UAAAE,KACC,gBAAApB,EAAA+D,GAAA,EACE,UAAA;AAAA,YAAA,gBAAA3D,EAAC,MAAA,EAAG,WAAU,kCACZ,UAAA,gBAAAA;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAOiB;AAAA,gBACP,UAAU,CAAC,MAAMF,KAAA,gBAAAA,EAAsB,GAAG,EAAE,OAAO;AAAA,gBACnD,YAAYkB;AAAA,gBACZ,UAAUC;AAAA,cAAA;AAAA,YAAA,GAEd;AAAA,8BACCgD,IAAA,CAAA,CAAY;AAAA,UAAA,GACf;AAAA,UAED5D,IACC,gBAAAxB,EAAC,MAAA,EAAG,WAAU,mCACZ,UAAA,gBAAAA,EAACqF,IAAA,EAAkB,MAAK,iBAAgB,SAAQ,YAAW,WAAU,kCAAA,CAAkC,GACzG,IACE;AAAA,4BACH,MAAA,EACC,UAAA,gBAAAzF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIpB;AAAA,cACJ,MAAK;AAAA,cACL,WAAU;AAAA,cACV,mBAAiBsD;AAAA,cACjB,cAAYC;AAAA,cACZ,wBAAsBC,KAAY;AAAA,cAClC,aAAWR,KAAa;AAAA,cAEvB,UAAA;AAAA,gBAAAA,IAAY,OAAOkB,IAClB,gBAAA1C,EAAC,QAAG,MAAK,gBAAe,WAAU,uCAChC,UAAA,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAKoD;AAAA,oBACL,WAAU;AAAA,oBACV,UAAU;AAAA,oBACV,OAAO,EAAE,WAAWT,GAAgB,WAAW,OAAA;AAAA,oBAC/C,UAAAK;AAAA,oBAEA,UAAA,gBAAAhD,EAAC,SAAI,OAAO,EAAE,QAAQ8C,IAAa,UAAU,cAC3C,UAAA,gBAAA9C;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,OAAO,EAAE,WAAW,cAAc+C,EAAO,OAAO,WAAW,QAAQ,QAAQ,GAAG,SAAS,EAAA;AAAA,wBAEtF,UAAA7B,EAAM,MAAM0B,GAAYC,EAAQ,EAAE,IAAI,CAACW,GAAIhB,MAAMe,EAAWC,GAAIZ,IAAaJ,CAAC,CAAC;AAAA,sBAAA;AAAA,oBAAA,EAClF,CACF;AAAA,kBAAA;AAAA,gBAAA,EACF,CACF,IACED,IACFwB,GAAA,IAEA7C,EAAM,IAAI,CAACsC,GAAI/E,MAAU8E,EAAWC,GAAI/E,CAAK,CAAC;AAAA,gBAE/CwG;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAEL;AAAA,UACC,CAACzD,KAAa,CAACN,EAAM,UAAU,CAACS,IAC/B,gBAAA3B,EAAC,MAAA,EAAG,WAAU,kCAAkC,UAAAyB,KAAsB,qBAAoB,IACxF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEN8C;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type IsOptionEnabled = (index: number) => boolean;
|
|
2
|
+
/** The first enabled option, or -1. */
|
|
3
|
+
export declare function firstOption(count: number, isEnabled: IsOptionEnabled): number;
|
|
4
|
+
/** The last enabled option, or -1. */
|
|
5
|
+
export declare function lastOption(count: number, isEnabled: IsOptionEnabled): number;
|
|
6
|
+
/**
|
|
7
|
+
* The enabled option `steps` options after `from` (before it for a negative
|
|
8
|
+
* count), stopping at the first or the last one. With no active option, a move
|
|
9
|
+
* down starts at the first option and a move up at the last.
|
|
10
|
+
*/
|
|
11
|
+
export declare function moveOption(count: number, isEnabled: IsOptionEnabled, from: number, steps: number): number;
|
|
12
|
+
/**
|
|
13
|
+
* Type-ahead: the next enabled option whose text starts with what was typed.
|
|
14
|
+
* One character typed again and again ("ttt") steps through the options that
|
|
15
|
+
* start with it; a longer string keeps the current option while it matches.
|
|
16
|
+
*/
|
|
17
|
+
export declare function matchOption(texts: string[], isEnabled: IsOptionEnabled, typed: string, from: number): number;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function h(r, e) {
|
|
2
|
+
for (let t = 0; t < r; t++)
|
|
3
|
+
if (e(t))
|
|
4
|
+
return t;
|
|
5
|
+
return -1;
|
|
6
|
+
}
|
|
7
|
+
function s(r, e) {
|
|
8
|
+
for (let t = r - 1; t >= 0; t--)
|
|
9
|
+
if (e(t))
|
|
10
|
+
return t;
|
|
11
|
+
return -1;
|
|
12
|
+
}
|
|
13
|
+
function p(r, e, t, i) {
|
|
14
|
+
if (t < 0)
|
|
15
|
+
return i > 0 ? h(r, e) : s(r, e);
|
|
16
|
+
const n = i > 0 ? 1 : -1;
|
|
17
|
+
let f = t, c = Math.abs(i);
|
|
18
|
+
for (let o = t + n; o >= 0 && o < r && c > 0; o += n)
|
|
19
|
+
e(o) && (f = o, c--);
|
|
20
|
+
return f;
|
|
21
|
+
}
|
|
22
|
+
function x(r, e, t, i) {
|
|
23
|
+
var l;
|
|
24
|
+
const n = t.toLowerCase(), f = Array.from(n).every((a) => a === n.charAt(0)), c = f ? n.charAt(0) : n, o = f ? i + 1 : Math.max(i, 0);
|
|
25
|
+
for (let a = 0; a < r.length; a++) {
|
|
26
|
+
const u = (o + a) % r.length;
|
|
27
|
+
if (e(u) && ((l = r[u]) != null && l.toLowerCase().startsWith(c)))
|
|
28
|
+
return u;
|
|
29
|
+
}
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
h as firstOption,
|
|
34
|
+
s as lastOption,
|
|
35
|
+
x as matchOption,
|
|
36
|
+
p as moveOption
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=optionNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optionNavigation.js","sources":["../../../../src/components/inputs/selectField/optionNavigation.ts"],"sourcesContent":["// Moves of the active option over a select's options, by index in the order\n// they are drawn. A disabled option is passed over, as in a native select.\n\nexport type IsOptionEnabled = (index: number) => boolean;\n\n/** The first enabled option, or -1. */\nexport function firstOption(count: number, isEnabled: IsOptionEnabled): number {\n for (let index = 0; index < count; index++) {\n if (isEnabled(index)) {\n return index;\n }\n }\n return -1;\n}\n\n/** The last enabled option, or -1. */\nexport function lastOption(count: number, isEnabled: IsOptionEnabled): number {\n for (let index = count - 1; index >= 0; index--) {\n if (isEnabled(index)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The enabled option `steps` options after `from` (before it for a negative\n * count), stopping at the first or the last one. With no active option, a move\n * down starts at the first option and a move up at the last.\n */\nexport function moveOption(count: number, isEnabled: IsOptionEnabled, from: number, steps: number): number {\n if (from < 0) {\n return steps > 0 ? firstOption(count, isEnabled) : lastOption(count, isEnabled);\n }\n const direction = steps > 0 ? 1 : -1;\n let result = from;\n let left = Math.abs(steps);\n for (let index = from + direction; index >= 0 && index < count && left > 0; index += direction) {\n if (isEnabled(index)) {\n result = index;\n left--;\n }\n }\n return result;\n}\n\n/**\n * Type-ahead: the next enabled option whose text starts with what was typed.\n * One character typed again and again (\"ttt\") steps through the options that\n * start with it; a longer string keeps the current option while it matches.\n */\nexport function matchOption(texts: string[], isEnabled: IsOptionEnabled, typed: string, from: number): number {\n const query = typed.toLowerCase();\n const repeated = Array.from(query).every((char) => char === query.charAt(0));\n const prefix = repeated ? query.charAt(0) : query;\n const start = repeated ? from + 1 : Math.max(from, 0);\n for (let step = 0; step < texts.length; step++) {\n const index = (start + step) % texts.length;\n if (isEnabled(index) && texts[index]?.toLowerCase().startsWith(prefix)) {\n return index;\n }\n }\n return -1;\n}\n"],"names":["firstOption","count","isEnabled","index","lastOption","moveOption","from","steps","direction","result","left","matchOption","texts","typed","_a","query","repeated","char","prefix","start","step"],"mappings":"AAMO,SAASA,EAAYC,GAAeC,GAAoC;AAC7E,WAASC,IAAQ,GAAGA,IAAQF,GAAOE;AACjC,QAAID,EAAUC,CAAK;AACjB,aAAOA;AAGX,SAAO;AACT;AAGO,SAASC,EAAWH,GAAeC,GAAoC;AAC5E,WAASC,IAAQF,IAAQ,GAAGE,KAAS,GAAGA;AACtC,QAAID,EAAUC,CAAK;AACjB,aAAOA;AAGX,SAAO;AACT;AAOO,SAASE,EAAWJ,GAAeC,GAA4BI,GAAcC,GAAuB;AACzG,MAAID,IAAO;AACT,WAAOC,IAAQ,IAAIP,EAAYC,GAAOC,CAAS,IAAIE,EAAWH,GAAOC,CAAS;AAEhF,QAAMM,IAAYD,IAAQ,IAAI,IAAI;AAClC,MAAIE,IAASH,GACTI,IAAO,KAAK,IAAIH,CAAK;AACzB,WAASJ,IAAQG,IAAOE,GAAWL,KAAS,KAAKA,IAAQF,KAASS,IAAO,GAAGP,KAASK;AACnF,IAAIN,EAAUC,CAAK,MACjBM,IAASN,GACTO;AAGJ,SAAOD;AACT;AAOO,SAASE,EAAYC,GAAiBV,GAA4BW,GAAeP,GAAsB;AA7CvG,MAAAQ;AA8CL,QAAMC,IAAQF,EAAM,YAAA,GACdG,IAAW,MAAM,KAAKD,CAAK,EAAE,MAAM,CAACE,MAASA,MAASF,EAAM,OAAO,CAAC,CAAC,GACrEG,IAASF,IAAWD,EAAM,OAAO,CAAC,IAAIA,GACtCI,IAAQH,IAAWV,IAAO,IAAI,KAAK,IAAIA,GAAM,CAAC;AACpD,WAASc,IAAO,GAAGA,IAAOR,EAAM,QAAQQ,KAAQ;AAC9C,UAAMjB,KAASgB,IAAQC,KAAQR,EAAM;AACrC,QAAIV,EAAUC,CAAK,OAAKW,IAAAF,EAAMT,CAAK,MAAX,QAAAW,EAAc,cAAc,WAAWI;AAC7D,aAAOf;AAAA,EAEX;AACA,SAAO;AACT;"}
|
|
@@ -5,6 +5,13 @@ import { MenuItemProps } from "../../navigation/menu";
|
|
|
5
5
|
export type OnSelectChange = (e: SyntheticEvent, data: SelectFieldProps) => void;
|
|
6
6
|
export interface SelectFieldProps {
|
|
7
7
|
className?: string;
|
|
8
|
+
/**
|
|
9
|
+
* The selected value, or the values of a `multiple` field. Any value but
|
|
10
|
+
* `undefined` makes the field controlled: it shows this value and nothing
|
|
11
|
+
* else, and a pick, a chip delete or a clear only asks for a change through
|
|
12
|
+
* `onChange`. `null` means nothing is selected. While `value` is `undefined`,
|
|
13
|
+
* the field keeps its own value, starting from `defaultValue`.
|
|
14
|
+
*/
|
|
8
15
|
value?: null | string | number | (string | number | undefined | null)[];
|
|
9
16
|
defaultValue?: null | string | number | (string | number)[];
|
|
10
17
|
onChange?: OnSelectChange;
|
|
@@ -16,11 +23,21 @@ export interface SelectFieldProps {
|
|
|
16
23
|
menuMiddleware?: DropdownItemProps["menuMiddleware"];
|
|
17
24
|
menuNoItemsMessage?: React.ReactNode;
|
|
18
25
|
menuContainer?: HTMLElement;
|
|
26
|
+
/**
|
|
27
|
+
* A search box for the options: `true` puts it in the field, where it takes
|
|
28
|
+
* the focus and is the combobox; `"menu"` puts it at the top of the menu,
|
|
29
|
+
* which moves the focus into it when it opens.
|
|
30
|
+
*/
|
|
19
31
|
search?: true | false | "menu";
|
|
20
32
|
chips?: boolean;
|
|
21
33
|
isFocused?: boolean;
|
|
22
34
|
error?: boolean;
|
|
23
35
|
items: DropdownItem[];
|
|
36
|
+
/**
|
|
37
|
+
* Visible label, drawn above the field (an `inline` field draws none). It
|
|
38
|
+
* names the combobox, whose value is the selected text: "Country", "Russia".
|
|
39
|
+
* With `chips` the chips' texts follow it in the name: "Labels Backend Docs".
|
|
40
|
+
*/
|
|
24
41
|
label?: string;
|
|
25
42
|
variant?: "outlined" | "filled";
|
|
26
43
|
/** Height of the field, as for TextField: `small` (40px, for toolbars), `medium` (default) or `large`. */
|
|
@@ -33,6 +50,12 @@ export interface SelectFieldProps {
|
|
|
33
50
|
inline?: boolean;
|
|
34
51
|
endAdornment?: React.ReactNode;
|
|
35
52
|
hideSelectArrowIcon?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Draws an option in place of the default one. It gets the option's props
|
|
55
|
+
* and returns its `<li>`: pass `id`, `role`, `aria-selected`, `aria-disabled`,
|
|
56
|
+
* `className` and `onClick` on to it, so the option can be reached from the
|
|
57
|
+
* keyboard, read out and picked.
|
|
58
|
+
*/
|
|
36
59
|
optionRenderer?: (args: MenuItemProps) => React.ReactNode;
|
|
37
60
|
/** Shows a clear button to reset the selection. */
|
|
38
61
|
clearable?: boolean;
|
|
@@ -44,8 +67,15 @@ export interface SelectFieldProps {
|
|
|
44
67
|
virtualized?: boolean;
|
|
45
68
|
/** Row height (px) used when `virtualized`. */
|
|
46
69
|
itemHeight?: number;
|
|
47
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Accessible name of the combobox. Replaces the name the visible `label`
|
|
72
|
+
* gives it; a field without a drawn label needs it.
|
|
73
|
+
*/
|
|
48
74
|
"aria-label"?: string;
|
|
75
|
+
/**
|
|
76
|
+
* Id of the control, the part of the field that holds the selected text. It is
|
|
77
|
+
* the combobox, unless `search` puts a search box in it: then the box is.
|
|
78
|
+
*/
|
|
49
79
|
id?: string;
|
|
50
80
|
}
|
|
51
81
|
export declare const SelectField: React.ForwardRefExoticComponent<SelectFieldProps & React.RefAttributes<HTMLSpanElement>>;
|