@smwb/ui-solid 0.12.1 → 0.14.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/README.md +638 -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/tokens.entry.css +1 -1
- package/dist/components/base/animateHeight/animateHeight.js +41 -42
- package/dist/components/base/animateHeight/animateHeight.js.map +1 -1
- package/dist/components/base/icon/icon.d.ts +6 -2
- package/dist/components/base/icon/icon.js +41 -41
- 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 +46 -34
- 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 +37 -33
- package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/components/dataDisplay/card/card.d.ts +32 -1
- package/dist/components/dataDisplay/card/card.js +47 -34
- package/dist/components/dataDisplay/card/card.js.map +1 -1
- package/dist/components/dataDisplay/carousel/carousel.js +92 -88
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/chart/chart.d.ts +2 -0
- package/dist/components/dataDisplay/chat/chat.d.ts +42 -0
- package/dist/components/dataDisplay/chat/chat.js +116 -57
- 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 +21 -19
- package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatIconButton.js +23 -13
- package/dist/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatLayout.d.ts +2 -0
- package/dist/components/dataDisplay/chat/chatLayout.js +33 -29
- package/dist/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatOverlayLayout.d.ts +2 -0
- package/dist/components/dataDisplay/chat/chatOverlayLayout.js +19 -17
- package/dist/components/dataDisplay/chat/chatOverlayLayout.js.map +1 -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 +32 -0
- package/dist/components/dataDisplay/chip/chip.js +104 -63
- package/dist/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/components/dataDisplay/chipGroup/chipGroup.js +44 -39
- 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 +284 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/components/dataDisplay/dagView/dagView.d.ts +151 -0
- package/dist/components/dataDisplay/dagView/dagView.js +503 -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 +161 -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 +20 -24
- package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/components/dataDisplay/diffStat/diffStat.d.ts +55 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js +70 -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 +114 -81
- 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 +71 -61
- 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 +41 -0
- package/dist/components/dataDisplay/kbd/kbd.js +47 -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 +70 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/components/dataDisplay/lazyImage/lazyImage.js +14 -12
- 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 +16 -12
- 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 +58 -19
- 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 +15 -13
- 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 +12 -10
- 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 +30 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js +88 -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 +41 -43
- 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 +31 -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 +75 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js +361 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/components/dataDisplay/table/table.d.ts +10 -1
- package/dist/components/dataDisplay/table/table.js +46 -22
- package/dist/components/dataDisplay/table/table.js.map +1 -1
- package/dist/components/dataDisplay/table/tableBody.js +25 -12
- 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 +15 -14
- package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableColumns.d.ts +146 -0
- package/dist/components/dataDisplay/table/tableColumns.js +254 -0
- package/dist/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/components/dataDisplay/table/tableEntities.d.ts +4 -0
- package/dist/components/dataDisplay/table/tableEntities.js +6 -0
- package/dist/components/dataDisplay/table/tableEntities.js.map +1 -0
- package/dist/components/dataDisplay/table/tableHead.js +29 -11
- package/dist/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/components/dataDisplay/table/tableHeadCell.d.ts +23 -1
- package/dist/components/dataDisplay/table/tableHeadCell.js +51 -26
- package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableHtmlText.d.ts +8 -0
- package/dist/components/dataDisplay/table/tableHtmlText.js +121 -0
- package/dist/components/dataDisplay/table/tableHtmlText.js.map +1 -0
- package/dist/components/dataDisplay/table/tableRow.d.ts +2 -0
- package/dist/components/dataDisplay/table/tableRow.js +28 -13
- 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 +86 -58
- package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/components/dataDisplay/treeView/treeView.d.ts +22 -0
- package/dist/components/dataDisplay/treeView/treeView.js +164 -96
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/dataDisplay/typography/typography.js +22 -26
- package/dist/components/dataDisplay/typography/typography.js.map +1 -1
- package/dist/components/feedBack/emptyState/emptyState.d.ts +2 -0
- package/dist/components/feedBack/emptyState/emptyState.js +20 -16
- 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 +17 -13
- package/dist/components/feedBack/message/message.js.map +1 -1
- package/dist/components/feedBack/modal/modal.d.ts +9 -0
- package/dist/components/feedBack/modal/modal.js +71 -53
- 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 +43 -35
- package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/components/feedBack/snackbar/snackbar.js +24 -20
- 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 +65 -41
- package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +14 -0
- package/dist/components/inputs/button/button.js +71 -36
- 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 +14 -10
- 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 +59 -36
- package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/components/inputs/composer/composer.d.ts +148 -0
- package/dist/components/inputs/composer/composer.js +276 -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 +18 -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 +108 -97
- package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerActionLabel.js +19 -17
- package/dist/components/inputs/datePicker/datePickerActionLabel.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerDay.js +41 -25
- package/dist/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerIconButton.js +24 -14
- package/dist/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js +90 -79
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/components/inputs/floatingButton/floatingButton.js +26 -16
- 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 +48 -34
- package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/components/inputs/rating/rating.d.ts +9 -0
- package/dist/components/inputs/rating/rating.js +74 -53
- package/dist/components/inputs/rating/rating.js.map +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.d.ts +21 -1
- package/dist/components/inputs/selectField/dropdownMenu.js +268 -143
- 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 +37 -0
- package/dist/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/components/inputs/selectField/selectField.d.ts +32 -1
- package/dist/components/inputs/selectField/selectField.js +297 -126
- package/dist/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/components/inputs/slider/slider.d.ts +25 -3
- package/dist/components/inputs/slider/slider.js +320 -197
- package/dist/components/inputs/slider/slider.js.map +1 -1
- package/dist/components/inputs/textField/textField.d.ts +9 -1
- package/dist/components/inputs/textField/textField.js +104 -51
- package/dist/components/inputs/textField/textField.js.map +1 -1
- package/dist/components/inputs/textField/textFieldWrapper.d.ts +14 -0
- package/dist/components/inputs/textField/textFieldWrapper.js +52 -45
- package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/components/inputs/timePicker/timePicker.js +73 -62
- 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 +43 -31
- 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 +32 -27
- 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 +32 -30
- 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 +22 -20
- 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 +171 -168
- package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/components/layout/grid/grid.d.ts +8 -0
- package/dist/components/layout/grid/grid.js +52 -44
- 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 +14 -12
- 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 +23 -21
- 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 +38 -36
- 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 +92 -76
- 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 +26 -24
- 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 +102 -0
- package/dist/components/layout/tabGroups/tabGroups.js +895 -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 +192 -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 +480 -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 +68 -28
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/bottomBar/bottomBar.js +125 -120
- 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 +18 -14
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/navigation/commandPalette/commandPalette.d.ts +126 -0
- package/dist/components/navigation/commandPalette/commandPalette.js +457 -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 +15 -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 +6 -0
- package/dist/components/navigation/menu/menu.d.ts +6 -0
- package/dist/components/navigation/menu/menu.js.map +1 -1
- package/dist/components/navigation/menu/menuComponent.js +12 -23
- package/dist/components/navigation/menu/menuComponent.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 +54 -46
- 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 +58 -33
- package/dist/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/components/navigation/menu/menuList.d.ts +4 -0
- package/dist/components/navigation/menu/menuList.js +34 -16
- package/dist/components/navigation/menu/menuList.js.map +1 -1
- package/dist/components/navigation/menu/menuSubmenu.d.ts +8 -1
- package/dist/components/navigation/menu/menuSubmenu.js +58 -38
- 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 +28 -24
- 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 +37 -33
- 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 +46 -42
- 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 +89 -2
- package/dist/components/navigation/tabs/tab/tab.js +174 -43
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +20 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js +34 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +79 -2
- package/dist/components/navigation/tabs/tabs.js +389 -147
- 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 +36 -4
- package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
- package/dist/connects/rt/table/table.d.ts +16 -1
- package/dist/headless/components/base/animateHeight/animateHeight.js +41 -42
- package/dist/headless/components/base/animateHeight/animateHeight.js.map +1 -1
- package/dist/headless/components/base/icon/icon.js +40 -40
- package/dist/headless/components/base/icon/icon.js.map +1 -1
- package/dist/headless/components/base/ripple/ripple.js +46 -34
- package/dist/headless/components/base/ripple/ripple.js.map +1 -1
- package/dist/headless/components/dataDisplay/avatar/avatar.js +37 -33
- package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/headless/components/dataDisplay/card/card.js +44 -31
- package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/carousel.js +102 -98
- package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chat.js +116 -57
- package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatComposer.js +21 -19
- package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js +23 -13
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatLayout.js +33 -29
- package/dist/headless/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatOverlayLayout.js +19 -17
- package/dist/headless/components/dataDisplay/chat/chatOverlayLayout.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/headless/components/dataDisplay/chip/chip.js +104 -63
- package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +44 -39
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js +284 -0
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js +501 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js +161 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js +15 -19
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js +68 -0
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +114 -81
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/headless/components/dataDisplay/kanban/kanban.js +71 -61
- package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -1
- package/dist/headless/components/dataDisplay/kbd/kbd.js +45 -0
- package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +70 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +14 -12
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/list.js +16 -12
- package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/listItem.js +58 -19
- package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/headless/components/dataDisplay/meter/meter.js +14 -12
- package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/headless/components/dataDisplay/personChip/personChip.js +12 -10
- package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -1
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js +86 -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 +43 -45
- package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js +29 -0
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +359 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/table.js +47 -23
- package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableBody.js +25 -12
- package/dist/headless/components/dataDisplay/table/tableBody.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableCell.js +15 -14
- package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableColumns.js +254 -0
- package/dist/headless/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/tableEntities.js +6 -0
- package/dist/headless/components/dataDisplay/table/tableEntities.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/tableHead.js +29 -11
- package/dist/headless/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js +51 -26
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableHtmlText.js +121 -0
- package/dist/headless/components/dataDisplay/table/tableHtmlText.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/tableRow.js +28 -13
- package/dist/headless/components/dataDisplay/table/tableRow.js.map +1 -1
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +86 -58
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/headless/components/dataDisplay/treeView/treeView.js +164 -96
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/dataDisplay/typography/typography.js +21 -25
- package/dist/headless/components/dataDisplay/typography/typography.js.map +1 -1
- package/dist/headless/components/feedBack/emptyState/emptyState.js +9 -5
- package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -1
- package/dist/headless/components/feedBack/message/message.js +17 -13
- package/dist/headless/components/feedBack/message/message.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +71 -53
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/feedBack/skeleton/skeleton.js +43 -35
- package/dist/headless/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/headless/components/feedBack/snackbar/snackbar.js +30 -26
- package/dist/headless/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/headless/components/feedBack/tooltip/tooltip.js +63 -39
- package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +71 -36
- package/dist/headless/components/inputs/button/button.js.map +1 -1
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js +22 -18
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/headless/components/inputs/checkbox/checkbox.js +59 -36
- package/dist/headless/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/headless/components/inputs/composer/composer.js +274 -0
- package/dist/headless/components/inputs/composer/composer.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerFiles.js +18 -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 +106 -95
- package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerActionLabel.js +19 -17
- package/dist/headless/components/inputs/datePicker/datePickerActionLabel.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerDay.js +41 -25
- package/dist/headless/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js +24 -14
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +90 -79
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/headless/components/inputs/floatingButton/floatingButton.js +25 -15
- package/dist/headless/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/headless/components/inputs/radioButton/radioButton.js +48 -34
- package/dist/headless/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/headless/components/inputs/rating/rating.js +74 -53
- package/dist/headless/components/inputs/rating/rating.js.map +1 -1
- package/dist/headless/components/inputs/selectField/dropdownMenu.js +268 -143
- package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/headless/components/inputs/selectField/optionNavigation.js +37 -0
- package/dist/headless/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/headless/components/inputs/selectField/selectField.js +297 -126
- package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/headless/components/inputs/slider/slider.js +320 -197
- package/dist/headless/components/inputs/slider/slider.js.map +1 -1
- package/dist/headless/components/inputs/textField/textField.js +104 -51
- package/dist/headless/components/inputs/textField/textField.js.map +1 -1
- package/dist/headless/components/inputs/textField/textFieldWrapper.js +52 -45
- package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/headless/components/inputs/timePicker/timePicker.js +74 -63
- package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/headless/components/inputs/toggle/toggle.js +42 -30
- package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/headless/components/inputs/valueSlider/valueSlider.js +33 -28
- package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/headless/components/layout/appLayout/appLayout.js +29 -27
- package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/headless/components/layout/divider/divider.js +19 -17
- package/dist/headless/components/layout/divider/divider.js.map +1 -1
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js +185 -182
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/headless/components/layout/grid/grid.js +54 -46
- package/dist/headless/components/layout/grid/grid.js.map +1 -1
- package/dist/headless/components/layout/page/page.js +12 -10
- package/dist/headless/components/layout/page/page.js.map +1 -1
- package/dist/headless/components/layout/pageHeader/pageHeader.js +22 -20
- package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js +39 -37
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -1
- package/dist/headless/components/layout/sheet/sheet.js +101 -85
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/layout/stack/stack.js +23 -21
- package/dist/headless/components/layout/stack/stack.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroups.js +893 -0
- package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +192 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +480 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/headless/components/navigation/appBar/appBar.js +68 -28
- package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/headless/components/navigation/bottomBar/bottomBar.js +125 -120
- package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +13 -9
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/headless/components/navigation/commandPalette/commandPalette.js +455 -0
- package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +15 -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/menuComponent.js +12 -23
- package/dist/headless/components/navigation/menu/menuComponent.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuContext.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuFloating.js +54 -46
- package/dist/headless/components/navigation/menu/menuFloating.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuItem.js +58 -33
- package/dist/headless/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuList.js +34 -16
- package/dist/headless/components/navigation/menu/menuList.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuSubmenu.js +58 -38
- package/dist/headless/components/navigation/menu/menuSubmenu.js.map +1 -1
- package/dist/headless/components/navigation/pagination/pagination.js +23 -19
- package/dist/headless/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/headless/components/navigation/sidebar/sidebar.js +39 -35
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/navigation/stepper/stepper.js +38 -34
- package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +175 -44
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +32 -0
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabs.js +389 -147
- 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.map +1 -1
- package/dist/headless/index.js +405 -363
- package/dist/headless/index.js.map +1 -1
- package/dist/headless/primitives/createDismissOnEscape.js +14 -0
- package/dist/headless/primitives/createDismissOnEscape.js.map +1 -0
- package/dist/headless/primitives/createFocusTrap.js +17 -16
- package/dist/headless/primitives/createFocusTrap.js.map +1 -1
- package/dist/headless/primitives/createHelperText.js +14 -0
- package/dist/headless/primitives/createHelperText.js.map +1 -0
- package/dist/headless/primitives/createKeyboardShortcut.js +16 -0
- package/dist/headless/primitives/createKeyboardShortcut.js.map +1 -0
- package/dist/headless/primitives/mergeStyle.js +9 -0
- package/dist/headless/primitives/mergeStyle.js.map +1 -0
- package/dist/headless/primitives/overlayLayer.js +14 -7
- package/dist/headless/primitives/overlayLayer.js.map +1 -1
- package/dist/headless/primitives/restoreFocus.js +10 -0
- package/dist/headless/primitives/restoreFocus.js.map +1 -0
- package/dist/headless/source/components/base/animateHeight/animateHeight.jsx +7 -11
- package/dist/headless/source/components/base/animateHeight/animateHeight.jsx.map +1 -1
- package/dist/headless/source/components/base/icon/icon.jsx +10 -12
- package/dist/headless/source/components/base/icon/icon.jsx.map +1 -1
- package/dist/headless/source/components/base/ripple/ripple.jsx +16 -4
- package/dist/headless/source/components/base/ripple/ripple.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +14 -7
- package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/card/card.jsx +31 -12
- package/dist/headless/source/components/dataDisplay/card/card.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/carousel/carousel.jsx +9 -3
- package/dist/headless/source/components/dataDisplay/carousel/carousel.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chart/chart.jsx +5 -4
- package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chat.jsx +38 -4
- package/dist/headless/source/components/dataDisplay/chat/chat.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
- package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatIconButton.jsx +13 -3
- package/dist/headless/source/components/dataDisplay/chat/chatIconButton.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatLayout.jsx +6 -7
- package/dist/headless/source/components/dataDisplay/chat/chatLayout.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatOverlayLayout.jsx +5 -6
- package/dist/headless/source/components/dataDisplay/chat/chatOverlayLayout.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/index.js.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/utils.js.map +2 -2
- package/dist/headless/source/components/dataDisplay/chip/chip.jsx +55 -19
- package/dist/headless/source/components/dataDisplay/chip/chip.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chipGroup/chipGroup.jsx +14 -11
- package/dist/headless/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/dagView/dagLayout.js +383 -0
- package/dist/headless/source/components/dataDisplay/dagView/dagLayout.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +648 -0
- package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/dagView/index.js +10 -0
- package/dist/headless/source/components/dataDisplay/dagView/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/dagView/panZoom.js +247 -0
- package/dist/headless/source/components/dataDisplay/dagView/panZoom.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx +4 -6
- package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx +76 -0
- package/dist/headless/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/diffStat/index.js +19 -0
- package/dist/headless/source/components/dataDisplay/diffStat/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +83 -9
- package/dist/headless/source/components/dataDisplay/expansionPanel/expansionPanel.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx +20 -10
- package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/kbd/index.js +9 -0
- package/dist/headless/source/components/dataDisplay/kbd/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx +48 -0
- package/dist/headless/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
- package/dist/headless/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/list/list.jsx +3 -3
- package/dist/headless/source/components/dataDisplay/list/list.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/list/listItem.jsx +47 -16
- package/dist/headless/source/components/dataDisplay/list/listItem.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/meter/meter.jsx +3 -2
- package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx +3 -2
- package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/qrCode/index.js +6 -0
- package/dist/headless/source/components/dataDisplay/qrCode/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx +94 -0
- package/dist/headless/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
- package/dist/headless/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/stat/stat.jsx +7 -8
- package/dist/headless/source/components/dataDisplay/stat/stat.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/statusDot/index.js +6 -0
- package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +28 -0
- package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/swimlanes/index.js +15 -0
- package/dist/headless/source/components/dataDisplay/swimlanes/index.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx +450 -0
- package/dist/headless/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/table/table.jsx +18 -1
- package/dist/headless/source/components/dataDisplay/table/table.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableBody.jsx +6 -1
- package/dist/headless/source/components/dataDisplay/table/tableBody.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableCell.jsx +13 -4
- package/dist/headless/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableColumns.jsx +311 -0
- package/dist/headless/source/components/dataDisplay/table/tableColumns.jsx.map +1 -0
- package/dist/headless/source/components/dataDisplay/table/tableEntities.js +7 -0
- package/dist/headless/source/components/dataDisplay/table/tableEntities.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/table/tableHead.jsx +14 -1
- package/dist/headless/source/components/dataDisplay/table/tableHead.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx +51 -33
- package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableHtmlText.js +140 -0
- package/dist/headless/source/components/dataDisplay/table/tableHtmlText.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/table/tableRow.jsx +11 -5
- package/dist/headless/source/components/dataDisplay/table/tableRow.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx +48 -19
- package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +127 -39
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/typography/typography.jsx +2 -6
- package/dist/headless/source/components/dataDisplay/typography/typography.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx +12 -2
- package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/message/message.jsx +5 -4
- package/dist/headless/source/components/feedBack/message/message.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/modal/modal.jsx +39 -6
- package/dist/headless/source/components/feedBack/modal/modal.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/skeleton/skeleton.jsx +12 -5
- package/dist/headless/source/components/feedBack/skeleton/skeleton.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/snackbar/snackbar.jsx +3 -3
- package/dist/headless/source/components/feedBack/snackbar/snackbar.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx +52 -5
- package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
- package/dist/headless/source/components/inputs/button/button.jsx +14 -5
- package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
- package/dist/headless/source/components/inputs/buttonGroups/buttonGroup.jsx +4 -3
- package/dist/headless/source/components/inputs/buttonGroups/buttonGroup.jsx.map +1 -1
- package/dist/headless/source/components/inputs/checkbox/checkbox.jsx +27 -4
- package/dist/headless/source/components/inputs/checkbox/checkbox.jsx.map +1 -1
- package/dist/headless/source/components/inputs/composer/composer.jsx +319 -0
- package/dist/headless/source/components/inputs/composer/composer.jsx.map +1 -0
- package/dist/headless/source/components/inputs/composer/composerFiles.js +27 -0
- package/dist/headless/source/components/inputs/composer/composerFiles.js.map +7 -0
- package/dist/headless/source/components/inputs/composer/composerKeys.js +11 -0
- package/dist/headless/source/components/inputs/composer/composerKeys.js.map +7 -0
- package/dist/headless/source/components/inputs/composer/index.js +5 -0
- package/dist/headless/source/components/inputs/composer/index.js.map +7 -0
- package/dist/headless/source/components/inputs/datePicker/datePicker.jsx +13 -0
- package/dist/headless/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerActionLabel.jsx +4 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerActionLabel.jsx.map +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerDay.jsx +12 -12
- package/dist/headless/source/components/inputs/datePicker/datePickerDay.jsx.map +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerIconButton.jsx +13 -3
- package/dist/headless/source/components/inputs/datePicker/datePickerIconButton.jsx.map +1 -1
- package/dist/headless/source/components/inputs/dateTimePicker/dateTimePicker.jsx +13 -0
- package/dist/headless/source/components/inputs/dateTimePicker/dateTimePicker.jsx.map +1 -1
- package/dist/headless/source/components/inputs/floatingButton/floatingButton.jsx +12 -1
- package/dist/headless/source/components/inputs/floatingButton/floatingButton.jsx.map +1 -1
- package/dist/headless/source/components/inputs/radioButton/radioButton.jsx +16 -4
- package/dist/headless/source/components/inputs/radioButton/radioButton.jsx.map +1 -1
- package/dist/headless/source/components/inputs/rating/rating.jsx +49 -20
- package/dist/headless/source/components/inputs/rating/rating.jsx.map +1 -1
- package/dist/headless/source/components/inputs/selectField/dropdownMenu.jsx +222 -61
- package/dist/headless/source/components/inputs/selectField/dropdownMenu.jsx.map +1 -1
- package/dist/headless/source/components/inputs/selectField/optionNavigation.js +51 -0
- package/dist/headless/source/components/inputs/selectField/optionNavigation.js.map +7 -0
- package/dist/headless/source/components/inputs/selectField/selectField.jsx +318 -92
- package/dist/headless/source/components/inputs/selectField/selectField.jsx.map +1 -1
- package/dist/headless/source/components/inputs/slider/slider.jsx +89 -18
- package/dist/headless/source/components/inputs/slider/slider.jsx.map +1 -1
- package/dist/headless/source/components/inputs/textField/textField.jsx +47 -9
- package/dist/headless/source/components/inputs/textField/textField.jsx.map +1 -1
- package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx +20 -6
- package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
- package/dist/headless/source/components/inputs/timePicker/timePicker.jsx +13 -0
- package/dist/headless/source/components/inputs/timePicker/timePicker.jsx.map +1 -1
- package/dist/headless/source/components/inputs/toggle/toggle.jsx +14 -2
- package/dist/headless/source/components/inputs/toggle/toggle.jsx.map +1 -1
- package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx +7 -2
- package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx +8 -6
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/headless/source/components/layout/divider/divider.jsx +6 -5
- package/dist/headless/source/components/layout/divider/divider.jsx.map +1 -1
- package/dist/headless/source/components/layout/floatingWindow/floatingWindow.jsx +17 -11
- package/dist/headless/source/components/layout/floatingWindow/floatingWindow.jsx.map +1 -1
- package/dist/headless/source/components/layout/grid/grid.jsx +20 -8
- package/dist/headless/source/components/layout/grid/grid.jsx.map +1 -1
- package/dist/headless/source/components/layout/page/page.jsx +10 -2
- package/dist/headless/source/components/layout/page/page.jsx.map +1 -1
- package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx +3 -2
- package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
- package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx +5 -5
- package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -1
- package/dist/headless/source/components/layout/sheet/sheet.jsx +39 -19
- package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
- package/dist/headless/source/components/layout/stack/stack.jsx +15 -11
- package/dist/headless/source/components/layout/stack/stack.jsx.map +1 -1
- package/dist/headless/source/components/layout/tabGroups/index.js +8 -0
- package/dist/headless/source/components/layout/tabGroups/index.js.map +7 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +1117 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
- package/dist/headless/source/components/navigation/appBar/appBar.jsx +30 -5
- package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx +48 -40
- package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +9 -2
- package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
- package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx +506 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
- package/dist/headless/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
- package/dist/headless/source/components/navigation/commandPalette/index.js +11 -0
- package/dist/headless/source/components/navigation/commandPalette/index.js.map +7 -0
- package/dist/headless/source/components/navigation/menu/menu.jsx.map +1 -1
- package/dist/headless/source/components/navigation/menu/menuComponent.jsx +3 -4
- package/dist/headless/source/components/navigation/menu/menuComponent.jsx.map +1 -1
- package/dist/headless/source/components/navigation/menu/menuContext.js.map +2 -2
- package/dist/headless/source/components/navigation/menu/menuFloating.jsx +26 -4
- package/dist/headless/source/components/navigation/menu/menuFloating.jsx.map +1 -1
- package/dist/headless/source/components/navigation/menu/menuItem.jsx +22 -2
- package/dist/headless/source/components/navigation/menu/menuItem.jsx.map +1 -1
- package/dist/headless/source/components/navigation/menu/menuList.jsx +19 -7
- package/dist/headless/source/components/navigation/menu/menuList.jsx.map +1 -1
- package/dist/headless/source/components/navigation/menu/menuSubmenu.jsx +36 -4
- package/dist/headless/source/components/navigation/menu/menuSubmenu.jsx.map +1 -1
- package/dist/headless/source/components/navigation/pagination/pagination.jsx +4 -3
- package/dist/headless/source/components/navigation/pagination/pagination.jsx.map +1 -1
- package/dist/headless/source/components/navigation/sidebar/sidebar.jsx +6 -3
- package/dist/headless/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/stepper/stepper.jsx +14 -9
- package/dist/headless/source/components/navigation/stepper/stepper.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/index.js +2 -0
- package/dist/headless/source/components/navigation/tabs/index.js.map +2 -2
- package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +144 -21
- package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx +28 -0
- package/dist/headless/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
- package/dist/headless/source/components/navigation/tabs/tabs.jsx +392 -20
- package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/tabs.utils.js +18 -0
- package/dist/headless/source/components/navigation/tabs/tabs.utils.js.map +7 -0
- package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
- package/dist/headless/source/connects/rt/table/table.jsx +7 -2
- package/dist/headless/source/connects/rt/table/table.jsx.map +1 -1
- package/dist/headless/source/index.js +44 -1
- package/dist/headless/source/index.js.map +2 -2
- package/dist/headless/source/primitives/createDismissOnEscape.js +17 -0
- package/dist/headless/source/primitives/createDismissOnEscape.js.map +7 -0
- package/dist/headless/source/primitives/createFocusTrap.js +9 -3
- package/dist/headless/source/primitives/createFocusTrap.js.map +2 -2
- package/dist/headless/source/primitives/createHelperText.js +16 -0
- package/dist/headless/source/primitives/createHelperText.js.map +7 -0
- package/dist/headless/source/primitives/createKeyboardShortcut.js +23 -0
- package/dist/headless/source/primitives/createKeyboardShortcut.js.map +7 -0
- package/dist/headless/source/primitives/mergeStyle.js +15 -0
- package/dist/headless/source/primitives/mergeStyle.js.map +7 -0
- package/dist/headless/source/primitives/overlayLayer.js +10 -2
- package/dist/headless/source/primitives/overlayLayer.js.map +2 -2
- package/dist/headless/source/primitives/restoreFocus.js +14 -0
- package/dist/headless/source/primitives/restoreFocus.js.map +7 -0
- package/dist/headless/source/utils/controlProps.js +22 -0
- package/dist/headless/source/utils/controlProps.js.map +7 -0
- package/dist/headless/source/utils/keyboardShortcut.js +74 -0
- package/dist/headless/source/utils/keyboardShortcut.js.map +7 -0
- package/dist/headless/source/utils/linkAttrs.js +16 -0
- package/dist/headless/source/utils/linkAttrs.js.map +7 -0
- package/dist/headless/source/utils/ownClick.js +41 -0
- package/dist/headless/source/utils/ownClick.js.map +7 -0
- package/dist/headless/utils/controlProps.js +20 -0
- package/dist/headless/utils/controlProps.js.map +1 -0
- package/dist/headless/utils/keyboardShortcut.js +48 -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/ownClick.js +39 -0
- package/dist/headless/utils/ownClick.js.map +1 -0
- package/dist/index.d.ts +26 -3
- package/dist/index.js +405 -363
- package/dist/index.js.map +1 -1
- package/dist/primitives/createDismissOnEscape.d.ts +12 -0
- package/dist/primitives/createDismissOnEscape.js +14 -0
- package/dist/primitives/createDismissOnEscape.js.map +1 -0
- package/dist/primitives/createFocusTrap.d.ts +7 -0
- package/dist/primitives/createFocusTrap.js +17 -16
- package/dist/primitives/createFocusTrap.js.map +1 -1
- package/dist/primitives/createHelperText.d.ts +26 -0
- package/dist/primitives/createHelperText.js +14 -0
- package/dist/primitives/createHelperText.js.map +1 -0
- package/dist/primitives/createKeyboardShortcut.d.ts +23 -0
- package/dist/primitives/createKeyboardShortcut.js +16 -0
- package/dist/primitives/createKeyboardShortcut.js.map +1 -0
- package/dist/primitives/mergeStyle.d.ts +19 -0
- package/dist/primitives/mergeStyle.js +9 -0
- package/dist/primitives/mergeStyle.js.map +1 -0
- package/dist/primitives/overlayLayer.d.ts +15 -3
- package/dist/primitives/overlayLayer.js +14 -7
- package/dist/primitives/overlayLayer.js.map +1 -1
- package/dist/primitives/restoreFocus.d.ts +8 -0
- package/dist/primitives/restoreFocus.js +10 -0
- package/dist/primitives/restoreFocus.js.map +1 -0
- package/dist/source/components/base/animateHeight/animateHeight.jsx +7 -11
- package/dist/source/components/base/animateHeight/animateHeight.jsx.map +1 -1
- package/dist/source/components/base/icon/icon.jsx +10 -12
- package/dist/source/components/base/icon/icon.jsx.map +1 -1
- package/dist/source/components/base/ripple/ripple.jsx +16 -4
- package/dist/source/components/base/ripple/ripple.jsx.map +1 -1
- package/dist/source/components/dataDisplay/avatar/avatar.jsx +14 -7
- package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
- package/dist/source/components/dataDisplay/card/card.jsx +31 -12
- package/dist/source/components/dataDisplay/card/card.jsx.map +1 -1
- package/dist/source/components/dataDisplay/carousel/carousel.jsx +9 -3
- package/dist/source/components/dataDisplay/carousel/carousel.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chart/chart.jsx +5 -4
- package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chat.jsx +38 -4
- package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chatComposer.jsx +1 -0
- package/dist/source/components/dataDisplay/chat/chatComposer.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chatIconButton.jsx +13 -3
- package/dist/source/components/dataDisplay/chat/chatIconButton.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chatLayout.jsx +6 -7
- package/dist/source/components/dataDisplay/chat/chatLayout.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chatOverlayLayout.jsx +5 -6
- package/dist/source/components/dataDisplay/chat/chatOverlayLayout.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/index.js.map +1 -1
- package/dist/source/components/dataDisplay/chat/utils.js.map +2 -2
- package/dist/source/components/dataDisplay/chip/chip.jsx +55 -19
- package/dist/source/components/dataDisplay/chip/chip.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx +14 -11
- package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -1
- package/dist/source/components/dataDisplay/dagView/dagLayout.js +383 -0
- package/dist/source/components/dataDisplay/dagView/dagLayout.js.map +7 -0
- package/dist/source/components/dataDisplay/dagView/dagView.jsx +650 -0
- package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -0
- package/dist/source/components/dataDisplay/dagView/index.js +10 -0
- package/dist/source/components/dataDisplay/dagView/index.js.map +7 -0
- package/dist/source/components/dataDisplay/dagView/panZoom.js +247 -0
- package/dist/source/components/dataDisplay/dagView/panZoom.js.map +7 -0
- package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx +4 -6
- package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -1
- package/dist/source/components/dataDisplay/diffStat/diffStat.jsx +78 -0
- package/dist/source/components/dataDisplay/diffStat/diffStat.jsx.map +1 -0
- package/dist/source/components/dataDisplay/diffStat/index.js +19 -0
- package/dist/source/components/dataDisplay/diffStat/index.js.map +7 -0
- package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +83 -9
- package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx.map +1 -1
- package/dist/source/components/dataDisplay/kanban/kanban.jsx +20 -10
- package/dist/source/components/dataDisplay/kanban/kanban.jsx.map +1 -1
- package/dist/source/components/dataDisplay/kbd/index.js +9 -0
- package/dist/source/components/dataDisplay/kbd/index.js.map +7 -0
- package/dist/source/components/dataDisplay/kbd/kbd.jsx +50 -0
- package/dist/source/components/dataDisplay/kbd/kbd.jsx.map +1 -0
- package/dist/source/components/dataDisplay/kbd/kbdKeys.js +79 -0
- package/dist/source/components/dataDisplay/kbd/kbdKeys.js.map +7 -0
- package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx +1 -1
- package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
- package/dist/source/components/dataDisplay/list/list.jsx +3 -3
- package/dist/source/components/dataDisplay/list/list.jsx.map +1 -1
- package/dist/source/components/dataDisplay/list/listItem.jsx +47 -16
- package/dist/source/components/dataDisplay/list/listItem.jsx.map +1 -1
- package/dist/source/components/dataDisplay/meter/meter.jsx +3 -2
- package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -1
- package/dist/source/components/dataDisplay/personChip/personChip.jsx +3 -2
- package/dist/source/components/dataDisplay/personChip/personChip.jsx.map +1 -1
- package/dist/source/components/dataDisplay/qrCode/index.js +6 -0
- package/dist/source/components/dataDisplay/qrCode/index.js.map +7 -0
- package/dist/source/components/dataDisplay/qrCode/qrCode.jsx +96 -0
- package/dist/source/components/dataDisplay/qrCode/qrCode.jsx.map +1 -0
- package/dist/source/components/dataDisplay/qrCode/qrCodePath.js +24 -0
- package/dist/source/components/dataDisplay/qrCode/qrCodePath.js.map +7 -0
- package/dist/source/components/dataDisplay/stat/stat.jsx +7 -8
- package/dist/source/components/dataDisplay/stat/stat.jsx.map +1 -1
- package/dist/source/components/dataDisplay/statusDot/index.js +6 -0
- package/dist/source/components/dataDisplay/statusDot/index.js.map +7 -0
- package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +30 -0
- package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -0
- package/dist/source/components/dataDisplay/swimlanes/index.js +15 -0
- package/dist/source/components/dataDisplay/swimlanes/index.js.map +7 -0
- package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx +452 -0
- package/dist/source/components/dataDisplay/swimlanes/swimlanes.jsx.map +1 -0
- package/dist/source/components/dataDisplay/table/table.jsx +18 -1
- package/dist/source/components/dataDisplay/table/table.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableBody.jsx +6 -1
- package/dist/source/components/dataDisplay/table/tableBody.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableCell.jsx +13 -4
- package/dist/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableColumns.jsx +311 -0
- package/dist/source/components/dataDisplay/table/tableColumns.jsx.map +1 -0
- package/dist/source/components/dataDisplay/table/tableEntities.js +7 -0
- package/dist/source/components/dataDisplay/table/tableEntities.js.map +7 -0
- package/dist/source/components/dataDisplay/table/tableHead.jsx +14 -1
- package/dist/source/components/dataDisplay/table/tableHead.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableHeadCell.jsx +51 -33
- package/dist/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableHtmlText.js +140 -0
- package/dist/source/components/dataDisplay/table/tableHtmlText.js.map +7 -0
- package/dist/source/components/dataDisplay/table/tableRow.jsx +11 -5
- package/dist/source/components/dataDisplay/table/tableRow.jsx.map +1 -1
- package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx +48 -19
- package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
- package/dist/source/components/dataDisplay/treeView/treeView.jsx +127 -39
- package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/source/components/dataDisplay/typography/typography.jsx +2 -6
- package/dist/source/components/dataDisplay/typography/typography.jsx.map +1 -1
- package/dist/source/components/feedBack/emptyState/emptyState.jsx +12 -2
- package/dist/source/components/feedBack/emptyState/emptyState.jsx.map +1 -1
- package/dist/source/components/feedBack/message/message.jsx +5 -4
- package/dist/source/components/feedBack/message/message.jsx.map +1 -1
- package/dist/source/components/feedBack/modal/modal.jsx +39 -6
- package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
- package/dist/source/components/feedBack/skeleton/skeleton.jsx +12 -5
- package/dist/source/components/feedBack/skeleton/skeleton.jsx.map +1 -1
- package/dist/source/components/feedBack/snackbar/snackbar.jsx +3 -3
- package/dist/source/components/feedBack/snackbar/snackbar.jsx.map +1 -1
- package/dist/source/components/feedBack/tooltip/tooltip.jsx +52 -5
- package/dist/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
- package/dist/source/components/inputs/button/button.jsx +14 -5
- package/dist/source/components/inputs/button/button.jsx.map +1 -1
- package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx +4 -3
- package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx.map +1 -1
- package/dist/source/components/inputs/checkbox/checkbox.jsx +27 -4
- package/dist/source/components/inputs/checkbox/checkbox.jsx.map +1 -1
- package/dist/source/components/inputs/composer/composer.jsx +321 -0
- package/dist/source/components/inputs/composer/composer.jsx.map +1 -0
- package/dist/source/components/inputs/composer/composerFiles.js +27 -0
- package/dist/source/components/inputs/composer/composerFiles.js.map +7 -0
- package/dist/source/components/inputs/composer/composerKeys.js +11 -0
- package/dist/source/components/inputs/composer/composerKeys.js.map +7 -0
- package/dist/source/components/inputs/composer/index.js +5 -0
- package/dist/source/components/inputs/composer/index.js.map +7 -0
- package/dist/source/components/inputs/datePicker/datePicker.jsx +13 -0
- package/dist/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
- package/dist/source/components/inputs/datePicker/datePickerActionLabel.jsx +4 -1
- package/dist/source/components/inputs/datePicker/datePickerActionLabel.jsx.map +1 -1
- package/dist/source/components/inputs/datePicker/datePickerDay.jsx +12 -12
- package/dist/source/components/inputs/datePicker/datePickerDay.jsx.map +1 -1
- package/dist/source/components/inputs/datePicker/datePickerIconButton.jsx +13 -3
- package/dist/source/components/inputs/datePicker/datePickerIconButton.jsx.map +1 -1
- package/dist/source/components/inputs/dateTimePicker/dateTimePicker.jsx +13 -0
- package/dist/source/components/inputs/dateTimePicker/dateTimePicker.jsx.map +1 -1
- package/dist/source/components/inputs/floatingButton/floatingButton.jsx +12 -1
- package/dist/source/components/inputs/floatingButton/floatingButton.jsx.map +1 -1
- package/dist/source/components/inputs/radioButton/radioButton.jsx +16 -4
- package/dist/source/components/inputs/radioButton/radioButton.jsx.map +1 -1
- package/dist/source/components/inputs/rating/rating.jsx +49 -20
- package/dist/source/components/inputs/rating/rating.jsx.map +1 -1
- package/dist/source/components/inputs/selectField/dropdownMenu.jsx +222 -61
- package/dist/source/components/inputs/selectField/dropdownMenu.jsx.map +1 -1
- package/dist/source/components/inputs/selectField/optionNavigation.js +51 -0
- package/dist/source/components/inputs/selectField/optionNavigation.js.map +7 -0
- package/dist/source/components/inputs/selectField/selectField.jsx +318 -92
- package/dist/source/components/inputs/selectField/selectField.jsx.map +1 -1
- package/dist/source/components/inputs/slider/slider.jsx +89 -18
- package/dist/source/components/inputs/slider/slider.jsx.map +1 -1
- package/dist/source/components/inputs/textField/textField.jsx +47 -9
- package/dist/source/components/inputs/textField/textField.jsx.map +1 -1
- package/dist/source/components/inputs/textField/textFieldWrapper.jsx +20 -6
- package/dist/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
- package/dist/source/components/inputs/timePicker/timePicker.jsx +13 -0
- package/dist/source/components/inputs/timePicker/timePicker.jsx.map +1 -1
- package/dist/source/components/inputs/toggle/toggle.jsx +14 -2
- package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
- package/dist/source/components/inputs/valueSlider/valueSlider.jsx +7 -2
- package/dist/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
- package/dist/source/components/layout/appLayout/appLayout.jsx +8 -6
- package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/source/components/layout/divider/divider.jsx +6 -5
- package/dist/source/components/layout/divider/divider.jsx.map +1 -1
- package/dist/source/components/layout/floatingWindow/floatingWindow.jsx +17 -11
- package/dist/source/components/layout/floatingWindow/floatingWindow.jsx.map +1 -1
- package/dist/source/components/layout/grid/grid.jsx +20 -8
- package/dist/source/components/layout/grid/grid.jsx.map +1 -1
- package/dist/source/components/layout/page/page.jsx +10 -2
- package/dist/source/components/layout/page/page.jsx.map +1 -1
- package/dist/source/components/layout/pageHeader/pageHeader.jsx +3 -2
- package/dist/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
- package/dist/source/components/layout/sectionHeader/sectionHeader.jsx +5 -5
- package/dist/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -1
- package/dist/source/components/layout/sheet/sheet.jsx +39 -19
- package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
- package/dist/source/components/layout/stack/stack.jsx +15 -11
- package/dist/source/components/layout/stack/stack.jsx.map +1 -1
- package/dist/source/components/layout/tabGroups/index.js +8 -0
- package/dist/source/components/layout/tabGroups/index.js.map +7 -0
- package/dist/source/components/layout/tabGroups/tabGroups.jsx +1119 -0
- package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -0
- package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +222 -0
- package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +7 -0
- package/dist/source/components/layout/tabGroups/tabGroupsLayout.js +629 -0
- package/dist/source/components/layout/tabGroups/tabGroupsLayout.js.map +7 -0
- package/dist/source/components/navigation/appBar/appBar.jsx +30 -5
- package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
- package/dist/source/components/navigation/bottomBar/bottomBar.jsx +48 -40
- package/dist/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +9 -2
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
- package/dist/source/components/navigation/commandPalette/commandPalette.jsx +508 -0
- package/dist/source/components/navigation/commandPalette/commandPalette.jsx.map +1 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteFilter.js.map +7 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js +54 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteNavigation.js.map +7 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js +1 -0
- package/dist/source/components/navigation/commandPalette/commandPaletteTypes.js.map +7 -0
- package/dist/source/components/navigation/commandPalette/index.js +11 -0
- package/dist/source/components/navigation/commandPalette/index.js.map +7 -0
- package/dist/source/components/navigation/menu/menu.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuComponent.jsx +3 -4
- package/dist/source/components/navigation/menu/menuComponent.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuContext.js.map +2 -2
- package/dist/source/components/navigation/menu/menuFloating.jsx +26 -4
- package/dist/source/components/navigation/menu/menuFloating.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuItem.jsx +22 -2
- package/dist/source/components/navigation/menu/menuItem.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuList.jsx +19 -7
- package/dist/source/components/navigation/menu/menuList.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuSubmenu.jsx +36 -4
- package/dist/source/components/navigation/menu/menuSubmenu.jsx.map +1 -1
- package/dist/source/components/navigation/pagination/pagination.jsx +4 -3
- package/dist/source/components/navigation/pagination/pagination.jsx.map +1 -1
- package/dist/source/components/navigation/sidebar/sidebar.jsx +6 -3
- package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
- package/dist/source/components/navigation/stepper/stepper.jsx +14 -9
- package/dist/source/components/navigation/stepper/stepper.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/index.js +2 -0
- package/dist/source/components/navigation/tabs/index.js.map +2 -2
- package/dist/source/components/navigation/tabs/tab/tab.jsx +144 -21
- package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx +30 -0
- package/dist/source/components/navigation/tabs/tabPanel/tabPanel.jsx.map +1 -0
- package/dist/source/components/navigation/tabs/tabs.jsx +392 -20
- package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tabs.utils.js +18 -0
- package/dist/source/components/navigation/tabs/tabs.utils.js.map +7 -0
- package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
- package/dist/source/connects/rt/table/table.jsx +7 -2
- package/dist/source/connects/rt/table/table.jsx.map +1 -1
- package/dist/source/index.js +44 -1
- package/dist/source/index.js.map +2 -2
- package/dist/source/primitives/createDismissOnEscape.js +17 -0
- package/dist/source/primitives/createDismissOnEscape.js.map +7 -0
- package/dist/source/primitives/createFocusTrap.js +9 -3
- package/dist/source/primitives/createFocusTrap.js.map +2 -2
- package/dist/source/primitives/createHelperText.js +16 -0
- package/dist/source/primitives/createHelperText.js.map +7 -0
- package/dist/source/primitives/createKeyboardShortcut.js +23 -0
- package/dist/source/primitives/createKeyboardShortcut.js.map +7 -0
- package/dist/source/primitives/mergeStyle.js +15 -0
- package/dist/source/primitives/mergeStyle.js.map +7 -0
- package/dist/source/primitives/overlayLayer.js +10 -2
- package/dist/source/primitives/overlayLayer.js.map +2 -2
- package/dist/source/primitives/restoreFocus.js +14 -0
- package/dist/source/primitives/restoreFocus.js.map +7 -0
- package/dist/source/utils/controlProps.js +22 -0
- package/dist/source/utils/controlProps.js.map +7 -0
- package/dist/source/utils/keyboardShortcut.js +74 -0
- package/dist/source/utils/keyboardShortcut.js.map +7 -0
- package/dist/source/utils/linkAttrs.js +16 -0
- package/dist/source/utils/linkAttrs.js.map +7 -0
- package/dist/source/utils/ownClick.js +41 -0
- package/dist/source/utils/ownClick.js.map +7 -0
- package/dist/utils/controlProps.d.ts +17 -0
- package/dist/utils/controlProps.js +20 -0
- package/dist/utils/controlProps.js.map +1 -0
- package/dist/utils/keyboardShortcut.d.ts +12 -0
- package/dist/utils/keyboardShortcut.js +48 -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/ownClick.d.ts +16 -0
- package/dist/utils/ownClick.js +39 -0
- package/dist/utils/ownClick.js.map +1 -0
- package/package.json +72 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabGroups.js","sources":["../../../../src/components/layout/tabGroups/tabGroups.tsx"],"sourcesContent":["import {\n type JSX,\n For,\n Show,\n children as resolveChildren,\n createComputed,\n createEffect,\n createMemo,\n createRenderEffect,\n createSignal,\n createUniqueId,\n mapArray,\n on,\n onCleanup,\n onMount,\n splitProps,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Tabs } from \"../../navigation/tabs/tabs\";\nimport { Tab } from \"../../navigation/tabs/tab/tab\";\nimport type { TabCloseReason, TabProps } from \"../../navigation/tabs/tab/tab\";\nimport { Menu } from \"../../navigation/menu/menu\";\nimport { MenuItem } from \"../../navigation/menu/menuItem\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { matchesKeyboardShortcut } from \"../../../utils/keyboardShortcut\";\nimport { throttle } from \"../../../utils/throttle\";\nimport {\n TAB_GROUPS_LABELS,\n adjacentGroup,\n computeTabGroupsGrid,\n createTabGroupsLayout,\n describeTabGroupsChange,\n dropZoneAt,\n findGroupOfTab,\n getGroups,\n gridTemplateColumns,\n gridTemplateRows,\n groupBodyArea,\n groupHeaderArea,\n moveTab,\n moveTabInDirection,\n removeTab,\n resizeSplit,\n selectTab,\n separatorArea,\n setActiveGroup,\n type TabGroupsChange,\n type TabGroupsDropZone,\n type TabGroupsEdge,\n type TabGroupsGroup,\n type TabGroupsLabels,\n type TabGroupsLayout,\n type TabGroupsNode,\n type TabGroupsSplit,\n} from \"./tabGroupsLayout\";\nimport {\n containsDeep,\n deepActiveElement,\n focusFromEnd,\n frameExitTarget,\n lastStopOf,\n ownGroupIdOf,\n ownerRootOf,\n tabMove,\n} from \"./tabGroupsFocus\";\n\n/**\n * What a tab of `TabGroups` shows, answered by the app through `getTab`. Only the tab's id lives in\n * the layout, so a stored arrangement survives renames and carries no content.\n */\nexport interface TabGroupsTab {\n /** The tab's label. A tab id the app does not know is drawn as the id itself. */\n label: JSX.Element;\n /**\n * Plain text for the announcements and for a screen reader that cannot read the label (markup,\n * an icon). `label` when it is a string, else the tab id.\n */\n title?: string | undefined;\n /** An icon drawn before the label. */\n icon?: JSX.Element;\n /**\n * Draw a close button and let Delete or Backspace close the tab: true by default. `false` keeps\n * the tab's item wrapper, so every tab has the same drag surface.\n */\n closable?: boolean | undefined;\n /** Accessible label of the tab's close button (\"Close Terminal 1\"). */\n closeLabel?: string | undefined;\n /** Content after the tab, as `Tab`'s `actions`: a trigger with a `Menu`, or any control. */\n actions?: TabProps[\"actions\"];\n /** Greys the tab out: it cannot be selected, moved or dragged. */\n disabled?: boolean | undefined;\n}\n\nexport interface TabGroupsProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"onChange\" | \"id\"> {\n /**\n * The arrangement to draw: the split tree, every group's tabs and the selected one. Controlled\n * while it is not `undefined` — the component then only reports changes through\n * `onLayoutChange` and draws what the owner gives back.\n */\n layout?: TabGroupsLayout | undefined;\n /** The arrangement to start from while uncontrolled: one empty group by default. */\n defaultLayout?: TabGroupsLayout | undefined;\n /**\n * Called with the layout after a change and with what happened, in both the controlled and the\n * uncontrolled mode. A controlled owner that does not apply the change simply sees nothing move.\n */\n onLayoutChange?: ((layout: TabGroupsLayout, change: TabGroupsChange) => void) | undefined;\n /** What a tab shows, by its id; `undefined` draws the id as the label. */\n getTab: (tabId: string) => TabGroupsTab | undefined;\n /**\n * The content of a tab's panel, by its id. It is called the first time the tab is selected and\n * the panel stays mounted from then on, hidden while another tab is shown and kept through a\n * move to another group: a form keeps what was typed, a terminal its scrollback. Its node stays\n * where it is in the DOM, so an iframe in it does not reload either.\n */\n renderPanel: (tabId: string) => JSX.Element;\n /**\n * Asked before a tab closes, with what asked for it (its close button, Delete or Backspace, a\n * middle click, its `actions`). Return `false` to keep the tab.\n */\n onTabClose?: ((tabId: string, event: Event, reason: TabCloseReason) => boolean | void) | undefined;\n /** Drawn, centred, when the only group has no tabs left. */\n empty?: JSX.Element;\n /** The smallest a group can be resized to, in px of its split; 120 by default. */\n minGroupSize?: number | undefined;\n /** The arrow-key step of a separator, in percent of its split; 5 by default. */\n keyboardStep?: number | undefined;\n /** Draw each group's actions button and menu; true by default. */\n groupActions?: boolean | undefined;\n /** Compact tab rows, as `Tabs`' `dense`; false by default. */\n dense?: boolean | undefined;\n /** The texts of the component: its menus, labels and announcements. English by default. */\n labels?: Partial<TabGroupsLabels> | undefined;\n /** Base of the generated ids and the id of the root element. Generated by default. */\n id?: string | undefined;\n /** Test id of the root element; `tab-groups` unless given. */\n \"data-testid\"?: string | undefined;\n /** Class of the root element, added to the component's own. */\n class?: string | undefined;\n /** Inline style of the root element; the component's `grid-template-*` win over it. */\n style?: JSX.HTMLAttributes<HTMLDivElement>[\"style\"];\n /** The root element. */\n ref?: Ref<HTMLDivElement>;\n}\n\n/** The chords a group's tabs answer to, as `aria-keyshortcuts` lists them. */\nconst CHORD_SHORTCUTS = [\n \"Alt+Shift+ArrowLeft\",\n \"Alt+Shift+ArrowRight\",\n \"Alt+Shift+ArrowUp\",\n \"Alt+Shift+ArrowDown\",\n \"Control+Shift+ArrowLeft\",\n \"Meta+Shift+ArrowLeft\",\n \"Control+Shift+ArrowRight\",\n \"Meta+Shift+ArrowRight\",\n].join(\" \");\n\n/** The keys that move a tab to the group (or the new group) at that edge. */\nconst DIRECTION_CHORDS: [TabGroupsEdge, string[]][] = [\n [\"left\", [\"Alt\", \"Shift\", \"ArrowLeft\"]],\n [\"right\", [\"Alt\", \"Shift\", \"ArrowRight\"]],\n [\"top\", [\"Alt\", \"Shift\", \"ArrowUp\"]],\n [\"bottom\", [\"Alt\", \"Shift\", \"ArrowDown\"]],\n];\n\n/** The item of an opened menu that takes focus first (as `Tab`'s actions look for it). */\nconst FIRST_MENU_ITEM = '[role^=\"menuitem\"]:not([aria-disabled=\"true\"])';\n\n/** What a group's actions menu can do; every item acts on the group's selected tab. */\ntype MenuAction = \"splitRight\" | \"splitDown\" | \"previous\" | \"next\" | \"left\" | \"right\";\n\n/** The nearest `data-group-id` at or above a node, walked rather than selected: ids need no escaping. */\nfunction groupIdOf(node: Element | null | undefined): string | null {\n let current = node ?? null;\n while (current) {\n const id = current.getAttribute(\"data-group-id\");\n if (id !== null) return id;\n current = current.parentElement;\n }\n return null;\n}\n\n/** The element a drag of this tab starts on: its item, or the tab itself when it has no controls. */\nfunction tabItemOf(tab: HTMLElement): HTMLElement {\n return tab.closest<HTMLElement>(\".smwb-tab-item\") ?? tab;\n}\n\n/**\n * The tab an event landed on. `Tabs` makes the item wrapper draggable, so a real drag reports the\n * wrapper — not the tab — as its target: the tab is then found inside it, and an event on the tab\n * or on its label is still resolved by walking up.\n */\nfunction tabElementOf(target: Element | null): HTMLElement | null {\n if (!target) return null;\n const direct = target.closest<HTMLElement>('[role=\"tab\"]');\n if (direct) return direct;\n const item = target.closest<HTMLElement>(\".smwb-tab-item\");\n return item?.querySelector<HTMLElement>('[role=\"tab\"]') ?? null;\n}\n\n/** The split node with this id, if the tree has one. */\nfunction findSplitNode(root: TabGroupsNode, id: string): TabGroupsSplit | undefined {\n if (root.type === \"group\") return undefined;\n if (root.id === id) return root;\n for (const child of root.children) {\n const found = findSplitNode(child, id);\n if (found) return found;\n }\n return undefined;\n}\n\n/** The ids of the groups a node holds. */\nfunction groupIdsOf(node: TabGroupsNode): string[] {\n return node.type === \"group\" ? [node.id] : node.children.flatMap(groupIdsOf);\n}\n\n/**\n * The root's children in reading order, by the key each one is looked up with: per group its\n * header and then its panels, with each separator after the subtree it follows. It is the Tab order\n * and the order assistive technology reads in, while the DOM keeps the panels where they are.\n */\nfunction readingKeys(root: TabGroupsNode): string[] {\n const keys: string[] = [];\n const walk = (node: TabGroupsNode): void => {\n if (node.type === \"group\") {\n keys.push(`h:${node.id}`, `p:${node.id}`);\n return;\n }\n node.children.forEach((child, index) => {\n walk(child);\n if (index < node.children.length - 1) keys.push(`s:${node.id}:${index}`);\n });\n };\n walk(root);\n return keys;\n}\n\n/**\n * Puts the root's headers, separators and panels at its start, in the given order, moving none\n * that can stay. Solid's list diff may take a kept node out and put it back, and a browser treats\n * that as a removal: a focused tab in a header blurs to nowhere and a scrolled tab row goes back\n * to its start. So the nodes already in order among themselves stay where they are (the longest\n * such run, always including the one that holds the focus), and only the others are inserted, or\n * moved, around them. `previous` is what was placed before: the nodes of it that are gone go.\n */\nfunction placeChildren(parent: HTMLElement, next: readonly HTMLElement[], previous: readonly HTMLElement[]): void {\n const wanted = new Set<Element>(next);\n previous.forEach((node) => {\n if (!wanted.has(node) && node.parentNode === parent) node.remove();\n });\n const children = Array.from(parent.children);\n const position = new Map<Element, number>();\n children.forEach((child, at) => position.set(child, at));\n\n const active = parent.ownerDocument.activeElement;\n const focused = active === null ? -1 : next.findIndex((node) => node.contains(active));\n const focusedAt = focused < 0 ? undefined : position.get(next[focused]!);\n // The nodes already in the root, in their new order; with a focused one, only those that can\n // stay on the same side of it as before.\n const kept: number[] = [];\n next.forEach((node, i) => {\n const at = position.get(node);\n if (at === undefined) return;\n if (focusedAt !== undefined && i !== focused && i < focused !== at < focusedAt) return;\n kept.push(at);\n });\n // The longest run of them in ascending place stays put (a few dozen nodes, so quadratic is fine).\n const length = kept.map(() => 1);\n const before = kept.map(() => -1);\n let best = -1;\n kept.forEach((at, k) => {\n for (let j = 0; j < k; j++) {\n if (kept[j]! < at && length[j]! + 1 > length[k]!) {\n length[k] = length[j]! + 1;\n before[k] = j;\n }\n }\n if (best < 0 || length[k]! > length[best]!) best = k;\n });\n const stays = new Set<number>();\n for (let k = best; k >= 0; k = before[k]!) stays.add(kept[k]!);\n\n // The last node goes after the last one that stays — or, with none staying, at the root's start,\n // before what Solid draws there (the empty state, the drop targets, the guard, the status).\n let anchor: Node | null = stays.size > 0 ? children[Math.max(...stays)]!.nextSibling : parent.firstChild;\n for (let i = next.length - 1; i >= 0; i--) {\n const node = next[i]!;\n const at = position.get(node);\n if (at === undefined || !stays.has(at)) parent.insertBefore(node, anchor);\n anchor = node;\n }\n}\n\n/** The tabs the layout shows: one per group. */\nfunction selectedTabsOf(layout: TabGroupsLayout): string[] {\n return getGroups(layout)\n .map((group) => group.active)\n .filter((tab): tab is string => tab !== null);\n}\n\n/**\n * Tab groups in a split area: one component draws every group, each a tab row with its panels.\n *\n * The area splits right or down into groups, a tab moves to another group by drag and drop or by\n * keyboard, dropping it on a group's edge makes a new group there, and closing a group's last tab\n * closes the group and collapses its split. The whole arrangement is a serialisable, versioned\n * `layout` (`layout` / `defaultLayout` / `onLayoutChange`) that an app stores as JSON;\n * `tabGroupsLayout.parseTabGroupsLayout` reads one back, and `tabGroupsLayout.addTab` /\n * `syncTabs` keep it in step with the tabs the app has open.\n *\n * Everything is drawn on one CSS grid whose children are a flat, keyed list, so restructuring the\n * tree re-places nodes instead of remounting them, and a panel's node never moves: it keeps its\n * state, its scroll and the focus inside it when its tab moves to another group or the area splits.\n *\n * Without a mouse: Alt+Shift+Arrow moves the focused tab to the group that way (splitting there\n * when the area ends), Mod+Shift+ArrowLeft/Right moves it along its row, each group's actions\n * button opens a menu of the same actions, and each separator resizes with the arrow keys, Home\n * and End. Every move is announced in a polite status region.\n */\nexport function TabGroups(props: TabGroupsProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"id\",\n \"data-testid\",\n \"ref\",\n \"layout\",\n \"defaultLayout\",\n \"onLayoutChange\",\n \"getTab\",\n \"renderPanel\",\n \"onTabClose\",\n \"empty\",\n \"minGroupSize\",\n \"keyboardStep\",\n \"groupActions\",\n \"dense\",\n \"labels\",\n // Wrapped so that the caller's handler still runs, first.\n \"onDragStart\",\n \"onDragOver\",\n \"onDrop\",\n \"onDragEnd\",\n \"onFocusIn\",\n \"onKeyDown\",\n ]);\n\n const generatedId = createUniqueId();\n const base = (): string => local.id ?? generatedId;\n const encode = (id: string): string => encodeURIComponent(id);\n const tabElementId = (tabId: string): string => `${base()}-tab-${encode(tabId)}`;\n const panelElementId = (tabId: string): string => `${base()}-panel-${encode(tabId)}`;\n const menuElementId = (groupId: string): string => `${base()}-menu-${encode(groupId)}`;\n const headerElementId = (groupId: string): string => `${base()}-header-${encode(groupId)}`;\n const separatorElementId = (splitId: string, index: number): string =>\n `${base()}-separator-${encode(splitId)}-${index}`;\n const statusElementId = (): string => `${base()}-status`;\n\n const minGroupSize = (): number => local.minGroupSize ?? 120;\n const keyboardStep = (): number => local.keyboardStep ?? 5;\n const withGroupActions = (): boolean => local.groupActions !== false;\n const labels = createMemo(\n (): TabGroupsLabels => ({\n ...TAB_GROUPS_LABELS,\n ...local.labels,\n })\n );\n\n // The library's controlled-state rule: controlled while `layout` is not undefined, own state\n // while it is. `latest` is the layout the next change is computed from, so two changes in one\n // event (a drop and the selection that follows it, a chord and the focus it moves) compose\n // instead of the second overwriting the first. It is reset to the drawn value whenever that\n // changes and — while controlled — once the event is over (`settle`): a change the owner did\n // not draw is forgotten, so the next one neither reports it nor reads its rows.\n const [layout, setLayout] = createControllableState<TabGroupsLayout>({\n value: () => local.layout,\n defaultValue: local.defaultLayout ?? createTabGroupsLayout(),\n });\n let latest: TabGroupsLayout = layout();\n createComputed(() => {\n latest = layout();\n });\n\n const grid = createMemo(() => computeTabGroupsGrid(layout()));\n const groups = createMemo(() => getGroups(layout()));\n const groupCount = createMemo(() => groups().length);\n const hasSplit = createMemo(() => groups().length > 1);\n const selectedTabs = createMemo(() => new Set(selectedTabsOf(layout())));\n const groupOfTab = createMemo(() => {\n const map = new Map<string, string>();\n getGroups(layout()).forEach((group) => group.tabs.forEach((tab) => map.set(tab, group.id)));\n return map;\n });\n const groupById = (value: TabGroupsLayout, groupId: string): TabGroupsGroup | undefined =>\n getGroups(value).find((group) => group.id === groupId);\n const indexOfGroup = (groupId: string): number => groups().findIndex((group) => group.id === groupId);\n\n // Nothing open: the one group has no tabs, so the `empty` slot takes the area.\n const isEmpty = createMemo((): boolean => {\n const list = groups();\n return list.length === 1 && (list[0]?.tabs.length ?? 0) === 0;\n });\n\n // The grid's children, each placed by its `grid-area` alone: the headers in reading order, the\n // separators, then the panels in the order they first appeared — a new one at the end, never\n // reordered. A move only changes a panel's `grid-area`, so its node stays where it is: putting it\n // back into the document would reset its scroll, reload an iframe in it and blur the focus inside\n // it. Tab order and the accessibility tree follow the reading order (`onRootKeyDown`, `aria-owns`),\n // and no header or separator that keeps its place among the others is moved either (`placeChildren`).\n const groupIds = createMemo((): string[] => groups().map((group) => group.id));\n const separatorKeys = createMemo((): string[] => readingKeys(layout().root).filter((key) => key.startsWith(\"s:\")));\n const panelOrder = createMemo<string[]>((previous) => {\n const alive = groupOfTab();\n const order = previous.filter((tab) => alive.has(tab));\n const placed = new Set(order);\n groups().forEach((group) =>\n group.tabs.forEach((tab) => {\n if (placed.has(tab)) return;\n placed.add(tab);\n order.push(tab);\n })\n );\n return order.length === previous.length && order.every((tab, index) => tab === previous[index]) ? previous : order;\n }, []);\n const owns = createMemo((): string | undefined => {\n if (isEmpty()) return undefined;\n const value = layout();\n return [\n ...readingKeys(value.root).flatMap((key) => {\n if (key.startsWith(\"h:\")) return [headerElementId(key.slice(2))];\n if (key.startsWith(\"p:\")) return (groupById(value, key.slice(2))?.tabs ?? []).map(panelElementId);\n const last = key.lastIndexOf(\":\");\n return [separatorElementId(key.slice(2, last), Number(key.slice(last + 1)))];\n }),\n statusElementId(),\n ].join(\" \");\n });\n\n // The panels that stay mounted: the selected tabs of the layout drawn now (the same set on the\n // server and the client), plus every tab that was selected before, minus the closed ones.\n const [mountedTabs, setMountedTabs] = createSignal<Set<string>>(new Set(selectedTabsOf(layout())));\n if (!isServer) {\n createEffect(() => {\n const value = layout();\n const alive = new Set<string>();\n getGroups(value).forEach((group) => group.tabs.forEach((tab) => alive.add(tab)));\n const selected = selectedTabsOf(value);\n setMountedTabs((prev) => {\n const next = new Set<string>();\n let changed = false;\n prev.forEach((tab) => {\n if (alive.has(tab)) next.add(tab);\n else changed = true;\n });\n selected.forEach((tab) => {\n if (!next.has(tab)) {\n next.add(tab);\n changed = true;\n }\n });\n return changed || next.size !== prev.size ? next : prev;\n });\n });\n }\n\n const [status, setStatus] = createSignal(\"\");\n const [openMenu, setOpenMenu] = createSignal<string | null>(null);\n const [dragging, setDragging] = createSignal(false);\n const [dropGroup, setDropGroup] = createSignal<string | null>(null);\n const [dropZone, setDropZone] = createSignal<TabGroupsDropZone | null>(null);\n const [draggingSeparator, setDraggingSeparator] = createSignal<{\n key: string;\n orientation: \"vertical\" | \"horizontal\";\n } | null>(null);\n\n let rootEl: HTMLDivElement | undefined;\n let guardEl: HTMLSpanElement | undefined;\n // The tab to focus once its move has been drawn: a keyboard chord, a menu action, a drop of a\n // tab that had focus, or the group that takes the space of a closed one (D9) — which is then\n // `gone`, and has to be gone from the drawn layout before the focus moves. It waits for the next\n // layout the owner draws that answers the change (`after`; `base` is the one drawn when it was\n // asked for), however late, and that layout either shows the change (the tab in `group` at\n // `index`) or not; `from` had the focus then.\n let pendingFocus: {\n tab: string;\n group: string;\n index: number;\n gone?: string;\n after: TabGroupsLayout;\n base: TabGroupsLayout;\n from: Element | null;\n } | null = null;\n // Every layout `commit` reported, numbered: an owner that applies them late draws them in order,\n // and one reported before the change a focus waits for is no answer to that change.\n const reported = new WeakMap<TabGroupsLayout, number>();\n let reportCount = 0;\n let settleQueued = false;\n // The focus guard is taking the focus on its way out of the root: not a reason to send it back.\n let leaving = false;\n // The element in the root that had the focus last, and whether a pointer press is placing the\n // focus now: what tells the browser's Tab out of an iframe from a click.\n let lastFocus: Element | null = null;\n let pointerFocus = false;\n\n const announce = (next: TabGroupsLayout, change: TabGroupsChange): void => {\n const text = describeTabGroupsChange(change, next, tabTitle, labels());\n if (text === \"\") return;\n // The same text twice in a row is not read again: a trailing no-break space makes it new.\n setStatus((prev) => (prev.replace(/\\u00a0+$/, \"\") === text ? `${text}\\u00a0` : text));\n };\n\n /** Asks for a tab's focus once `next`, the layout a change produced, is drawn; `gone` is a closed group. */\n const armFocus = (tabId: string, next: TabGroupsLayout, gone?: string): void => {\n const group = findGroupOfTab(next, tabId);\n if (!group) return;\n pendingFocus = {\n tab: tabId,\n group: group.id,\n index: group.tabs.indexOf(tabId),\n ...(gone === undefined ? {} : { gone }),\n after: next,\n base: layout(),\n from: rootEl ? deepActiveElement(rootEl.ownerDocument) : null,\n };\n };\n\n /**\n * Whether the drawn layout is no answer yet to the change a focus waits for: it is the one drawn\n * when the focus was asked for, or a change reported before that one, which a late owner draws first.\n */\n const stillWaiting = (\n pending: { after: TabGroupsLayout; base: TabGroupsLayout },\n drawn: TabGroupsLayout\n ): boolean => {\n if (drawn === pending.base) return true;\n const drawnAt = reported.get(drawn);\n const askedAt = reported.get(pending.after);\n return drawnAt !== undefined && askedAt !== undefined && drawnAt < askedAt;\n };\n\n /**\n * The moved tab takes focus once the change is drawn: on the first layout the owner draws that\n * answers it — in the same event or later — and only when that layout shows the change and the\n * focus is still with the layout (or still where it was). Then the request is done either way,\n * so a change the owner never drew moves no focus later.\n */\n const focusPending = (): void => {\n const pending = pendingFocus;\n const drawn = layout();\n if (!pending || stillWaiting(pending, drawn)) return;\n const doc = rootEl?.ownerDocument;\n const group = findGroupOfTab(drawn, pending.tab);\n const shown =\n group?.id === pending.group &&\n group.tabs.indexOf(pending.tab) === pending.index &&\n (pending.gone === undefined || !groupById(drawn, pending.gone));\n const element = shown ? doc?.getElementById(tabElementId(pending.tab)) : null;\n // Drawn, but not in the document yet (an update still running): the effect after it asks again.\n if (shown && (!element || groupIdOf(element) !== pending.group)) return;\n pendingFocus = null;\n if (!element || !rootEl || !doc) return;\n const active = deepActiveElement(doc);\n if (active === element) return;\n if (active !== null && active !== doc.body && active !== pending.from && !containsDeep(rootEl, active)) return;\n element.focus();\n };\n\n const commit = (next: TabGroupsLayout, change: TabGroupsChange): void => {\n if (next === latest) return;\n latest = next;\n reportCount += 1;\n reported.set(next, reportCount);\n setLayout(() => next);\n local.onLayoutChange?.(next, change);\n announce(next, change);\n focusPending();\n if (local.layout !== undefined && !settleQueued) {\n settleQueued = true;\n queueMicrotask(settle);\n }\n };\n\n /**\n * After the event that changed the layout: while controlled, what is drawn is the prop, so the\n * next change starts from it again — a change the owner did not draw by now is not reported\n * twice. Two changes of one event — a drop and `Tabs`' report of it, a commit and the `focusin`\n * it causes — still compose. The focus move waits for the owner's next layout (`focusPending`).\n */\n const settle = (): void => {\n settleQueued = false;\n if (local.layout === undefined || latest === layout()) return;\n latest = layout();\n };\n\n // An owner that applies a change later than the event (a timeout) draws it here.\n if (!isServer) {\n createEffect(\n on(\n layout,\n () => {\n focusPending();\n },\n { defer: true }\n )\n );\n }\n\n const tabTitle = (tabId: string): string => {\n const meta = local.getTab(tabId);\n if (!meta) return tabId;\n if (meta.title !== undefined) return meta.title;\n return typeof meta.label === \"string\" ? meta.label : tabId;\n };\n\n /** What `moveTab` did, told from the two layouts: a reorder, a move or a split. */\n const commitMove = (\n next: TabGroupsLayout,\n before: TabGroupsLayout,\n tabId: string,\n from: string,\n options: { edge?: TabGroupsEdge | undefined; focus?: boolean | undefined } = {}\n ): void => {\n if (next === before) return;\n const to = findGroupOfTab(next, tabId)?.id;\n const target = to !== undefined ? groupById(next, to) : undefined;\n if (!to || !target) return;\n const sourceClosed = !getGroups(next).some((group) => group.id === from);\n const existed = getGroups(before).some((group) => group.id === to);\n const change: TabGroupsChange =\n options.edge !== undefined && !existed\n ? { type: \"split\", tab: tabId, from, to, edge: options.edge, sourceClosed }\n : { type: \"move\", tab: tabId, from, to, index: target.tabs.indexOf(tabId), sourceClosed };\n if (options.focus) armFocus(tabId, next);\n commit(next, change);\n };\n\n // ── The tab rows ──────────────────────────────────────────────────────────\n\n const onRowChange =\n (groupId: string) =>\n (event: MouseEvent & { currentTarget: HTMLElement; target: Element }, index: number): void => {\n // A drop of the selected tab reports its new index through `onChange` as well; the selection\n // is by id and already right, so the index — counted before the move — is not read.\n if (event.type === \"drop\") return;\n const current = latest;\n const group = groupById(current, groupId);\n const tabId = group?.tabs[index];\n if (!group || tabId === undefined) return;\n commit(selectTab(current, tabId), { type: \"select\", tab: tabId, group: groupId });\n };\n\n const onRowReorder =\n (groupId: string) =>\n (from: number, to: number): void => {\n const current = latest;\n const group = groupById(current, groupId);\n const tabId = group?.tabs[from];\n if (!group || tabId === undefined) return;\n // A reorder is a move within the row: the selection stays, and the tab that had the focus\n // keeps it (Tabs puts it back itself, this is the same request for a move it cannot see).\n commitMove(moveTab(current, tabId, { group: groupId, index: to }), current, tabId, groupId, {\n focus: dragState?.hadFocus ?? false,\n });\n };\n\n const requestClose = (tabId: string, event: Event, reason: TabCloseReason): void => {\n const current = latest;\n const group = findGroupOfTab(current, tabId);\n if (!group) return;\n if (local.onTabClose?.(tabId, event, reason) === false) return;\n const next = removeTab(current, tabId);\n if (next === current) return;\n const groupClosed = !getGroups(next).some((candidate) => candidate.id === group.id);\n // A group that goes with its last tab takes the focus with it: the group that fills the space\n // gets it, but only when the focus was in the group that went (or the close came from its\n // `actions` menu, drawn outside it). Anywhere else the focus stays where it is. A tab that\n // leaves its group alive is Tabs' own focus move.\n const root = rootEl;\n const active = root ? deepActiveElement(root.ownerDocument) : null;\n const focusWasHere = reason === \"actions\" || (root !== undefined && ownGroupIdOf(root, active) === group.id);\n const heir = groupClosed && focusWasHere ? adjacentGroup(current, group.id) : undefined;\n if (heir !== undefined) {\n const heirTab = groupById(next, heir)?.active;\n if (heirTab) armFocus(heirTab, next, group.id);\n }\n commit(next, { type: \"close\", tab: tabId, group: group.id, groupClosed });\n };\n\n // The chords sit on the header, where they catch the key that bubbles up from the tab; the row's\n // own keys (arrows, Enter, Delete, Mod+W, Mod+Shift+[/]) are Tabs' and run first.\n const onHeaderKeyDown =\n (groupId: string) =>\n (event: KeyboardEvent & { currentTarget: HTMLElement; target: Element }): void => {\n if (event.defaultPrevented || event.repeat || event.isComposing) return;\n const target = event.target;\n if (!(target instanceof Element)) return;\n const tabEl = target.closest<HTMLElement>('[role=\"tab\"]');\n if (!tabEl || groupIdOf(tabEl) !== groupId) return;\n if (tabEl.getAttribute(\"aria-disabled\") === \"true\") return;\n const tabId = tabEl.getAttribute(\"data-tab-id\");\n if (!tabId) return;\n const current = latest;\n const group = groupById(current, groupId);\n if (!group) return;\n\n for (const [edge, keys] of DIRECTION_CHORDS) {\n if (!matchesKeyboardShortcut(event, keys)) continue;\n const next = moveTabInDirection(current, tabId, edge);\n // Nothing to do (the area ends here and the tab is alone): the key is left alone too.\n if (next === current) return;\n event.preventDefault();\n commitMove(next, current, tabId, groupId, { edge, focus: true });\n return;\n }\n const shift = matchesKeyboardShortcut(event, [\"Mod\", \"Shift\", \"ArrowLeft\"])\n ? -1\n : matchesKeyboardShortcut(event, [\"Mod\", \"Shift\", \"ArrowRight\"])\n ? 1\n : 0;\n if (shift === 0) return;\n const from = group.tabs.indexOf(tabId);\n const to = from + shift;\n if (from < 0 || to < 0 || to >= group.tabs.length) return;\n event.preventDefault();\n commitMove(moveTab(current, tabId, { group: groupId, index: to }), current, tabId, groupId, {\n focus: true,\n });\n };\n\n // ── The group actions menu ────────────────────────────────────────────────\n\n const focusFirstMenuItem = (groupId: string): void => {\n const doc = rootEl?.ownerDocument;\n const item = doc?.getElementById(menuElementId(groupId))?.querySelector<HTMLElement>(FIRST_MENU_ITEM);\n // The menu may not be placed yet: a scroll to it would jump to the corner it starts in.\n item?.focus({ preventScroll: true });\n };\n\n const openGroupMenu = (groupId: string, byKeyboard: boolean): void => {\n setOpenMenu(groupId);\n if (byKeyboard) focusFirstMenuItem(groupId);\n };\n\n /** A click on the trigger of an open menu closes it; a synthesized one (Enter, Space) opens into the menu. */\n const onTriggerClick = (groupId: string, event: MouseEvent & { currentTarget: HTMLButtonElement }): void => {\n if (openMenu() === groupId) {\n setOpenMenu(null);\n return;\n }\n openGroupMenu(groupId, event.detail === 0);\n };\n\n const onTriggerKeyDown = (groupId: string, event: KeyboardEvent & { currentTarget: HTMLButtonElement }): void => {\n if (event.defaultPrevented || event.repeat || event.key !== \"ArrowDown\") return;\n event.preventDefault();\n openGroupMenu(groupId, true);\n };\n\n const canSplit = (groupId: string): boolean => {\n const group = groupById(layout(), groupId);\n return Boolean(group && group.active !== null && group.tabs.length >= 2);\n };\n\n const siblingGroup = (groupId: string, delta: -1 | 1): string | undefined => {\n const list = groups();\n return list[indexOfGroup(groupId) + delta]?.id;\n };\n\n const canMoveToSibling = (groupId: string, delta: -1 | 1): boolean => {\n const group = groupById(layout(), groupId);\n return Boolean(group && group.active !== null && siblingGroup(groupId, delta) !== undefined);\n };\n\n const canShift = (groupId: string, delta: -1 | 1): boolean => {\n const group = groupById(layout(), groupId);\n if (!group || group.active === null) return false;\n const to = group.tabs.indexOf(group.active) + delta;\n return to >= 0 && to < group.tabs.length;\n };\n\n const runMenuAction = (groupId: string, action: MenuAction): void => {\n // Closed first: the menu hands the focus it holds back to the trigger, and the move that\n // follows then takes it on to the tab (D9.2).\n setOpenMenu(null);\n const current = latest;\n const group = groupById(current, groupId);\n const tabId = group?.active;\n if (!group || !tabId) return;\n if (action === \"splitRight\" || action === \"splitDown\") {\n const edge: TabGroupsEdge = action === \"splitRight\" ? \"right\" : \"bottom\";\n commitMove(moveTab(current, tabId, { group: groupId, edge }), current, tabId, groupId, {\n edge,\n focus: true,\n });\n return;\n }\n if (action === \"previous\" || action === \"next\") {\n const to = siblingGroup(groupId, action === \"previous\" ? -1 : 1);\n if (!to) return;\n commitMove(moveTab(current, tabId, { group: to }), current, tabId, groupId, { focus: true });\n return;\n }\n const from = group.tabs.indexOf(tabId);\n const to = from + (action === \"left\" ? -1 : 1);\n if (from < 0 || to < 0 || to >= group.tabs.length) return;\n commitMove(moveTab(current, tabId, { group: groupId, index: to }), current, tabId, groupId, {\n focus: true,\n });\n };\n\n // ── The separators ────────────────────────────────────────────────────────\n\n /** The split's extent along the axis it divides, in percent of the root. */\n const splitExtentPercent = (splitId: string): number => {\n const value = layout();\n const node = findSplitNode(value.root, splitId);\n if (!node) return 0;\n const held = new Set(groupIdsOf(node));\n const entries = grid().groups.filter((entry) => held.has(entry.id));\n if (entries.length === 0) return 0;\n const tracks = node.direction === \"row\" ? grid().columns : grid().rows;\n let from = Number.POSITIVE_INFINITY;\n let to = Number.NEGATIVE_INFINITY;\n entries.forEach((entry) => {\n const span = node.direction === \"row\" ? entry.column : entry.row;\n from = Math.min(from, span[0]);\n to = Math.max(to, span[1]);\n });\n let total = 0;\n for (let index = from; index < to; index += 1) total += tracks[index] ?? 0;\n return total;\n };\n\n /** The same extent in px, measured on the root; 0 when there is nothing to measure. */\n const splitExtentPx = (splitId: string): number => {\n const rect = rootEl?.getBoundingClientRect();\n const node = findSplitNode(layout().root, splitId);\n if (!rect || !node) return 0;\n const axis = node.direction === \"row\" ? rect.width : rect.height;\n return (axis * splitExtentPercent(splitId)) / 100;\n };\n\n /** `minGroupSize` in percent of the split: what `resizeSplit` keeps on both sides. */\n const minSizePercent = (extentPx: number): number => (extentPx > 0 ? (minGroupSize() / extentPx) * 100 : 0);\n\n const resizeChange = (next: TabGroupsLayout, splitId: string): TabGroupsChange => {\n const node = findSplitNode(next.root, splitId);\n return { type: \"resize\", split: splitId, sizes: node ? [...node.sizes] : [] };\n };\n\n const resizeBy = (splitId: string, index: number, delta: number, min: number): void => {\n const current = latest;\n const next = resizeSplit(current, splitId, index, delta, min);\n if (next === current) return;\n commit(next, resizeChange(next, splitId));\n };\n\n const onSeparatorKeyDown =\n (splitId: string, index: number, orientation: \"vertical\" | \"horizontal\") =>\n (event: KeyboardEvent & { currentTarget: HTMLElement; target: Element }): void => {\n if (event.defaultPrevented) return;\n const vertical = orientation === \"vertical\";\n const backwards = event.key === (vertical ? \"ArrowLeft\" : \"ArrowUp\");\n const forwards = event.key === (vertical ? \"ArrowRight\" : \"ArrowDown\");\n const limit = event.key === \"Home\" || event.key === \"End\";\n if (!backwards && !forwards && !limit) return;\n event.preventDefault();\n // Home and End go to the limits `minGroupSize` leaves, as ±Infinity asks `resizeSplit` for.\n const delta = limit\n ? event.key === \"Home\"\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY\n : backwards\n ? -keyboardStep()\n : keyboardStep();\n resizeBy(splitId, index, delta, minSizePercent(splitExtentPx(splitId)));\n };\n\n // A pointer drag: captured on the separator, throttled to 60fps, and always computed from the\n // layout the drag started at, so the group follows the pointer instead of drifting with it.\n type SeparatorDrag = {\n key: string;\n split: string;\n index: number;\n orientation: \"vertical\" | \"horizontal\";\n pointerId: number;\n start: number;\n extentPx: number;\n min: number;\n layout: TabGroupsLayout;\n };\n let separatorDrag: SeparatorDrag | null = null;\n const coordinate = (event: PointerEvent, orientation: \"vertical\" | \"horizontal\"): number =>\n orientation === \"vertical\" ? event.clientX : event.clientY;\n\n const applySeparatorDrag = (position: number): void => {\n const drag = separatorDrag;\n if (!drag) return;\n const deltaPx = position - drag.start;\n const delta = drag.extentPx > 0 ? (deltaPx / drag.extentPx) * 100 : 0;\n const next = resizeSplit(drag.layout, drag.split, drag.index, delta, drag.min);\n if (next === latest) return;\n commit(next, resizeChange(next, drag.split));\n };\n const throttledSeparatorDrag = throttle(applySeparatorDrag, 1000 / 60);\n\n onCleanup(() => throttledSeparatorDrag.cancel());\n\n // The pointer drag sets the page cursor, as `ScreenDivider` does: the grip is thin and the\n // cursor would otherwise change to whatever is under it while the drag runs.\n if (!isServer) {\n createEffect(() => {\n const drag = draggingSeparator();\n if (!drag) return;\n const body = document.body;\n const previous = body.style.cursor;\n body.style.cursor = drag.orientation === \"vertical\" ? \"col-resize\" : \"row-resize\";\n onCleanup(() => {\n body.style.cursor = previous;\n });\n });\n }\n\n const onSeparatorPointerDown =\n (key: string, splitId: string, index: number, orientation: \"vertical\" | \"horizontal\") =>\n (event: PointerEvent & { currentTarget: HTMLElement; target: Element }): void => {\n if (isServer || (event.pointerType === \"mouse\" && event.button !== 0)) return;\n const extentPx = splitExtentPx(splitId);\n separatorDrag = {\n key,\n split: splitId,\n index,\n orientation,\n pointerId: event.pointerId,\n start: coordinate(event, orientation),\n extentPx,\n min: minSizePercent(extentPx),\n layout: latest,\n };\n setDraggingSeparator({ key, orientation });\n // With the pointer captured the drag keeps reporting to the grip, however fast it moves.\n const target = event.currentTarget;\n if (typeof target.setPointerCapture === \"function\") {\n try {\n target.setPointerCapture(event.pointerId);\n } catch {\n // jsdom has no pointer capture, and a pointer that is already gone refuses it.\n }\n }\n };\n\n const onSeparatorPointerMove =\n (orientation: \"vertical\" | \"horizontal\") =>\n (event: PointerEvent & { currentTarget: HTMLElement; target: Element }): void => {\n const drag = separatorDrag;\n if (!drag || drag.pointerId !== event.pointerId) return;\n throttledSeparatorDrag(coordinate(event, orientation));\n };\n\n const onSeparatorPointerUp =\n (orientation: \"vertical\" | \"horizontal\") =>\n (event: PointerEvent & { currentTarget: HTMLElement; target: Element }): void => {\n const drag = separatorDrag;\n if (!drag || drag.pointerId !== event.pointerId) return;\n // The last position, unthrottled: the drag ends where the pointer is, not where the last\n // throttled tick left it.\n throttledSeparatorDrag.cancel();\n applySeparatorDrag(coordinate(event, orientation));\n separatorDrag = null;\n setDraggingSeparator(null);\n if (event.currentTarget.hasPointerCapture?.(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n // ── Drag and drop ─────────────────────────────────────────────────────────\n\n // A drag this instance started: its tab, the group it left and whether the tab had the focus\n // (which is where the focus goes back to after the drop). Drags from anywhere else — a file, a\n // link, another TabGroups — are left alone.\n let dragState: { tab: string; group: string; hadFocus: boolean } | null = null;\n let markedItem: HTMLElement | null = null;\n let dropTargetsFrame: number | undefined;\n\n onCleanup(() => {\n if (dropTargetsFrame !== undefined) cancelAnimationFrame(dropTargetsFrame);\n });\n\n const markRowItem = (item: HTMLElement | null): void => {\n if (markedItem === item) return;\n markedItem?.classList.remove(\"smwb-tab-item--drop-target\");\n markedItem = item;\n item?.classList.add(\"smwb-tab-item--drop-target\");\n };\n\n /**\n * `Tabs` marks the item under the pointer in the row a drag started in, and keeps that mark when\n * the pointer leaves the row: over another group it would be a second, stale insertion line. It is\n * taken off while the pointer is anywhere else, and put back when the pointer returns — `Tabs`\n * marks an item again only when the item under the pointer changes.\n */\n const hideSourceRowMark = (): void => {\n const group = dragState?.group;\n const header = Array.from(rootEl?.querySelectorAll<HTMLElement>(\":scope > .smwb-tab-groups__header\") ?? []).find(\n (element) => element.getAttribute(\"data-group-id\") === group\n );\n header?.querySelectorAll<HTMLElement>(\".smwb-tab-item--drop-target\").forEach((item) => {\n if (item !== markedItem) item.classList.remove(\"smwb-tab-item--drop-target\");\n });\n };\n\n const clearDropState = (): void => {\n dragState = null;\n if (dropTargetsFrame !== undefined) {\n cancelAnimationFrame(dropTargetsFrame);\n dropTargetsFrame = undefined;\n }\n markRowItem(null);\n setDropGroup(null);\n setDropZone(null);\n setDragging(false);\n };\n\n /** What is under the pointer during a drag: a group's tab row, a group's body, or nothing of ours. */\n const hitTest = (\n target: Element | null\n ):\n | { kind: \"row\"; group: string; index: number | null; item: HTMLElement | null }\n | { kind: \"body\"; group: string; element: HTMLElement }\n | null => {\n // A drag of another instance's, or of a nested one: not ours to answer for.\n if (!rootEl || !target || target.closest(\".smwb-tab-groups\") !== rootEl) return null;\n const headerEl = target.closest<HTMLElement>(\".smwb-tab-groups__header\");\n if (headerEl) {\n const group = headerEl.getAttribute(\"data-group-id\");\n if (!group) return null;\n const tabEl = tabElementOf(target);\n const overId = tabEl?.getAttribute(\"data-tab-id\");\n const tabs = groupById(latest, group)?.tabs ?? [];\n const at = overId ? tabs.indexOf(overId) : -1;\n return {\n kind: \"row\",\n group,\n index: at >= 0 ? at : null,\n item: at >= 0 && tabEl ? tabItemOf(tabEl) : null,\n };\n }\n const body = target.closest<HTMLElement>(\".smwb-tab-groups__drop-target\");\n if (!body) return null;\n const group = body.getAttribute(\"data-group-id\");\n return group ? { kind: \"body\", group, element: body } : null;\n };\n\n /** The zone of a group's body the pointer is in: an edge within a quarter of it, else the centre. */\n const zoneOf = (element: HTMLElement, event: DragEvent): TabGroupsDropZone => {\n const rect = element.getBoundingClientRect();\n return dropZoneAt(event.clientX - rect.left, event.clientY - rect.top, rect.width, rect.height);\n };\n\n /**\n * Whether a body drop would do anything: the source group's own centre is a no-op, and so is its\n * own edge when it has one tab (a split needs a tab to leave behind). Without `preventDefault`\n * on `dragover` the cursor says \"not allowed\" and the drop does nothing.\n */\n const bodyDropAllowed = (dragGroup: string, group: string, zone: TabGroupsDropZone): boolean => {\n if (dragGroup !== group) return true;\n if (zone === \"center\") return false;\n return (groupById(latest, group)?.tabs.length ?? 0) >= 2;\n };\n\n const onRootDragStart = (event: DragEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onDragStart, event);\n if (isServer) return;\n const target = event.target;\n if (!(target instanceof Element) || !rootEl || target.closest(\".smwb-tab-groups\") !== rootEl) return;\n // The drag starts on the draggable item wrapper, so the tab is looked for inside it too.\n const tabEl = tabElementOf(target);\n const tabId = tabEl?.getAttribute(\"data-tab-id\");\n // A disabled tab is not draggable (`Tabs` leaves it alone), and neither is anything but a tab.\n if (!tabEl || !tabId || tabEl.getAttribute(\"aria-disabled\") === \"true\") return;\n const group = groupIdOf(tabEl);\n if (!group) return;\n const doc = rootEl.ownerDocument;\n const active = doc.activeElement;\n dragState = {\n tab: tabId,\n group,\n hadFocus: Boolean(active && active !== doc.body && tabItemOf(tabEl).contains(active)),\n };\n // A frame later: changing the DOM inside `dragstart` can cancel the drag in Chromium.\n const view = doc.defaultView;\n if (!view) return;\n dropTargetsFrame = view.requestAnimationFrame(() => {\n dropTargetsFrame = undefined;\n setDragging(true);\n });\n };\n\n const onRootDragOver = (event: DragEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onDragOver, event);\n const state = dragState;\n if (!state) return;\n const hit = hitTest(event.target);\n if (!hit) {\n markRowItem(null);\n hideSourceRowMark();\n setDropGroup(null);\n setDropZone(null);\n return;\n }\n if (hit.kind === \"row\") {\n // A drop on its own row is `Tabs`' (it reorders there and swallows the drop).\n if (hit.group === state.group) {\n // Back over its own row: another row's mark goes, this one is `Tabs`' again.\n markRowItem(null);\n hit.item?.classList.add(\"smwb-tab-item--drop-target\");\n return;\n }\n hideSourceRowMark();\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = \"move\";\n setDropGroup(null);\n setDropZone(null);\n markRowItem(hit.item);\n return;\n }\n markRowItem(null);\n hideSourceRowMark();\n const zone = zoneOf(hit.element, event);\n // No `preventDefault` where a drop would do nothing, so the cursor says \"not allowed\".\n if (!bodyDropAllowed(state.group, hit.group, zone)) {\n setDropGroup(null);\n setDropZone(null);\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = \"move\";\n setDropGroup(hit.group);\n setDropZone(zone);\n };\n\n const onRootDrop = (event: DragEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onDrop, event);\n const state = dragState;\n if (!state) return;\n // `Tabs` prevents the default of a drop on its own row: that one is its reorder, already reported.\n const hit = event.defaultPrevented ? null : hitTest(event.target);\n const zone = hit && hit.kind === \"body\" ? zoneOf(hit.element, event) : null;\n clearDropState();\n if (!hit) return;\n if (hit.kind === \"row\") {\n if (hit.group === state.group) return;\n const target = hit.index === null ? { group: hit.group } : { group: hit.group, index: hit.index };\n commitMove(moveTab(latest, state.tab, target), latest, state.tab, state.group, {\n focus: state.hadFocus,\n });\n return;\n }\n if (!zone || !bodyDropAllowed(state.group, hit.group, zone)) return;\n const target = zone === \"center\" ? { group: hit.group } : { group: hit.group, edge: zone };\n commitMove(moveTab(latest, state.tab, target), latest, state.tab, state.group, {\n edge: zone === \"center\" ? undefined : zone,\n focus: state.hadFocus,\n });\n };\n\n const onRootDragEnd = (event: DragEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onDragEnd, event);\n clearDropState();\n };\n\n /**\n * Follows the focus. The group it is in becomes the active one: new tabs open where the user is\n * (D9.6), and its header is the marked one. A frame of this root it came out of is checked\n * (`frameExitTarget`), and the guard sends it on to the last stop when it came from after the\n * root. A nested `TabGroups` has a root of its own: its guard and its frames are not this root's.\n */\n const onRootFocusIn = (event: FocusEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onFocusIn, event);\n const root = rootEl;\n const target = event.target;\n if (!root || !(target instanceof HTMLElement)) return;\n const previous = lastFocus;\n lastFocus = ownerRootOf(target) === root ? target : null;\n if (previous instanceof HTMLElement && previous.localName === \"iframe\" && previous !== target && !pointerFocus) {\n const instead = frameExitTarget(root, previous, target);\n if (instead !== null && instead === guardEl) {\n // Nothing follows the root: the guard holds the focus, and the next Tab leaves the page.\n leaving = true;\n if (instead !== target) instead.focus({ preventScroll: true });\n return;\n }\n if (instead !== null) {\n instead.focus();\n return;\n }\n }\n if (target === guardEl) {\n onGuardFocus();\n return;\n }\n const groupId = ownGroupIdOf(root, target);\n if (!groupId || latest.activeGroup === groupId) return;\n commit(setActiveGroup(latest, groupId), { type: \"activate\", group: groupId });\n };\n\n /**\n * Keeps the Tab key in reading order (`tabMove`). Inside a header, a panel or a separator the\n * browser moves the focus itself; a press that would leave one goes to the next child in reading\n * order instead, and after the last one out through the guard. The move starts from the focused\n * element, which a nested `TabGroups` may already have moved on (to its own guard or a panel's end).\n */\n const onRootKeyDown = (event: KeyboardEvent & { currentTarget: HTMLDivElement; target: Element }): void => {\n callHandler(local.onKeyDown, event);\n if (event.defaultPrevented || event.key !== \"Tab\" || event.altKey || event.ctrlKey || event.metaKey) return;\n if (event.isComposing) return;\n const root = rootEl;\n const from = root ? deepActiveElement(root.ownerDocument) : null;\n if (!root || !from || !containsDeep(root, from)) return;\n const move = tabMove(root, from, event.shiftKey ? -1 : 1);\n if (!move) return;\n if (move.element === guardEl) leaving = true;\n // A move of the key's own, not the browser's way out of a frame.\n lastFocus = null;\n if (move.prevent) {\n event.preventDefault();\n move.element.focus();\n } else {\n // Not prevented: the browser's own move runs on from here.\n move.element.focus({ preventScroll: true });\n }\n };\n\n // A pointer press places the focus where it lands, iframe or not; and the focus that leaves the\n // root forgets where it was.\n onMount(() => {\n const root = rootEl;\n const view = root?.ownerDocument.defaultView;\n if (!root || !view) return;\n let timer: number | undefined;\n const onPointerDown = (): void => {\n pointerFocus = true;\n view.clearTimeout(timer);\n timer = view.setTimeout(() => {\n pointerFocus = false;\n }, 0);\n };\n const onFocusOut = (event: FocusEvent): void => {\n if (event.relatedTarget instanceof Node && !root.contains(event.relatedTarget)) lastFocus = null;\n };\n // Into an iframe the focus moves without a focus event on the iframe; the window loses it, and\n // by then the iframe is the active element. Only this root's own frames count.\n const onWindowBlur = (): void => {\n const active = root.ownerDocument.activeElement;\n if (active instanceof view.HTMLIFrameElement && ownerRootOf(active) === root) lastFocus = active;\n };\n root.addEventListener(\"pointerdown\", onPointerDown, true);\n root.addEventListener(\"focusout\", onFocusOut);\n view.addEventListener(\"blur\", onWindowBlur);\n onCleanup(() => {\n view.clearTimeout(timer);\n root.removeEventListener(\"pointerdown\", onPointerDown, true);\n root.removeEventListener(\"focusout\", onFocusOut);\n view.removeEventListener(\"blur\", onWindowBlur);\n });\n });\n\n /** Shift+Tab from after the root lands on the guard, its last stop: the last stop in reading order takes it. */\n const onGuardFocus = (): void => {\n if (leaving || !rootEl) return;\n const last = lastStopOf(rootEl);\n if (last) focusFromEnd(last);\n };\n\n // ── The grid ──────────────────────────────────────────────────────────────\n\n const rootStyle = (): JSX.CSSProperties | string | undefined =>\n mergeStyle(local.style, {\n \"grid-template-columns\": gridTemplateColumns(grid()),\n \"grid-template-rows\": gridTemplateRows(grid()),\n });\n\n const headerArea = (groupId: string): string => {\n const placed = grid().groups.find((entry) => entry.id === groupId);\n return placed ? groupHeaderArea(placed) : \"auto\";\n };\n\n const bodyArea = (tabId: string): string => {\n const groupId = groupOfTab().get(tabId);\n const placed = groupId === undefined ? undefined : grid().groups.find((entry) => entry.id === groupId);\n return placed ? groupBodyArea(placed) : \"auto\";\n };\n\n const separatorEntry = (splitId: string, index: number) =>\n grid().separators.find((entry) => entry.split === splitId && entry.index === index);\n\n /** The share of the pair the separator's first neighbour holds, as `aria-valuenow` reads it. */\n const separatorValue = (splitId: string, index: number): number => {\n const node = findSplitNode(layout().root, splitId);\n if (!node) return 0;\n const first = node.sizes[index] ?? 0;\n const pair = first + (node.sizes[index + 1] ?? 0);\n return pair > 0 ? Math.round((first / pair) * 100) : 0;\n };\n\n const dropTargetClass = (groupId: string): string | undefined => {\n const zone = dropGroup() === groupId ? dropZone() : null;\n return zone ? `smwb-tab-groups__drop-target--${zone}` : undefined;\n };\n\n const emptySlot = resolveChildren(() => local.empty);\n\n // ── The keyed children ────────────────────────────────────────────────────\n\n const renderTab = (groupId: string, tabId: string): JSX.Element => {\n const meta = () => local.getTab(tabId);\n const closable = createMemo(() => meta()?.closable !== false);\n // `exactOptionalPropertyTypes`: a prop with no value is left out rather than set to undefined.\n const optional = createMemo(() => {\n const given = meta();\n const extra: Partial<TabProps> = {};\n if (given?.disabled) extra.disabled = true;\n if (given?.closeLabel !== undefined) extra.closeLabel = given.closeLabel;\n if (given?.actions !== undefined) extra.actions = given.actions;\n return extra;\n });\n const shortcuts = createMemo(() => (meta()?.disabled ? undefined : CHORD_SHORTCUTS));\n return (\n <Tab\n {...optional()}\n id={tabElementId(tabId)}\n aria-controls={panelElementId(tabId)}\n data-tab-id={tabId}\n aria-keyshortcuts={shortcuts()}\n label={meta()?.label ?? tabId}\n icon={meta()?.icon}\n closable={closable()}\n onClose={(event, reason) => requestClose(tabId, event, reason)}\n />\n );\n };\n\n const renderHeader = (groupId: string): JSX.Element => {\n const [anchor, setAnchor] = createSignal<HTMLButtonElement | null>(null);\n const group = (): TabGroupsGroup | undefined => groupById(layout(), groupId);\n const tabs = (): string[] => group()?.tabs ?? [];\n const value = (): number => {\n const active = group()?.active;\n if (active === null || active === undefined) return 0;\n const index = tabs().indexOf(active);\n return index < 0 ? 0 : index;\n };\n return (\n <div\n class={cn(\"smwb-tab-groups__header\", {\n \"smwb-tab-groups__header--active\": layout().activeGroup === groupId,\n })}\n id={headerElementId(groupId)}\n data-group-id={groupId}\n style={{ \"grid-area\": headerArea(groupId) }}\n onKeyDown={onHeaderKeyDown(groupId)}\n >\n <Tabs\n class=\"smwb-tab-groups__tabs\"\n value={value()}\n onChange={onRowChange(groupId)}\n onReorder={onRowReorder(groupId)}\n aria-label={labels().group(indexOfGroup(groupId) + 1, groupCount())}\n scrollable\n overflowMenu\n dense={local.dense === true}\n >\n <For each={tabs()}>{(tabId) => renderTab(groupId, tabId)}</For>\n </Tabs>\n <Show when={withGroupActions()}>\n <button\n type=\"button\"\n class=\"smwb-tab-groups__actions-trigger\"\n aria-label={labels().groupActions}\n aria-haspopup=\"menu\"\n aria-expanded={openMenu() === groupId}\n aria-controls={openMenu() === groupId ? menuElementId(groupId) : undefined}\n ref={(el) => setAnchor(() => el)}\n onClick={(event) => onTriggerClick(groupId, event)}\n onKeyDown={(event) => onTriggerKeyDown(groupId, event)}\n >\n <Icon name=\"more_vert\" size={20} />\n </button>\n <Menu\n id={menuElementId(groupId)}\n anchorElement={anchor()}\n isOpen={openMenu() === groupId}\n onClose={() => setOpenMenu(null)}\n placement=\"bottom-end\"\n >\n <MenuItem disabled={!canSplit(groupId)} onClick={() => runMenuAction(groupId, \"splitRight\")}>\n {labels().splitRight}\n </MenuItem>\n <MenuItem disabled={!canSplit(groupId)} onClick={() => runMenuAction(groupId, \"splitDown\")}>\n {labels().splitDown}\n </MenuItem>\n <MenuItem disabled={!canMoveToSibling(groupId, -1)} onClick={() => runMenuAction(groupId, \"previous\")}>\n {labels().moveToPreviousGroup}\n </MenuItem>\n <MenuItem disabled={!canMoveToSibling(groupId, 1)} onClick={() => runMenuAction(groupId, \"next\")}>\n {labels().moveToNextGroup}\n </MenuItem>\n <MenuItem disabled={!canShift(groupId, -1)} onClick={() => runMenuAction(groupId, \"left\")}>\n {labels().moveLeft}\n </MenuItem>\n <MenuItem disabled={!canShift(groupId, 1)} onClick={() => runMenuAction(groupId, \"right\")}>\n {labels().moveRight}\n </MenuItem>\n </Menu>\n </Show>\n </div>\n );\n };\n\n const renderPanelItem = (tabId: string): JSX.Element => {\n // Whether this tab's content is mounted, as a boolean memo: the `Show` below must not run again\n // when another tab mounts, or the panel's content would be created anew and lose its state.\n const mounted = createMemo(() => mountedTabs().has(tabId));\n const selected = createMemo(() => selectedTabs().has(tabId));\n const groupId = createMemo(() => groupOfTab().get(tabId) ?? \"\");\n return (\n <div\n class=\"smwb-tab-panel smwb-tab-groups__panel\"\n role=\"tabpanel\"\n id={panelElementId(tabId)}\n aria-labelledby={tabElementId(tabId)}\n tabindex={0}\n hidden={selected() ? undefined : true}\n data-tab-id={tabId}\n data-group-id={groupId()}\n style={{ \"grid-area\": bodyArea(tabId) }}\n >\n <Show when={mounted()}>\n {local.renderPanel(tabId)}\n {/* Where Shift+Tab enters the panel from the next child in reading order: the browser's\n own move from here lands on the panel's last stop (`tabMove`). */}\n <span class=\"smwb-tab-groups__panel-end\" tabindex={-1} aria-hidden=\"true\" />\n </Show>\n </div>\n );\n };\n\n const renderSeparatorItem = (key: string, splitId: string, index: number): JSX.Element => {\n const entry = () => separatorEntry(splitId, index);\n const orientation = (): \"vertical\" | \"horizontal\" => entry()?.orientation ?? \"vertical\";\n const area = (): string => {\n const placed = entry();\n return placed ? separatorArea(placed) : \"auto\";\n };\n return (\n <div\n class={cn(\"smwb-tab-groups__separator\", `smwb-tab-groups__separator--${orientation()}`, {\n \"smwb-tab-groups__separator--dragging\": draggingSeparator()?.key === key,\n })}\n id={separatorElementId(splitId, index)}\n role=\"separator\"\n tabindex={0}\n aria-orientation={orientation()}\n aria-valuenow={separatorValue(splitId, index)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={labels().resize}\n data-split-id={splitId}\n data-index={index}\n style={{ \"grid-area\": area() }}\n onKeyDown={onSeparatorKeyDown(splitId, index, orientation())}\n onPointerDown={onSeparatorPointerDown(key, splitId, index, orientation())}\n onPointerMove={onSeparatorPointerMove(orientation())}\n onPointerUp={onSeparatorPointerUp(orientation())}\n onPointerCancel={onSeparatorPointerUp(orientation())}\n />\n );\n };\n\n const renderSeparatorKey = (key: string): JSX.Element => {\n const last = key.lastIndexOf(\":\");\n return renderSeparatorItem(key, key.slice(2, last), Number(key.slice(last + 1)));\n };\n\n // The headers, separators and panels: each made once per key and disposed when its key goes. The\n // client places them into the root itself (`placeChildren`), the server prints them in that order,\n // and hydration finds them in place.\n const headerNodes = createMemo(mapArray(() => (isEmpty() ? [] : groupIds()), renderHeader));\n const separatorNodes = createMemo(mapArray(() => (isEmpty() ? [] : separatorKeys()), renderSeparatorKey));\n const panelNodes = createMemo(mapArray(() => (isEmpty() ? [] : panelOrder()), renderPanelItem));\n const childNodes = createMemo(() => [...headerNodes(), ...separatorNodes(), ...panelNodes()]);\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref, (el) => {\n rootEl = el;\n if (isServer) return;\n createRenderEffect<HTMLElement[]>((previous) => {\n const next = childNodes() as HTMLElement[];\n placeChildren(el, next, previous);\n return next;\n }, []);\n })}\n id={base()}\n class={cn(\"smwb-tab-groups\", { \"smwb-tab-groups--split\": hasSplit() }, local.class)}\n style={rootStyle()}\n data-testid={local[\"data-testid\"] ?? \"tab-groups\"}\n aria-owns={owns()}\n onKeyDown={onRootKeyDown}\n onDragStart={onRootDragStart}\n onDragOver={onRootDragOver}\n onDrop={onRootDrop}\n onDragEnd={onRootDragEnd}\n onFocusIn={onRootFocusIn}\n >\n {isServer ? childNodes() : undefined}\n <Show when={isEmpty()}>\n <div class=\"smwb-tab-groups__empty\">{emptySlot()}</div>\n </Show>\n <Show when={dragging()}>\n <For each={grid().groups}>\n {(placed) => (\n <div\n class={cn(\"smwb-tab-groups__drop-target\", dropTargetClass(placed.id))}\n data-group-id={placed.id}\n aria-hidden=\"true\"\n style={{ \"grid-area\": groupBodyArea(placed) }}\n />\n )}\n </For>\n </Show>\n <Show when={!isEmpty()}>\n {/* The root's last Tab stop, which only ever holds the focus on its way in or out. */}\n <span\n ref={(el) => (guardEl = el)}\n class=\"smwb-tab-groups__focus-guard\"\n tabindex={0}\n onBlur={() => {\n leaving = false;\n }}\n />\n </Show>\n <div\n id={statusElementId()}\n class=\"smwb-tab-groups__status\"\n role=\"status\"\n aria-atomic={true}\n data-testid=\"tab-groups-status\"\n >\n {status()}\n </div>\n </div>\n );\n}\n\nexport default TabGroups;\n"],"names":["CHORD_SHORTCUTS","join","DIRECTION_CHORDS","FIRST_MENU_ITEM","groupIdOf","node","current","id","getAttribute","parentElement","tabItemOf","tab","closest","tabElementOf","target","direct","querySelector","findSplitNode","root","type","child","children","found","groupIdsOf","flatMap","readingKeys","keys","walk","push","forEach","index","length","placeChildren","parent","next","previous","wanted","Set","has","parentNode","remove","Array","from","position","Map","at","set","active","ownerDocument","activeElement","focused","findIndex","contains","focusedAt","undefined","get","kept","i","map","before","best","k","j","stays","add","anchor","size","Math","max","nextSibling","firstChild","insertBefore","selectedTabsOf","layout","getGroups","group","filter","TabGroups","props","local","rest","splitProps","generatedId","createUniqueId","base","encode","encodeURIComponent","tabElementId","tabId","panelElementId","menuElementId","groupId","headerElementId","separatorElementId","splitId","statusElementId","minGroupSize","keyboardStep","withGroupActions","groupActions","labels","createMemo","TAB_GROUPS_LABELS","setLayout","createControllableState","value","defaultValue","defaultLayout","createTabGroupsLayout","latest","createComputed","grid","computeTabGroupsGrid","groups","groupCount","hasSplit","selectedTabs","groupOfTab","tabs","groupById","find","indexOfGroup","isEmpty","list","groupIds","separatorKeys","key","startsWith","panelOrder","alive","order","placed","every","owns","slice","last","lastIndexOf","Number","mountedTabs","setMountedTabs","createSignal","isServer","createEffect","selected","prev","changed","status","setStatus","openMenu","setOpenMenu","dragging","setDragging","dropGroup","setDropGroup","dropZone","setDropZone","draggingSeparator","setDraggingSeparator","rootEl","guardEl","pendingFocus","reported","WeakMap","reportCount","settleQueued","leaving","lastFocus","pointerFocus","announce","change","text","describeTabGroupsChange","tabTitle","replace","armFocus","gone","findGroupOfTab","indexOf","after","deepActiveElement","stillWaiting","pending","drawn","drawnAt","askedAt","focusPending","doc","shown","element","getElementById","body","containsDeep","focus","commit","onLayoutChange","queueMicrotask","settle","on","defer","meta","getTab","title","label","commitMove","options","to","sourceClosed","some","existed","edge","onRowChange","event","selectTab","onRowReorder","moveTab","dragState","hadFocus","requestClose","reason","onTabClose","removeTab","groupClosed","candidate","focusWasHere","ownGroupIdOf","heir","adjacentGroup","heirTab","onHeaderKeyDown","defaultPrevented","repeat","isComposing","Element","tabEl","matchesKeyboardShortcut","moveTabInDirection","preventDefault","shift","focusFirstMenuItem","item","preventScroll","openGroupMenu","byKeyboard","onTriggerClick","detail","onTriggerKeyDown","canSplit","Boolean","siblingGroup","delta","canMoveToSibling","canShift","runMenuAction","action","splitExtentPercent","held","entries","entry","tracks","direction","columns","rows","POSITIVE_INFINITY","NEGATIVE_INFINITY","span","column","row","min","total","splitExtentPx","rect","getBoundingClientRect","width","height","minSizePercent","extentPx","resizeChange","split","sizes","resizeBy","resizeSplit","onSeparatorKeyDown","orientation","vertical","backwards","forwards","limit","separatorDrag","coordinate","clientX","clientY","applySeparatorDrag","drag","deltaPx","start","throttledSeparatorDrag","throttle","onCleanup","cancel","document","style","cursor","onSeparatorPointerDown","pointerType","button","pointerId","currentTarget","setPointerCapture","onSeparatorPointerMove","onSeparatorPointerUp","hasPointerCapture","releasePointerCapture","markedItem","dropTargetsFrame","cancelAnimationFrame","markRowItem","classList","hideSourceRowMark","header","querySelectorAll","clearDropState","hitTest","headerEl","overId","kind","zoneOf","dropZoneAt","left","top","bodyDropAllowed","dragGroup","zone","onRootDragStart","callHandler","onDragStart","view","defaultView","requestAnimationFrame","onRootDragOver","onDragOver","state","hit","dataTransfer","dropEffect","onRootDrop","onDrop","onRootDragEnd","onDragEnd","onRootFocusIn","onFocusIn","HTMLElement","ownerRootOf","localName","instead","frameExitTarget","onGuardFocus","activeGroup","setActiveGroup","onRootKeyDown","onKeyDown","altKey","ctrlKey","metaKey","move","tabMove","shiftKey","prevent","onMount","timer","onPointerDown","clearTimeout","setTimeout","onFocusOut","relatedTarget","Node","onWindowBlur","HTMLIFrameElement","addEventListener","removeEventListener","lastStopOf","rootStyle","mergeStyle","gridTemplateColumns","gridTemplateRows","headerArea","groupHeaderArea","bodyArea","groupBodyArea","separatorEntry","separators","separatorValue","first","pair","round","dropTargetClass","emptySlot","resolveChildren","empty","renderTab","closable","optional","given","extra","disabled","closeLabel","actions","shortcuts","_$createComponent","Tab","_$mergeProps","icon","onClose","renderHeader","setAnchor","_el$","_tmpl$2","_$addEventListener","_$setAttribute","_$insert","Tabs","onChange","onReorder","scrollable","overflowMenu","dense","For","each","Show","when","_el$2","_tmpl$","$$keydown","$$click","_$use","el","Icon","name","_$effect","_p$","_v$","_v$2","_v$3","e","t","a","Menu","anchorElement","isOpen","placement","MenuItem","onClick","splitRight","splitDown","moveToPreviousGroup","moveToNextGroup","moveLeft","moveRight","_v$4","cn","_v$5","_v$6","_$className","_$setStyleProperty","renderPanelItem","mounted","_el$3","_tmpl$4","_$memo","renderPanel","_tmpl$3","_v$7","_v$8","_v$9","_v$0","_v$1","hidden","o","renderSeparatorItem","area","separatorArea","_el$5","_tmpl$5","_v$10","_v$11","_v$12","_v$13","_v$14","resize","_v$15","n","renderSeparatorKey","headerNodes","mapArray","separatorNodes","panelNodes","childNodes","_el$6","_tmpl$8","_el$9","_ref$","mergeRefs","ref","createRenderEffect","_$spread","class","_el$7","_tmpl$6","_el$0","_tmpl$9","_v$16","_v$17","_v$18","_el$8","_tmpl$7","_$delegateEvents"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Tab order of `TabGroups`, read from the DOM alone: no framework here, and the file is a
|
|
3
|
+
* byte-identical copy in ui-react and ui-solid.
|
|
4
|
+
*
|
|
5
|
+
* The root keeps its panels in the DOM in the order they first appeared, so the DOM order of its
|
|
6
|
+
* children is not the reading order; the root's `aria-owns` lists them in reading order. Inside one
|
|
7
|
+
* child — a header, a panel, a separator — DOM order is reading order, so there the browser moves
|
|
8
|
+
* the focus itself, with every rule of its own (a radio group is one stop, a frame is entered at
|
|
9
|
+
* its first or its last stop, a shadow tree is walked in place). Only a press that would leave a
|
|
10
|
+
* child is taken over: it goes to the next child in reading order, to the stop the browser would
|
|
11
|
+
* pick there by the same rules. A `TabGroups` nested in a panel is that panel's content: its own
|
|
12
|
+
* root answers for the moves inside it, first.
|
|
13
|
+
*/
|
|
14
|
+
/** A browser's move of the Tab key, taken over: focus `element`, then stop there (`prevent`) or let the browser go on from it. */
|
|
15
|
+
export interface TabGroupsTabMove {
|
|
16
|
+
element: HTMLElement;
|
|
17
|
+
prevent: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Whether `node` is `ancestor` or inside it, shadow trees included. */
|
|
20
|
+
export declare function containsDeep(ancestor: Node, node: Node | null): boolean;
|
|
21
|
+
/** The element that has the focus, inside shadow trees too: where the browser's Tab starts from. */
|
|
22
|
+
export declare function deepActiveElement(doc: Document): Element | null;
|
|
23
|
+
/** The `TabGroups` root a node is in: the nearest one around it, or the node itself when it is one. */
|
|
24
|
+
export declare function ownerRootOf(node: Node | null): HTMLElement | null;
|
|
25
|
+
/** The child of `root` a node is in — a header, a panel, a separator, the guard — or null. */
|
|
26
|
+
export declare function rootChildOf(root: Element, node: Node | null): HTMLElement | null;
|
|
27
|
+
/** The group a node is in, told by the root's own child: a nested `TabGroups`' groups are not this root's. */
|
|
28
|
+
export declare function ownGroupIdOf(root: Element, node: Node | null): string | null;
|
|
29
|
+
/** The root's guard, its last Tab stop, which only holds the focus on its way in or out. */
|
|
30
|
+
export declare function guardOf(root: HTMLElement): HTMLElement | null;
|
|
31
|
+
/** The root's headers, shown panels and separators in reading order, as its `aria-owns` lists them. */
|
|
32
|
+
export declare function readingChildren(root: HTMLElement): HTMLElement[];
|
|
33
|
+
/**
|
|
34
|
+
* What the Tab key (step 1) or Shift+Tab (step -1) does from `from`, the focused element in
|
|
35
|
+
* `root`: null when the browser's own move is right — inside a child, or out of the root before
|
|
36
|
+
* its first stop. At the end of the reading order the focus leaves through the guard, and the
|
|
37
|
+
* browser moves on past the root from there.
|
|
38
|
+
*/
|
|
39
|
+
export declare function tabMove(root: HTMLElement, from: Element, step: 1 | -1): TabGroupsTabMove | null;
|
|
40
|
+
/** The last stop of the reading order, where Shift+Tab from after the root goes. */
|
|
41
|
+
export declare function lastStopOf(root: HTMLElement): HTMLElement | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Focuses a stop that is reached backwards: a frame whose document can be read (the same origin)
|
|
44
|
+
* at its own last stop, as the browser's Shift+Tab would; another frame as a whole.
|
|
45
|
+
*/
|
|
46
|
+
export declare function focusFromEnd(element: HTMLElement): void;
|
|
47
|
+
/**
|
|
48
|
+
* Where the focus belongs after the browser's Tab took it out of `frame`, an iframe of this root,
|
|
49
|
+
* onto `landed`. Inside a frame the keys are its own, so the browser left it by DOM order: to
|
|
50
|
+
* another child of the root, or to the guard, when the frame ended its child. The next child in
|
|
51
|
+
* reading order takes the focus instead, or after the last one whatever follows the root; with
|
|
52
|
+
* nothing there the guard holds the focus (it is returned), and the next Tab leaves the page.
|
|
53
|
+
* Null when the browser's move was right.
|
|
54
|
+
*/
|
|
55
|
+
export declare function frameExitTarget(root: HTMLElement, frame: Element, landed: Element): HTMLElement | null;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
const S = "smwb-tab-groups", R = ":scope > .smwb-tab-groups__focus-guard", _ = ":scope > .smwb-tab-groups__panel-end", A = ".smwb-tab-groups__header, .smwb-tab-groups__panel, .smwb-tab-groups__separator", g = 'a[href], area[href], button, input, select, textarea, iframe, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [tabindex]';
|
|
2
|
+
function l(t) {
|
|
3
|
+
if (t.parentElement) return t.parentElement;
|
|
4
|
+
const n = t.parentNode;
|
|
5
|
+
return n?.nodeType === 11 && n.host ? n.host : null;
|
|
6
|
+
}
|
|
7
|
+
function y(t) {
|
|
8
|
+
return t ? t.nodeType === 1 ? t : l(t) : null;
|
|
9
|
+
}
|
|
10
|
+
function x(t, n) {
|
|
11
|
+
for (let e = n; e; e = l(e))
|
|
12
|
+
if (e === t) return !0;
|
|
13
|
+
return !1;
|
|
14
|
+
}
|
|
15
|
+
function G(t) {
|
|
16
|
+
let n = t.activeElement;
|
|
17
|
+
for (; n?.shadowRoot?.activeElement; ) n = n.shadowRoot.activeElement;
|
|
18
|
+
return n;
|
|
19
|
+
}
|
|
20
|
+
function N(t) {
|
|
21
|
+
for (let n = y(t); n; n = l(n))
|
|
22
|
+
if (n.classList.contains(S)) return n;
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function s(t, n) {
|
|
26
|
+
let e = y(n);
|
|
27
|
+
for (; e && l(e) !== t; ) e = l(e);
|
|
28
|
+
return e;
|
|
29
|
+
}
|
|
30
|
+
function B(t, n) {
|
|
31
|
+
return s(t, n)?.getAttribute("data-group-id") ?? null;
|
|
32
|
+
}
|
|
33
|
+
function b(t) {
|
|
34
|
+
return t.querySelector(R);
|
|
35
|
+
}
|
|
36
|
+
function a(t) {
|
|
37
|
+
const n = t.ownerDocument;
|
|
38
|
+
return (t.getAttribute("aria-owns") ?? "").split(/\s+/).flatMap((e) => {
|
|
39
|
+
const r = e ? n.getElementById(e) : null;
|
|
40
|
+
return r && r.parentElement === t && !r.hidden && r.matches(A) ? [r] : [];
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function D(t) {
|
|
44
|
+
return typeof t.checkVisibility != "function" || t.checkVisibility({ visibilityProperty: !0 });
|
|
45
|
+
}
|
|
46
|
+
function w(t) {
|
|
47
|
+
const n = t.tabIndex;
|
|
48
|
+
return typeof n == "number" ? n : -1;
|
|
49
|
+
}
|
|
50
|
+
function C(t) {
|
|
51
|
+
if (t.scrollHeight <= t.clientHeight && t.scrollWidth <= t.clientWidth) return !1;
|
|
52
|
+
const n = t.ownerDocument.defaultView?.getComputedStyle(t), e = (r) => r === "auto" || r === "scroll";
|
|
53
|
+
return !!(n && (e(n.overflowY) || e(n.overflowX)) && !t.querySelector(g));
|
|
54
|
+
}
|
|
55
|
+
function k(t) {
|
|
56
|
+
return t.matches(g) ? w(t) !== 0 || t.matches(":disabled") || t.localName === "input" && t.type === "hidden" ? !1 : D(t) : C(t);
|
|
57
|
+
}
|
|
58
|
+
function p(t) {
|
|
59
|
+
return t.localName === "input" && t.type === "radio";
|
|
60
|
+
}
|
|
61
|
+
function E(t, n) {
|
|
62
|
+
return t === n || t.name !== "" && t.name === n.name && t.form === n.form && t.getRootNode() === n.getRootNode();
|
|
63
|
+
}
|
|
64
|
+
function L(t) {
|
|
65
|
+
if (t.checked) return t;
|
|
66
|
+
if (t.name === "") return null;
|
|
67
|
+
const n = t.form ?? t.getRootNode();
|
|
68
|
+
return (t.form ? Array.from(t.form.elements) : Array.from(n.querySelectorAll("input"))).find(
|
|
69
|
+
(r) => p(r) && r.checked && E(t, r)
|
|
70
|
+
) ?? null;
|
|
71
|
+
}
|
|
72
|
+
function I(t, n) {
|
|
73
|
+
if (n && p(n) && E(n, t)) return !1;
|
|
74
|
+
const e = L(t);
|
|
75
|
+
return e === null || e === t;
|
|
76
|
+
}
|
|
77
|
+
function T(t) {
|
|
78
|
+
if (t.shadowRoot) return Array.from(t.shadowRoot.children);
|
|
79
|
+
if (t.localName === "slot") {
|
|
80
|
+
const n = t, e = typeof n.assignedElements == "function" ? n.assignedElements() : [];
|
|
81
|
+
if (e.length > 0) return e;
|
|
82
|
+
}
|
|
83
|
+
return Array.from(t.children);
|
|
84
|
+
}
|
|
85
|
+
function* h(t) {
|
|
86
|
+
yield t;
|
|
87
|
+
for (const n of T(t))
|
|
88
|
+
n.matches("[hidden], [inert]") || (yield* h(n));
|
|
89
|
+
}
|
|
90
|
+
function v(t, n) {
|
|
91
|
+
return k(t) && (!p(t) || I(t, n));
|
|
92
|
+
}
|
|
93
|
+
function d(t, n, e, r = !1) {
|
|
94
|
+
let o, i = !1;
|
|
95
|
+
for (const u of h(t)) {
|
|
96
|
+
if (u === n) {
|
|
97
|
+
if (e < 0) return o;
|
|
98
|
+
i = !0;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (!(i && r && x(n, u)) && v(u, n)) {
|
|
102
|
+
if (i) return u;
|
|
103
|
+
o = u;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function m(t, n, e) {
|
|
108
|
+
let r;
|
|
109
|
+
for (const o of h(t))
|
|
110
|
+
if (v(o, e)) {
|
|
111
|
+
if (n > 0) return o;
|
|
112
|
+
r = o;
|
|
113
|
+
}
|
|
114
|
+
return r;
|
|
115
|
+
}
|
|
116
|
+
function f(t, n, e, r) {
|
|
117
|
+
for (let o = n; o >= 0 && o < t.length; o += e) {
|
|
118
|
+
const i = t[o], u = i ? m(i, e, r) : void 0;
|
|
119
|
+
if (!i || !u) continue;
|
|
120
|
+
const c = u.localName === "iframe" ? i.querySelector(_) : null;
|
|
121
|
+
return c ? { element: c, prevent: !1 } : { element: u, prevent: !0 };
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
function F(t, n, e) {
|
|
126
|
+
const r = b(t), o = a(t);
|
|
127
|
+
if (n === r) return e < 0 ? f(o, o.length - 1, -1, n) : null;
|
|
128
|
+
const i = s(t, n), u = i ? o.indexOf(i) : -1;
|
|
129
|
+
if (!i || u < 0 || w(n) > 0 || d(i, n, e)) return null;
|
|
130
|
+
const c = f(o, u + e, e, n);
|
|
131
|
+
return c || (e > 0 && r ? { element: r, prevent: !1 } : null);
|
|
132
|
+
}
|
|
133
|
+
function H(t) {
|
|
134
|
+
const n = a(t);
|
|
135
|
+
for (let e = n.length - 1; e >= 0; e -= 1) {
|
|
136
|
+
const r = n[e], o = r ? m(r, -1, null) : void 0;
|
|
137
|
+
if (o) return o;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function q(t) {
|
|
141
|
+
if (t.localName === "iframe") {
|
|
142
|
+
let n;
|
|
143
|
+
try {
|
|
144
|
+
n = t.contentDocument?.body;
|
|
145
|
+
} catch {
|
|
146
|
+
n = null;
|
|
147
|
+
}
|
|
148
|
+
const e = n ? m(n, -1, null) : void 0;
|
|
149
|
+
if (e) {
|
|
150
|
+
q(e);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
t.focus();
|
|
155
|
+
}
|
|
156
|
+
function O(t) {
|
|
157
|
+
const n = N(l(t));
|
|
158
|
+
if (!n) {
|
|
159
|
+
const i = t.ownerDocument.body;
|
|
160
|
+
return i ? d(i, t, 1, !0) : void 0;
|
|
161
|
+
}
|
|
162
|
+
const e = s(n, t), r = a(n), o = e ? r.indexOf(e) : -1;
|
|
163
|
+
if (e && o >= 0) {
|
|
164
|
+
const i = d(e, t, 1, !0);
|
|
165
|
+
if (i) return i;
|
|
166
|
+
const u = f(r, o + 1, 1, null);
|
|
167
|
+
if (u) return u.element;
|
|
168
|
+
}
|
|
169
|
+
return O(n);
|
|
170
|
+
}
|
|
171
|
+
function P(t, n, e) {
|
|
172
|
+
const r = b(t), o = s(t, n);
|
|
173
|
+
if (!o || e !== r && s(t, e) === o || e !== r && !(n.compareDocumentPosition(e) & 4)) return null;
|
|
174
|
+
const i = a(t), u = i.indexOf(o);
|
|
175
|
+
if (u < 0) return null;
|
|
176
|
+
const c = f(i, u + 1, 1, null)?.element ?? O(t) ?? r;
|
|
177
|
+
return c === e && e !== r ? null : c;
|
|
178
|
+
}
|
|
179
|
+
export {
|
|
180
|
+
x as containsDeep,
|
|
181
|
+
G as deepActiveElement,
|
|
182
|
+
q as focusFromEnd,
|
|
183
|
+
P as frameExitTarget,
|
|
184
|
+
b as guardOf,
|
|
185
|
+
H as lastStopOf,
|
|
186
|
+
B as ownGroupIdOf,
|
|
187
|
+
N as ownerRootOf,
|
|
188
|
+
a as readingChildren,
|
|
189
|
+
s as rootChildOf,
|
|
190
|
+
F as tabMove
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=tabGroupsFocus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabGroupsFocus.js","sources":["../../../../src/components/layout/tabGroups/tabGroupsFocus.ts"],"sourcesContent":["/**\n * The Tab order of `TabGroups`, read from the DOM alone: no framework here, and the file is a\n * byte-identical copy in ui-react and ui-solid.\n *\n * The root keeps its panels in the DOM in the order they first appeared, so the DOM order of its\n * children is not the reading order; the root's `aria-owns` lists them in reading order. Inside one\n * child — a header, a panel, a separator — DOM order is reading order, so there the browser moves\n * the focus itself, with every rule of its own (a radio group is one stop, a frame is entered at\n * its first or its last stop, a shadow tree is walked in place). Only a press that would leave a\n * child is taken over: it goes to the next child in reading order, to the stop the browser would\n * pick there by the same rules. A `TabGroups` nested in a panel is that panel's content: its own\n * root answers for the moves inside it, first.\n */\n\nconst ROOT_CLASS = \"smwb-tab-groups\";\nconst GUARD_SELECTOR = \":scope > .smwb-tab-groups__focus-guard\";\nconst PANEL_END_SELECTOR = \":scope > .smwb-tab-groups__panel-end\";\nconst READING_CHILD = \".smwb-tab-groups__header, .smwb-tab-groups__panel, .smwb-tab-groups__separator\";\n\n/** What can take focus from the Tab key, as a browser decides it. */\nconst FOCUSABLE =\n 'a[href], area[href], button, input, select, textarea, iframe, summary, audio[controls], video[controls], [contenteditable]:not([contenteditable=\"false\"]), [tabindex]';\n\n/** A browser's move of the Tab key, taken over: focus `element`, then stop there (`prevent`) or let the browser go on from it. */\nexport interface TabGroupsTabMove {\n element: HTMLElement;\n prevent: boolean;\n}\n\n/** The parent of a node across a shadow root's boundary: the host. */\nfunction parentOf(node: Node): Element | null {\n if (node.parentElement) return node.parentElement;\n const parent = node.parentNode as (Node & { host?: Element }) | null;\n return parent?.nodeType === 11 && parent.host ? parent.host : null;\n}\n\nfunction elementOf(node: Node | null): Element | null {\n if (!node) return null;\n return node.nodeType === 1 ? (node as Element) : parentOf(node);\n}\n\n/** Whether `node` is `ancestor` or inside it, shadow trees included. */\nexport function containsDeep(ancestor: Node, node: Node | null): boolean {\n for (let current: Node | null = node; current; current = parentOf(current)) {\n if (current === ancestor) return true;\n }\n return false;\n}\n\n/** The element that has the focus, inside shadow trees too: where the browser's Tab starts from. */\nexport function deepActiveElement(doc: Document): Element | null {\n let active = doc.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n return active;\n}\n\n/** The `TabGroups` root a node is in: the nearest one around it, or the node itself when it is one. */\nexport function ownerRootOf(node: Node | null): HTMLElement | null {\n for (let current = elementOf(node); current; current = parentOf(current)) {\n if (current.classList.contains(ROOT_CLASS)) return current as HTMLElement;\n }\n return null;\n}\n\n/** The child of `root` a node is in — a header, a panel, a separator, the guard — or null. */\nexport function rootChildOf(root: Element, node: Node | null): HTMLElement | null {\n let current = elementOf(node);\n while (current && parentOf(current) !== root) current = parentOf(current);\n return current as HTMLElement | null;\n}\n\n/** The group a node is in, told by the root's own child: a nested `TabGroups`' groups are not this root's. */\nexport function ownGroupIdOf(root: Element, node: Node | null): string | null {\n return rootChildOf(root, node)?.getAttribute(\"data-group-id\") ?? null;\n}\n\n/** The root's guard, its last Tab stop, which only holds the focus on its way in or out. */\nexport function guardOf(root: HTMLElement): HTMLElement | null {\n return root.querySelector<HTMLElement>(GUARD_SELECTOR);\n}\n\n/** The root's headers, shown panels and separators in reading order, as its `aria-owns` lists them. */\nexport function readingChildren(root: HTMLElement): HTMLElement[] {\n const doc = root.ownerDocument;\n return (root.getAttribute(\"aria-owns\") ?? \"\").split(/\\s+/).flatMap((id) => {\n const element = id ? doc.getElementById(id) : null;\n return element && element.parentElement === root && !element.hidden && element.matches(READING_CHILD)\n ? [element]\n : [];\n });\n}\n\n/** Whether an element is drawn: a browser skips what is not (`display: none` from a stylesheet); jsdom draws nothing. */\nfunction isDrawn(element: Element): boolean {\n return typeof element.checkVisibility !== \"function\" || element.checkVisibility({ visibilityProperty: true });\n}\n\nfunction tabIndexOf(element: Element): number {\n const value = (element as Partial<HTMLElement>).tabIndex;\n return typeof value === \"number\" ? value : -1;\n}\n\n/** A scroller is a Tab stop of its own in Chromium when nothing inside it takes the focus. */\nfunction isScrollerStop(element: Element): boolean {\n if (element.scrollHeight <= element.clientHeight && element.scrollWidth <= element.clientWidth) return false;\n const style = element.ownerDocument.defaultView?.getComputedStyle(element);\n const scrolls = (value: string | undefined): boolean => value === \"auto\" || value === \"scroll\";\n return Boolean(style && (scrolls(style.overflowY) || scrolls(style.overflowX)) && !element.querySelector(FOCUSABLE));\n}\n\n/**\n * Whether the Tab key stops at an element, radio groups aside: focusable, in the sequence of\n * `tabindex` 0 (-1 is out of it, and above 0 the browser visits before everything else), enabled\n * and drawn — or a scroller with nothing focusable inside.\n */\nfunction isStop(element: Element): element is HTMLElement {\n if (element.matches(FOCUSABLE)) {\n if (tabIndexOf(element) !== 0 || element.matches(\":disabled\")) return false;\n if (element.localName === \"input\" && (element as HTMLInputElement).type === \"hidden\") return false;\n return isDrawn(element);\n }\n return isScrollerStop(element);\n}\n\nfunction isRadio(element: Element): element is HTMLInputElement {\n return element.localName === \"input\" && (element as HTMLInputElement).type === \"radio\";\n}\n\n/** Radios of one group: the same name (an unnamed radio is a group of its own), the same form, the same tree. */\nfunction sameGroup(a: HTMLInputElement, b: HTMLInputElement): boolean {\n return a === b || (a.name !== \"\" && a.name === b.name && a.form === b.form && a.getRootNode() === b.getRootNode());\n}\n\n/** The checked radio of a radio's group, wherever it is drawn, or null. */\nfunction checkedOf(radio: HTMLInputElement): HTMLInputElement | null {\n if (radio.checked) return radio;\n if (radio.name === \"\") return null;\n const scope = radio.form ?? (radio.getRootNode() as Document | ShadowRoot);\n const members: Element[] = radio.form ? Array.from(radio.form.elements) : Array.from(scope.querySelectorAll(\"input\"));\n return (\n members.find(\n (member): member is HTMLInputElement => isRadio(member) && member.checked && sameGroup(radio, member)\n ) ?? null\n );\n}\n\n/**\n * A radio group is one stop: its checked radio, or with none checked every radio of it (so the\n * first one going forwards, the last one going backwards), and none of the group the focus is in.\n */\nfunction isRadioStop(radio: HTMLInputElement, focused: Element | null): boolean {\n if (focused && isRadio(focused) && sameGroup(focused, radio)) return false;\n const checked = checkedOf(radio);\n return checked === null || checked === radio;\n}\n\n/** The element children a walk in the flat tree visits: a shadow root's instead of its host's, a slot's assigned ones. */\nfunction childrenOf(element: Element): Element[] {\n if (element.shadowRoot) return Array.from(element.shadowRoot.children);\n if (element.localName === \"slot\") {\n const slot = element as HTMLSlotElement;\n const assigned = typeof slot.assignedElements === \"function\" ? slot.assignedElements() : [];\n if (assigned.length > 0) return assigned;\n }\n return Array.from(element.children);\n}\n\n/** An element and everything under it in flat-tree order, without what is `hidden` or `inert`. */\nfunction* walk(element: Element): Generator<Element> {\n yield element;\n for (const child of childrenOf(element)) {\n if (!child.matches(\"[hidden], [inert]\")) yield* walk(child);\n }\n}\n\nfunction isStopFrom(element: Element, focused: Element | null): element is HTMLElement {\n return isStop(element) && (!isRadio(element) || isRadioStop(element, focused));\n}\n\n/**\n * The stop the Tab key goes to from `from` without leaving `container`, or undefined when it\n * would leave it. `past` starts after everything inside `from`, as from a nested root as a whole.\n */\nfunction stepWithin(container: Element, from: Element, step: 1 | -1, past = false): HTMLElement | undefined {\n let before: HTMLElement | undefined;\n let passed = false;\n for (const element of walk(container)) {\n if (element === from) {\n if (step < 0) return before;\n passed = true;\n continue;\n }\n if (passed && past && containsDeep(from, element)) continue;\n if (!isStopFrom(element, from)) continue;\n if (passed) return element;\n before = element;\n }\n return undefined;\n}\n\n/** The first stop inside a container (step 1) or the last one (step -1), the container itself included. */\nfunction edgeStop(container: Element, step: 1 | -1, focused: Element | null): HTMLElement | undefined {\n let last: HTMLElement | undefined;\n for (const element of walk(container)) {\n if (!isStopFrom(element, focused)) continue;\n if (step > 0) return element;\n last = element;\n }\n return last;\n}\n\n/**\n * Into the reading-order children from `index` on: the first stop of the first one that has one,\n * or going backwards the last stop. A frame that ends a panel is entered by the browser itself,\n * which lands on the frame's own last stop (whatever its origin): its panel's end marker takes the\n * focus, and the browser's move goes on from there.\n */\nfunction enter(children: HTMLElement[], index: number, step: 1 | -1, focused: Element | null): TabGroupsTabMove | null {\n for (let at = index; at >= 0 && at < children.length; at += step) {\n const child = children[at];\n const stop = child ? edgeStop(child, step, focused) : undefined;\n if (!child || !stop) continue;\n const end = stop.localName === \"iframe\" ? child.querySelector<HTMLElement>(PANEL_END_SELECTOR) : null;\n return end ? { element: end, prevent: false } : { element: stop, prevent: true };\n }\n return null;\n}\n\n/**\n * What the Tab key (step 1) or Shift+Tab (step -1) does from `from`, the focused element in\n * `root`: null when the browser's own move is right — inside a child, or out of the root before\n * its first stop. At the end of the reading order the focus leaves through the guard, and the\n * browser moves on past the root from there.\n */\nexport function tabMove(root: HTMLElement, from: Element, step: 1 | -1): TabGroupsTabMove | null {\n const guard = guardOf(root);\n const children = readingChildren(root);\n // The guard holds the focus (nothing followed a frame at the end): Shift+Tab goes back in.\n if (from === guard) return step < 0 ? enter(children, children.length - 1, -1, from) : null;\n const child = rootChildOf(root, from);\n const index = child ? children.indexOf(child) : -1;\n if (!child || index < 0 || tabIndexOf(from) > 0) return null;\n if (stepWithin(child, from, step)) return null;\n const entered = enter(children, index + step, step, from);\n if (entered) return entered;\n return step > 0 && guard ? { element: guard, prevent: false } : null;\n}\n\n/** The last stop of the reading order, where Shift+Tab from after the root goes. */\nexport function lastStopOf(root: HTMLElement): HTMLElement | undefined {\n const children = readingChildren(root);\n for (let at = children.length - 1; at >= 0; at -= 1) {\n const child = children[at];\n const stop = child ? edgeStop(child, -1, null) : undefined;\n if (stop) return stop;\n }\n return undefined;\n}\n\n/**\n * Focuses a stop that is reached backwards: a frame whose document can be read (the same origin)\n * at its own last stop, as the browser's Shift+Tab would; another frame as a whole.\n */\nexport function focusFromEnd(element: HTMLElement): void {\n if (element.localName === \"iframe\") {\n let body: HTMLElement | null | undefined;\n try {\n body = (element as HTMLIFrameElement).contentDocument?.body;\n } catch {\n body = null;\n }\n const last = body ? edgeStop(body, -1, null) : undefined;\n if (last) {\n focusFromEnd(last);\n return;\n }\n }\n element.focus();\n}\n\n/** The first stop after a whole root: on in the root around it, or in the page. */\nfunction stopAfter(root: HTMLElement): HTMLElement | undefined {\n const outer = ownerRootOf(parentOf(root));\n if (!outer) {\n const body = root.ownerDocument.body;\n return body ? stepWithin(body, root, 1, true) : undefined;\n }\n const child = rootChildOf(outer, root);\n const children = readingChildren(outer);\n const index = child ? children.indexOf(child) : -1;\n if (child && index >= 0) {\n const inside = stepWithin(child, root, 1, true);\n if (inside) return inside;\n const entered = enter(children, index + 1, 1, null);\n if (entered) return entered.element;\n }\n return stopAfter(outer);\n}\n\n/**\n * Where the focus belongs after the browser's Tab took it out of `frame`, an iframe of this root,\n * onto `landed`. Inside a frame the keys are its own, so the browser left it by DOM order: to\n * another child of the root, or to the guard, when the frame ended its child. The next child in\n * reading order takes the focus instead, or after the last one whatever follows the root; with\n * nothing there the guard holds the focus (it is returned), and the next Tab leaves the page.\n * Null when the browser's move was right.\n */\nexport function frameExitTarget(root: HTMLElement, frame: Element, landed: Element): HTMLElement | null {\n const guard = guardOf(root);\n const child = rootChildOf(root, frame);\n if (!child || (landed !== guard && rootChildOf(root, landed) === child)) return null;\n // Out of a frame backwards the browser stays in its child: the child itself is a stop before it.\n if (landed !== guard && !(frame.compareDocumentPosition(landed) & 4)) return null;\n const children = readingChildren(root);\n const index = children.indexOf(child);\n if (index < 0) return null;\n const wanted = enter(children, index + 1, 1, null)?.element ?? stopAfter(root) ?? guard;\n return wanted === landed && landed !== guard ? null : wanted;\n}\n"],"names":["ROOT_CLASS","GUARD_SELECTOR","PANEL_END_SELECTOR","READING_CHILD","FOCUSABLE","parentOf","node","parent","elementOf","containsDeep","ancestor","current","deepActiveElement","doc","active","ownerRootOf","rootChildOf","root","ownGroupIdOf","guardOf","readingChildren","id","element","isDrawn","tabIndexOf","value","isScrollerStop","style","scrolls","isStop","isRadio","sameGroup","a","b","checkedOf","radio","scope","member","isRadioStop","focused","checked","childrenOf","slot","assigned","walk","child","isStopFrom","stepWithin","container","from","step","past","before","passed","edgeStop","last","enter","children","index","at","stop","end","tabMove","guard","entered","lastStopOf","focusFromEnd","body","stopAfter","outer","inside","frameExitTarget","frame","landed","wanted"],"mappings":"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"}
|