@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,"sources":["../../../../../src/components/dataDisplay/dagView/dagView.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/dagView/dagView.entry.less\";\nimport {\n DEV,\n For,\n type JSX,\n Show,\n createEffect,\n createMemo,\n createSelector,\n createSignal,\n createUniqueId,\n mergeProps,\n on,\n onCleanup,\n onMount,\n splitProps,\n untrack,\n} from \"solid-js\";\nimport cn from \"clsx\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\nimport {\n type DagDirection,\n type DagLayoutEdge,\n type DagLayoutInput,\n type DagLayoutNode,\n type DagLayoutResult,\n dagEdgePath,\n dagLayout,\n} from \"./dagLayout\";\nimport { type Viewport, centerOn, createPanZoom, fitBounds, isVisible, viewportTransform, zoomAt } from \"./panZoom\";\n\n/** A node's status: a built-in one, coloured by the theme, or any word of the app's, styled by `[data-status]`. */\nexport type DagViewStatus =\n | \"idle\"\n | \"pending\"\n | \"running\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"skipped\"\n | (string & {});\n\nexport interface DagViewNode<T = unknown> {\n /** Unique among the nodes; edges name nodes by it. */\n id: string;\n /** What the default node shows, and its accessible name; the id unless given. */\n label?: JSX.Element;\n /** Colours the node's accent from the theme. */\n status?: DagViewStatus | undefined;\n /** The node's accent colour, over its status colour: any CSS colour. */\n accent?: string | undefined;\n /** The node's width in pixels; `nodeWidth` unless given. */\n width?: number | undefined;\n /** The node's height in pixels; `nodeHeight` unless given. */\n height?: number | undefined;\n /** Anything of the app's, handed back to `renderNode` and `onNodeClick`. */\n data?: T;\n /** Shown, focusable, but not selectable. */\n disabled?: boolean | undefined;\n}\n\nexport interface DagViewEdge {\n /** `source->target` unless given. */\n id?: string | undefined;\n /** The id of the node the edge starts from: the one depended on. */\n source: string;\n /** The id of the node the edge points to: the one that depends on `source`. */\n target: string;\n}\n\n/** A node's state for `renderNode`. Its fields are reactive: read them in JSX or an effect. */\nexport interface DagViewNodeState {\n readonly selected: boolean;\n /** Next to the selected node: \"upstream\" feeds it, \"downstream\" depends on it. */\n readonly related: \"upstream\" | \"downstream\" | null;\n /** Set apart from the selected node and its neighbours, with `dimUnrelated`. */\n readonly dimmed: boolean;\n /** Has keyboard focus. */\n readonly focused: boolean;\n}\n\n/** Where the graph is: moved by x, y (pixels) and scaled by zoom. */\nexport type DagViewViewport = Viewport;\n\n/** Moves the view from outside; handed over by `apiRef` once the graph is in the page. */\nexport interface DagViewApi {\n /** Fits the whole graph in view. */\n fitView(): void;\n /** Zooms to `zoom` around the middle of the view. */\n zoomTo(zoom: number): void;\n /** Zooms by `factor` around the middle of the view. */\n zoomBy(factor: number): void;\n /** Moves the node with this id to the middle of the view. */\n centerNode(id: string): void;\n}\n\n/** Texts for assistive technology and the zoom buttons, English by default. */\nexport interface DagViewLabels {\n /** What the graph is called as a widget: \"dependency graph\". */\n roleDescription: string;\n /** \"Status\", before a node's status word. */\n status: string;\n /** \"Depends on\", before the names of the nodes a node's edges come from. */\n dependsOn: string;\n /** \"Required by\", before the names of the nodes a node's edges go to. */\n requiredBy: string;\n /** Status words, shown on the default nodes and read out: { running: \"Running\", … }. */\n statuses: Record<string, string>;\n zoomIn: string;\n zoomOut: string;\n fitView: string;\n /** The name of the group of zoom buttons. */\n controls: string;\n}\n\nexport interface DagViewProps<T = unknown> extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n /** What the graph shows: its accessible name. */\n label: string;\n /** The graph in words, for screen readers; it is there on the server too. */\n summary?: string | undefined;\n /** The nodes. A change of status, label or data alone does not lay the graph out again. */\n nodes: readonly DagViewNode<T>[];\n /** The edges, from the node depended on to the node that depends on it. */\n edges: readonly DagViewEdge[];\n /**\n * Draws a node's content inside its box; the default shows a status dot,\n * the label and the status word. Called once per node: `node` and `state`\n * are reactive, so read their fields in JSX. Keep the content\n * non-interactive where you can: a node is an ARIA option, whose content\n * assistive technology may read as plain text, and a click in it also\n * selects the node. Links and buttons in it are left out of the Tab order\n * except in the node that is the graph's Tab stop.\n */\n renderNode?: ((node: DagViewNode<T>, state: DagViewNodeState) => JSX.Element) | undefined;\n /** Which way the layers run: \"LR\" (left to right, default) or \"TB\" (top to bottom). */\n direction?: DagDirection | undefined;\n /** A node's width in pixels, unless the node sets its own; 180 by default. */\n nodeWidth?: number | undefined;\n /** A node's height in pixels, unless the node sets its own; 56 by default. */\n nodeHeight?: number | undefined;\n /** The space between layers in pixels; 64 by default. */\n rankGap?: number | undefined;\n /** The space between nodes in a layer in pixels; 24 by default. */\n nodeGap?: number | undefined;\n /** Lays the graph out in place of the built-in layout, e.g. with dagre or elk. It must be synchronous. */\n layout?: ((input: DagLayoutInput) => DagLayoutResult) | undefined;\n /** The selected node's id (controlled); null selects nothing. */\n selectedId?: string | null | undefined;\n /** The node selected at first (uncontrolled). */\n defaultSelectedId?: string | null | undefined;\n /** A node was selected (its id) or the selection was cleared (null). */\n onSelectedChange?: ((id: string | null) => void) | undefined;\n /** A node was clicked, or chosen with Enter or Space. Not called for a disabled node. */\n onNodeClick?: ((node: DagViewNode<T>, event: MouseEvent | KeyboardEvent) => void) | undefined;\n /** Fades the nodes and edges that are not next to the selected node. */\n dimUnrelated?: boolean | undefined;\n /** Where the graph is (controlled). */\n viewport?: DagViewViewport | undefined;\n /** Where the graph is at first (uncontrolled); with `fit={false}` the page does not move after it loads. */\n defaultViewport?: DagViewViewport | undefined;\n /** The view moved or zoomed: at most once per frame during a gesture. */\n onViewportChange?: ((viewport: DagViewViewport) => void) | undefined;\n /** Fits the graph in view once it is in the page, and again when its nodes or edges change; true by default. */\n fit?: boolean | undefined;\n /** The smallest zoom; 0.1 by default. */\n minZoom?: number | undefined;\n /** The largest zoom; 2 by default. */\n maxZoom?: number | undefined;\n /** What a plain mouse wheel does: \"zoom\" (default), \"pan\", or \"none\" (the page scrolls). Ctrl+wheel and a trackpad pinch always zoom. */\n wheel?: \"zoom\" | \"pan\" | \"none\" | undefined;\n /** Shows the zoom in, zoom out and fit buttons; true by default. */\n controls?: boolean | undefined;\n /** Texts for assistive technology and the buttons, over the English defaults. */\n labels?: Partial<DagViewLabels> | undefined;\n /**\n * The graph's height: a number of pixels or any CSS length; 480 by default,\n * from the stylesheet, so a height in `style` works too. It fills the width.\n */\n height?: number | string | undefined;\n /** Gets the functions that move the view from outside. */\n apiRef?: ((api: DagViewApi) => void) | undefined;\n /** Test id of the root `<div>`; `dag-view` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\n/** Room around the graph inside its world, in pixels. */\nconst PADDING = 24;\n\nconst DEFAULT_LABELS: DagViewLabels = {\n roleDescription: \"dependency graph\",\n status: \"Status\",\n dependsOn: \"Depends on\",\n requiredBy: \"Required by\",\n statuses: {\n idle: \"Idle\",\n pending: \"Pending\",\n running: \"Running\",\n success: \"Success\",\n warning: \"Warning\",\n error: \"Error\",\n skipped: \"Skipped\",\n },\n zoomIn: \"Zoom in\",\n zoomOut: \"Zoom out\",\n fitView: \"Fit to view\",\n controls: \"Zoom\",\n};\n\nconst NODE_KEYS = [\"label\", \"status\", \"accent\", \"width\", \"height\", \"data\", \"disabled\"] as const;\n\n/** What can take focus inside a node's own content. */\nconst INNER_FOCUSABLE =\n 'a[href], button, input, select, textarea, iframe, summary, audio[controls], video[controls], [tabindex], [contenteditable]:not([contenteditable=\"false\"])';\n\nconst cssLength = (value: number | string): string => (typeof value === \"number\" ? `${value}px` : value);\n\nconst sameList = (a: readonly string[], b: readonly string[]): boolean =>\n a.length === b.length && a.every((value, i) => value === b[i]);\n\n/** A node's name in words, for descriptions: its label when that is text, else its id. */\nconst nameOf = (node: DagViewNode<unknown> | undefined, id: string): string => {\n const label = node?.label;\n return typeof label === \"string\" || typeof label === \"number\" ? String(label) : id;\n};\n\nconst warn = DEV ? (message: string): void => console.warn(`[smwb] DagView: ${message}`) : undefined;\n\n/**\n * A directed graph of dependencies: nodes in layers, left to right or top to\n * bottom, joined by arrows. A node is selected by a click or the keyboard, and\n * the edges into and out of it light up; the view pans and zooms with a mouse,\n * a trackpad, touch or the keyboard.\n */\nexport function DagView<T = unknown>(props: DagViewProps<T>): JSX.Element {\n const merged = mergeProps(\n {\n direction: \"LR\" as DagDirection,\n nodeWidth: 180,\n nodeHeight: 56,\n rankGap: 64,\n nodeGap: 24,\n fit: true,\n minZoom: 0.1,\n maxZoom: 2,\n wheel: \"zoom\" as \"zoom\" | \"pan\" | \"none\",\n controls: true,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"style\",\n \"label\",\n \"summary\",\n \"nodes\",\n \"edges\",\n \"renderNode\",\n \"direction\",\n \"nodeWidth\",\n \"nodeHeight\",\n \"rankGap\",\n \"nodeGap\",\n \"layout\",\n \"selectedId\",\n \"defaultSelectedId\",\n \"onSelectedChange\",\n \"onNodeClick\",\n \"dimUnrelated\",\n \"viewport\",\n \"defaultViewport\",\n \"onViewportChange\",\n \"fit\",\n \"minZoom\",\n \"maxZoom\",\n \"wheel\",\n \"controls\",\n \"labels\",\n \"height\",\n \"apiRef\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const uid = createUniqueId();\n const arrowId = `${uid}-arrow`;\n const activeArrowId = `${uid}-arrow-active`;\n const summaryId = `${uid}-summary`;\n let root!: HTMLDivElement;\n const elements = new Map<string, HTMLElement>();\n\n const labels = createMemo(\n (): DagViewLabels => ({\n ...DEFAULT_LABELS,\n ...local.labels,\n statuses: { ...DEFAULT_LABELS.statuses, ...local.labels?.statuses },\n })\n );\n const statusWord = (status: string): string => labels().statuses[status] ?? status;\n\n // ---- Nodes and layout ----\n\n const byId = createMemo(() => {\n const map = new Map<string, DagViewNode<T>>();\n for (const node of local.nodes) if (!map.has(node.id)) map.set(node.id, node);\n return map;\n });\n // Nodes are drawn by id, so content stays mounted when the app replaces a\n // node object to change its status.\n const ids = createMemo(() => [...byId().keys()], [], { equals: sameList });\n\n // The layout depends only on the graph's shape; a status change leaves it be.\n const structure = createMemo(\n () => {\n const nodes = [...byId().values()].map((node) => ({\n id: node.id,\n width: node.width ?? local.nodeWidth,\n height: node.height ?? local.nodeHeight,\n }));\n const edges = local.edges.map((edge) => ({ id: edge.id, source: edge.source, target: edge.target }));\n const input: DagLayoutInput = {\n nodes,\n edges,\n direction: local.direction,\n rankGap: local.rankGap,\n nodeGap: local.nodeGap,\n warn,\n };\n const key = JSON.stringify([\n local.direction,\n local.rankGap,\n local.nodeGap,\n nodes.map((n) => [n.id, n.width, n.height]),\n edges.map((e) => [e.id ?? null, e.source, e.target]),\n ]);\n return { key, input };\n },\n undefined,\n { equals: (a, b) => a.key === b.key }\n );\n const layout = createMemo(() => (local.layout ?? dagLayout)(structure().input));\n\n // The flow of a layer runs along x in LR and along y in TB; across it is the other one.\n const across = (node: DagLayoutNode): number => (local.direction === \"TB\" ? node.x : node.y);\n\n const graph = createMemo(() => {\n const result = layout();\n const incoming = new Map<string, DagLayoutEdge[]>();\n const outgoing = new Map<string, DagLayoutEdge[]>();\n for (const edge of result.edges) {\n if (!incoming.has(edge.target)) incoming.set(edge.target, []);\n if (!outgoing.has(edge.source)) outgoing.set(edge.source, []);\n incoming.get(edge.target)!.push(edge);\n outgoing.get(edge.source)!.push(edge);\n }\n const ordered = [...result.nodes.values()].sort((a, b) => a.layer - b.layer || across(a) - across(b));\n const layers = new Map<number, DagLayoutNode[]>();\n for (const node of ordered) {\n if (!layers.has(node.layer)) layers.set(node.layer, []);\n layers.get(node.layer)!.push(node);\n }\n return { incoming, outgoing, ordered, layers };\n });\n\n // ---- Selection ----\n\n const [selected, setSelected] = createControllableState<string | null>({\n value: () => local.selectedId,\n defaultValue: untrack(() => local.defaultSelectedId) ?? null,\n onChange: (id) => local.onSelectedChange?.(id),\n });\n const isSelected = createSelector(selected);\n\n const relations = createMemo(() => {\n const id = selected();\n const edges = new Map<string, \"upstream\" | \"downstream\">();\n const nodes = new Map<string, \"upstream\" | \"downstream\">();\n if (id === null || !layout().nodes.has(id)) return { active: false, edges, nodes };\n const { incoming, outgoing } = graph();\n for (const edge of incoming.get(id) ?? []) {\n edges.set(edge.id, \"upstream\");\n nodes.set(edge.source, \"upstream\");\n }\n for (const edge of outgoing.get(id) ?? []) {\n edges.set(edge.id, \"downstream\");\n nodes.set(edge.target, \"downstream\");\n }\n return { active: true, edges, nodes };\n });\n\n // ---- Focus: one tab stop, on the last focused node, else the selected one, else the first ----\n\n const [active, setActive] = createSignal<string | null>(null);\n const [focused, setFocused] = createSignal<string | null>(null);\n const tabStop = createMemo(() => {\n const nodes = layout().nodes;\n const last = active();\n if (last !== null && nodes.has(last)) return last;\n const chosen = selected();\n if (chosen !== null && nodes.has(chosen)) return chosen;\n return graph().ordered[0]?.id ?? null;\n });\n\n // ---- Viewport ----\n\n const [viewport, setViewport] = createControllableState<Viewport>({\n value: () => local.viewport,\n defaultValue: untrack(() => local.defaultViewport) ?? { x: 0, y: 0, zoom: 1 },\n onChange: (next) => local.onViewportChange?.(next),\n });\n const [interacting, setInteracting] = createSignal(false);\n const far = createMemo(() => viewport().zoom < 0.45);\n\n const size = (): { width: number; height: number } => ({\n width: root?.clientWidth ?? 0,\n height: root?.clientHeight ?? 0,\n });\n const hasSize = (): boolean => {\n const { width, height } = size();\n return width > 0 && height > 0;\n };\n const worldSize = (): { width: number; height: number } => ({\n width: layout().width + PADDING * 2,\n height: layout().height + PADDING * 2,\n });\n const nodeRect = (id: string): { x: number; y: number; width: number; height: number } | undefined => {\n const box = layout().nodes.get(id);\n return box && { x: box.x + PADDING, y: box.y + PADDING, width: box.width, height: box.height };\n };\n\n const api: DagViewApi = {\n fitView() {\n if (!hasSize()) return;\n const world = worldSize();\n setViewport(\n fitBounds(\n { x: 0, y: 0, ...world },\n size(),\n 0,\n local.minZoom,\n Math.max(local.minZoom, Math.min(1, local.maxZoom))\n )\n );\n },\n zoomTo(zoom) {\n api.zoomBy(zoom / viewport().zoom);\n },\n zoomBy(factor) {\n const { width, height } = size();\n setViewport(zoomAt(viewport(), { x: width / 2, y: height / 2 }, factor, local.minZoom, local.maxZoom));\n },\n centerNode(id) {\n const rect = nodeRect(id);\n if (!rect) return;\n setViewport(centerOn(viewport(), { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 }, size()));\n },\n };\n\n const ensureVisible = (id: string): void => {\n const rect = nodeRect(id);\n if (rect && hasSize() && !isVisible(viewport(), rect, size(), 8)) api.centerNode(id);\n };\n\n // Fit once the graph has a size, and again when its shape changes. At zero\n // size (a hidden tab) the fit waits for the first resize that gives one.\n let fitPending = false;\n const tryFit = (): void => {\n if (!fitPending || !hasSize()) return;\n fitPending = false;\n api.fitView();\n };\n createEffect(\n on(\n layout,\n () => {\n if (!untrack(() => local.fit)) return;\n fitPending = true;\n tryFit();\n },\n { defer: true }\n )\n );\n\n onMount(() => {\n const dispose = createPanZoom(root, {\n viewport,\n write: setViewport,\n minZoom: () => local.minZoom,\n maxZoom: () => local.maxZoom,\n wheel: () => local.wheel,\n onInteracting: setInteracting,\n });\n let frame = 0;\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(tryFit);\n })\n : undefined;\n resizeObserver?.observe(root);\n onCleanup(() => {\n dispose();\n resizeObserver?.disconnect();\n cancelAnimationFrame(frame);\n });\n fitPending = local.fit;\n tryFit();\n local.apiRef?.(api);\n });\n\n // ---- Interaction ----\n\n const choose = (id: string, event: MouseEvent | KeyboardEvent): void => {\n const node = byId().get(id);\n if (!node || node.disabled) return;\n setSelected(id);\n local.onNodeClick?.(node, event);\n };\n\n const focusNode = (id: string | undefined): void => {\n if (id === undefined) return;\n setActive(id);\n elements.get(id)?.focus({ preventScroll: true });\n ensureVisible(id);\n };\n\n // A node that goes away takes its selection with it, and focus moves to the\n // Tab stop rather than dropping to the page. Only a node that was there\n // counts: a selection given before its node loads is kept.\n createEffect<readonly string[] | undefined>((before) => {\n const now = ids();\n if (before) {\n untrack(() => {\n const present = new Set(now);\n const chosen = selected();\n if (chosen !== null && !present.has(chosen) && before.includes(chosen)) setSelected(null);\n const had = focused();\n if (had === null || present.has(had)) return;\n setFocused(null);\n const doc = root?.ownerDocument;\n const stop = tabStop();\n if (doc && (doc.activeElement === null || doc.activeElement === doc.body) && stop !== null)\n elements.get(stop)?.focus({ preventScroll: true });\n });\n }\n return now;\n });\n\n // One Tab stop: focusables in `renderNode` content (a link, a button) are\n // taken out of the Tab order, except in the node that is the Tab stop. Their\n // own tabindex comes back when their node becomes it.\n const ownTabIndex = new WeakMap<Element, string | null>();\n // The value the component wrote last, so its own writes can be told apart\n // from the caller's in the attribute records below.\n const writtenTabIndex = new WeakMap<Element, string | null>();\n const syncInnerTabStops = (): void => {\n const stop = untrack(tabStop);\n for (const [id, el] of elements) {\n for (const inner of el.querySelectorAll(INNER_FOCUSABLE)) {\n if (!ownTabIndex.has(inner)) ownTabIndex.set(inner, inner.getAttribute(\"tabindex\"));\n const own = ownTabIndex.get(inner) ?? null;\n const next = id === stop ? own : \"-1\";\n if (inner.getAttribute(\"tabindex\") === next) continue;\n if (next === null) inner.removeAttribute(\"tabindex\");\n else inner.setAttribute(\"tabindex\", next);\n writtenTabIndex.set(inner, next);\n }\n }\n };\n onMount(() => {\n if (!local.renderNode) return;\n createEffect(on(tabStop, syncInnerTabStops));\n if (typeof MutationObserver !== \"function\") return;\n // Content that changes later (a link that shows up with a status) is caught\n // too, and so is a tabindex the caller writes from a signal: that write is\n // taken as the content's own value, then the Tab order is restored over it.\n const observer = new MutationObserver((records) => {\n let sync = false;\n for (const record of records) {\n if (record.type !== \"attributes\") {\n sync = true;\n continue;\n }\n const target = record.target as Element;\n // A node's own roving tabindex is the component's, not its content's.\n if (target.classList.contains(\"smwb-dag-view__node\")) continue;\n const now = target.getAttribute(\"tabindex\");\n if (writtenTabIndex.has(target) && writtenTabIndex.get(target) === now) continue;\n ownTabIndex.set(target, now);\n sync = true;\n }\n if (sync) syncInnerTabStops();\n });\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"tabindex\"],\n });\n onCleanup(() => observer.disconnect());\n });\n\n /** The node an arrow key leads to from `id`: along the edges, or to a neighbour in the layer. */\n const neighbour = (id: string, key: string): string | undefined => {\n const tb = local.direction === \"TB\";\n const forward = tb ? \"ArrowDown\" : \"ArrowRight\";\n const back = tb ? \"ArrowUp\" : \"ArrowLeft\";\n const before = tb ? \"ArrowLeft\" : \"ArrowUp\";\n const after = tb ? \"ArrowRight\" : \"ArrowDown\";\n const nodes = layout().nodes;\n const first = (list: string[]): string | undefined =>\n list\n .map((other) => nodes.get(other))\n .filter((node): node is DagLayoutNode => node !== undefined)\n .sort((a, b) => across(a) - across(b))[0]?.id;\n if (key === forward) return first((graph().outgoing.get(id) ?? []).map((e) => e.target));\n if (key === back) return first((graph().incoming.get(id) ?? []).map((e) => e.source));\n const self = nodes.get(id);\n if (!self) return undefined;\n const layer = graph().layers.get(self.layer) ?? [];\n const index = layer.findIndex((node) => node.id === id);\n if (key === before) return layer[index - 1]?.id;\n if (key === after) return layer[index + 1]?.id;\n return undefined;\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const target = event.target as HTMLElement;\n const id = target.dataset?.[\"dagId\"];\n // Keys pressed in a node's own content (a link, a field) are its own.\n if (id === undefined || !target.classList.contains(\"smwb-dag-view__node\")) return;\n // Ctrl, Cmd and Alt shortcuts are the browser's: page zoom, history, tabs.\n if (event.ctrlKey || event.metaKey || event.altKey) return;\n const key = event.key;\n if (key.startsWith(\"Arrow\") && event.shiftKey) {\n const step = 48;\n const v = viewport();\n const dx = key === \"ArrowLeft\" ? step : key === \"ArrowRight\" ? -step : 0;\n const dy = key === \"ArrowUp\" ? step : key === \"ArrowDown\" ? -step : 0;\n setViewport({ x: v.x + dx, y: v.y + dy, zoom: v.zoom });\n event.preventDefault();\n return;\n }\n if (key.startsWith(\"Arrow\")) {\n event.preventDefault();\n focusNode(neighbour(id, key));\n return;\n }\n switch (key) {\n case \"Home\":\n event.preventDefault();\n focusNode(graph().ordered[0]?.id);\n return;\n case \"End\":\n event.preventDefault();\n focusNode(graph().ordered[graph().ordered.length - 1]?.id);\n return;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n choose(id, event);\n return;\n case \"Escape\":\n // Handled only when there was a selection, so an enclosing dialog still gets it otherwise.\n if (selected() === null) return;\n event.preventDefault();\n setSelected(null);\n return;\n case \"+\":\n case \"=\":\n event.preventDefault();\n api.zoomBy(1.25);\n return;\n case \"-\":\n case \"_\":\n event.preventDefault();\n api.zoomBy(0.8);\n return;\n case \"0\":\n event.preventDefault();\n api.fitView();\n return;\n }\n };\n\n const defaultRender = (node: DagViewNode<T>): JSX.Element => (\n <>\n <span class=\"smwb-dag-view__dot\" aria-hidden=\"true\" />\n <span class=\"smwb-dag-view__label\">{node.label ?? node.id}</span>\n <Show when={node.status}>{(status) => <span class=\"smwb-dag-view__status\">{statusWord(status())}</span>}</Show>\n </>\n );\n\n const description = (id: string): string => {\n const node = byId().get(id);\n const parts: string[] = [];\n if (node?.status) parts.push(`${labels().status}: ${statusWord(node.status)}.`);\n const names = (list: string[]): string => list.map((other) => nameOf(byId().get(other), other)).join(\", \");\n const from = (graph().incoming.get(id) ?? []).map((e) => e.source);\n const to = (graph().outgoing.get(id) ?? []).map((e) => e.target);\n if (from.length) parts.push(`${labels().dependsOn}: ${names(from)}.`);\n if (to.length) parts.push(`${labels().requiredBy}: ${names(to)}.`);\n return parts.join(\" \");\n };\n\n const renderNodeFor = (id: string, index: () => number): JSX.Element => {\n const node = (): DagViewNode<T> | undefined => byId().get(id);\n // The node as `renderNode` sees it: its fields read the app's latest object.\n const view = { id } as DagViewNode<T>;\n for (const key of NODE_KEYS) Object.defineProperty(view, key, { enumerable: true, get: () => node()?.[key] });\n const state: DagViewNodeState = {\n get selected() {\n return isSelected(id);\n },\n get related() {\n return relations().nodes.get(id) ?? null;\n },\n get dimmed() {\n const r = relations();\n return Boolean(local.dimUnrelated) && r.active && !isSelected(id) && !r.nodes.has(id);\n },\n get focused() {\n return focused() === id;\n },\n };\n const descriptionId = (): string => `${uid}-node-${index()}`;\n const style = (): JSX.CSSProperties => {\n const box = layout().nodes.get(id);\n const css: JSX.CSSProperties = box\n ? {\n left: `${box.x + PADDING}px`,\n top: `${box.y + PADDING}px`,\n width: `${box.width}px`,\n height: `${box.height}px`,\n }\n : { display: \"none\" };\n const accent = node()?.accent;\n if (accent) css[\"--smwb-dag-view-node-accent\"] = accent;\n return css;\n };\n const onFocus = (event: FocusEvent): void => {\n if (event.target !== event.currentTarget) return;\n setActive(id);\n setFocused(id);\n let keyboard = true;\n try {\n keyboard = (event.currentTarget as HTMLElement).matches(\":focus-visible\");\n } catch {\n // An engine without :focus-visible: treat it as the keyboard.\n }\n if (keyboard) ensureVisible(id);\n };\n const onBlur = (event: FocusEvent): void => {\n if (event.target !== event.currentTarget || focused() !== id) return;\n // A browser blurs a node while it is being removed, before the removal\n // effect below runs. Clearing `focused` there would leave the effect\n // nothing to move on, and focus would fall to the page.\n if (!ids().includes(id)) return;\n setFocused(null);\n };\n const content = untrack(() => (local.renderNode ?? defaultRender)(view, state));\n return (\n <div\n role=\"option\"\n data-dag-id={id}\n ref={(el) => {\n elements.set(id, el);\n onCleanup(() => elements.get(id) === el && elements.delete(id));\n }}\n class={cn(\"smwb-dag-view__node\", {\n \"smwb-dag-view__node--selected\": state.selected,\n \"smwb-dag-view__node--upstream\": state.related === \"upstream\",\n \"smwb-dag-view__node--downstream\": state.related === \"downstream\",\n \"smwb-dag-view__node--dimmed\": state.dimmed,\n \"smwb-dag-view__node--disabled\": Boolean(node()?.disabled),\n })}\n data-status={node()?.status}\n aria-selected={state.selected ? \"true\" : \"false\"}\n aria-disabled={node()?.disabled ? \"true\" : undefined}\n aria-describedby={description(id) ? descriptionId() : undefined}\n tabIndex={tabStop() === id ? 0 : -1}\n style={style()}\n onClick={(event) => choose(id, event)}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {content}\n <span id={descriptionId()} hidden>\n {description(id)}\n </span>\n </div>\n );\n };\n\n const edgeClass = (edge: DagLayoutEdge): string => {\n const r = relations();\n const relation = r.edges.get(edge.id);\n return cn(\"smwb-dag-view__edge\", {\n \"smwb-dag-view__edge--active\": relation !== undefined,\n \"smwb-dag-view__edge--upstream\": relation === \"upstream\",\n \"smwb-dag-view__edge--downstream\": relation === \"downstream\",\n \"smwb-dag-view__edge--dimmed\": Boolean(local.dimUnrelated) && r.active && relation === undefined,\n \"smwb-dag-view__edge--reversed\": edge.reversed,\n });\n };\n\n // The default height is the stylesheet's, so a height in the caller's style is not overridden.\n const rootStyle = (): JSX.CSSProperties | string | undefined =>\n mergeStyle(local.style, { height: local.height === undefined ? undefined : cssLength(local.height) });\n\n return (\n <div\n data-testid={local[\"data-testid\"] ?? \"dag-view\"}\n {...rest}\n ref={mergeRefs(local.ref, (el) => (root = el))}\n class={cn(\"smwb-dag-view\", local.class)}\n // Only when there is one: the server would print an empty style=\"\".\n {...(rootStyle() === undefined ? {} : { style: rootStyle() })}\n data-direction={local.direction}\n data-zoom={far() ? \"far\" : undefined}\n data-interacting={interacting() ? \"\" : undefined}\n >\n <div\n class=\"smwb-dag-view__world\"\n role=\"listbox\"\n aria-label={local.label}\n aria-roledescription={labels().roleDescription}\n aria-describedby={local.summary ? summaryId : undefined}\n style={{\n width: `${worldSize().width}px`,\n height: `${worldSize().height}px`,\n transform: viewportTransform(viewport()),\n }}\n onKeyDown={onKeyDown}\n >\n <svg class=\"smwb-dag-view__edges\" width={worldSize().width} height={worldSize().height} aria-hidden=\"true\">\n <defs>\n <marker\n id={arrowId}\n viewBox=\"0 0 10 10\"\n refX=\"9\"\n refY=\"5\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n markerUnits=\"userSpaceOnUse\"\n orient=\"auto-start-reverse\"\n >\n <path class=\"smwb-dag-view__arrow\" d=\"M0,1 L9,5 L0,9 z\" />\n </marker>\n <marker\n id={activeArrowId}\n viewBox=\"0 0 10 10\"\n refX=\"9\"\n refY=\"5\"\n markerWidth=\"10\"\n markerHeight=\"10\"\n markerUnits=\"userSpaceOnUse\"\n orient=\"auto-start-reverse\"\n >\n <path class=\"smwb-dag-view__arrow smwb-dag-view__arrow--active\" d=\"M0,1 L9,5 L0,9 z\" />\n </marker>\n </defs>\n <g transform={`translate(${PADDING} ${PADDING})`}>\n <For each={layout().edges}>\n {(edge) => (\n <path\n class={edgeClass(edge)}\n data-source={edge.source}\n data-target={edge.target}\n d={dagEdgePath(edge.points, local.direction)}\n marker-end={`url(#${relations().edges.has(edge.id) ? activeArrowId : arrowId})`}\n />\n )}\n </For>\n </g>\n </svg>\n <For each={ids()}>{(id, index) => renderNodeFor(id, index)}</For>\n </div>\n <Show when={local.summary}>\n <p id={summaryId} class=\"smwb-dag-view__summary\">\n {local.summary}\n </p>\n </Show>\n <Show when={local.controls}>\n <div class=\"smwb-dag-view__controls\" role=\"group\" aria-label={labels().controls}>\n <button type=\"button\" class=\"smwb-dag-view__control\" title={labels().zoomIn} onClick={() => api.zoomBy(1.25)}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n </button>\n <button type=\"button\" class=\"smwb-dag-view__control\" title={labels().zoomOut} onClick={() => api.zoomBy(0.8)}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M5 12h14\" />\n </svg>\n </button>\n <button type=\"button\" class=\"smwb-dag-view__control\" title={labels().fitView} onClick={() => api.fitView()}>\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5\" />\n </svg>\n </button>\n </div>\n </Show>\n </div>\n );\n}\n\nexport default DagView;\n"],"mappings":"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","names":[],"file":"dagView.jsx"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dataDisplay/dagView/index.ts"],
|
|
4
|
+
"sourcesContent": ["export { DagView, default } from \"./dagView\";\nexport type {\n DagViewProps,\n DagViewNode,\n DagViewEdge,\n DagViewStatus,\n DagViewViewport,\n DagViewApi,\n DagViewNodeState,\n DagViewLabels,\n} from \"./dagView\";\nexport { dagLayout, dagEdgePath, dagEdgeId } from \"./dagLayout\";\nexport type {\n DagDirection,\n DagLayoutInput,\n DagLayoutInputNode,\n DagLayoutInputEdge,\n DagLayoutResult,\n DagLayoutNode,\n DagLayoutEdge,\n DagPoint,\n} from \"./dagLayout\";\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS,WAAAA,gBAAe;AAWjC,SAAS,WAAW,aAAa,iBAAiB;",
|
|
6
|
+
"names": ["default"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
|
|
2
|
+
function zoomAt(viewport, point, factor, min, max) {
|
|
3
|
+
const zoom = clamp(viewport.zoom * factor, min, max);
|
|
4
|
+
const k = zoom / viewport.zoom;
|
|
5
|
+
return { x: point.x - (point.x - viewport.x) * k, y: point.y - (point.y - viewport.y) * k, zoom };
|
|
6
|
+
}
|
|
7
|
+
function fitBounds(bounds, size, padding, min, max) {
|
|
8
|
+
const room = { width: Math.max(1, size.width - padding * 2), height: Math.max(1, size.height - padding * 2) };
|
|
9
|
+
const fit = Math.min(room.width / Math.max(1, bounds.width), room.height / Math.max(1, bounds.height));
|
|
10
|
+
const zoom = clamp(fit, min, max);
|
|
11
|
+
return {
|
|
12
|
+
x: (size.width - bounds.width * zoom) / 2 - bounds.x * zoom,
|
|
13
|
+
y: (size.height - bounds.height * zoom) / 2 - bounds.y * zoom,
|
|
14
|
+
zoom
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function centerOn(viewport, point, size) {
|
|
18
|
+
return {
|
|
19
|
+
x: size.width / 2 - point.x * viewport.zoom,
|
|
20
|
+
y: size.height / 2 - point.y * viewport.zoom,
|
|
21
|
+
zoom: viewport.zoom
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function isVisible(viewport, rect, size, margin = 0) {
|
|
25
|
+
const left = viewport.x + rect.x * viewport.zoom;
|
|
26
|
+
const top = viewport.y + rect.y * viewport.zoom;
|
|
27
|
+
return left >= margin && top >= margin && left + rect.width * viewport.zoom <= size.width - margin && top + rect.height * viewport.zoom <= size.height - margin;
|
|
28
|
+
}
|
|
29
|
+
function wheelZoomFactor(deltaY, deltaMode, pinch) {
|
|
30
|
+
const pixels = deltaMode === 1 ? deltaY * 16 : deltaMode === 2 ? deltaY * 400 : deltaY;
|
|
31
|
+
const step = clamp(pixels, -100, 100) * (pinch ? 0.01 : 2e-3);
|
|
32
|
+
return Math.exp(-step);
|
|
33
|
+
}
|
|
34
|
+
const viewportTransform = (viewport) => `translate(${Math.round(viewport.x)}px, ${Math.round(viewport.y)}px) scale(${Math.round(viewport.zoom * 1e4) / 1e4})`;
|
|
35
|
+
const sameViewport = (a, b) => a.x === b.x && a.y === b.y && a.zoom === b.zoom;
|
|
36
|
+
function createFrameWriter(write, frame = {
|
|
37
|
+
request: (callback) => typeof requestAnimationFrame === "function" ? requestAnimationFrame(callback) : window.setTimeout(callback, 16),
|
|
38
|
+
cancel: (id) => typeof cancelAnimationFrame === "function" ? cancelAnimationFrame(id) : window.clearTimeout(id)
|
|
39
|
+
}) {
|
|
40
|
+
let value;
|
|
41
|
+
let id;
|
|
42
|
+
const flush = () => {
|
|
43
|
+
if (id !== void 0) frame.cancel(id);
|
|
44
|
+
id = void 0;
|
|
45
|
+
const next = value;
|
|
46
|
+
value = void 0;
|
|
47
|
+
if (next) write(next.current);
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
schedule(next) {
|
|
51
|
+
value = { current: next };
|
|
52
|
+
if (id === void 0)
|
|
53
|
+
id = frame.request(() => {
|
|
54
|
+
id = void 0;
|
|
55
|
+
flush();
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
pending: () => value?.current,
|
|
59
|
+
flush,
|
|
60
|
+
cancel() {
|
|
61
|
+
if (id !== void 0) frame.cancel(id);
|
|
62
|
+
id = void 0;
|
|
63
|
+
value = void 0;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const INTERACTIVE = "a[href], button, input, select, textarea, label, summary, [contenteditable], [data-dag-no-pan]";
|
|
68
|
+
function createPanZoom(el, options) {
|
|
69
|
+
const threshold = options.threshold ?? 3;
|
|
70
|
+
const writer = createFrameWriter(options.write);
|
|
71
|
+
const current = () => writer.pending() ?? options.viewport();
|
|
72
|
+
const set = (next) => {
|
|
73
|
+
if (!sameViewport(next, current())) writer.schedule(next);
|
|
74
|
+
};
|
|
75
|
+
const local = (clientX, clientY) => {
|
|
76
|
+
const rect = el.getBoundingClientRect();
|
|
77
|
+
return { x: clientX - rect.left, y: clientY - rect.top };
|
|
78
|
+
};
|
|
79
|
+
const pointers = /* @__PURE__ */ new Map();
|
|
80
|
+
const doc = el.ownerDocument;
|
|
81
|
+
let following = false;
|
|
82
|
+
const follow = (on) => {
|
|
83
|
+
if (on === following) return;
|
|
84
|
+
following = on;
|
|
85
|
+
if (on) {
|
|
86
|
+
doc.addEventListener("pointermove", onPointerMove, true);
|
|
87
|
+
doc.addEventListener("pointerup", onPointerUp, true);
|
|
88
|
+
doc.addEventListener("pointercancel", onPointerUp, true);
|
|
89
|
+
} else {
|
|
90
|
+
doc.removeEventListener("pointermove", onPointerMove, true);
|
|
91
|
+
doc.removeEventListener("pointerup", onPointerUp, true);
|
|
92
|
+
doc.removeEventListener("pointercancel", onPointerUp, true);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
let start;
|
|
96
|
+
let pinch;
|
|
97
|
+
let panning = false;
|
|
98
|
+
let swallowClick = false;
|
|
99
|
+
let interacting = false;
|
|
100
|
+
const setInteracting = (value) => {
|
|
101
|
+
if (value === interacting) return;
|
|
102
|
+
interacting = value;
|
|
103
|
+
options.onInteracting?.(value);
|
|
104
|
+
};
|
|
105
|
+
const pinchState = () => {
|
|
106
|
+
const [a, b] = [...pointers.values()];
|
|
107
|
+
return { distance: Math.hypot(a.x - b.x, a.y - b.y), mid: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 } };
|
|
108
|
+
};
|
|
109
|
+
const onPointerDown = (event) => {
|
|
110
|
+
if (event.button !== 0 && event.pointerType === "mouse") return;
|
|
111
|
+
const target = event.target;
|
|
112
|
+
if (target?.closest?.(INTERACTIVE)) return;
|
|
113
|
+
pointers.set(event.pointerId, local(event.clientX, event.clientY));
|
|
114
|
+
follow(true);
|
|
115
|
+
if (pointers.size === 1) {
|
|
116
|
+
start = { point: pointers.get(event.pointerId), viewport: current(), id: event.pointerId };
|
|
117
|
+
panning = false;
|
|
118
|
+
} else if (pointers.size === 2) {
|
|
119
|
+
const { distance, mid } = pinchState();
|
|
120
|
+
pinch = { distance, mid, viewport: current() };
|
|
121
|
+
start = void 0;
|
|
122
|
+
for (const id of pointers.keys()) capture(id);
|
|
123
|
+
setInteracting(true);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const capture = (id) => {
|
|
127
|
+
try {
|
|
128
|
+
el.setPointerCapture?.(id);
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const onPointerMove = (event) => {
|
|
133
|
+
if (!pointers.has(event.pointerId)) return;
|
|
134
|
+
const point = local(event.clientX, event.clientY);
|
|
135
|
+
pointers.set(event.pointerId, point);
|
|
136
|
+
if (pinch && pointers.size >= 2) {
|
|
137
|
+
const { distance, mid } = pinchState();
|
|
138
|
+
const scaled = zoomAt(
|
|
139
|
+
pinch.viewport,
|
|
140
|
+
pinch.mid,
|
|
141
|
+
distance / Math.max(1, pinch.distance),
|
|
142
|
+
options.minZoom(),
|
|
143
|
+
options.maxZoom()
|
|
144
|
+
);
|
|
145
|
+
set({ ...scaled, x: scaled.x + mid.x - pinch.mid.x, y: scaled.y + mid.y - pinch.mid.y });
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (!start || start.id !== event.pointerId) return;
|
|
149
|
+
const dx = point.x - start.point.x;
|
|
150
|
+
const dy = point.y - start.point.y;
|
|
151
|
+
if (!panning) {
|
|
152
|
+
if (Math.hypot(dx, dy) < threshold) return;
|
|
153
|
+
panning = true;
|
|
154
|
+
capture(event.pointerId);
|
|
155
|
+
setInteracting(true);
|
|
156
|
+
}
|
|
157
|
+
set({ x: start.viewport.x + dx, y: start.viewport.y + dy, zoom: start.viewport.zoom });
|
|
158
|
+
};
|
|
159
|
+
const onPointerUp = (event) => {
|
|
160
|
+
if (!pointers.delete(event.pointerId)) return;
|
|
161
|
+
if (panning || pinch) swallowClick = true;
|
|
162
|
+
if (pointers.size < 2) pinch = void 0;
|
|
163
|
+
if (pointers.size === 0) {
|
|
164
|
+
follow(false);
|
|
165
|
+
start = void 0;
|
|
166
|
+
panning = false;
|
|
167
|
+
setInteracting(false);
|
|
168
|
+
writer.flush();
|
|
169
|
+
setTimeout(() => swallowClick = false, 0);
|
|
170
|
+
} else if (pointers.size === 1) {
|
|
171
|
+
const [[id, point]] = [...pointers.entries()];
|
|
172
|
+
start = { point, viewport: current(), id };
|
|
173
|
+
panning = true;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const onClick = (event) => {
|
|
177
|
+
if (!swallowClick) return;
|
|
178
|
+
swallowClick = false;
|
|
179
|
+
event.stopPropagation();
|
|
180
|
+
event.preventDefault();
|
|
181
|
+
};
|
|
182
|
+
const onWheel = (event) => {
|
|
183
|
+
const pinchGesture = event.ctrlKey || event.metaKey;
|
|
184
|
+
const mode = options.wheel();
|
|
185
|
+
if (!pinchGesture && mode === "none") return;
|
|
186
|
+
event.preventDefault();
|
|
187
|
+
if (!pinchGesture && mode === "pan") {
|
|
188
|
+
const v = current();
|
|
189
|
+
const scale = event.deltaMode === 1 ? 16 : event.deltaMode === 2 ? 400 : 1;
|
|
190
|
+
const dx = event.shiftKey && !event.deltaX ? event.deltaY : event.deltaX;
|
|
191
|
+
const dy = event.shiftKey && !event.deltaX ? 0 : event.deltaY;
|
|
192
|
+
set({ x: v.x - dx * scale, y: v.y - dy * scale, zoom: v.zoom });
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const factor = wheelZoomFactor(event.deltaY, event.deltaMode, pinchGesture);
|
|
196
|
+
set(zoomAt(current(), local(event.clientX, event.clientY), factor, options.minZoom(), options.maxZoom()));
|
|
197
|
+
};
|
|
198
|
+
let gesture;
|
|
199
|
+
const onGestureStart = (event) => {
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
const e = event;
|
|
202
|
+
const rect = el.getBoundingClientRect();
|
|
203
|
+
gesture = {
|
|
204
|
+
viewport: current(),
|
|
205
|
+
point: e.clientX === void 0 ? { x: rect.width / 2, y: rect.height / 2 } : local(e.clientX, e.clientY ?? 0)
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
const onGestureChange = (event) => {
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
const scale = event.scale;
|
|
211
|
+
if (!gesture || typeof scale !== "number") return;
|
|
212
|
+
set(zoomAt(gesture.viewport, gesture.point, scale, options.minZoom(), options.maxZoom()));
|
|
213
|
+
};
|
|
214
|
+
const onGestureEnd = (event) => {
|
|
215
|
+
event.preventDefault();
|
|
216
|
+
gesture = void 0;
|
|
217
|
+
};
|
|
218
|
+
el.addEventListener("pointerdown", onPointerDown);
|
|
219
|
+
el.addEventListener("click", onClick, true);
|
|
220
|
+
el.addEventListener("wheel", onWheel, { passive: false });
|
|
221
|
+
el.addEventListener("gesturestart", onGestureStart);
|
|
222
|
+
el.addEventListener("gesturechange", onGestureChange);
|
|
223
|
+
el.addEventListener("gestureend", onGestureEnd);
|
|
224
|
+
return () => {
|
|
225
|
+
writer.cancel();
|
|
226
|
+
follow(false);
|
|
227
|
+
el.removeEventListener("pointerdown", onPointerDown);
|
|
228
|
+
el.removeEventListener("click", onClick, true);
|
|
229
|
+
el.removeEventListener("wheel", onWheel);
|
|
230
|
+
el.removeEventListener("gesturestart", onGestureStart);
|
|
231
|
+
el.removeEventListener("gesturechange", onGestureChange);
|
|
232
|
+
el.removeEventListener("gestureend", onGestureEnd);
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
export {
|
|
236
|
+
centerOn,
|
|
237
|
+
clamp,
|
|
238
|
+
createFrameWriter,
|
|
239
|
+
createPanZoom,
|
|
240
|
+
fitBounds,
|
|
241
|
+
isVisible,
|
|
242
|
+
sameViewport,
|
|
243
|
+
viewportTransform,
|
|
244
|
+
wheelZoomFactor,
|
|
245
|
+
zoomAt
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=panZoom.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dataDisplay/dagView/panZoom.ts"],
|
|
4
|
+
"sourcesContent": ["// Pan and zoom for a transformed \"world\" inside a viewport element: pure math\n// (unit-tested) and plain DOM glue, with no Solid imports, so a React port can\n// copy the file. The glue reads gestures and hands at most one new viewport per\n// animation frame to `write`.\n\n/** What the world is moved and scaled by: `translate(x, y) scale(zoom)`, origin top left. */\nexport interface Viewport {\n x: number;\n y: number;\n zoom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface Bounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const clamp = (value: number, min: number, max: number): number => Math.min(max, Math.max(min, value));\n\n/** The viewport scaled by `factor` (clamped to min\u2026max), keeping the world point under `point` in place. */\nexport function zoomAt(viewport: Viewport, point: Point, factor: number, min: number, max: number): Viewport {\n const zoom = clamp(viewport.zoom * factor, min, max);\n const k = zoom / viewport.zoom;\n return { x: point.x - (point.x - viewport.x) * k, y: point.y - (point.y - viewport.y) * k, zoom };\n}\n\n/** The viewport that shows `bounds` (world units) whole and centred in a box of `size`, `padding` from its edges. */\nexport function fitBounds(\n bounds: Bounds,\n size: { width: number; height: number },\n padding: number,\n min: number,\n max: number\n): Viewport {\n const room = { width: Math.max(1, size.width - padding * 2), height: Math.max(1, size.height - padding * 2) };\n const fit = Math.min(room.width / Math.max(1, bounds.width), room.height / Math.max(1, bounds.height));\n const zoom = clamp(fit, min, max);\n return {\n x: (size.width - bounds.width * zoom) / 2 - bounds.x * zoom,\n y: (size.height - bounds.height * zoom) / 2 - bounds.y * zoom,\n zoom,\n };\n}\n\n/** The viewport, at its zoom, that puts the world point `point` in the middle of a box of `size`. */\nexport function centerOn(viewport: Viewport, point: Point, size: { width: number; height: number }): Viewport {\n return {\n x: size.width / 2 - point.x * viewport.zoom,\n y: size.height / 2 - point.y * viewport.zoom,\n zoom: viewport.zoom,\n };\n}\n\n/** Whether the world rectangle lies inside the box of `size` at `viewport`, `margin` from its edges. */\nexport function isVisible(\n viewport: Viewport,\n rect: Bounds,\n size: { width: number; height: number },\n margin = 0\n): boolean {\n const left = viewport.x + rect.x * viewport.zoom;\n const top = viewport.y + rect.y * viewport.zoom;\n return (\n left >= margin &&\n top >= margin &&\n left + rect.width * viewport.zoom <= size.width - margin &&\n top + rect.height * viewport.zoom <= size.height - margin\n );\n}\n\n/** The zoom factor for a wheel turn: lines and pages count as many pixels, a pinch (ctrl) zooms faster. */\nexport function wheelZoomFactor(deltaY: number, deltaMode: number, pinch: boolean): number {\n const pixels = deltaMode === 1 ? deltaY * 16 : deltaMode === 2 ? deltaY * 400 : deltaY;\n const step = clamp(pixels, -100, 100) * (pinch ? 0.01 : 0.002);\n return Math.exp(-step);\n}\n\n/** Rounded translation, so text is not blurred at rest by subpixel offsets. */\nexport const viewportTransform = (viewport: Viewport): string =>\n `translate(${Math.round(viewport.x)}px, ${Math.round(viewport.y)}px) scale(${Math.round(viewport.zoom * 10000) / 10000})`;\n\nexport const sameViewport = (a: Viewport, b: Viewport): boolean => a.x === b.x && a.y === b.y && a.zoom === b.zoom;\n\n/**\n * Coalesces writes to one per animation frame: `schedule` keeps the latest\n * value, and `write` gets it on the next frame. `pending()` is that latest value\n * until it is written, so a gesture builds on what it asked for, not on what was\n * drawn last.\n */\nexport function createFrameWriter<T>(\n write: (value: T) => void,\n frame: { request: (callback: () => void) => number; cancel: (id: number) => void } = {\n request: (callback) =>\n typeof requestAnimationFrame === \"function\" ? requestAnimationFrame(callback) : window.setTimeout(callback, 16),\n cancel: (id) => (typeof cancelAnimationFrame === \"function\" ? cancelAnimationFrame(id) : window.clearTimeout(id)),\n }\n): { schedule(value: T): void; pending(): T | undefined; flush(): void; cancel(): void } {\n let value: { current: T } | undefined;\n let id: number | undefined;\n const flush = (): void => {\n if (id !== undefined) frame.cancel(id);\n id = undefined;\n const next = value;\n value = undefined;\n if (next) write(next.current);\n };\n return {\n schedule(next) {\n value = { current: next };\n if (id === undefined)\n id = frame.request(() => {\n id = undefined;\n flush();\n });\n },\n pending: () => value?.current,\n flush,\n cancel() {\n if (id !== undefined) frame.cancel(id);\n id = undefined;\n value = undefined;\n },\n };\n}\n\nexport type WheelMode = \"zoom\" | \"pan\" | \"none\";\n\nexport interface PanZoomOptions {\n /** The viewport as drawn now. */\n viewport: () => Viewport;\n /** Gets the new viewport, at most once per frame. */\n write: (viewport: Viewport) => void;\n minZoom: () => number;\n maxZoom: () => number;\n /** Plain wheel: zoom (default), pan, or leave it to the page. Ctrl+wheel (a trackpad pinch) always zooms. */\n wheel: () => WheelMode;\n /** True while a drag or pinch is under way. */\n onInteracting?: (interacting: boolean) => void;\n /** Pixels a press moves before it pans rather than clicks; 3 by default. */\n threshold?: number;\n}\n\n/** Targets where a press keeps its own meaning and does not pan: controls, links, fields. */\nconst INTERACTIVE = \"a[href], button, input, select, textarea, label, summary, [contenteditable], [data-dag-no-pan]\";\n\n/**\n * Pan and zoom on `el`: drag with a mouse or one finger, pinch with two, wheel,\n * and a Safari trackpad pinch. A drag that moved past the threshold swallows\n * the click that follows it. Returns the function that removes it all.\n */\nexport function createPanZoom(el: HTMLElement, options: PanZoomOptions): () => void {\n const threshold = options.threshold ?? 3;\n const writer = createFrameWriter<Viewport>(options.write);\n const current = (): Viewport => writer.pending() ?? options.viewport();\n const set = (next: Viewport): void => {\n if (!sameViewport(next, current())) writer.schedule(next);\n };\n const local = (clientX: number, clientY: number): Point => {\n const rect = el.getBoundingClientRect();\n return { x: clientX - rect.left, y: clientY - rect.top };\n };\n\n const pointers = new Map<number, Point>();\n // While a press is held, its moves and release are read on the document: a\n // quick drag can leave the box before the threshold, when the pointer is\n // captured, and the box would see nothing more of it. A captured pointer's\n // events still reach the document, through the box.\n const doc = el.ownerDocument;\n let following = false;\n const follow = (on: boolean): void => {\n if (on === following) return;\n following = on;\n if (on) {\n doc.addEventListener(\"pointermove\", onPointerMove, true);\n doc.addEventListener(\"pointerup\", onPointerUp, true);\n doc.addEventListener(\"pointercancel\", onPointerUp, true);\n } else {\n doc.removeEventListener(\"pointermove\", onPointerMove, true);\n doc.removeEventListener(\"pointerup\", onPointerUp, true);\n doc.removeEventListener(\"pointercancel\", onPointerUp, true);\n }\n };\n let start: { point: Point; viewport: Viewport; id: number } | undefined;\n let pinch: { distance: number; mid: Point; viewport: Viewport } | undefined;\n let panning = false;\n let swallowClick = false;\n let interacting = false;\n const setInteracting = (value: boolean): void => {\n if (value === interacting) return;\n interacting = value;\n options.onInteracting?.(value);\n };\n\n const pinchState = (): { distance: number; mid: Point } => {\n const [a, b] = [...pointers.values()] as [Point, Point];\n return { distance: Math.hypot(a.x - b.x, a.y - b.y), mid: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 } };\n };\n\n const onPointerDown = (event: PointerEvent): void => {\n if (event.button !== 0 && event.pointerType === \"mouse\") return;\n const target = event.target as Element | null;\n if (target?.closest?.(INTERACTIVE)) return;\n pointers.set(event.pointerId, local(event.clientX, event.clientY));\n follow(true);\n if (pointers.size === 1) {\n start = { point: pointers.get(event.pointerId)!, viewport: current(), id: event.pointerId };\n panning = false;\n } else if (pointers.size === 2) {\n const { distance, mid } = pinchState();\n pinch = { distance, mid, viewport: current() };\n start = undefined;\n // A second finger makes it a gesture: take both pointers.\n for (const id of pointers.keys()) capture(id);\n setInteracting(true);\n }\n };\n\n const capture = (id: number): void => {\n try {\n el.setPointerCapture?.(id);\n } catch {\n // The pointer is gone already.\n }\n };\n\n const onPointerMove = (event: PointerEvent): void => {\n if (!pointers.has(event.pointerId)) return;\n const point = local(event.clientX, event.clientY);\n pointers.set(event.pointerId, point);\n if (pinch && pointers.size >= 2) {\n const { distance, mid } = pinchState();\n const scaled = zoomAt(\n pinch.viewport,\n pinch.mid,\n distance / Math.max(1, pinch.distance),\n options.minZoom(),\n options.maxZoom()\n );\n set({ ...scaled, x: scaled.x + mid.x - pinch.mid.x, y: scaled.y + mid.y - pinch.mid.y });\n return;\n }\n if (!start || start.id !== event.pointerId) return;\n const dx = point.x - start.point.x;\n const dy = point.y - start.point.y;\n if (!panning) {\n if (Math.hypot(dx, dy) < threshold) return;\n // Captured only now: a capture from the press would take the click from the node under it.\n panning = true;\n capture(event.pointerId);\n setInteracting(true);\n }\n set({ x: start.viewport.x + dx, y: start.viewport.y + dy, zoom: start.viewport.zoom });\n };\n\n const onPointerUp = (event: PointerEvent): void => {\n if (!pointers.delete(event.pointerId)) return;\n if (panning || pinch) swallowClick = true;\n if (pointers.size < 2) pinch = undefined;\n if (pointers.size === 0) {\n follow(false);\n start = undefined;\n panning = false;\n setInteracting(false);\n writer.flush();\n // A click comes right after the release, or not at all.\n setTimeout(() => (swallowClick = false), 0);\n } else if (pointers.size === 1) {\n // One finger left after a pinch: it pans from here.\n const [[id, point]] = [...pointers.entries()] as [[number, Point]];\n start = { point, viewport: current(), id };\n panning = true;\n }\n };\n\n const onClick = (event: MouseEvent): void => {\n if (!swallowClick) return;\n swallowClick = false;\n event.stopPropagation();\n event.preventDefault();\n };\n\n const onWheel = (event: WheelEvent): void => {\n const pinchGesture = event.ctrlKey || event.metaKey;\n const mode = options.wheel();\n if (!pinchGesture && mode === \"none\") return;\n event.preventDefault();\n if (!pinchGesture && mode === \"pan\") {\n const v = current();\n const scale = event.deltaMode === 1 ? 16 : event.deltaMode === 2 ? 400 : 1;\n const dx = event.shiftKey && !event.deltaX ? event.deltaY : event.deltaX;\n const dy = event.shiftKey && !event.deltaX ? 0 : event.deltaY;\n set({ x: v.x - dx * scale, y: v.y - dy * scale, zoom: v.zoom });\n return;\n }\n const factor = wheelZoomFactor(event.deltaY, event.deltaMode, pinchGesture);\n set(zoomAt(current(), local(event.clientX, event.clientY), factor, options.minZoom(), options.maxZoom()));\n };\n\n // Safari reports a trackpad pinch as gesture events, with the scale since the gesture began.\n let gesture: { viewport: Viewport; point: Point } | undefined;\n const onGestureStart = (event: Event): void => {\n event.preventDefault();\n const e = event as Event & { clientX?: number; clientY?: number };\n const rect = el.getBoundingClientRect();\n gesture = {\n viewport: current(),\n point: e.clientX === undefined ? { x: rect.width / 2, y: rect.height / 2 } : local(e.clientX, e.clientY ?? 0),\n };\n };\n const onGestureChange = (event: Event): void => {\n event.preventDefault();\n const scale = (event as Event & { scale?: number }).scale;\n if (!gesture || typeof scale !== \"number\") return;\n set(zoomAt(gesture.viewport, gesture.point, scale, options.minZoom(), options.maxZoom()));\n };\n const onGestureEnd = (event: Event): void => {\n event.preventDefault();\n gesture = undefined;\n };\n\n el.addEventListener(\"pointerdown\", onPointerDown);\n el.addEventListener(\"click\", onClick, true);\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n el.addEventListener(\"gesturestart\", onGestureStart);\n el.addEventListener(\"gesturechange\", onGestureChange);\n el.addEventListener(\"gestureend\", onGestureEnd);\n\n return () => {\n writer.cancel();\n follow(false);\n el.removeEventListener(\"pointerdown\", onPointerDown);\n el.removeEventListener(\"click\", onClick, true);\n el.removeEventListener(\"wheel\", onWheel);\n el.removeEventListener(\"gesturestart\", onGestureStart);\n el.removeEventListener(\"gesturechange\", onGestureChange);\n el.removeEventListener(\"gestureend\", onGestureEnd);\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -3,6 +3,7 @@ import "@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.le
|
|
|
3
3
|
import { For, createMemo, mergeProps, splitProps } from "solid-js";
|
|
4
4
|
import cn from "clsx";
|
|
5
5
|
import { mergeRefs } from "../../../primitives/mergeRefs";
|
|
6
|
+
import { mergeStyle } from "../../../primitives/mergeStyle";
|
|
6
7
|
function DescriptionItem(props) {
|
|
7
8
|
const [local, rest] = splitProps(props, ["class", "term", "children", "ref"]);
|
|
8
9
|
return <div {...rest} ref={mergeRefs(local.ref)} class={cn("smwb-description-list__item", local.class)}>
|
|
@@ -14,12 +15,9 @@ function DescriptionList(props) {
|
|
|
14
15
|
const merged = mergeProps({ layout: "auto" }, props);
|
|
15
16
|
const [local, rest] = splitProps(merged, ["class", "style", "items", "layout", "termWidth", "dense", "children", "ref"]);
|
|
16
17
|
const items = createMemo(() => local.items ?? []);
|
|
17
|
-
const style = () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (typeof local.style === "string") return `${local.style};--smwb-description-term:${width}`;
|
|
21
|
-
return { ...local.style, "--smwb-description-term": width };
|
|
22
|
-
};
|
|
18
|
+
const style = () => mergeStyle(local.style, {
|
|
19
|
+
"--smwb-description-term": typeof local.termWidth === "number" ? `${local.termWidth}px` : local.termWidth
|
|
20
|
+
});
|
|
23
21
|
return <dl
|
|
24
22
|
{...rest}
|
|
25
23
|
ref={mergeRefs(local.ref)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/dataDisplay/descriptionList/descriptionList.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less\";\nimport { type JSX, type ParentProps, For, createMemo, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface DescriptionListEntry {\n term: JSX.Element;\n description: JSX.Element;\n}\n\n/**\n * `auto`: the term beside its description while the list
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/dataDisplay/descriptionList/descriptionList.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/descriptionList/descriptionList.entry.less\";\nimport { type JSX, type ParentProps, For, createMemo, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport interface DescriptionListEntry {\n term: JSX.Element;\n description: JSX.Element;\n}\n\n/**\n * `auto`: the term beside its description while the list is at least 420px\n * wide, above it when narrower (a container query on the list itself). `row`\n * and `stacked` fix one layout.\n */\nexport type DescriptionListLayout = \"auto\" | \"row\" | \"stacked\";\n\nexport interface DescriptionListProps extends JSX.HTMLAttributes<HTMLDListElement> {\n /** The pairs as data; `DescriptionItem` children work too, and come after them. */\n items?: DescriptionListEntry[];\n /**\n * \"auto\" (default): each term beside its value while the list is at least\n * 420px wide, above it when narrower — the list's own width decides. So its\n * content does not widen it: where the parent takes its width from its\n * content (a flex item that does not grow, a popover, a table cell) the list\n * has no width; give it one there, or use \"row\" / \"stacked\", which fix one\n * layout and take their width from their content.\n */\n layout?: DescriptionListLayout;\n /** Width of the term column in the row layout: px or any CSS track size. 30% of the list, at least 6rem, by default. */\n termWidth?: number | string;\n /** Tighter spacing, for side panels. */\n dense?: boolean;\n ref?: Ref<HTMLDListElement>;\n}\n\nexport interface DescriptionItemProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** The field's name. */\n term: JSX.Element;\n ref?: Ref<HTMLDivElement>;\n}\n\n/** One pair: the term and, as children, its description. */\nexport function DescriptionItem(props: ParentProps<DescriptionItemProps>): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"term\", \"children\", \"ref\"]);\n return (\n <div {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-description-list__item\", local.class)}>\n <dt class=\"smwb-description-list__term\">{local.term}</dt>\n <dd class=\"smwb-description-list__details\">{local.children}</dd>\n </div>\n );\n}\n\n/** Field–value pairs (a `<dl>`): side by side, stacking on a narrow container. */\nexport function DescriptionList(props: ParentProps<DescriptionListProps>): JSX.Element {\n const merged = mergeProps({ layout: \"auto\" as DescriptionListLayout }, props);\n const [local, rest] = splitProps(merged, [\"class\", \"style\", \"items\", \"layout\", \"termWidth\", \"dense\", \"children\", \"ref\"]);\n\n // Read the items once: an inline array is re-evaluated on every read, creating\n // the markup in it again, and during hydration the extra copies have no server\n // DOM nodes to adopt.\n const items = createMemo(() => local.items ?? []);\n\n const style = (): JSX.CSSProperties | string | undefined =>\n mergeStyle(local.style, {\n \"--smwb-description-term\": typeof local.termWidth === \"number\" ? `${local.termWidth}px` : local.termWidth,\n });\n\n return (\n <dl\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\n \"smwb-description-list\",\n `smwb-description-list_${local.layout}`,\n { \"smwb-description-list_dense\": local.dense },\n local.class\n )}\n style={style()}\n >\n <For each={items()}>{(item) => <DescriptionItem term={item.term}>{item.description}</DescriptionItem>}</For>\n {local.children}\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAqC,KAAK,YAAY,YAAY,kBAAkB;AACpF,OAAO,QAAQ;AACf,SAAS,iBAA2B;AACpC,SAAS,kBAAkB;AAwCpB,SAAS,gBAAgB,OAAuD;AACrF,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,SAAS,QAAQ,YAAY,KAAK,CAAC;AAC5E,SACE,CAAC,QAAQ,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,OAAO,GAAG,+BAA+B,MAAM,KAAK,GAAG;AAAA,MAC/F,CAAC,GAAG,MAAM,+BAA+B,MAAM,KAAK,EAAnD,GAAwD;AAAA,MACzD,CAAC,GAAG,MAAM,kCAAkC,MAAM,SAAS,EAA1D,GAA+D;AAAA,IAClE,EAHC;AAKL;AAGO,SAAS,gBAAgB,OAAuD;AACrF,QAAM,SAAS,WAAW,EAAE,QAAQ,OAAgC,GAAG,KAAK;AAC5E,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,SAAS,SAAS,SAAS,UAAU,aAAa,SAAS,YAAY,KAAK,CAAC;AAKvH,QAAM,QAAQ,WAAW,MAAM,MAAM,SAAS,CAAC,CAAC;AAEhD,QAAM,QAAQ,MACZ,WAAW,MAAM,OAAO;AAAA,IACtB,2BAA2B,OAAO,MAAM,cAAc,WAAW,GAAG,MAAM,SAAS,OAAO,MAAM;AAAA,EAClG,CAAC;AAEH,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA,yBAAyB,MAAM,MAAM;AAAA,MACrC,EAAE,+BAA+B,MAAM,MAAM;AAAA,MAC7C,MAAM;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,GACd;AAAA,MACC,CAAC,IAAI,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,MAAM,KAAK,OAAO,KAAK,YAAY,EAAnD,iBAAsE,EAArG,IAA2G;AAAA,OAC3G,MAAM,SAAS;AAAA,IAClB,EAbC;AAeL;AAEA,IAAO,0BAAQ;","names":[],"file":"descriptionList.jsx"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import "@smwb/ui-styles/less/tokens.entry.less";
|
|
2
|
+
import "@smwb/ui-styles/less/components/diffStat/diffStat.entry.less";
|
|
3
|
+
import { Index, Show, mergeProps, splitProps } from "solid-js";
|
|
4
|
+
import cn from "clsx";
|
|
5
|
+
import { mergeRefs } from "../../../primitives/mergeRefs";
|
|
6
|
+
const DIFF_STAT_CELLS = 5;
|
|
7
|
+
const GROUP_SEPARATOR = "\u202F";
|
|
8
|
+
const DEFAULT_DIFF_STAT_FORMAT = (added, removed) => `added ${added}, removed ${removed}`;
|
|
9
|
+
function diffStatCount(value) {
|
|
10
|
+
return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;
|
|
11
|
+
}
|
|
12
|
+
function groupDiffStatCount(value) {
|
|
13
|
+
return String(diffStatCount(value)).replace(/\B(?=(\d{3})+(?!\d))/g, GROUP_SEPARATOR);
|
|
14
|
+
}
|
|
15
|
+
function diffStatCells(added, removed) {
|
|
16
|
+
const up = diffStatCount(added);
|
|
17
|
+
const down = diffStatCount(removed);
|
|
18
|
+
const all = up + down;
|
|
19
|
+
const cellsOf = (count, cell) => Array.from({ length: count }, () => cell);
|
|
20
|
+
if (all === 0) return cellsOf(DIFF_STAT_CELLS, "neutral");
|
|
21
|
+
const upCells = Math.floor(DIFF_STAT_CELLS * up / all);
|
|
22
|
+
const downCells = Math.floor(DIFF_STAT_CELLS * down / all);
|
|
23
|
+
return [
|
|
24
|
+
...cellsOf(upCells, "added"),
|
|
25
|
+
...cellsOf(downCells, "removed"),
|
|
26
|
+
...cellsOf(DIFF_STAT_CELLS - upCells - downCells, "neutral")
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
function DiffStat(props) {
|
|
30
|
+
const merged = mergeProps({ format: DEFAULT_DIFF_STAT_FORMAT, group: groupDiffStatCount }, props);
|
|
31
|
+
const [local, rest] = splitProps(merged, [
|
|
32
|
+
"class",
|
|
33
|
+
"added",
|
|
34
|
+
"removed",
|
|
35
|
+
"bar",
|
|
36
|
+
"compact",
|
|
37
|
+
"format",
|
|
38
|
+
"group",
|
|
39
|
+
"aria-label",
|
|
40
|
+
"ref",
|
|
41
|
+
"data-testid"
|
|
42
|
+
]);
|
|
43
|
+
const upCount = () => diffStatCount(local.added);
|
|
44
|
+
const downCount = () => diffStatCount(local.removed);
|
|
45
|
+
const showBar = () => local.bar ?? !local.compact;
|
|
46
|
+
const label = () => local["aria-label"] ?? local.format(upCount(), downCount());
|
|
47
|
+
return <span
|
|
48
|
+
{...rest}
|
|
49
|
+
ref={mergeRefs(local.ref)}
|
|
50
|
+
role="img"
|
|
51
|
+
aria-label={label()}
|
|
52
|
+
data-testid={local["data-testid"] ?? "diff-stat"}
|
|
53
|
+
class={cn("smwb-diff-stat", { "smwb-diff-stat_compact": local.compact }, local.class)}
|
|
54
|
+
>
|
|
55
|
+
<span class="smwb-diff-stat__text" aria-hidden="true">
|
|
56
|
+
<span class="smwb-diff-stat__added">{`+${local.group(upCount())}`}</span>
|
|
57
|
+
<span class="smwb-diff-stat__removed">{`\u2212${local.group(downCount())}`}</span>
|
|
58
|
+
</span>
|
|
59
|
+
<Show when={showBar()}>
|
|
60
|
+
<span class="smwb-diff-stat__bar" aria-hidden="true">
|
|
61
|
+
<Index each={diffStatCells(upCount(), downCount())}>
|
|
62
|
+
{(cell) => <span class={cn("smwb-diff-stat__cell", `smwb-diff-stat__cell_${cell()}`)} />}
|
|
63
|
+
</Index>
|
|
64
|
+
</span>
|
|
65
|
+
</Show>
|
|
66
|
+
</span>;
|
|
67
|
+
}
|
|
68
|
+
var diffStat_default = DiffStat;
|
|
69
|
+
export {
|
|
70
|
+
DEFAULT_DIFF_STAT_FORMAT,
|
|
71
|
+
DIFF_STAT_CELLS,
|
|
72
|
+
DiffStat,
|
|
73
|
+
diffStat_default as default,
|
|
74
|
+
diffStatCells,
|
|
75
|
+
diffStatCount,
|
|
76
|
+
groupDiffStatCount
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=diffStat.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/dataDisplay/diffStat/diffStat.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/diffStat/diffStat.entry.less\";\nimport { type JSX, Index, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\n/** How many cells the bar has. */\nexport const DIFF_STAT_CELLS = 5;\n\n/** One cell of the bar: whose it is, or nobody's. */\nexport type DiffStatCell = \"added\" | \"removed\" | \"neutral\";\n\n/** The accessible name, built from the two counts as numbers (already normalised by `diffStatCount`). */\nexport type DiffStatFormat = (added: number, removed: number) => string;\n\n// A narrow no-break space: the grouping separator, so a figure cannot break across lines.\nconst GROUP_SEPARATOR = \"\\u202f\";\n\n/** \"added 12345, removed 3\" — the default accessible name; plain digits, so a speech engine reads one number. */\nexport const DEFAULT_DIFF_STAT_FORMAT: DiffStatFormat = (added, removed) => `added ${added}, removed ${removed}`;\n\n/**\n * A count as the component takes it: a whole number, never below 0. Fractions are cut off,\n * negative counts are 0, and so are NaN, `undefined` and ±Infinity (data that has not\n * arrived yet, or arrived broken). The figures, the accessible name and the bar all use this\n * one value, so they cannot disagree.\n */\nexport function diffStatCount(value: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n}\n\n/**\n * A count (as `diffStatCount` takes it) as digits, grouped by three with U+202F NARROW NO-BREAK SPACE (\"1\\u202f234\"), the\n * fraction dropped. The separator is fixed rather than taken from a locale on purpose: the\n * server and the browser would group the same figure differently and break hydration. Pass\n * `group` to an app that knows its reader's locale.\n */\nexport function groupDiffStatCount(value: number): string {\n return String(diffStatCount(value)).replace(/\\B(?=(\\d{3})+(?!\\d))/g, GROUP_SEPARATOR);\n}\n\n/**\n * Which cell belongs to which side (counts as `diffStatCount` takes them): each takes `floor(DIFF_STAT_CELLS * its share)`, so the\n * cells the two sides leave over are neutral and 0 of 0 leaves all of them neutral. A side\n * under a fifth of the change reaches no cell and shows in its figure only.\n */\nexport function diffStatCells(added: number, removed: number): DiffStatCell[] {\n const up = diffStatCount(added);\n const down = diffStatCount(removed);\n const all = up + down;\n const cellsOf = (count: number, cell: DiffStatCell): DiffStatCell[] => Array.from({ length: count }, () => cell);\n if (all === 0) return cellsOf(DIFF_STAT_CELLS, \"neutral\");\n\n const upCells = Math.floor((DIFF_STAT_CELLS * up) / all);\n const downCells = Math.floor((DIFF_STAT_CELLS * down) / all);\n return [\n ...cellsOf(upCells, \"added\"),\n ...cellsOf(downCells, \"removed\"),\n ...cellsOf(DIFF_STAT_CELLS - upCells - downCells, \"neutral\"),\n ];\n}\n\nexport interface DiffStatProps extends Omit<JSX.HTMLAttributes<HTMLSpanElement>, \"role\"> {\n /** Lines added; the figure behind \"+N\". NaN, `undefined`, Infinity and negatives count as 0. */\n added: number;\n /** Lines removed; the figure behind \"−M\". NaN, `undefined`, Infinity and negatives count as 0. */\n removed: number;\n /** The five cells beside the figures. Shown by default, hidden in `compact`; set it either way. */\n bar?: boolean | undefined;\n /** The tab variant: smaller figures, and no bar unless `bar` asks for one. */\n compact?: boolean | undefined;\n /** How the accessible name is made from the two counts, as numbers: `DEFAULT_DIFF_STAT_FORMAT` unless given. */\n format?: DiffStatFormat | undefined;\n /** How each figure is written (it gets the count as `diffStatCount` takes it): `groupDiffStatCount` — three digits per group — unless given. */\n group?: ((value: number) => string) | undefined;\n /** Test id of the root `<span>`; `diff-stat` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLSpanElement>;\n}\n\n/**\n * How big a change is: \"+N −M\" with the two figures' counts, and a five-cell bar of the\n * same proportions. One accessible name for the whole (\"added N, removed M\"), so the\n * digits are not read twice; the bar is the theme's success and error, shaded toward the\n * surface ink to stay readable as text.\n */\nexport function DiffStat(props: DiffStatProps): JSX.Element {\n const merged = mergeProps({ format: DEFAULT_DIFF_STAT_FORMAT, group: groupDiffStatCount }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"added\",\n \"removed\",\n \"bar\",\n \"compact\",\n \"format\",\n \"group\",\n \"aria-label\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const upCount = (): number => diffStatCount(local.added);\n const downCount = (): number => diffStatCount(local.removed);\n const showBar = (): boolean => local.bar ?? !local.compact;\n // An aria-label the caller gives wins over the one built from the figures.\n const label = (): string => local[\"aria-label\"] ?? local.format(upCount(), downCount());\n\n return (\n <span\n {...rest}\n ref={mergeRefs(local.ref)}\n role=\"img\"\n aria-label={label()}\n data-testid={local[\"data-testid\"] ?? \"diff-stat\"}\n class={cn(\"smwb-diff-stat\", { \"smwb-diff-stat_compact\": local.compact }, local.class)}\n >\n <span class=\"smwb-diff-stat__text\" aria-hidden=\"true\">\n <span class=\"smwb-diff-stat__added\">{`+${local.group(upCount())}`}</span>\n <span class=\"smwb-diff-stat__removed\">{`\\u2212${local.group(downCount())}`}</span>\n </span>\n <Show when={showBar()}>\n <span class=\"smwb-diff-stat__bar\" aria-hidden=\"true\">\n <Index each={diffStatCells(upCount(), downCount())}>\n {(cell) => <span class={cn(\"smwb-diff-stat__cell\", `smwb-diff-stat__cell_${cell()}`)} />}\n </Index>\n </span>\n </Show>\n </span>\n );\n}\n\nexport default DiffStat;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAmB,OAAO,MAAM,YAAY,kBAAkB;AAC9D,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAG7B,MAAM,kBAAkB;AAS/B,MAAM,kBAAkB;AAGjB,MAAM,2BAA2C,CAAC,OAAO,YAAY,SAAS,KAAK,aAAa,OAAO;AAQvG,SAAS,cAAc,OAAuB;AACnD,SAAO,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;AACnE;AAQO,SAAS,mBAAmB,OAAuB;AACxD,SAAO,OAAO,cAAc,KAAK,CAAC,EAAE,QAAQ,yBAAyB,eAAe;AACtF;AAOO,SAAS,cAAc,OAAe,SAAiC;AAC5E,QAAM,KAAK,cAAc,KAAK;AAC9B,QAAM,OAAO,cAAc,OAAO;AAClC,QAAM,MAAM,KAAK;AACjB,QAAM,UAAU,CAAC,OAAe,SAAuC,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,MAAM,IAAI;AAC/G,MAAI,QAAQ,EAAG,QAAO,QAAQ,iBAAiB,SAAS;AAExD,QAAM,UAAU,KAAK,MAAO,kBAAkB,KAAM,GAAG;AACvD,QAAM,YAAY,KAAK,MAAO,kBAAkB,OAAQ,GAAG;AAC3D,SAAO;AAAA,IACL,GAAG,QAAQ,SAAS,OAAO;AAAA,IAC3B,GAAG,QAAQ,WAAW,SAAS;AAAA,IAC/B,GAAG,QAAQ,kBAAkB,UAAU,WAAW,SAAS;AAAA,EAC7D;AACF;AA0BO,SAAS,SAAS,OAAmC;AAC1D,QAAM,SAAS,WAAW,EAAE,QAAQ,0BAA0B,OAAO,mBAAmB,GAAG,KAAK;AAChG,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAc,cAAc,MAAM,KAAK;AACvD,QAAM,YAAY,MAAc,cAAc,MAAM,OAAO;AAC3D,QAAM,UAAU,MAAe,MAAM,OAAO,CAAC,MAAM;AAEnD,QAAM,QAAQ,MAAc,MAAM,YAAY,KAAK,MAAM,OAAO,QAAQ,GAAG,UAAU,CAAC;AAEtF,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,KAAK;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM,aAAa,KAAK;AAAA,IACrC,OAAO,GAAG,kBAAkB,EAAE,0BAA0B,MAAM,QAAQ,GAAG,MAAM,KAAK;AAAA,GACrF;AAAA,MACC,CAAC,KAAK,MAAM,uBAAuB,YAAY,OAAO;AAAA,QACpD,CAAC,KAAK,MAAM,yBAAyB,IAAI,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,EAAjE,KAAwE;AAAA,QACzE,CAAC,KAAK,MAAM,2BAA2B,SAAS,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,EAA1E,KAAiF;AAAA,MACpF,EAHC,KAGM;AAAA,MACP,CAAC,KAAK,MAAM,QAAQ,GAAG;AAAA,QACrB,CAAC,KAAK,MAAM,sBAAsB,YAAY,OAAO;AAAA,UACnD,CAAC,MAAM,MAAM,cAAc,QAAQ,GAAG,UAAU,CAAC,GAAG;AAAA,aACjD,CAAC,SAAS,CAAC,KAAK,OAAO,GAAG,wBAAwB,wBAAwB,KAAK,CAAC,EAAE,GAAG,GAAG;AAAA,UAC3F,EAFC,MAEO;AAAA,QACV,EAJC,KAIM;AAAA,MACT,EANC,KAMM;AAAA,IACT,EAnBC;AAqBL;AAEA,IAAO,mBAAQ;","names":[],"file":"diffStat.jsx"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DiffStat,
|
|
3
|
+
diffStatCells,
|
|
4
|
+
diffStatCount,
|
|
5
|
+
groupDiffStatCount,
|
|
6
|
+
DEFAULT_DIFF_STAT_FORMAT,
|
|
7
|
+
DIFF_STAT_CELLS,
|
|
8
|
+
default as default2
|
|
9
|
+
} from "./diffStat";
|
|
10
|
+
export {
|
|
11
|
+
DEFAULT_DIFF_STAT_FORMAT,
|
|
12
|
+
DIFF_STAT_CELLS,
|
|
13
|
+
DiffStat,
|
|
14
|
+
default2 as default,
|
|
15
|
+
diffStatCells,
|
|
16
|
+
diffStatCount,
|
|
17
|
+
groupDiffStatCount
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dataDisplay/diffStat/index.ts"],
|
|
4
|
+
"sourcesContent": ["export {\n DiffStat,\n diffStatCells,\n diffStatCount,\n groupDiffStatCount,\n DEFAULT_DIFF_STAT_FORMAT,\n DIFF_STAT_CELLS,\n default,\n} from \"./diffStat\";\nexport type { DiffStatProps, DiffStatCell, DiffStatFormat } from \"./diffStat\";\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAA;AAAA,OACK;",
|
|
6
|
+
"names": ["default"]
|
|
7
|
+
}
|