@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,173 +1,218 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import
|
|
4
|
-
import { createPortal as
|
|
5
|
-
import { Button as
|
|
6
|
-
import { Icon as
|
|
7
|
-
import { useControllableState as
|
|
8
|
-
import {
|
|
9
|
-
|
|
1
|
+
import { jsxs as d, jsx as t, Fragment as V } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as ae, useState as ce, useRef as f, useEffect as F } from "react";
|
|
3
|
+
import ie from "clsx";
|
|
4
|
+
import { createPortal as ue } from "react-dom";
|
|
5
|
+
import { Button as w } from "../../inputs/button/button.js";
|
|
6
|
+
import { Icon as C } from "../../base/icon/icon.js";
|
|
7
|
+
import { useControllableState as de } from "../../../hooks/useControllableState.js";
|
|
8
|
+
import { FOCUSABLE as J } from "../../../hooks/useFocusTrap.js";
|
|
9
|
+
import { useForkRef as fe } from "../../../hooks/useForkRef.js";
|
|
10
|
+
import { useSafeLayoutEffect as E } from "../../../hooks/useSafeLayoutEffect.js";
|
|
11
|
+
import { hasOverlayLayerAbove as j } from "../../../utils/overlayLayer.js";
|
|
12
|
+
const me = {
|
|
10
13
|
expandRow: "Expand to full row",
|
|
11
14
|
collapseRow: "Collapse to grid",
|
|
12
15
|
expandFullscreen: "Expand to fullscreen",
|
|
13
16
|
closeFullscreen: "Close fullscreen",
|
|
14
17
|
placeholder: "Panel is open in fullscreen",
|
|
15
18
|
placeholderClose: "Close"
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
19
|
+
}, q = (l, o) => typeof l == "function" ? l(o) : l, pe = (l, o) => typeof l == "function" ? l(o) : l, G = (l) => {
|
|
20
|
+
for (const o of l)
|
|
21
|
+
if (!(!(o instanceof HTMLElement) || !o.isConnected) && (o.focus(), o.getRootNode().activeElement === o))
|
|
22
|
+
return;
|
|
23
|
+
}, H = (l) => Array.from(l.querySelectorAll(J)).filter(
|
|
24
|
+
// Older browsers (and jsdom) lack checkVisibility: count every match there.
|
|
25
|
+
(o) => typeof o.checkVisibility != "function" || o.checkVisibility({ visibilityProperty: !0 })
|
|
26
|
+
), Ne = ae(function({
|
|
27
|
+
className: o,
|
|
28
|
+
header: N,
|
|
29
|
+
mode: Q,
|
|
30
|
+
defaultMode: W = "tile",
|
|
31
|
+
onModeChange: X,
|
|
32
|
+
disableExpand: g = !1,
|
|
33
|
+
noControls: Y = !1,
|
|
34
|
+
renderControls: k,
|
|
35
|
+
closeOnOutsideClick: Z = !0,
|
|
36
|
+
closeOnEsc: L = !0,
|
|
37
|
+
labels: $,
|
|
38
|
+
children: P
|
|
39
|
+
}, ee) {
|
|
40
|
+
const [ne, i] = de({
|
|
41
|
+
value: Q,
|
|
42
|
+
defaultValue: W,
|
|
43
|
+
onChange: X
|
|
44
|
+
}), s = { ...me, ...$ }, [v, oe] = ce(), p = f(null), D = f(null), te = fe(ee, D), S = f(null), A = f(null), K = f(null), x = f(null), z = f(!1);
|
|
45
|
+
E(() => {
|
|
46
|
+
oe(document.body);
|
|
37
47
|
}, []);
|
|
38
|
-
const
|
|
39
|
-
mode:
|
|
48
|
+
const m = g ? "tile" : ne, u = m === "row", a = m === "fullscreen", B = () => i((e) => e === "row" ? "tile" : "row"), T = () => i("fullscreen"), I = () => i("tile"), le = (e) => ({
|
|
49
|
+
mode: m,
|
|
40
50
|
isFullscreen: e,
|
|
41
|
-
isFullRow: e ? !1 :
|
|
42
|
-
setMode:
|
|
43
|
-
toggleRow:
|
|
44
|
-
openFullscreen:
|
|
45
|
-
closeFullscreen:
|
|
46
|
-
labels:
|
|
47
|
-
}),
|
|
48
|
-
|
|
51
|
+
isFullRow: e ? !1 : u,
|
|
52
|
+
setMode: i,
|
|
53
|
+
toggleRow: B,
|
|
54
|
+
openFullscreen: T,
|
|
55
|
+
closeFullscreen: I,
|
|
56
|
+
labels: s
|
|
57
|
+
}), se = (e) => e ? /* @__PURE__ */ t(
|
|
58
|
+
w,
|
|
49
59
|
{
|
|
60
|
+
ref: A,
|
|
50
61
|
type: "button",
|
|
51
62
|
variant: "outlined",
|
|
52
63
|
size: "small",
|
|
53
|
-
"aria-label":
|
|
54
|
-
title:
|
|
55
|
-
onClick:
|
|
64
|
+
"aria-label": s.closeFullscreen,
|
|
65
|
+
title: s.closeFullscreen,
|
|
66
|
+
onClick: I,
|
|
56
67
|
"data-testid": "expansion-panel-close",
|
|
57
|
-
icon: /* @__PURE__ */
|
|
68
|
+
icon: /* @__PURE__ */ t(C, { name: "close", size: 18 })
|
|
58
69
|
}
|
|
59
|
-
) : /* @__PURE__ */
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
-
|
|
70
|
+
) : /* @__PURE__ */ d(V, { children: [
|
|
71
|
+
/* @__PURE__ */ t(
|
|
72
|
+
w,
|
|
62
73
|
{
|
|
63
74
|
type: "button",
|
|
64
75
|
variant: "outlined",
|
|
65
76
|
size: "small",
|
|
66
|
-
"aria-pressed":
|
|
67
|
-
"aria-label":
|
|
68
|
-
title:
|
|
69
|
-
onClick:
|
|
77
|
+
"aria-pressed": u,
|
|
78
|
+
"aria-label": u ? s.collapseRow : s.expandRow,
|
|
79
|
+
title: u ? s.collapseRow : s.expandRow,
|
|
80
|
+
onClick: B,
|
|
70
81
|
"data-testid": "expansion-panel-row",
|
|
71
|
-
icon: /* @__PURE__ */
|
|
82
|
+
icon: /* @__PURE__ */ t(C, { name: u ? "grid_view" : "table_rows", size: 18 })
|
|
72
83
|
}
|
|
73
84
|
),
|
|
74
|
-
/* @__PURE__ */
|
|
75
|
-
|
|
85
|
+
/* @__PURE__ */ t(
|
|
86
|
+
w,
|
|
76
87
|
{
|
|
88
|
+
ref: S,
|
|
77
89
|
type: "button",
|
|
78
90
|
variant: "outlined",
|
|
79
91
|
size: "small",
|
|
80
|
-
"aria-label":
|
|
81
|
-
title:
|
|
82
|
-
onClick:
|
|
92
|
+
"aria-label": s.expandFullscreen,
|
|
93
|
+
title: s.expandFullscreen,
|
|
94
|
+
onClick: T,
|
|
83
95
|
"data-testid": "expansion-panel-fullscreen",
|
|
84
|
-
icon: /* @__PURE__ */
|
|
96
|
+
icon: /* @__PURE__ */ t(C, { name: "open_in_full", size: 18 })
|
|
85
97
|
}
|
|
86
98
|
)
|
|
87
|
-
] }),
|
|
88
|
-
if (
|
|
99
|
+
] }), M = (e) => {
|
|
100
|
+
if (g || Y)
|
|
89
101
|
return null;
|
|
90
|
-
const
|
|
91
|
-
return
|
|
102
|
+
const n = k ? pe(k, le(e)) : se(e);
|
|
103
|
+
return n ? /* @__PURE__ */ t("div", { className: "smwb-expansion-panel__controls", children: n }) : null;
|
|
92
104
|
};
|
|
93
|
-
|
|
94
|
-
if (!
|
|
105
|
+
F(() => {
|
|
106
|
+
if (!a)
|
|
95
107
|
return;
|
|
96
108
|
const e = document.body.style.overflow;
|
|
97
109
|
return document.body.style.overflow = "hidden", () => {
|
|
98
110
|
document.body.style.overflow = e;
|
|
99
111
|
};
|
|
100
|
-
}, [
|
|
101
|
-
if (!
|
|
112
|
+
}, [a]), F(() => {
|
|
113
|
+
if (!a || !L)
|
|
114
|
+
return;
|
|
115
|
+
const e = (n) => {
|
|
116
|
+
n.key === "Escape" && !n.defaultPrevented && !j(p.current) && (n.preventDefault(), i("tile"));
|
|
117
|
+
};
|
|
118
|
+
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
119
|
+
}, [a, L, i]), E(() => {
|
|
120
|
+
var n, r;
|
|
121
|
+
const e = document.activeElement;
|
|
122
|
+
a ? (K.current = e === document.body ? null : e, x.current = null) : z.current && (!e || e === document.body) && G([
|
|
123
|
+
x.current,
|
|
124
|
+
K.current,
|
|
125
|
+
S.current,
|
|
126
|
+
...Array.from((r = (n = D.current) == null ? void 0 : n.querySelectorAll(J)) != null ? r : [])
|
|
127
|
+
]), z.current = a;
|
|
128
|
+
}, [a]);
|
|
129
|
+
const y = a && v !== void 0;
|
|
130
|
+
E(() => {
|
|
131
|
+
const e = p.current, n = document.activeElement;
|
|
132
|
+
!y || !e || n && n !== document.body || G([A.current, ...H(e), e]);
|
|
133
|
+
}, [y]), F(() => {
|
|
134
|
+
if (!y)
|
|
102
135
|
return;
|
|
103
|
-
const e = (
|
|
104
|
-
|
|
136
|
+
const e = (n) => {
|
|
137
|
+
var O, U;
|
|
138
|
+
const r = p.current;
|
|
139
|
+
if (n.key !== "Tab" || n.defaultPrevented || n.altKey || n.ctrlKey || n.metaKey || !r)
|
|
140
|
+
return;
|
|
141
|
+
const h = H(r), _ = (O = h[0]) != null ? O : r, R = (U = h[h.length - 1]) != null ? U : r, c = document.activeElement;
|
|
142
|
+
let b;
|
|
143
|
+
c && c !== document.body && r.contains(c) ? (n.shiftKey ? c === _ || c === r : c === R) && (b = n.shiftKey ? R : _) : !j(r) && (!c || c === document.body || r.compareDocumentPosition(c) & Node.DOCUMENT_POSITION_PRECEDING) && (b = n.shiftKey ? R : _), b && (n.preventDefault(), b.focus());
|
|
105
144
|
};
|
|
106
145
|
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
107
|
-
}, [
|
|
108
|
-
const
|
|
146
|
+
}, [y]);
|
|
147
|
+
const re = /* @__PURE__ */ d(
|
|
109
148
|
"div",
|
|
110
149
|
{
|
|
111
|
-
ref:
|
|
112
|
-
className:
|
|
150
|
+
ref: te,
|
|
151
|
+
className: ie("smwb-expansion-panel", { "smwb-expansion-panel_row": u }, o),
|
|
113
152
|
"data-testid": "expansion-panel",
|
|
114
153
|
children: [
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
|
|
154
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__head", children: [
|
|
155
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__header", children: N }),
|
|
156
|
+
M(!1)
|
|
118
157
|
] }),
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
mode:
|
|
158
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__body", children: q(P, {
|
|
159
|
+
mode: m,
|
|
121
160
|
isFullscreen: !1,
|
|
122
|
-
isFullRow:
|
|
161
|
+
isFullRow: u
|
|
123
162
|
}) })
|
|
124
163
|
]
|
|
125
164
|
}
|
|
126
165
|
);
|
|
127
|
-
return !
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
/* @__PURE__ */
|
|
131
|
-
|
|
166
|
+
return !a || !v ? re : /* @__PURE__ */ d(V, { children: [
|
|
167
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__placeholder", "data-testid": "expansion-panel-placeholder", children: [
|
|
168
|
+
/* @__PURE__ */ t("span", { children: s.placeholder }),
|
|
169
|
+
/* @__PURE__ */ t(
|
|
170
|
+
w,
|
|
132
171
|
{
|
|
133
172
|
type: "button",
|
|
134
173
|
variant: "outlined",
|
|
135
174
|
size: "small",
|
|
136
|
-
label:
|
|
137
|
-
onClick: () =>
|
|
175
|
+
label: s.placeholderClose,
|
|
176
|
+
onClick: () => i("tile")
|
|
138
177
|
}
|
|
139
178
|
)
|
|
140
179
|
] }),
|
|
141
|
-
|
|
142
|
-
/* @__PURE__ */
|
|
180
|
+
ue(
|
|
181
|
+
/* @__PURE__ */ t(
|
|
143
182
|
"div",
|
|
144
183
|
{
|
|
184
|
+
ref: p,
|
|
145
185
|
className: "smwb-expansion-panel__overlay smwb-dark",
|
|
186
|
+
"data-smwb-overlay-layer": "",
|
|
146
187
|
role: "dialog",
|
|
147
188
|
"aria-modal": "true",
|
|
189
|
+
tabIndex: -1,
|
|
148
190
|
"data-testid": "expansion-panel-overlay",
|
|
149
|
-
|
|
150
|
-
|
|
191
|
+
onFocus: (e) => {
|
|
192
|
+
x.current = e.target;
|
|
193
|
+
},
|
|
194
|
+
onClick: Z ? (e) => {
|
|
195
|
+
e.target === e.currentTarget && i("tile");
|
|
151
196
|
} : void 0,
|
|
152
|
-
children: /* @__PURE__ */
|
|
153
|
-
/* @__PURE__ */
|
|
154
|
-
/* @__PURE__ */
|
|
155
|
-
|
|
197
|
+
children: /* @__PURE__ */ d("div", { className: "smwb-expansion-panel__dialog", children: [
|
|
198
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__head", children: [
|
|
199
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__header", children: N }),
|
|
200
|
+
M(!0)
|
|
156
201
|
] }),
|
|
157
|
-
/* @__PURE__ */
|
|
158
|
-
mode:
|
|
202
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__body smwb-expansion-panel__body_fullscreen", children: q(P, {
|
|
203
|
+
mode: m,
|
|
159
204
|
isFullscreen: !0,
|
|
160
205
|
isFullRow: !1
|
|
161
206
|
}) })
|
|
162
207
|
] })
|
|
163
208
|
}
|
|
164
209
|
),
|
|
165
|
-
|
|
210
|
+
v
|
|
166
211
|
)
|
|
167
212
|
] });
|
|
168
213
|
});
|
|
169
214
|
export {
|
|
170
|
-
|
|
171
|
-
|
|
215
|
+
Ne as ExpansionPanel,
|
|
216
|
+
Ne as default
|
|
172
217
|
};
|
|
173
218
|
//# sourceMappingURL=expansionPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expansionPanel.js","sources":["../../../../../src/components/dataDisplay/expansionPanel/expansionPanel.tsx"],"sourcesContent":["import React, { forwardRef, ReactNode, useEffect, useState } from \"react\";\nimport cn from \"clsx\";\nimport { createPortal } from \"react-dom\";\nimport Button from \"../../inputs/button/button\";\nimport Icon from \"../../base/icon/icon\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\n\nexport type ExpansionMode = \"tile\" | \"row\" | \"fullscreen\";\n\nexport interface ExpansionPanelLabels {\n /** Tooltip/aria for the control that expands a tile to a full grid row. */\n expandRow?: string;\n /** Tooltip/aria for the control that collapses a full row back to a tile. */\n collapseRow?: string;\n /** Tooltip/aria for the control that opens the panel fullscreen. */\n expandFullscreen?: string;\n /** Tooltip/aria for the control that closes fullscreen. */\n closeFullscreen?: string;\n /** Text shown in the original slot while the panel is fullscreen. */\n placeholder?: string;\n /** Label of the button in the placeholder that closes fullscreen. */\n placeholderClose?: string;\n}\n\nexport interface ExpansionPanelRenderContext {\n mode: ExpansionMode;\n isFullscreen: boolean;\n isFullRow: boolean;\n}\n\nexport interface ExpansionPanelControlsContext extends ExpansionPanelRenderContext {\n setMode: (next: ExpansionMode | ((current: ExpansionMode) => ExpansionMode)) => void;\n toggleRow: () => void;\n openFullscreen: () => void;\n closeFullscreen: () => void;\n labels: Required<ExpansionPanelLabels>;\n}\n\ntype ExpansionPanelChildren = ReactNode | ((ctx: ExpansionPanelRenderContext) => ReactNode);\ntype ExpansionPanelControls = ReactNode | ((ctx: ExpansionPanelControlsContext) => ReactNode);\n\nexport interface ExpansionPanelProps {\n className?: string;\n /** Content of the panel header (left side of the control bar). */\n header?: ReactNode;\n /** Controlled layout mode. */\n mode?: ExpansionMode;\n /** Initial mode for the uncontrolled component. */\n defaultMode?: ExpansionMode;\n /** Fired with the next mode whenever it changes. */\n onModeChange?: (mode: ExpansionMode) => void;\n /** Render the panel as a plain card without row/fullscreen controls. */\n disableExpand?: boolean;\n /** Hide the built-in control bar (consumer drives `mode` itself). */\n noControls?: boolean;\n /** Replace the built-in row/fullscreen controls with a custom node or render prop. */\n renderControls?: ExpansionPanelControls;\n /** Close fullscreen when the backdrop is clicked. Default: true. */\n closeOnOutsideClick?: boolean;\n /** Close fullscreen when Escape is pressed. Default: true. */\n closeOnEsc?: boolean;\n /** Accessible labels / tooltips for the built-in controls. */\n labels?: ExpansionPanelLabels;\n children?: ExpansionPanelChildren;\n}\n\nconst DEFAULT_LABELS: Required<ExpansionPanelLabels> = {\n expandRow: \"Expand to full row\",\n collapseRow: \"Collapse to grid\",\n expandFullscreen: \"Expand to fullscreen\",\n closeFullscreen: \"Close fullscreen\",\n placeholder: \"Panel is open in fullscreen\",\n placeholderClose: \"Close\",\n};\n\nconst resolveChildren = (children: ExpansionPanelChildren, ctx: ExpansionPanelRenderContext): ReactNode =>\n typeof children === \"function\" ? children(ctx) : children;\n\nconst resolveControls = (controls: ExpansionPanelControls, ctx: ExpansionPanelControlsContext): ReactNode =>\n typeof controls === \"function\" ? controls(ctx) : controls;\n\nexport const ExpansionPanel = forwardRef<HTMLDivElement, ExpansionPanelProps>(function ExpansionPanel(\n {\n className,\n header,\n mode: modeProp,\n defaultMode = \"tile\",\n onModeChange,\n disableExpand = false,\n noControls = false,\n renderControls,\n closeOnOutsideClick = true,\n closeOnEsc = true,\n labels,\n children,\n },\n ref\n) {\n const [mode, setMode] = useControllableState<ExpansionMode>({\n value: modeProp,\n defaultValue: defaultMode,\n onChange: onModeChange,\n });\n\n const l = { ...DEFAULT_LABELS, ...labels };\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n\n useSafeLayoutEffect(() => {\n setDomRoot(document.body);\n }, []);\n\n // `disableExpand` renders a plain card regardless of the requested mode,\n // without mutating state — works in both controlled and uncontrolled use.\n const effectiveMode: ExpansionMode = disableExpand ? \"tile\" : mode;\n const isFullRow = effectiveMode === \"row\";\n const isFullscreen = effectiveMode === \"fullscreen\";\n\n const toggleRow = () => setMode((current) => (current === \"row\" ? \"tile\" : \"row\"));\n const openFullscreen = () => setMode(\"fullscreen\");\n const closeFullscreen = () => setMode(\"tile\");\n\n const controlsContext = (overlay: boolean): ExpansionPanelControlsContext => ({\n mode: effectiveMode,\n isFullscreen: overlay,\n isFullRow: overlay ? false : isFullRow,\n setMode,\n toggleRow,\n openFullscreen,\n closeFullscreen,\n labels: l,\n });\n\n const defaultControls = (overlay: boolean) => {\n if (overlay) {\n return (\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-label={l.closeFullscreen}\n title={l.closeFullscreen}\n onClick={closeFullscreen}\n data-testid=\"expansion-panel-close\"\n icon={<Icon name=\"close\" size={18} />}\n />\n );\n }\n\n return (\n <>\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-pressed={isFullRow}\n aria-label={isFullRow ? l.collapseRow : l.expandRow}\n title={isFullRow ? l.collapseRow : l.expandRow}\n onClick={toggleRow}\n data-testid=\"expansion-panel-row\"\n icon={<Icon name={isFullRow ? \"grid_view\" : \"table_rows\"} size={18} />}\n />\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-label={l.expandFullscreen}\n title={l.expandFullscreen}\n onClick={openFullscreen}\n data-testid=\"expansion-panel-fullscreen\"\n icon={<Icon name=\"open_in_full\" size={18} />}\n />\n </>\n );\n };\n\n const renderControlBar = (overlay: boolean) => {\n if (disableExpand || noControls) {\n return null;\n }\n\n const content = renderControls\n ? resolveControls(renderControls, controlsContext(overlay))\n : defaultControls(overlay);\n\n if (!content) {\n return null;\n }\n\n return <div className=\"smwb-expansion-panel__controls\">{content}</div>;\n };\n\n useEffect(() => {\n if (!isFullscreen) {\n return;\n }\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isFullscreen]);\n\n useEffect(() => {\n if (!isFullscreen || !closeOnEsc) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setMode(\"tile\");\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [isFullscreen, closeOnEsc, setMode]);\n\n const card = (\n <div\n ref={ref}\n className={cn(\"smwb-expansion-panel\", { \"smwb-expansion-panel_row\": isFullRow }, className)}\n data-testid=\"expansion-panel\"\n >\n <div className=\"smwb-expansion-panel__head\">\n <div className=\"smwb-expansion-panel__header\">{header}</div>\n {renderControlBar(false)}\n </div>\n <div className=\"smwb-expansion-panel__body\">\n {resolveChildren(children, {\n mode: effectiveMode,\n isFullscreen: false,\n isFullRow,\n })}\n </div>\n </div>\n );\n\n if (!isFullscreen || !domRoot) {\n return card;\n }\n\n return (\n <>\n <div className=\"smwb-expansion-panel__placeholder\" data-testid=\"expansion-panel-placeholder\">\n <span>{l.placeholder}</span>\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n label={l.placeholderClose}\n onClick={() => setMode(\"tile\")}\n />\n </div>\n {createPortal(\n <div\n className=\"smwb-expansion-panel__overlay smwb-dark\"\n role=\"dialog\"\n aria-modal=\"true\"\n data-testid=\"expansion-panel-overlay\"\n onClick={\n closeOnOutsideClick\n ? (e) => {\n if (e.target === e.currentTarget) {\n setMode(\"tile\");\n }\n }\n : undefined\n }\n >\n <div className=\"smwb-expansion-panel__dialog\">\n <div className=\"smwb-expansion-panel__head\">\n <div className=\"smwb-expansion-panel__header\">{header}</div>\n {renderControlBar(true)}\n </div>\n <div className=\"smwb-expansion-panel__body smwb-expansion-panel__body_fullscreen\">\n {resolveChildren(children, {\n mode: effectiveMode,\n isFullscreen: true,\n isFullRow: false,\n })}\n </div>\n </div>\n </div>,\n domRoot\n )}\n </>\n );\n});\n\nexport default ExpansionPanel;\n"],"names":["DEFAULT_LABELS","resolveChildren","children","ctx","resolveControls","controls","ExpansionPanel","forwardRef","className","header","modeProp","defaultMode","onModeChange","disableExpand","noControls","renderControls","closeOnOutsideClick","closeOnEsc","labels","ref","mode","setMode","useControllableState","domRoot","setDomRoot","useState","useSafeLayoutEffect","effectiveMode","isFullRow","isFullscreen","toggleRow","current","openFullscreen","closeFullscreen","controlsContext","overlay","defaultControls","jsx","Button","Icon","jsxs","Fragment","renderControlBar","content","useEffect","prev","onKeyDown","event","card","cn","createPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expansionPanel.js","sources":["../../../../../src/components/dataDisplay/expansionPanel/expansionPanel.tsx"],"sourcesContent":["import React, { forwardRef, ReactNode, useEffect, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport { createPortal } from \"react-dom\";\nimport Button from \"../../inputs/button/button\";\nimport Icon from \"../../base/icon/icon\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { FOCUSABLE } from \"../../../hooks/useFocusTrap\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { hasOverlayLayerAbove } from \"../../../utils/overlayLayer\";\n\nexport type ExpansionMode = \"tile\" | \"row\" | \"fullscreen\";\n\nexport interface ExpansionPanelLabels {\n /** Tooltip/aria for the control that expands a tile to a full grid row. */\n expandRow?: string;\n /** Tooltip/aria for the control that collapses a full row back to a tile. */\n collapseRow?: string;\n /** Tooltip/aria for the control that opens the panel fullscreen. */\n expandFullscreen?: string;\n /** Tooltip/aria for the control that closes fullscreen. */\n closeFullscreen?: string;\n /** Text shown in the original slot while the panel is fullscreen. */\n placeholder?: string;\n /** Label of the button in the placeholder that closes fullscreen. */\n placeholderClose?: string;\n}\n\nexport interface ExpansionPanelRenderContext {\n mode: ExpansionMode;\n isFullscreen: boolean;\n isFullRow: boolean;\n}\n\nexport interface ExpansionPanelControlsContext extends ExpansionPanelRenderContext {\n setMode: (next: ExpansionMode | ((current: ExpansionMode) => ExpansionMode)) => void;\n toggleRow: () => void;\n openFullscreen: () => void;\n closeFullscreen: () => void;\n labels: Required<ExpansionPanelLabels>;\n}\n\ntype ExpansionPanelChildren = ReactNode | ((ctx: ExpansionPanelRenderContext) => ReactNode);\ntype ExpansionPanelControls = ReactNode | ((ctx: ExpansionPanelControlsContext) => ReactNode);\n\nexport interface ExpansionPanelProps {\n className?: string;\n /** Content of the panel header (left side of the control bar). */\n header?: ReactNode;\n /** Controlled layout mode. */\n mode?: ExpansionMode;\n /** Initial mode for the uncontrolled component. */\n defaultMode?: ExpansionMode;\n /** Fired with the next mode whenever it changes. */\n onModeChange?: (mode: ExpansionMode) => void;\n /** Render the panel as a plain card without row/fullscreen controls. */\n disableExpand?: boolean;\n /** Hide the built-in control bar (consumer drives `mode` itself). */\n noControls?: boolean;\n /** Replace the built-in row/fullscreen controls with a custom node or render prop. */\n renderControls?: ExpansionPanelControls;\n /** Close fullscreen when the backdrop is clicked. Default: true. */\n closeOnOutsideClick?: boolean;\n /** Close fullscreen when Escape is pressed. Default: true. */\n closeOnEsc?: boolean;\n /** Accessible labels / tooltips for the built-in controls. */\n labels?: ExpansionPanelLabels;\n children?: ExpansionPanelChildren;\n}\n\nconst DEFAULT_LABELS: Required<ExpansionPanelLabels> = {\n expandRow: \"Expand to full row\",\n collapseRow: \"Collapse to grid\",\n expandFullscreen: \"Expand to fullscreen\",\n closeFullscreen: \"Close fullscreen\",\n placeholder: \"Panel is open in fullscreen\",\n placeholderClose: \"Close\",\n};\n\nconst resolveChildren = (children: ExpansionPanelChildren, ctx: ExpansionPanelRenderContext): ReactNode =>\n typeof children === \"function\" ? children(ctx) : children;\n\nconst resolveControls = (controls: ExpansionPanelControls, ctx: ExpansionPanelControlsContext): ReactNode =>\n typeof controls === \"function\" ? controls(ctx) : controls;\n\n/** Focuses the first of `targets` that is in the document and takes focus. */\nconst focusFirst = (targets: Array<Element | null>): void => {\n for (const target of targets) {\n if (!(target instanceof HTMLElement) || !target.isConnected) continue;\n target.focus();\n if ((target.getRootNode() as Document | ShadowRoot).activeElement === target) return;\n }\n};\n\n/** The elements in `container` that Tab can reach, in document order. */\nconst tabbables = (container: HTMLElement): HTMLElement[] =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n // Older browsers (and jsdom) lack checkVisibility: count every match there.\n (el) => typeof el.checkVisibility !== \"function\" || el.checkVisibility({ visibilityProperty: true })\n );\n\nexport const ExpansionPanel = forwardRef<HTMLDivElement, ExpansionPanelProps>(function ExpansionPanel(\n {\n className,\n header,\n mode: modeProp,\n defaultMode = \"tile\",\n onModeChange,\n disableExpand = false,\n noControls = false,\n renderControls,\n closeOnOutsideClick = true,\n closeOnEsc = true,\n labels,\n children,\n },\n ref\n) {\n const [mode, setMode] = useControllableState<ExpansionMode>({\n value: modeProp,\n defaultValue: defaultMode,\n onChange: onModeChange,\n });\n\n const l = { ...DEFAULT_LABELS, ...labels };\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n const overlayRef = useRef<HTMLDivElement>(null);\n const cardRef = useRef<HTMLDivElement>(null);\n const cardRefs = useForkRef(ref, cardRef);\n const fullscreenButtonRef = useRef<HTMLButtonElement | HTMLAnchorElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement | HTMLAnchorElement>(null);\n // Where focus goes back to when fullscreen ends; see the effect that sets them.\n const openerRef = useRef<Element | null>(null);\n const lastFocusedRef = useRef<Element | null>(null);\n const wasFullscreenRef = useRef(false);\n\n useSafeLayoutEffect(() => {\n setDomRoot(document.body);\n }, []);\n\n // `disableExpand` renders a plain card regardless of the requested mode,\n // without mutating state — works in both controlled and uncontrolled use.\n const effectiveMode: ExpansionMode = disableExpand ? \"tile\" : mode;\n const isFullRow = effectiveMode === \"row\";\n const isFullscreen = effectiveMode === \"fullscreen\";\n\n const toggleRow = () => setMode((current) => (current === \"row\" ? \"tile\" : \"row\"));\n const openFullscreen = () => setMode(\"fullscreen\");\n const closeFullscreen = () => setMode(\"tile\");\n\n const controlsContext = (overlay: boolean): ExpansionPanelControlsContext => ({\n mode: effectiveMode,\n isFullscreen: overlay,\n isFullRow: overlay ? false : isFullRow,\n setMode,\n toggleRow,\n openFullscreen,\n closeFullscreen,\n labels: l,\n });\n\n const defaultControls = (overlay: boolean) => {\n if (overlay) {\n return (\n <Button\n ref={closeButtonRef}\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-label={l.closeFullscreen}\n title={l.closeFullscreen}\n onClick={closeFullscreen}\n data-testid=\"expansion-panel-close\"\n icon={<Icon name=\"close\" size={18} />}\n />\n );\n }\n\n return (\n <>\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-pressed={isFullRow}\n aria-label={isFullRow ? l.collapseRow : l.expandRow}\n title={isFullRow ? l.collapseRow : l.expandRow}\n onClick={toggleRow}\n data-testid=\"expansion-panel-row\"\n icon={<Icon name={isFullRow ? \"grid_view\" : \"table_rows\"} size={18} />}\n />\n <Button\n ref={fullscreenButtonRef}\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n aria-label={l.expandFullscreen}\n title={l.expandFullscreen}\n onClick={openFullscreen}\n data-testid=\"expansion-panel-fullscreen\"\n icon={<Icon name=\"open_in_full\" size={18} />}\n />\n </>\n );\n };\n\n const renderControlBar = (overlay: boolean) => {\n if (disableExpand || noControls) {\n return null;\n }\n\n const content = renderControls\n ? resolveControls(renderControls, controlsContext(overlay))\n : defaultControls(overlay);\n\n if (!content) {\n return null;\n }\n\n return <div className=\"smwb-expansion-panel__controls\">{content}</div>;\n };\n\n useEffect(() => {\n if (!isFullscreen) {\n return;\n }\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [isFullscreen]);\n\n useEffect(() => {\n if (!isFullscreen || !closeOnEsc) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n // An open layer above the overlay takes the Escape first: a select menu opened\n // from the panel, even one rendered inside it (`menuContainer`). An Escape handled\n // inside the panel, e.g. by a menu closing on it, keeps fullscreen too.\n if (event.key === \"Escape\" && !event.defaultPrevented && !hasOverlayLayerAbove(overlayRef.current)) {\n // Handled: a FloatingWindow, Modal or Sheet around the panel skips it. Focus goes\n // back into the tile, and their listener may come later in this dispatch.\n event.preventDefault();\n setMode(\"tile\");\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [isFullscreen, closeOnEsc, setMode]);\n\n // The overlay and the card replace each other, so focus in the one that goes falls to\n // <body>: focus in the overlay when fullscreen ends, on the tile's button when it\n // begins. A FloatingWindow around the panel then misses the next Escape, as it takes\n // Escape only while focus is inside it. So when fullscreen ends with focus on <body>,\n // focus goes to the element focused last in the overlay if it survived into the tile,\n // else to what had focus when fullscreen began, else to the tile's fullscreen button,\n // else to the tile's first focusable element. Focus anywhere else is left alone.\n useSafeLayoutEffect(() => {\n const active = document.activeElement;\n if (isFullscreen) {\n openerRef.current = active === document.body ? null : active;\n lastFocusedRef.current = null;\n } else if (wasFullscreenRef.current && (!active || active === document.body)) {\n focusFirst([\n lastFocusedRef.current,\n openerRef.current,\n fullscreenButtonRef.current,\n ...Array.from(cardRef.current?.querySelectorAll(FOCUSABLE) ?? []),\n ]);\n }\n wasFullscreenRef.current = isFullscreen;\n }, [isFullscreen]);\n\n // Entering fullscreen removes the tile, so focus in it falls to <body>, behind an\n // `aria-modal` overlay: Tab goes to the page under it and a screen reader is left on\n // nothing. So when the overlay appears with focus on <body>, focus moves into it: to\n // its close button, else to its first focusable element, else to the overlay itself.\n // Focus elsewhere is left alone: on a control outside the panel that set a controlled\n // `mode`, or on an element in the overlay that focused itself.\n const overlayShown = isFullscreen && domRoot !== undefined;\n useSafeLayoutEffect(() => {\n const overlay = overlayRef.current;\n const active = document.activeElement;\n if (!overlayShown || !overlay || (active && active !== document.body)) return;\n focusFirst([closeButtonRef.current, ...tabbables(overlay), overlay]);\n }, [overlayShown]);\n\n // Tab stays in the overlay: it wraps at either end, and focus on <body> or on the page\n // under the overlay comes back into it. Tab works as usual in what was opened from the\n // panel: a layer above the overlay, or anything portaled after it (a menu, a picker\n // panel). A Tab handled already is left alone too.\n useEffect(() => {\n if (!overlayShown) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n const overlay = overlayRef.current;\n if (event.key !== \"Tab\" || event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey || !overlay) {\n return;\n }\n const items = tabbables(overlay);\n const first = items[0] ?? overlay;\n const last = items[items.length - 1] ?? overlay;\n const active = document.activeElement;\n let target: HTMLElement | undefined;\n if (active && active !== document.body && overlay.contains(active)) {\n if (event.shiftKey ? active === first || active === overlay : active === last) {\n target = event.shiftKey ? last : first;\n }\n } else if (\n !hasOverlayLayerAbove(overlay) &&\n (!active ||\n active === document.body ||\n overlay.compareDocumentPosition(active) & Node.DOCUMENT_POSITION_PRECEDING)\n ) {\n target = event.shiftKey ? last : first;\n }\n if (target) {\n event.preventDefault();\n target.focus();\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [overlayShown]);\n\n const card = (\n <div\n ref={cardRefs}\n className={cn(\"smwb-expansion-panel\", { \"smwb-expansion-panel_row\": isFullRow }, className)}\n data-testid=\"expansion-panel\"\n >\n <div className=\"smwb-expansion-panel__head\">\n <div className=\"smwb-expansion-panel__header\">{header}</div>\n {renderControlBar(false)}\n </div>\n <div className=\"smwb-expansion-panel__body\">\n {resolveChildren(children, {\n mode: effectiveMode,\n isFullscreen: false,\n isFullRow,\n })}\n </div>\n </div>\n );\n\n if (!isFullscreen || !domRoot) {\n return card;\n }\n\n return (\n <>\n <div className=\"smwb-expansion-panel__placeholder\" data-testid=\"expansion-panel-placeholder\">\n <span>{l.placeholder}</span>\n <Button\n type=\"button\"\n variant=\"outlined\"\n size=\"small\"\n label={l.placeholderClose}\n onClick={() => setMode(\"tile\")}\n />\n </div>\n {createPortal(\n <div\n ref={overlayRef}\n className=\"smwb-expansion-panel__overlay smwb-dark\"\n data-smwb-overlay-layer=\"\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n data-testid=\"expansion-panel-overlay\"\n onFocus={(e) => {\n lastFocusedRef.current = e.target;\n }}\n onClick={\n closeOnOutsideClick\n ? (e) => {\n if (e.target === e.currentTarget) {\n setMode(\"tile\");\n }\n }\n : undefined\n }\n >\n <div className=\"smwb-expansion-panel__dialog\">\n <div className=\"smwb-expansion-panel__head\">\n <div className=\"smwb-expansion-panel__header\">{header}</div>\n {renderControlBar(true)}\n </div>\n <div className=\"smwb-expansion-panel__body smwb-expansion-panel__body_fullscreen\">\n {resolveChildren(children, {\n mode: effectiveMode,\n isFullscreen: true,\n isFullRow: false,\n })}\n </div>\n </div>\n </div>,\n domRoot\n )}\n </>\n );\n});\n\nexport default ExpansionPanel;\n"],"names":["DEFAULT_LABELS","resolveChildren","children","ctx","resolveControls","controls","focusFirst","targets","target","tabbables","container","FOCUSABLE","el","ExpansionPanel","forwardRef","className","header","modeProp","defaultMode","onModeChange","disableExpand","noControls","renderControls","closeOnOutsideClick","closeOnEsc","labels","ref","mode","setMode","useControllableState","l","domRoot","setDomRoot","useState","overlayRef","useRef","cardRef","cardRefs","useForkRef","fullscreenButtonRef","closeButtonRef","openerRef","lastFocusedRef","wasFullscreenRef","useSafeLayoutEffect","effectiveMode","isFullRow","isFullscreen","toggleRow","current","openFullscreen","closeFullscreen","controlsContext","overlay","defaultControls","jsx","Button","Icon","jsxs","Fragment","renderControlBar","content","useEffect","prev","onKeyDown","event","hasOverlayLayerAbove","active","_b","_a","overlayShown","items","first","last","card","cn","createPortal"],"mappings":"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"}
|
|
@@ -1,61 +1,72 @@
|
|
|
1
|
-
import { jsx as s, jsxs as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
const
|
|
1
|
+
import { jsx as s, jsxs as _ } from "react/jsx-runtime";
|
|
2
|
+
import i, { useId as h } from "react";
|
|
3
|
+
import k from "clsx";
|
|
4
|
+
const p = (a) => typeof a == "number" ? `${a}px` : a, m = (a) => a != null && a !== !1 && a !== !0 && a !== "", y = i.forwardRef(function({ className: b, style: t, columnWidth: l, children: n, "data-testid": e = "kanban", ...d }, r) {
|
|
5
5
|
return /* @__PURE__ */ s(
|
|
6
6
|
"div",
|
|
7
7
|
{
|
|
8
|
-
"data-testid":
|
|
9
|
-
...
|
|
10
|
-
ref:
|
|
11
|
-
className:
|
|
12
|
-
style: { ...
|
|
8
|
+
"data-testid": e,
|
|
9
|
+
...d,
|
|
10
|
+
ref: r,
|
|
11
|
+
className: k("smwb-kanban", b),
|
|
12
|
+
style: l === void 0 ? t : { ...t, "--smwb-kanban-column-width": p(l) },
|
|
13
13
|
children: n
|
|
14
14
|
}
|
|
15
15
|
);
|
|
16
|
-
}), g =
|
|
17
|
-
function({
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
}), g = i.forwardRef(
|
|
17
|
+
function({
|
|
18
|
+
className: b,
|
|
19
|
+
style: t,
|
|
20
|
+
title: l,
|
|
21
|
+
count: n,
|
|
22
|
+
accent: e,
|
|
23
|
+
empty: d,
|
|
24
|
+
footer: r,
|
|
25
|
+
children: c,
|
|
26
|
+
"data-testid": o = "kanban-column",
|
|
27
|
+
...u
|
|
28
|
+
}, f) {
|
|
29
|
+
const w = `${h()}-title`, N = i.Children.toArray(c).length > 0;
|
|
30
|
+
return /* @__PURE__ */ _(
|
|
20
31
|
"div",
|
|
21
32
|
{
|
|
22
|
-
"data-testid":
|
|
33
|
+
"data-testid": o,
|
|
23
34
|
role: "group",
|
|
24
|
-
"aria-labelledby":
|
|
25
|
-
...
|
|
26
|
-
ref:
|
|
27
|
-
className:
|
|
28
|
-
style: { ...
|
|
35
|
+
"aria-labelledby": w,
|
|
36
|
+
...u,
|
|
37
|
+
ref: f,
|
|
38
|
+
className: k("smwb-kanban__column", b),
|
|
39
|
+
style: e === void 0 ? t : { ...t, "--smwb-kanban-accent": e },
|
|
29
40
|
children: [
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
/* @__PURE__ */ s("div", { className: "smwb-kanban__column-title", id:
|
|
41
|
+
/* @__PURE__ */ _("div", { className: "smwb-kanban__column-header", children: [
|
|
42
|
+
/* @__PURE__ */ s("div", { className: "smwb-kanban__column-title", id: w, children: l }),
|
|
32
43
|
n != null ? /* @__PURE__ */ s("span", { className: "smwb-kanban__count", children: n }) : null
|
|
33
44
|
] }),
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
N ? /* @__PURE__ */ s("ul", { className: "smwb-kanban__cards", role: "list", children: c }) : m(d) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__empty", children: d }) : null,
|
|
46
|
+
m(r) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__column-footer", children: r }) : null
|
|
36
47
|
]
|
|
37
48
|
}
|
|
38
49
|
);
|
|
39
50
|
}
|
|
40
|
-
),
|
|
41
|
-
return /* @__PURE__ */
|
|
51
|
+
), x = i.forwardRef(function({ className: b, style: t, title: l, href: n, titleLines: e = 3, children: d, "data-testid": r = "kanban-card", ...c }, o) {
|
|
52
|
+
return /* @__PURE__ */ _(
|
|
42
53
|
"li",
|
|
43
54
|
{
|
|
44
|
-
"data-testid":
|
|
45
|
-
...
|
|
46
|
-
ref:
|
|
47
|
-
className:
|
|
48
|
-
style: { ...
|
|
55
|
+
"data-testid": r,
|
|
56
|
+
...c,
|
|
57
|
+
ref: o,
|
|
58
|
+
className: k("smwb-kanban__card", { "smwb-kanban__card_link": !!n }, b),
|
|
59
|
+
style: { ...t, "--smwb-kanban-title-lines": String(e) },
|
|
49
60
|
children: [
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
m(l) ? n ? /* @__PURE__ */ s("a", { className: "smwb-kanban__card-title", href: n, children: l }) : /* @__PURE__ */ s("div", { className: "smwb-kanban__card-title", children: l }) : null,
|
|
62
|
+
m(d) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__card-body", children: d }) : null
|
|
52
63
|
]
|
|
53
64
|
}
|
|
54
65
|
);
|
|
55
66
|
});
|
|
56
67
|
export {
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
y as Kanban,
|
|
69
|
+
x as KanbanCard,
|
|
59
70
|
g as KanbanColumn
|
|
60
71
|
};
|
|
61
72
|
//# sourceMappingURL=kanban.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kanban.js","sources":["../../../../../src/components/dataDisplay/kanban/kanban.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode, useId } from \"react\";\nimport cn from \"clsx\";\n\nexport interface KanbanProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /**\n * The narrowest a column gets before the board scrolls sideways: a number of\n * pixels or any CSS length. 15.5rem by default.\n */\n columnWidth?: number | string;\n}\n\nexport interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n className?: string;\n /** The column's name: text or a badge. It names the column for assistive technology. */\n title: ReactNode;\n /** How many cards the column holds (it may show fewer), beside the title. Nothing is shown for null. */\n count?: number | string | null;\n /** The column's colour, a stripe along its top: any CSS colour. */\n accent?: string;\n /** Shown in place of the cards when there are none, e.g. \"Empty\". */\n empty?: ReactNode;\n /** Under the cards, e.g. a link to the rest as a list. */\n footer?: ReactNode;\n}\n\nexport interface KanbanCardProps extends Omit<HTMLAttributes<HTMLLIElement>, \"title\"> {\n className?: string;\n /** The card's title, clamped to `titleLines` lines. */\n title?: ReactNode;\n /** Makes the title a link, and the whole card open it. */\n href?: string;\n /** Lines the title is clamped to: 3 by default. */\n titleLines?: number;\n}\n\nconst cssLength = (value: number | string | undefined): string | undefined =>\n typeof value === \"number\" ? `${value}px` : value;\n\nconst present = (value: ReactNode): boolean =>\n value !== undefined && value !== null && value !== false && value !== true && value !== \"\";\n\n/** A board: KanbanColumn children side by side, scrolling sideways when they do not fit. */\nexport const Kanban = React.forwardRef<HTMLDivElement, PropsWithChildren<KanbanProps>>(function Kanban(\n { className, style, columnWidth, children, ...rest },\n ref\n) {\n return (\n <div\n data-testid
|
|
1
|
+
{"version":3,"file":"kanban.js","sources":["../../../../../src/components/dataDisplay/kanban/kanban.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode, useId } from \"react\";\nimport cn from \"clsx\";\n\nexport interface KanbanProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /**\n * The narrowest a column gets before the board scrolls sideways: a number of\n * pixels or any CSS length. 15.5rem by default.\n */\n columnWidth?: number | string;\n /** Test id of the root `<div>`; `kanban` unless given. */\n \"data-testid\"?: string;\n}\n\nexport interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n className?: string;\n /** The column's name: text or a badge. It names the column for assistive technology. */\n title: ReactNode;\n /** How many cards the column holds (it may show fewer), beside the title. Nothing is shown for null. */\n count?: number | string | null;\n /** The column's colour, a stripe along its top: any CSS colour. */\n accent?: string;\n /** Shown in place of the cards when there are none, e.g. \"Empty\". */\n empty?: ReactNode;\n /** Under the cards, e.g. a link to the rest as a list. */\n footer?: ReactNode;\n /** Test id of the column's `<div>`; `kanban-column` unless given. */\n \"data-testid\"?: string;\n}\n\nexport interface KanbanCardProps extends Omit<HTMLAttributes<HTMLLIElement>, \"title\"> {\n className?: string;\n /** The card's title, clamped to `titleLines` lines. */\n title?: ReactNode;\n /** Makes the title a link, and the whole card open it. */\n href?: string;\n /** Lines the title is clamped to: 3 by default. */\n titleLines?: number;\n /** Test id of the card's `<li>`; `kanban-card` unless given. */\n \"data-testid\"?: string;\n}\n\nconst cssLength = (value: number | string | undefined): string | undefined =>\n typeof value === \"number\" ? `${value}px` : value;\n\nconst present = (value: ReactNode): boolean =>\n value !== undefined && value !== null && value !== false && value !== true && value !== \"\";\n\n/** A board: KanbanColumn children side by side, scrolling sideways when they do not fit. */\nexport const Kanban = React.forwardRef<HTMLDivElement, PropsWithChildren<KanbanProps>>(function Kanban(\n { className, style, columnWidth, children, \"data-testid\": dataTestId = \"kanban\", ...rest },\n ref\n) {\n return (\n <div\n data-testid={dataTestId}\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban\", className)}\n style={\n columnWidth === undefined\n ? style\n : ({ ...style, \"--smwb-kanban-column-width\": cssLength(columnWidth) } as CSSProperties)\n }\n >\n {children}\n </div>\n );\n});\n\n/** A column of the board: its title and count, then its KanbanCard children, or `empty` when it has none. */\nexport const KanbanColumn = React.forwardRef<HTMLDivElement, PropsWithChildren<KanbanColumnProps>>(\n function KanbanColumn(\n {\n className,\n style,\n title,\n count,\n accent,\n empty,\n footer,\n children,\n \"data-testid\": dataTestId = \"kanban-column\",\n ...rest\n },\n ref\n ) {\n const titleId = `${useId()}-title`;\n const hasCards = React.Children.toArray(children).length > 0;\n return (\n <div\n data-testid={dataTestId}\n role=\"group\"\n aria-labelledby={titleId}\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban__column\", className)}\n style={accent === undefined ? style : ({ ...style, \"--smwb-kanban-accent\": accent } as CSSProperties)}\n >\n <div className=\"smwb-kanban__column-header\">\n <div className=\"smwb-kanban__column-title\" id={titleId}>\n {title}\n </div>\n {count !== undefined && count !== null ? <span className=\"smwb-kanban__count\">{count}</span> : null}\n </div>\n {hasCards ? (\n <ul className=\"smwb-kanban__cards\" role=\"list\">\n {children}\n </ul>\n ) : present(empty) ? (\n <div className=\"smwb-kanban__empty\">{empty}</div>\n ) : null}\n {present(footer) ? <div className=\"smwb-kanban__column-footer\">{footer}</div> : null}\n </div>\n );\n }\n);\n\n/**\n * A card on the board: its title (a link with `href`, and then the whole card\n * opens it) and the children under it.\n */\nexport const KanbanCard = React.forwardRef<HTMLLIElement, PropsWithChildren<KanbanCardProps>>(function KanbanCard(\n { className, style, title, href, titleLines = 3, children, \"data-testid\": dataTestId = \"kanban-card\", ...rest },\n ref\n) {\n return (\n <li\n data-testid={dataTestId}\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban__card\", { \"smwb-kanban__card_link\": Boolean(href) }, className)}\n style={{ ...style, \"--smwb-kanban-title-lines\": String(titleLines) } as CSSProperties}\n >\n {present(title) ? (\n href ? (\n <a className=\"smwb-kanban__card-title\" href={href}>\n {title}\n </a>\n ) : (\n <div className=\"smwb-kanban__card-title\">{title}</div>\n )\n ) : null}\n {present(children) ? <div className=\"smwb-kanban__card-body\">{children}</div> : null}\n </li>\n );\n});\n\nexport default Kanban;\n"],"names":["cssLength","value","present","Kanban","React","className","style","columnWidth","children","dataTestId","rest","ref","jsx","cn","KanbanColumn","title","count","accent","empty","footer","titleId","useId","hasCards","jsxs","KanbanCard","href","titleLines"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsxs as b, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import f, { useState as _ } from "react";
|
|
3
|
+
import l from "clsx";
|
|
4
|
+
import { useSafeLayoutEffect as K } from "../../../hooks/useSafeLayoutEffect.js";
|
|
5
|
+
import { kbdKeyLabel as x, detectKbdPlatform as N } from "./kbdKeys.js";
|
|
6
|
+
function j(e) {
|
|
7
|
+
const [s, n] = _("other");
|
|
8
|
+
return K(() => {
|
|
9
|
+
e === void 0 && n(N());
|
|
10
|
+
}, [e]), e != null ? e : s;
|
|
11
|
+
}
|
|
12
|
+
const g = f.forwardRef(function({ className: s, keys: n, platform: u, separator: c, label: m, "data-testid": k = "kbd", ...h }, p) {
|
|
13
|
+
const d = j(u), o = n.map((t) => x(t, d)), r = c != null ? c : d === "mac" ? "" : "+", w = m != null ? m : o.map((t) => t.name).join(d === "mac" ? " " : "+");
|
|
14
|
+
return /* @__PURE__ */ b("kbd", { ...h, ref: p, "data-testid": k, "data-platform": d, className: l("smwb-kbd", s), children: [
|
|
15
|
+
/* @__PURE__ */ a("span", { className: "smwb-kbd__text", children: w }),
|
|
16
|
+
o.map((t, i) => /* @__PURE__ */ b(f.Fragment, { children: [
|
|
17
|
+
i > 0 && r !== "" ? /* @__PURE__ */ a("span", { className: "smwb-kbd__separator", "aria-hidden": "true", children: r }) : null,
|
|
18
|
+
/* @__PURE__ */ a("kbd", { className: "smwb-kbd__key", "aria-hidden": "true", children: t.text })
|
|
19
|
+
] }, i))
|
|
20
|
+
] });
|
|
21
|
+
});
|
|
22
|
+
export {
|
|
23
|
+
g as Kbd
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=kbd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.js","sources":["../../../../../src/components/dataDisplay/kbd/kbd.tsx"],"sourcesContent":["import React, { type HTMLAttributes, useState } from \"react\";\nimport cn from \"clsx\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { detectKbdPlatform, kbdKeyLabel, type KbdPlatform } from \"./kbdKeys\";\n\nexport interface KbdProps extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n className?: string;\n /**\n * The keys of the shortcut in order, e.g. `[\"Mod\", \"K\"]` or `[\"Shift\", \"Enter\"]`. `Mod` is the\n * Command key on macOS and Ctrl elsewhere. On macOS, `Shift`, `Alt`/`Option`, `Ctrl`/`Control`,\n * `Meta`/`Cmd`/`Command`, `Enter`, `Escape`, `Tab`, `Backspace` and `Delete` are drawn as the\n * symbols of the Mac keyboard; elsewhere the same names are drawn as Ctrl, Alt, Shift, Meta, Enter,\n * Esc, Tab, Backspace and Del, whatever their case. `\" \"` and `Space` are the Space key, `+` and\n * `Plus` the plus key.\n * Arrow names (`ArrowUp` or `Up`, …) are arrows everywhere; any other key is drawn as given\n * (a single letter in upper case).\n */\n keys: string[];\n /**\n * The platform whose keys are drawn. Without it the browser's own is used: `other` on the\n * server and in the first client render (so that hydration matches), `mac` right after on a Mac.\n * Set it for a fixed look, in stories and in tests.\n */\n platform?: KbdPlatform;\n /**\n * Drawn between the key caps. By default `+` on `other` and nothing on `mac`, where the symbols\n * stand side by side; `\"\"` draws none. It is for the eye only; assistive technology reads `label`.\n */\n separator?: string;\n /**\n * What assistive technology reads instead of the key caps. By default the key names, joined\n * with `+` on `other` (\"Ctrl+K\") and with a space on `mac` (\"Command K\").\n */\n label?: string;\n /** Test id of the root `<kbd>`; `kbd` unless given. */\n \"data-testid\"?: string;\n}\n\n/** The platform asked for, or the browser's: `other` until the client has mounted. */\nfunction useKbdPlatform(platform: KbdPlatform | undefined): KbdPlatform {\n const [detected, setDetected] = useState<KbdPlatform>(\"other\");\n useSafeLayoutEffect(() => {\n if (platform === undefined) {\n setDetected(detectKbdPlatform());\n }\n }, [platform]);\n return platform ?? detected;\n}\n\n/**\n * A keyboard shortcut as key caps, for a tooltip, a menu item or a command palette. The root and\n * every cap are `<kbd>`; assistive technology reads one text (\"Ctrl+K\", \"Command K\") and skips the caps.\n */\nexport const Kbd = React.forwardRef<HTMLElement, KbdProps>(function Kbd(\n { className, keys, platform: platformProp, separator, label, \"data-testid\": dataTestId = \"kbd\", ...rest },\n ref\n) {\n const platform = useKbdPlatform(platformProp);\n const labels = keys.map((key) => kbdKeyLabel(key, platform));\n const between = separator ?? (platform === \"mac\" ? \"\" : \"+\");\n const spoken = label ?? labels.map((item) => item.name).join(platform === \"mac\" ? \" \" : \"+\");\n\n return (\n <kbd {...rest} ref={ref} data-testid={dataTestId} data-platform={platform} className={cn(\"smwb-kbd\", className)}>\n <span className=\"smwb-kbd__text\">{spoken}</span>\n {labels.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && between !== \"\" ? (\n <span className=\"smwb-kbd__separator\" aria-hidden=\"true\">\n {between}\n </span>\n ) : null}\n <kbd className=\"smwb-kbd__key\" aria-hidden=\"true\">\n {item.text}\n </kbd>\n </React.Fragment>\n ))}\n </kbd>\n );\n});\n\nexport default Kbd;\n"],"names":["useKbdPlatform","platform","detected","setDetected","useState","useSafeLayoutEffect","detectKbdPlatform","Kbd","React","className","keys","platformProp","separator","label","dataTestId","rest","ref","labels","key","kbdKeyLabel","between","spoken","item","jsxs","cn","jsx","index"],"mappings":";;;;;AAuCA,SAASA,EAAeC,GAAgD;AACtE,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAsB,OAAO;AAC7D,SAAAC,EAAoB,MAAM;AACxB,IAAIJ,MAAa,UACfE,EAAYG,GAAmB;AAAA,EAEnC,GAAG,CAACL,CAAQ,CAAC,GACNA,KAAA,OAAAA,IAAYC;AACrB;AAMO,MAAMK,IAAMC,EAAM,WAAkC,SACzD,EAAE,WAAAC,GAAW,MAAAC,GAAM,UAAUC,GAAc,WAAAC,GAAW,OAAAC,GAAO,eAAeC,IAAa,OAAO,GAAGC,EAAA,GACnGC,GACA;AACA,QAAMf,IAAWD,EAAeW,CAAY,GACtCM,IAASP,EAAK,IAAI,CAACQ,MAAQC,EAAYD,GAAKjB,CAAQ,CAAC,GACrDmB,IAAUR,KAAA,OAAAA,IAAcX,MAAa,QAAQ,KAAK,KAClDoB,IAASR,KAAA,OAAAA,IAASI,EAAO,IAAI,CAACK,MAASA,EAAK,IAAI,EAAE,KAAKrB,MAAa,QAAQ,MAAM,GAAG;AAE3F,SACE,gBAAAsB,EAAC,OAAA,EAAK,GAAGR,GAAM,KAAAC,GAAU,eAAaF,GAAY,iBAAeb,GAAU,WAAWuB,EAAG,YAAYf,CAAS,GAC5G,UAAA;AAAA,IAAA,gBAAAgB,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAJ,GAAO;AAAA,IACxCJ,EAAO,IAAI,CAACK,GAAMI,MACjB,gBAAAH,EAACf,EAAM,UAAN,EACE,UAAA;AAAA,MAAAkB,IAAQ,KAAKN,MAAY,KACxB,gBAAAK,EAAC,QAAA,EAAK,WAAU,uBAAsB,eAAY,QAC/C,UAAAL,EAAA,CACH,IACE;AAAA,wBACH,OAAA,EAAI,WAAU,iBAAgB,eAAY,QACxC,YAAK,KAAA,CACR;AAAA,IAAA,EAAA,GARmBM,CASrB,CACD;AAAA,EAAA,GACH;AAEJ,CAAC;"}
|