@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffStat.js","sources":["../../../../src/components/dataDisplay/diffStat/diffStat.tsx"],"sourcesContent":["import React, { HTMLAttributes } from \"react\";\nimport cn from \"clsx\";\n\n/** How many cells the bar has. */\nexport const DIFF_STAT_CELLS = 5;\n\n/** One cell of the bar: whose it is, or nobody's. */\nexport type DiffStatCell = \"added\" | \"removed\" | \"neutral\";\n\n/** The accessible name, built from the two counts as numbers (already normalised by `diffStatCount`). */\nexport type DiffStatFormat = (added: number, removed: number) => string;\n\n// A narrow no-break space: the grouping separator, so a figure cannot break across lines.\nconst GROUP_SEPARATOR = \"\\u202f\";\n\n/** \"added 12345, removed 3\" — the default accessible name; plain digits, so a speech engine reads one number. */\nexport const DEFAULT_DIFF_STAT_FORMAT: DiffStatFormat = (added, removed) => `added ${added}, removed ${removed}`;\n\n/**\n * A count as the component takes it: a whole number, never below 0. Fractions are cut off,\n * negative counts are 0, and so are NaN, `undefined` and ±Infinity (data that has not\n * arrived yet, or arrived broken). The figures, the accessible name and the bar all use this\n * one value, so they cannot disagree.\n */\nexport function diffStatCount(value: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n}\n\n/**\n * A count (as `diffStatCount` takes it) as digits, grouped by three with U+202F NARROW NO-BREAK SPACE (\"1\\u202f234\"), the\n * fraction dropped. The separator is fixed rather than taken from a locale on purpose: the\n * server and the browser would group the same figure differently and break hydration. Pass\n * `group` to an app that knows its reader's locale.\n */\nexport function groupDiffStatCount(value: number): string {\n return String(diffStatCount(value)).replace(/\\B(?=(\\d{3})+(?!\\d))/g, GROUP_SEPARATOR);\n}\n\n/**\n * Which cell belongs to which side (counts as `diffStatCount` takes them): each takes `floor(DIFF_STAT_CELLS * its share)`, so the\n * cells the two sides leave over are neutral and 0 of 0 leaves all of them neutral. A side\n * under a fifth of the change reaches no cell and shows in its figure only.\n */\nexport function diffStatCells(added: number, removed: number): DiffStatCell[] {\n const up = diffStatCount(added);\n const down = diffStatCount(removed);\n const all = up + down;\n const cellsOf = (count: number, cell: DiffStatCell): DiffStatCell[] => Array.from({ length: count }, () => cell);\n if (all === 0) return cellsOf(DIFF_STAT_CELLS, \"neutral\");\n\n const upCells = Math.floor((DIFF_STAT_CELLS * up) / all);\n const downCells = Math.floor((DIFF_STAT_CELLS * down) / all);\n return [\n ...cellsOf(upCells, \"added\"),\n ...cellsOf(downCells, \"removed\"),\n ...cellsOf(DIFF_STAT_CELLS - upCells - downCells, \"neutral\"),\n ];\n}\n\nexport interface DiffStatProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"role\"> {\n className?: string;\n /** Lines added; the figure behind \"+N\". NaN, `undefined`, Infinity and negatives count as 0. */\n added: number;\n /** Lines removed; the figure behind \"−M\". NaN, `undefined`, Infinity and negatives count as 0. */\n removed: number;\n /** The five cells beside the figures. Shown by default, hidden in `compact`; set it either way. */\n bar?: boolean;\n /** The tab variant: smaller figures, and no bar unless `bar` asks for one. */\n compact?: boolean;\n /** How the accessible name is made from the two counts, as numbers: `DEFAULT_DIFF_STAT_FORMAT` unless given. */\n format?: DiffStatFormat;\n /** How each figure is written (it gets the count as `diffStatCount` takes it): `groupDiffStatCount` — three digits per group — unless given. */\n group?: (value: number) => string;\n /** Test id of the root `<span>`; `diff-stat` unless given. */\n \"data-testid\"?: string;\n}\n\n/**\n * How big a change is: \"+N −M\" with the two figures' counts, and a five-cell bar of the\n * same proportions. One accessible name for the whole (\"added N, removed M\"), so the\n * digits are not read twice; the bar is the theme's success and error, shaded toward the\n * surface ink to stay readable as text.\n */\nexport const DiffStat = React.forwardRef<HTMLSpanElement, DiffStatProps>(function DiffStat(\n {\n className,\n added,\n removed,\n bar,\n compact,\n format = DEFAULT_DIFF_STAT_FORMAT,\n group = groupDiffStatCount,\n \"aria-label\": ariaLabel,\n \"data-testid\": dataTestId = \"diff-stat\",\n ...rest\n },\n ref\n) {\n const upCount = diffStatCount(added);\n const downCount = diffStatCount(removed);\n const showBar = bar ?? !compact;\n return (\n <span\n {...rest}\n ref={ref}\n role=\"img\"\n aria-label={ariaLabel ?? format(upCount, downCount)}\n data-testid={dataTestId}\n className={cn(\"smwb-diff-stat\", { \"smwb-diff-stat_compact\": compact }, className)}\n >\n <span className=\"smwb-diff-stat__text\" aria-hidden=\"true\">\n <span className=\"smwb-diff-stat__added\">{`+${group(upCount)}`}</span>\n <span className=\"smwb-diff-stat__removed\">{`\\u2212${group(downCount)}`}</span>\n </span>\n {showBar ? (\n <span className=\"smwb-diff-stat__bar\" aria-hidden=\"true\">\n {diffStatCells(upCount, downCount).map((cell, index) => (\n <span key={index} className={cn(\"smwb-diff-stat__cell\", `smwb-diff-stat__cell_${cell}`)} />\n ))}\n </span>\n ) : null}\n </span>\n );\n});\n\nexport default DiffStat;\n"],"names":["DIFF_STAT_CELLS","GROUP_SEPARATOR","DEFAULT_DIFF_STAT_FORMAT","added","removed","diffStatCount","value","groupDiffStatCount","diffStatCells","up","down","all","cellsOf","count","cell","upCells","downCells","DiffStat","React","className","bar","compact","format","group","ariaLabel","dataTestId","rest","ref","upCount","downCount","showBar","jsxs","cn","jsx","index"],"mappings":";;;;;AAMO,MAAMA,IAAkB,GASzBC,IAAkB,KAGXC,IAA2C,CAACC,GAAOC,MAAY,SAASD,CAAK,aAAaC,CAAO;AAQvG,SAASC,EAAcC,GAAuB;AACnD,SAAO,OAAO,SAASA,CAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMA,CAAK,CAAC,IAAI;AACnE;AAQO,SAASC,EAAmBD,GAAuB;AACxD,SAAO,OAAOD,EAAcC,CAAK,CAAC,EAAE,QAAQ,yBAAyBL,CAAe;AACtF;AAOO,SAASO,EAAcL,GAAeC,GAAiC;AAC5E,QAAMK,IAAKJ,EAAcF,CAAK,GACxBO,IAAOL,EAAcD,CAAO,GAC5BO,IAAMF,IAAKC,GACXE,IAAU,CAACC,GAAeC,MAAuC,MAAM,KAAK,EAAE,QAAQD,KAAS,MAAMC,CAAI;AAC/G,MAAIH,MAAQ,EAAG,QAAOC,EAAQZ,GAAiB,SAAS;AAExD,QAAMe,IAAU,KAAK,MAAOf,IAAkBS,IAAME,CAAG,GACjDK,IAAY,KAAK,MAAOhB,IAAkBU,IAAQC,CAAG;AAC3D,SAAO;AAAA,IACL,GAAGC,EAAQG,GAAS,OAAO;AAAA,IAC3B,GAAGH,EAAQI,GAAW,SAAS;AAAA,IAC/B,GAAGJ,EAAQZ,IAAkBe,IAAUC,GAAW,SAAS;AAAA,EAAA;AAE/D;AA0BO,MAAMC,IAAWC,EAAM,WAA2C,SACvE;AAAA,EACE,WAAAC;AAAA,EACA,OAAAhB;AAAA,EACA,SAAAC;AAAA,EACA,KAAAgB;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC,IAASpB;AAAA,EACT,OAAAqB,IAAQhB;AAAA,EACR,cAAciB;AAAA,EACd,eAAeC,IAAa;AAAA,EAC5B,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAUvB,EAAcF,CAAK,GAC7B0B,IAAYxB,EAAcD,CAAO,GACjC0B,IAAUV,KAAA,OAAAA,IAAO,CAACC;AACxB,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGL;AAAA,MACJ,KAAAC;AAAA,MACA,MAAK;AAAA,MACL,cAAYH,KAAA,OAAAA,IAAaF,EAAOM,GAASC,CAAS;AAAA,MAClD,eAAaJ;AAAA,MACb,WAAWO,EAAG,kBAAkB,EAAE,0BAA0BX,EAAA,GAAWF,CAAS;AAAA,MAEhF,UAAA;AAAA,QAAA,gBAAAY,EAAC,QAAA,EAAK,WAAU,wBAAuB,eAAY,QACjD,UAAA;AAAA,UAAA,gBAAAE,EAAC,UAAK,WAAU,yBAAyB,cAAIV,EAAMK,CAAO,CAAC,GAAA,CAAG;AAAA,UAC9D,gBAAAK,EAAC,UAAK,WAAU,2BAA2B,cAASV,EAAMM,CAAS,CAAC,GAAA,CAAG;AAAA,QAAA,GACzE;AAAA,QACCC,IACC,gBAAAG,EAAC,QAAA,EAAK,WAAU,uBAAsB,eAAY,QAC/C,UAAAzB,EAAcoB,GAASC,CAAS,EAAE,IAAI,CAACf,GAAMoB,MAC5C,gBAAAD,EAAC,QAAA,EAAiB,WAAWD,EAAG,wBAAwB,wBAAwBlB,CAAI,EAAE,EAAA,GAA3EoB,CAA8E,CAC1F,EAAA,CACH,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;"}
|
|
@@ -1,175 +1,220 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as d, jsx as t, Fragment as V } from "react/jsx-runtime";
|
|
2
2
|
import '../../../assets/styles/less/components/expansionPanel/expansionPanel.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
|
-
import { forwardRef as
|
|
5
|
-
import
|
|
6
|
-
import { createPortal as
|
|
7
|
-
import { Button as
|
|
8
|
-
import { Icon as
|
|
9
|
-
import { useControllableState as
|
|
10
|
-
import {
|
|
11
|
-
|
|
4
|
+
import { forwardRef as ae, useState as ie, useRef as f, useEffect as F } from "react";
|
|
5
|
+
import ce from "clsx";
|
|
6
|
+
import { createPortal as ue } from "react-dom";
|
|
7
|
+
import { Button as w } from "../../inputs/button/button.js";
|
|
8
|
+
import { Icon as C } from "../../base/icon/icon.js";
|
|
9
|
+
import { useControllableState as de } from "../../../hooks/useControllableState.js";
|
|
10
|
+
import { FOCUSABLE as J } from "../../../hooks/useFocusTrap.js";
|
|
11
|
+
import { useForkRef as fe } from "../../../hooks/useForkRef.js";
|
|
12
|
+
import { useSafeLayoutEffect as E } from "../../../hooks/useSafeLayoutEffect.js";
|
|
13
|
+
import { hasOverlayLayerAbove as j } from "../../../utils/overlayLayer.js";
|
|
14
|
+
const me = {
|
|
12
15
|
expandRow: "Expand to full row",
|
|
13
16
|
collapseRow: "Collapse to grid",
|
|
14
17
|
expandFullscreen: "Expand to fullscreen",
|
|
15
18
|
closeFullscreen: "Close fullscreen",
|
|
16
19
|
placeholder: "Panel is open in fullscreen",
|
|
17
20
|
placeholderClose: "Close"
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
21
|
+
}, q = (l, o) => typeof l == "function" ? l(o) : l, pe = (l, o) => typeof l == "function" ? l(o) : l, G = (l) => {
|
|
22
|
+
for (const o of l)
|
|
23
|
+
if (!(!(o instanceof HTMLElement) || !o.isConnected) && (o.focus(), o.getRootNode().activeElement === o))
|
|
24
|
+
return;
|
|
25
|
+
}, H = (l) => Array.from(l.querySelectorAll(J)).filter(
|
|
26
|
+
// Older browsers (and jsdom) lack checkVisibility: count every match there.
|
|
27
|
+
(o) => typeof o.checkVisibility != "function" || o.checkVisibility({ visibilityProperty: !0 })
|
|
28
|
+
), ke = ae(function({
|
|
29
|
+
className: o,
|
|
30
|
+
header: N,
|
|
31
|
+
mode: Q,
|
|
32
|
+
defaultMode: W = "tile",
|
|
33
|
+
onModeChange: X,
|
|
34
|
+
disableExpand: g = !1,
|
|
35
|
+
noControls: Y = !1,
|
|
36
|
+
renderControls: k,
|
|
37
|
+
closeOnOutsideClick: Z = !0,
|
|
38
|
+
closeOnEsc: L = !0,
|
|
39
|
+
labels: $,
|
|
40
|
+
children: P
|
|
41
|
+
}, ee) {
|
|
42
|
+
const [ne, c] = de({
|
|
43
|
+
value: Q,
|
|
44
|
+
defaultValue: W,
|
|
45
|
+
onChange: X
|
|
46
|
+
}), s = { ...me, ...$ }, [v, oe] = ie(), 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);
|
|
47
|
+
E(() => {
|
|
48
|
+
oe(document.body);
|
|
39
49
|
}, []);
|
|
40
|
-
const
|
|
41
|
-
mode:
|
|
50
|
+
const m = g ? "tile" : ne, u = m === "row", a = m === "fullscreen", B = () => c((e) => e === "row" ? "tile" : "row"), T = () => c("fullscreen"), I = () => c("tile"), le = (e) => ({
|
|
51
|
+
mode: m,
|
|
42
52
|
isFullscreen: e,
|
|
43
|
-
isFullRow: e ? !1 :
|
|
44
|
-
setMode:
|
|
45
|
-
toggleRow:
|
|
46
|
-
openFullscreen:
|
|
47
|
-
closeFullscreen:
|
|
48
|
-
labels:
|
|
49
|
-
}),
|
|
50
|
-
|
|
53
|
+
isFullRow: e ? !1 : u,
|
|
54
|
+
setMode: c,
|
|
55
|
+
toggleRow: B,
|
|
56
|
+
openFullscreen: T,
|
|
57
|
+
closeFullscreen: I,
|
|
58
|
+
labels: s
|
|
59
|
+
}), se = (e) => e ? /* @__PURE__ */ t(
|
|
60
|
+
w,
|
|
51
61
|
{
|
|
62
|
+
ref: A,
|
|
52
63
|
type: "button",
|
|
53
64
|
variant: "outlined",
|
|
54
65
|
size: "small",
|
|
55
|
-
"aria-label":
|
|
56
|
-
title:
|
|
57
|
-
onClick:
|
|
66
|
+
"aria-label": s.closeFullscreen,
|
|
67
|
+
title: s.closeFullscreen,
|
|
68
|
+
onClick: I,
|
|
58
69
|
"data-testid": "expansion-panel-close",
|
|
59
|
-
icon: /* @__PURE__ */
|
|
70
|
+
icon: /* @__PURE__ */ t(C, { name: "close", size: 18 })
|
|
60
71
|
}
|
|
61
|
-
) : /* @__PURE__ */
|
|
62
|
-
/* @__PURE__ */
|
|
63
|
-
|
|
72
|
+
) : /* @__PURE__ */ d(V, { children: [
|
|
73
|
+
/* @__PURE__ */ t(
|
|
74
|
+
w,
|
|
64
75
|
{
|
|
65
76
|
type: "button",
|
|
66
77
|
variant: "outlined",
|
|
67
78
|
size: "small",
|
|
68
|
-
"aria-pressed":
|
|
69
|
-
"aria-label":
|
|
70
|
-
title:
|
|
71
|
-
onClick:
|
|
79
|
+
"aria-pressed": u,
|
|
80
|
+
"aria-label": u ? s.collapseRow : s.expandRow,
|
|
81
|
+
title: u ? s.collapseRow : s.expandRow,
|
|
82
|
+
onClick: B,
|
|
72
83
|
"data-testid": "expansion-panel-row",
|
|
73
|
-
icon: /* @__PURE__ */
|
|
84
|
+
icon: /* @__PURE__ */ t(C, { name: u ? "grid_view" : "table_rows", size: 18 })
|
|
74
85
|
}
|
|
75
86
|
),
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
|
|
87
|
+
/* @__PURE__ */ t(
|
|
88
|
+
w,
|
|
78
89
|
{
|
|
90
|
+
ref: S,
|
|
79
91
|
type: "button",
|
|
80
92
|
variant: "outlined",
|
|
81
93
|
size: "small",
|
|
82
|
-
"aria-label":
|
|
83
|
-
title:
|
|
84
|
-
onClick:
|
|
94
|
+
"aria-label": s.expandFullscreen,
|
|
95
|
+
title: s.expandFullscreen,
|
|
96
|
+
onClick: T,
|
|
85
97
|
"data-testid": "expansion-panel-fullscreen",
|
|
86
|
-
icon: /* @__PURE__ */
|
|
98
|
+
icon: /* @__PURE__ */ t(C, { name: "open_in_full", size: 18 })
|
|
87
99
|
}
|
|
88
100
|
)
|
|
89
|
-
] }),
|
|
90
|
-
if (
|
|
101
|
+
] }), M = (e) => {
|
|
102
|
+
if (g || Y)
|
|
91
103
|
return null;
|
|
92
|
-
const
|
|
93
|
-
return
|
|
104
|
+
const n = k ? pe(k, le(e)) : se(e);
|
|
105
|
+
return n ? /* @__PURE__ */ t("div", { className: "smwb-expansion-panel__controls", children: n }) : null;
|
|
94
106
|
};
|
|
95
|
-
|
|
96
|
-
if (!
|
|
107
|
+
F(() => {
|
|
108
|
+
if (!a)
|
|
97
109
|
return;
|
|
98
110
|
const e = document.body.style.overflow;
|
|
99
111
|
return document.body.style.overflow = "hidden", () => {
|
|
100
112
|
document.body.style.overflow = e;
|
|
101
113
|
};
|
|
102
|
-
}, [
|
|
103
|
-
if (!
|
|
114
|
+
}, [a]), F(() => {
|
|
115
|
+
if (!a || !L)
|
|
116
|
+
return;
|
|
117
|
+
const e = (n) => {
|
|
118
|
+
n.key === "Escape" && !n.defaultPrevented && !j(p.current) && (n.preventDefault(), c("tile"));
|
|
119
|
+
};
|
|
120
|
+
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
121
|
+
}, [a, L, c]), E(() => {
|
|
122
|
+
var n, r;
|
|
123
|
+
const e = document.activeElement;
|
|
124
|
+
a ? (K.current = e === document.body ? null : e, x.current = null) : z.current && (!e || e === document.body) && G([
|
|
125
|
+
x.current,
|
|
126
|
+
K.current,
|
|
127
|
+
S.current,
|
|
128
|
+
...Array.from((r = (n = D.current) == null ? void 0 : n.querySelectorAll(J)) != null ? r : [])
|
|
129
|
+
]), z.current = a;
|
|
130
|
+
}, [a]);
|
|
131
|
+
const y = a && v !== void 0;
|
|
132
|
+
E(() => {
|
|
133
|
+
const e = p.current, n = document.activeElement;
|
|
134
|
+
!y || !e || n && n !== document.body || G([A.current, ...H(e), e]);
|
|
135
|
+
}, [y]), F(() => {
|
|
136
|
+
if (!y)
|
|
104
137
|
return;
|
|
105
|
-
const e = (
|
|
106
|
-
|
|
138
|
+
const e = (n) => {
|
|
139
|
+
var O, U;
|
|
140
|
+
const r = p.current;
|
|
141
|
+
if (n.key !== "Tab" || n.defaultPrevented || n.altKey || n.ctrlKey || n.metaKey || !r)
|
|
142
|
+
return;
|
|
143
|
+
const h = H(r), _ = (O = h[0]) != null ? O : r, R = (U = h[h.length - 1]) != null ? U : r, i = document.activeElement;
|
|
144
|
+
let b;
|
|
145
|
+
i && i !== document.body && r.contains(i) ? (n.shiftKey ? i === _ || i === r : i === R) && (b = n.shiftKey ? R : _) : !j(r) && (!i || i === document.body || r.compareDocumentPosition(i) & Node.DOCUMENT_POSITION_PRECEDING) && (b = n.shiftKey ? R : _), b && (n.preventDefault(), b.focus());
|
|
107
146
|
};
|
|
108
147
|
return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
|
|
109
|
-
}, [
|
|
110
|
-
const
|
|
148
|
+
}, [y]);
|
|
149
|
+
const re = /* @__PURE__ */ d(
|
|
111
150
|
"div",
|
|
112
151
|
{
|
|
113
|
-
ref:
|
|
114
|
-
className:
|
|
152
|
+
ref: te,
|
|
153
|
+
className: ce("smwb-expansion-panel", { "smwb-expansion-panel_row": u }, o),
|
|
115
154
|
"data-testid": "expansion-panel",
|
|
116
155
|
children: [
|
|
117
|
-
/* @__PURE__ */
|
|
118
|
-
/* @__PURE__ */
|
|
119
|
-
|
|
156
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__head", children: [
|
|
157
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__header", children: N }),
|
|
158
|
+
M(!1)
|
|
120
159
|
] }),
|
|
121
|
-
/* @__PURE__ */
|
|
122
|
-
mode:
|
|
160
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__body", children: q(P, {
|
|
161
|
+
mode: m,
|
|
123
162
|
isFullscreen: !1,
|
|
124
|
-
isFullRow:
|
|
163
|
+
isFullRow: u
|
|
125
164
|
}) })
|
|
126
165
|
]
|
|
127
166
|
}
|
|
128
167
|
);
|
|
129
|
-
return !
|
|
130
|
-
/* @__PURE__ */
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
-
/* @__PURE__ */
|
|
133
|
-
|
|
168
|
+
return !a || !v ? re : /* @__PURE__ */ d(V, { children: [
|
|
169
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__placeholder", "data-testid": "expansion-panel-placeholder", children: [
|
|
170
|
+
/* @__PURE__ */ t("span", { children: s.placeholder }),
|
|
171
|
+
/* @__PURE__ */ t(
|
|
172
|
+
w,
|
|
134
173
|
{
|
|
135
174
|
type: "button",
|
|
136
175
|
variant: "outlined",
|
|
137
176
|
size: "small",
|
|
138
|
-
label:
|
|
139
|
-
onClick: () =>
|
|
177
|
+
label: s.placeholderClose,
|
|
178
|
+
onClick: () => c("tile")
|
|
140
179
|
}
|
|
141
180
|
)
|
|
142
181
|
] }),
|
|
143
|
-
|
|
144
|
-
/* @__PURE__ */
|
|
182
|
+
ue(
|
|
183
|
+
/* @__PURE__ */ t(
|
|
145
184
|
"div",
|
|
146
185
|
{
|
|
186
|
+
ref: p,
|
|
147
187
|
className: "smwb-expansion-panel__overlay smwb-dark",
|
|
188
|
+
"data-smwb-overlay-layer": "",
|
|
148
189
|
role: "dialog",
|
|
149
190
|
"aria-modal": "true",
|
|
191
|
+
tabIndex: -1,
|
|
150
192
|
"data-testid": "expansion-panel-overlay",
|
|
151
|
-
|
|
152
|
-
|
|
193
|
+
onFocus: (e) => {
|
|
194
|
+
x.current = e.target;
|
|
195
|
+
},
|
|
196
|
+
onClick: Z ? (e) => {
|
|
197
|
+
e.target === e.currentTarget && c("tile");
|
|
153
198
|
} : void 0,
|
|
154
|
-
children: /* @__PURE__ */
|
|
155
|
-
/* @__PURE__ */
|
|
156
|
-
/* @__PURE__ */
|
|
157
|
-
|
|
199
|
+
children: /* @__PURE__ */ d("div", { className: "smwb-expansion-panel__dialog", children: [
|
|
200
|
+
/* @__PURE__ */ d("div", { className: "smwb-expansion-panel__head", children: [
|
|
201
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__header", children: N }),
|
|
202
|
+
M(!0)
|
|
158
203
|
] }),
|
|
159
|
-
/* @__PURE__ */
|
|
160
|
-
mode:
|
|
204
|
+
/* @__PURE__ */ t("div", { className: "smwb-expansion-panel__body smwb-expansion-panel__body_fullscreen", children: q(P, {
|
|
205
|
+
mode: m,
|
|
161
206
|
isFullscreen: !0,
|
|
162
207
|
isFullRow: !1
|
|
163
208
|
}) })
|
|
164
209
|
] })
|
|
165
210
|
}
|
|
166
211
|
),
|
|
167
|
-
|
|
212
|
+
v
|
|
168
213
|
)
|
|
169
214
|
] });
|
|
170
215
|
});
|
|
171
216
|
export {
|
|
172
|
-
|
|
173
|
-
|
|
217
|
+
ke as ExpansionPanel,
|
|
218
|
+
ke as default
|
|
174
219
|
};
|
|
175
220
|
//# 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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"}
|
|
@@ -6,6 +6,8 @@ export interface KanbanProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
6
6
|
* pixels or any CSS length. 15.5rem by default.
|
|
7
7
|
*/
|
|
8
8
|
columnWidth?: number | string;
|
|
9
|
+
/** Test id of the root `<div>`; `kanban` unless given. */
|
|
10
|
+
"data-testid"?: string;
|
|
9
11
|
}
|
|
10
12
|
export interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
11
13
|
className?: string;
|
|
@@ -19,6 +21,8 @@ export interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
19
21
|
empty?: ReactNode;
|
|
20
22
|
/** Under the cards, e.g. a link to the rest as a list. */
|
|
21
23
|
footer?: ReactNode;
|
|
24
|
+
/** Test id of the column's `<div>`; `kanban-column` unless given. */
|
|
25
|
+
"data-testid"?: string;
|
|
22
26
|
}
|
|
23
27
|
export interface KanbanCardProps extends Omit<HTMLAttributes<HTMLLIElement>, "title"> {
|
|
24
28
|
className?: string;
|
|
@@ -28,6 +32,8 @@ export interface KanbanCardProps extends Omit<HTMLAttributes<HTMLLIElement>, "ti
|
|
|
28
32
|
href?: string;
|
|
29
33
|
/** Lines the title is clamped to: 3 by default. */
|
|
30
34
|
titleLines?: number;
|
|
35
|
+
/** Test id of the card's `<li>`; `kanban-card` unless given. */
|
|
36
|
+
"data-testid"?: string;
|
|
31
37
|
}
|
|
32
38
|
/** A board: KanbanColumn children side by side, scrolling sideways when they do not fit. */
|
|
33
39
|
export declare const Kanban: React.ForwardRefExoticComponent<KanbanProps & {
|
|
@@ -1,63 +1,74 @@
|
|
|
1
|
-
import { jsx as s, jsxs as
|
|
1
|
+
import { jsx as s, jsxs as _ } from "react/jsx-runtime";
|
|
2
2
|
import '../../../assets/styles/less/components/kanban/kanban.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
const h = (a) => typeof a == "number" ? `${a}px` : a,
|
|
4
|
+
import m, { useId as p } from "react";
|
|
5
|
+
import k from "clsx";
|
|
6
|
+
const h = (a) => typeof a == "number" ? `${a}px` : a, c = (a) => a != null && a !== !1 && a !== !0 && a !== "", x = m.forwardRef(function({ className: b, style: l, columnWidth: t, children: n, "data-testid": e = "kanban", ...d }, r) {
|
|
7
7
|
return /* @__PURE__ */ s(
|
|
8
8
|
"div",
|
|
9
9
|
{
|
|
10
|
-
"data-testid":
|
|
11
|
-
...
|
|
12
|
-
ref:
|
|
13
|
-
className:
|
|
14
|
-
style: { ...
|
|
10
|
+
"data-testid": e,
|
|
11
|
+
...d,
|
|
12
|
+
ref: r,
|
|
13
|
+
className: k("smwb-kanban", b),
|
|
14
|
+
style: t === void 0 ? l : { ...l, "--smwb-kanban-column-width": h(t) },
|
|
15
15
|
children: n
|
|
16
16
|
}
|
|
17
17
|
);
|
|
18
|
-
}),
|
|
19
|
-
function({
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
}), R = m.forwardRef(
|
|
19
|
+
function({
|
|
20
|
+
className: b,
|
|
21
|
+
style: l,
|
|
22
|
+
title: t,
|
|
23
|
+
count: n,
|
|
24
|
+
accent: e,
|
|
25
|
+
empty: d,
|
|
26
|
+
footer: r,
|
|
27
|
+
children: i,
|
|
28
|
+
"data-testid": o = "kanban-column",
|
|
29
|
+
...u
|
|
30
|
+
}, f) {
|
|
31
|
+
const w = `${p()}-title`, N = m.Children.toArray(i).length > 0;
|
|
32
|
+
return /* @__PURE__ */ _(
|
|
22
33
|
"div",
|
|
23
34
|
{
|
|
24
|
-
"data-testid":
|
|
35
|
+
"data-testid": o,
|
|
25
36
|
role: "group",
|
|
26
|
-
"aria-labelledby":
|
|
27
|
-
...
|
|
28
|
-
ref:
|
|
29
|
-
className:
|
|
30
|
-
style: { ...
|
|
37
|
+
"aria-labelledby": w,
|
|
38
|
+
...u,
|
|
39
|
+
ref: f,
|
|
40
|
+
className: k("smwb-kanban__column", b),
|
|
41
|
+
style: e === void 0 ? l : { ...l, "--smwb-kanban-accent": e },
|
|
31
42
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
/* @__PURE__ */ s("div", { className: "smwb-kanban__column-title", id:
|
|
43
|
+
/* @__PURE__ */ _("div", { className: "smwb-kanban__column-header", children: [
|
|
44
|
+
/* @__PURE__ */ s("div", { className: "smwb-kanban__column-title", id: w, children: t }),
|
|
34
45
|
n != null ? /* @__PURE__ */ s("span", { className: "smwb-kanban__count", children: n }) : null
|
|
35
46
|
] }),
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
N ? /* @__PURE__ */ s("ul", { className: "smwb-kanban__cards", role: "list", children: i }) : c(d) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__empty", children: d }) : null,
|
|
48
|
+
c(r) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__column-footer", children: r }) : null
|
|
38
49
|
]
|
|
39
50
|
}
|
|
40
51
|
);
|
|
41
52
|
}
|
|
42
|
-
),
|
|
43
|
-
return /* @__PURE__ */
|
|
53
|
+
), j = m.forwardRef(function({ className: b, style: l, title: t, href: n, titleLines: e = 3, children: d, "data-testid": r = "kanban-card", ...i }, o) {
|
|
54
|
+
return /* @__PURE__ */ _(
|
|
44
55
|
"li",
|
|
45
56
|
{
|
|
46
|
-
"data-testid":
|
|
47
|
-
...
|
|
48
|
-
ref:
|
|
49
|
-
className:
|
|
50
|
-
style: { ...
|
|
57
|
+
"data-testid": r,
|
|
58
|
+
...i,
|
|
59
|
+
ref: o,
|
|
60
|
+
className: k("smwb-kanban__card", { "smwb-kanban__card_link": !!n }, b),
|
|
61
|
+
style: { ...l, "--smwb-kanban-title-lines": String(e) },
|
|
51
62
|
children: [
|
|
52
|
-
|
|
53
|
-
|
|
63
|
+
c(t) ? n ? /* @__PURE__ */ s("a", { className: "smwb-kanban__card-title", href: n, children: t }) : /* @__PURE__ */ s("div", { className: "smwb-kanban__card-title", children: t }) : null,
|
|
64
|
+
c(d) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__card-body", children: d }) : null
|
|
54
65
|
]
|
|
55
66
|
}
|
|
56
67
|
);
|
|
57
68
|
});
|
|
58
69
|
export {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
x as Kanban,
|
|
71
|
+
j as KanbanCard,
|
|
72
|
+
R as KanbanColumn
|
|
62
73
|
};
|
|
63
74
|
//# sourceMappingURL=kanban.js.map
|