@smwb/ui-solid 0.13.0 → 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 +564 -0
- package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/assets/styles/less/components/button/button.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/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/qrCode/qrCode.entry.css +1 -0
- package/dist/assets/styles/less/components/radioButton/radioButton.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/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/toggle/toggle.entry.css +1 -1
- package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
- package/dist/assets/styles/less/tokens.entry.css +1 -1
- 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/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/dagView/dagView.js +238 -223
- package/dist/components/dataDisplay/dagView/dagView.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/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/list/listItem.d.ts +34 -0
- package/dist/components/dataDisplay/list/listItem.js +57 -20
- package/dist/components/dataDisplay/list/listItem.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/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/treeView/treeView.d.ts +20 -0
- package/dist/components/dataDisplay/treeView/treeView.js +161 -95
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/feedBack/modal/modal.d.ts +9 -0
- package/dist/components/feedBack/modal/modal.js +68 -54
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +12 -0
- package/dist/components/inputs/button/button.js +44 -37
- package/dist/components/inputs/button/button.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/layout/sheet/sheet.d.ts +12 -0
- package/dist/components/layout/sheet/sheet.js +100 -86
- package/dist/components/layout/sheet/sheet.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 +22 -0
- package/dist/components/navigation/appBar/appBar.js +60 -22
- package/dist/components/navigation/appBar/appBar.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/sidebar/sidebar.d.ts +10 -0
- package/dist/components/navigation/sidebar/sidebar.js +12 -10
- package/dist/components/navigation/sidebar/sidebar.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 +164 -44
- 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 +73 -3
- package/dist/components/navigation/tabs/tabs.js +387 -160
- 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 +31 -1
- package/dist/components/navigation/tabs/tabsContext.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/utils.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagView.js +238 -223
- package/dist/headless/components/dataDisplay/dagView/dagView.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/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/list/listItem.js +57 -20
- package/dist/headless/components/dataDisplay/list/listItem.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/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/treeView/treeView.js +161 -95
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +68 -54
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +42 -35
- package/dist/headless/components/inputs/button/button.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/layout/sheet/sheet.js +100 -86
- package/dist/headless/components/layout/sheet/sheet.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 +64 -26
- package/dist/headless/components/navigation/appBar/appBar.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/sidebar/sidebar.js +28 -26
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +164 -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 +387 -160
- 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 -367
- package/dist/headless/index.js.map +1 -1
- package/dist/headless/primitives/createFocusTrap.js +17 -17
- package/dist/headless/primitives/createFocusTrap.js.map +1 -1
- package/dist/headless/primitives/createKeyboardShortcut.js +16 -0
- package/dist/headless/primitives/createKeyboardShortcut.js.map +1 -0
- package/dist/headless/primitives/restoreFocus.js +10 -0
- package/dist/headless/primitives/restoreFocus.js.map +1 -0
- 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/index.js.map +1 -1
- package/dist/headless/source/components/dataDisplay/chat/utils.js.map +2 -2
- package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +30 -21
- package/dist/headless/source/components/dataDisplay/dagView/dagView.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/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/list/listItem.jsx +37 -7
- package/dist/headless/source/components/dataDisplay/list/listItem.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/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/treeView/treeView.jsx +118 -37
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/headless/source/components/feedBack/modal/modal.jsx +34 -4
- package/dist/headless/source/components/feedBack/modal/modal.jsx.map +1 -1
- package/dist/headless/source/components/inputs/button/button.jsx +6 -2
- package/dist/headless/source/components/inputs/button/button.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/layout/sheet/sheet.jsx +33 -11
- package/dist/headless/source/components/layout/sheet/sheet.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 +27 -3
- package/dist/headless/source/components/navigation/appBar/appBar.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/sidebar/sidebar.jsx +5 -2
- package/dist/headless/source/components/navigation/sidebar/sidebar.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 +135 -8
- 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 +361 -13
- 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/index.js +41 -1
- package/dist/headless/source/index.js.map +2 -2
- package/dist/headless/source/primitives/createFocusTrap.js +8 -3
- package/dist/headless/source/primitives/createFocusTrap.js.map +2 -2
- package/dist/headless/source/primitives/createKeyboardShortcut.js +23 -0
- package/dist/headless/source/primitives/createKeyboardShortcut.js.map +7 -0
- package/dist/headless/source/primitives/restoreFocus.js +14 -0
- package/dist/headless/source/primitives/restoreFocus.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/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/index.d.ts +24 -3
- package/dist/index.js +405 -367
- package/dist/index.js.map +1 -1
- package/dist/primitives/createFocusTrap.d.ts +5 -0
- package/dist/primitives/createFocusTrap.js +17 -17
- package/dist/primitives/createFocusTrap.js.map +1 -1
- 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/restoreFocus.d.ts +8 -0
- package/dist/primitives/restoreFocus.js +10 -0
- package/dist/primitives/restoreFocus.js.map +1 -0
- 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/index.js.map +1 -1
- package/dist/source/components/dataDisplay/chat/utils.js.map +2 -2
- package/dist/source/components/dataDisplay/dagView/dagView.jsx +30 -21
- package/dist/source/components/dataDisplay/dagView/dagView.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/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/list/listItem.jsx +37 -7
- package/dist/source/components/dataDisplay/list/listItem.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/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/treeView/treeView.jsx +118 -37
- package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/source/components/feedBack/modal/modal.jsx +34 -4
- package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
- package/dist/source/components/inputs/button/button.jsx +6 -2
- package/dist/source/components/inputs/button/button.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/layout/sheet/sheet.jsx +33 -11
- package/dist/source/components/layout/sheet/sheet.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 +27 -3
- package/dist/source/components/navigation/appBar/appBar.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/sidebar/sidebar.jsx +5 -2
- package/dist/source/components/navigation/sidebar/sidebar.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 +135 -8
- 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 +361 -13
- 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/index.js +41 -1
- package/dist/source/index.js.map +2 -2
- package/dist/source/primitives/createFocusTrap.js +8 -3
- package/dist/source/primitives/createFocusTrap.js.map +2 -2
- package/dist/source/primitives/createKeyboardShortcut.js +23 -0
- package/dist/source/primitives/createKeyboardShortcut.js.map +7 -0
- package/dist/source/primitives/restoreFocus.js +14 -0
- package/dist/source/primitives/restoreFocus.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/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/package.json +66 -3
|
@@ -1,93 +1,156 @@
|
|
|
1
|
-
import { createComponent as
|
|
2
|
-
import { mergeProps as
|
|
3
|
-
import
|
|
4
|
-
import { createControllableState as
|
|
5
|
-
import { mergeRefs as
|
|
1
|
+
import { createComponent as i, use as F, spread as K, mergeProps as U, insert as f, template as w, setAttribute as v, effect as E, memo as N, className as j, delegateEvents as B } from "solid-js/web";
|
|
2
|
+
import { mergeProps as G, splitProps as H, createSignal as P, createContext as J, createMemo as $, For as Q, useContext as W, createUniqueId as X, Show as x } from "solid-js";
|
|
3
|
+
import q from "clsx";
|
|
4
|
+
import { createControllableState as z } from "../../../primitives/createControllableState.js";
|
|
5
|
+
import { mergeRefs as Y } from "../../../primitives/mergeRefs.js";
|
|
6
|
+
import { isOwnClick as Z } from "../../../utils/ownClick.js";
|
|
6
7
|
import { Icon as T } from "../../base/icon/icon.js";
|
|
7
|
-
var
|
|
8
|
-
const
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
var ee = /* @__PURE__ */ w("<div class=smwb-tree__wrapper role=presentation>"), te = /* @__PURE__ */ w("<input type=checkbox class=smwb-tree__node__checkbox>"), ne = /* @__PURE__ */ w("<div role=group>"), re = /* @__PURE__ */ w("<div role=treeitem><div class=smwb-tree__node__row><span class=smwb-tree__node__toggle aria-hidden=true></span><span class=smwb-tree__node__content tabindex=0 role=button><span class=smwb-tree__node__label>"), le = /* @__PURE__ */ w("<span class=smwb-tree__node__actions>"), oe = /* @__PURE__ */ w("<div class=smwb-tree__node__loading role=status>"), de = /* @__PURE__ */ w("<div>");
|
|
9
|
+
const D = J();
|
|
10
|
+
function ae(s, t) {
|
|
11
|
+
if (s === t) return !0;
|
|
12
|
+
if (s.id !== t.id || s.label !== t.label || s.hasChildren !== t.hasChildren) return !1;
|
|
13
|
+
const e = s.children, c = t.children;
|
|
14
|
+
return e === c ? !0 : !e || !c || e.length !== c.length ? !1 : e.every((o, g) => {
|
|
15
|
+
const u = c[g];
|
|
16
|
+
return !!u && o.id === u.id && o.label === u.label && o.hasChildren === u.hasChildren;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function M(s) {
|
|
20
|
+
const t = $(() => s.items.map((o, g) => {
|
|
21
|
+
const u = s.path === "" ? `${g}` : `${s.path}.${g}`;
|
|
22
|
+
return {
|
|
23
|
+
id: o.id ?? u,
|
|
24
|
+
item: o,
|
|
25
|
+
path: u
|
|
26
|
+
};
|
|
27
|
+
})), e = $(() => new Map(t().map((o) => [o.id, o]))), c = $(() => t().map((o) => o.id));
|
|
28
|
+
return i(Q, {
|
|
29
|
+
get each() {
|
|
30
|
+
return c();
|
|
31
|
+
},
|
|
32
|
+
children: (o) => {
|
|
33
|
+
let g = e().get(o);
|
|
34
|
+
const u = () => g = e().get(o) ?? g;
|
|
35
|
+
return s.wrap ? (() => {
|
|
36
|
+
var m = ee();
|
|
37
|
+
return f(m, i(V, {
|
|
38
|
+
entry: u
|
|
39
|
+
})), m;
|
|
40
|
+
})() : i(V, {
|
|
41
|
+
entry: u
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function V(s) {
|
|
47
|
+
const t = W(D), e = s.entry().id, c = () => s.entry().item, o = `${X()}-label`, g = $(() => c(), void 0, {
|
|
48
|
+
equals: ae
|
|
49
|
+
}), u = $(() => t.renderLabel ? t.renderLabel(g(), e) : g().label), m = () => c().children ?? t.loadedChildren()[e], I = () => t.hasLoader && (!!c().hasChildren || !!t.loadedChildren()[e]), h = () => !!m() && (m()?.length ?? 0) > 0 || I(), b = () => t.expandedIds().includes(e), C = () => t.selectedIds().includes(e), L = () => t.loadingIds().includes(e), y = () => {
|
|
50
|
+
b() || t.ensureLoaded(c(), e), t.toggleExpanded(e);
|
|
51
|
+
}, S = () => {
|
|
52
|
+
t.toggleOnRowClick && h() && y(), t.selectable && t.toggleSelected(e);
|
|
53
|
+
}, O = (d) => {
|
|
54
|
+
d.target === d.currentTarget && (d.key === "Enter" || d.key === " " ? (d.preventDefault(), S()) : d.key === "ArrowRight" && h() ? (t.ensureLoaded(c(), e), t.setOpen(e, !0)) : d.key === "ArrowLeft" && h() && t.setOpen(e, !1));
|
|
55
|
+
}, A = (d) => {
|
|
56
|
+
Z(d) && S();
|
|
14
57
|
};
|
|
15
58
|
return (() => {
|
|
16
|
-
var
|
|
17
|
-
return
|
|
59
|
+
var d = re(), n = d.firstChild, r = n.firstChild, l = r.nextSibling, _ = l.firstChild;
|
|
60
|
+
return v(d, "aria-labelledby", o), r.$$click = () => h() && y(), f(r, i(x, {
|
|
61
|
+
get when() {
|
|
62
|
+
return h();
|
|
63
|
+
},
|
|
64
|
+
get children() {
|
|
65
|
+
return i(T, {
|
|
66
|
+
get name() {
|
|
67
|
+
return b() ? "expand_more" : "chevron_right";
|
|
68
|
+
},
|
|
69
|
+
size: 20
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
})), f(n, i(x, {
|
|
18
73
|
get when() {
|
|
19
|
-
return
|
|
74
|
+
return t.checkboxes;
|
|
20
75
|
},
|
|
21
76
|
get children() {
|
|
22
|
-
var
|
|
23
|
-
return
|
|
77
|
+
var a = te();
|
|
78
|
+
return a.addEventListener("change", () => t.toggleSelected(e)), E(() => v(a, "aria-label", c().label)), E(() => a.checked = C()), a;
|
|
24
79
|
}
|
|
25
|
-
}),
|
|
80
|
+
}), l), l.$$keydown = O, l.$$click = A, v(_, "id", o), f(_, i(x, {
|
|
26
81
|
get when() {
|
|
27
|
-
return
|
|
82
|
+
return h();
|
|
28
83
|
},
|
|
29
84
|
get fallback() {
|
|
30
|
-
return
|
|
85
|
+
return i(T, {
|
|
31
86
|
get name() {
|
|
32
|
-
return
|
|
87
|
+
return t.listIcon;
|
|
33
88
|
},
|
|
34
89
|
size: 20
|
|
35
90
|
});
|
|
36
91
|
},
|
|
37
92
|
get children() {
|
|
38
|
-
return
|
|
93
|
+
return i(T, {
|
|
39
94
|
get name() {
|
|
40
|
-
return
|
|
95
|
+
return N(() => !!b())() ? t.nodeIcon.opened ?? "folder_open" : t.nodeIcon.closed ?? "folder";
|
|
41
96
|
},
|
|
42
97
|
fill: 1,
|
|
43
98
|
size: 20
|
|
44
99
|
});
|
|
45
100
|
}
|
|
46
|
-
}), null),
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
101
|
+
}), null), f(_, u, null), f(n, i(x, {
|
|
102
|
+
get when() {
|
|
103
|
+
return t.renderActions;
|
|
104
|
+
},
|
|
105
|
+
children: (a) => {
|
|
106
|
+
const p = $(() => a()(g(), e));
|
|
107
|
+
return (() => {
|
|
108
|
+
var k = le();
|
|
109
|
+
return f(k, p), k;
|
|
110
|
+
})();
|
|
111
|
+
}
|
|
112
|
+
}), null), f(d, i(x, {
|
|
50
113
|
get when() {
|
|
51
|
-
return
|
|
114
|
+
return N(() => !!h())() && b();
|
|
52
115
|
},
|
|
53
116
|
get children() {
|
|
54
|
-
var
|
|
55
|
-
return
|
|
117
|
+
var a = ne();
|
|
118
|
+
return f(a, i(x, {
|
|
56
119
|
get when() {
|
|
57
|
-
return !(
|
|
120
|
+
return !(L() && !m());
|
|
58
121
|
},
|
|
59
122
|
get fallback() {
|
|
60
|
-
return
|
|
123
|
+
return (() => {
|
|
124
|
+
var p = oe();
|
|
125
|
+
return f(p, () => t.loadingText), p;
|
|
126
|
+
})();
|
|
61
127
|
},
|
|
62
128
|
get children() {
|
|
63
|
-
return
|
|
64
|
-
get
|
|
65
|
-
return
|
|
129
|
+
return i(M, {
|
|
130
|
+
get items() {
|
|
131
|
+
return m() ?? [];
|
|
66
132
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return `${o.path}.${C()}`;
|
|
71
|
-
}
|
|
72
|
-
})
|
|
133
|
+
get path() {
|
|
134
|
+
return s.entry().path;
|
|
135
|
+
}
|
|
73
136
|
});
|
|
74
137
|
}
|
|
75
|
-
})),
|
|
138
|
+
})), a;
|
|
76
139
|
}
|
|
77
|
-
}), null),
|
|
78
|
-
var
|
|
79
|
-
"smwb-tree__node_selected":
|
|
80
|
-
}),
|
|
81
|
-
return
|
|
140
|
+
}), null), E((a) => {
|
|
141
|
+
var p = q("smwb-tree__node", {
|
|
142
|
+
"smwb-tree__node_selected": C()
|
|
143
|
+
}), k = h() ? b() : void 0, R = t.selectable || t.checkboxes ? C() : void 0;
|
|
144
|
+
return p !== a.e && j(d, a.e = p), k !== a.t && v(d, "aria-expanded", a.t = k), R !== a.a && v(d, "aria-selected", a.a = R), a;
|
|
82
145
|
}, {
|
|
83
146
|
e: void 0,
|
|
84
147
|
t: void 0,
|
|
85
148
|
a: void 0
|
|
86
|
-
}),
|
|
149
|
+
}), d;
|
|
87
150
|
})();
|
|
88
151
|
}
|
|
89
|
-
function
|
|
90
|
-
const
|
|
152
|
+
function me(s) {
|
|
153
|
+
const t = G({
|
|
91
154
|
listIcon: "draft",
|
|
92
155
|
nodeIcon: {
|
|
93
156
|
closed: "folder",
|
|
@@ -97,41 +160,42 @@ function de(o) {
|
|
|
97
160
|
defaultExpanded: [],
|
|
98
161
|
defaultSelected: [],
|
|
99
162
|
selectable: !1,
|
|
100
|
-
checkboxes: !1
|
|
101
|
-
|
|
163
|
+
checkboxes: !1,
|
|
164
|
+
loadingText: "Loading…"
|
|
165
|
+
}, s), [e, c] = H(t, ["class", "listIcon", "nodeIcon", "data", "expanded", "defaultExpanded", "onExpandedChange", "selected", "defaultSelected", "onSelectedChange", "selectable", "checkboxes", "toggleOnRowClick", "renderLabel", "renderActions", "loadingText", "loadChildren", "ref", "data-testid"]), [o, g] = P({}), [u, m] = P([]), [I, h] = z({
|
|
102
166
|
value: () => e.expanded,
|
|
103
167
|
defaultValue: e.defaultExpanded,
|
|
104
|
-
onChange: (
|
|
168
|
+
onChange: (n) => e.onExpandedChange?.(n)
|
|
105
169
|
});
|
|
106
|
-
let
|
|
107
|
-
const [
|
|
170
|
+
let b;
|
|
171
|
+
const [C, L] = z({
|
|
108
172
|
value: () => e.selected,
|
|
109
173
|
defaultValue: e.defaultSelected,
|
|
110
|
-
onChange: (
|
|
111
|
-
const
|
|
112
|
-
|
|
174
|
+
onChange: (n) => {
|
|
175
|
+
const r = b;
|
|
176
|
+
b = void 0, e.onSelectedChange?.(n, r);
|
|
113
177
|
}
|
|
114
|
-
}),
|
|
178
|
+
}), d = {
|
|
115
179
|
expandedIds: I,
|
|
116
|
-
selectedIds:
|
|
117
|
-
loadedChildren:
|
|
118
|
-
loadingIds:
|
|
119
|
-
toggleExpanded: (
|
|
120
|
-
setOpen: (
|
|
121
|
-
const
|
|
122
|
-
return
|
|
180
|
+
selectedIds: C,
|
|
181
|
+
loadedChildren: o,
|
|
182
|
+
loadingIds: u,
|
|
183
|
+
toggleExpanded: (n) => h((r) => r.includes(n) ? r.filter((l) => l !== n) : [...r, n]),
|
|
184
|
+
setOpen: (n, r) => h((l) => {
|
|
185
|
+
const _ = l.includes(n);
|
|
186
|
+
return r && !_ ? [...l, n] : !r && _ ? l.filter((a) => a !== n) : l;
|
|
123
187
|
}),
|
|
124
|
-
toggleSelected: (
|
|
125
|
-
|
|
126
|
-
id:
|
|
127
|
-
selected: !
|
|
128
|
-
},
|
|
188
|
+
toggleSelected: (n) => {
|
|
189
|
+
b = {
|
|
190
|
+
id: n,
|
|
191
|
+
selected: !C().includes(n)
|
|
192
|
+
}, L((r) => r.includes(n) ? r.filter((l) => l !== n) : [...r, n]);
|
|
129
193
|
},
|
|
130
|
-
ensureLoaded: (
|
|
131
|
-
!e.loadChildren ||
|
|
132
|
-
...
|
|
133
|
-
[
|
|
134
|
-
}))).finally(() => m((
|
|
194
|
+
ensureLoaded: (n, r) => {
|
|
195
|
+
!e.loadChildren || o()[r] || n.children && n.children.length > 0 || (m((l) => l.includes(r) ? l : [...l, r]), e.loadChildren(n, r).then((l) => g((_) => ({
|
|
196
|
+
..._,
|
|
197
|
+
[r]: l
|
|
198
|
+
}))).finally(() => m((l) => l.filter((_) => _ !== r))));
|
|
135
199
|
},
|
|
136
200
|
get selectable() {
|
|
137
201
|
return e.selectable;
|
|
@@ -139,6 +203,12 @@ function de(o) {
|
|
|
139
203
|
get checkboxes() {
|
|
140
204
|
return e.checkboxes;
|
|
141
205
|
},
|
|
206
|
+
get toggleOnRowClick() {
|
|
207
|
+
return e.toggleOnRowClick ?? !e.selectable;
|
|
208
|
+
},
|
|
209
|
+
get loadingText() {
|
|
210
|
+
return e.loadingText;
|
|
211
|
+
},
|
|
142
212
|
get nodeIcon() {
|
|
143
213
|
return e.nodeIcon;
|
|
144
214
|
},
|
|
@@ -148,41 +218,37 @@ function de(o) {
|
|
|
148
218
|
get renderLabel() {
|
|
149
219
|
return e.renderLabel;
|
|
150
220
|
},
|
|
221
|
+
get renderActions() {
|
|
222
|
+
return e.renderActions;
|
|
223
|
+
},
|
|
151
224
|
get hasLoader() {
|
|
152
225
|
return !!e.loadChildren;
|
|
153
226
|
}
|
|
154
227
|
};
|
|
155
|
-
return
|
|
156
|
-
value:
|
|
228
|
+
return i(D.Provider, {
|
|
229
|
+
value: d,
|
|
157
230
|
get children() {
|
|
158
|
-
var
|
|
159
|
-
return typeof
|
|
231
|
+
var n = de(), r = Y(e.ref);
|
|
232
|
+
return typeof r == "function" && F(r, n), K(n, U(c, {
|
|
160
233
|
get "data-testid"() {
|
|
161
234
|
return e["data-testid"] ?? "tree-view";
|
|
162
235
|
},
|
|
163
236
|
role: "tree",
|
|
164
237
|
get class() {
|
|
165
|
-
return
|
|
238
|
+
return q("smwb-tree", e.class);
|
|
166
239
|
}
|
|
167
|
-
}), !1, !0),
|
|
168
|
-
get
|
|
240
|
+
}), !1, !0), f(n, i(M, {
|
|
241
|
+
get items() {
|
|
169
242
|
return e.data;
|
|
170
243
|
},
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
item: d,
|
|
175
|
-
get path() {
|
|
176
|
-
return `${i()}`;
|
|
177
|
-
}
|
|
178
|
-
})), v;
|
|
179
|
-
})()
|
|
180
|
-
})), t;
|
|
244
|
+
path: "",
|
|
245
|
+
wrap: !0
|
|
246
|
+
})), n;
|
|
181
247
|
}
|
|
182
248
|
});
|
|
183
249
|
}
|
|
184
|
-
|
|
250
|
+
B(["click", "keydown"]);
|
|
185
251
|
export {
|
|
186
|
-
|
|
252
|
+
me as TreeView
|
|
187
253
|
};
|
|
188
254
|
//# sourceMappingURL=treeView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeView.js","sources":["../../../../../src/components/dataDisplay/treeView/treeView.tsx"],"sourcesContent":["import { type Accessor, type JSX, For, Show, createContext, createSignal, mergeProps, splitProps, useContext } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ITreeNodeItem {\n /** Stable identifier. Falls back to the positional path when omitted. */\n id?: string;\n label: string;\n children?: ITreeNodeItem[];\n /** Hint that the node is expandable even before its children are loaded. */\n hasChildren?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n nodeIcon?: { opened?: string; closed?: string };\n listIcon?: string;\n data: ITreeNodeItem[];\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (expanded: string[]) => void;\n selected?: string[];\n defaultSelected?: string[];\n /** Reports the full selection plus, for user toggles, the node that just changed. */\n onSelectedChange?: (selected: string[], changed?: { id: string; selected: boolean }) => void;\n selectable?: boolean;\n checkboxes?: boolean;\n renderLabel?: (item: ITreeNodeItem, nodeId: string) => JSX.Element;\n loadChildren?: (item: ITreeNodeItem, nodeId: string) => Promise<ITreeNodeItem[]>;\n /** Test id of the root `<div>`; `tree-view` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface TreeContextValue {\n expandedIds: Accessor<string[]>;\n selectedIds: Accessor<string[]>;\n loadedChildren: Accessor<Record<string, ITreeNodeItem[]>>;\n loadingIds: Accessor<string[]>;\n toggleExpanded: (id: string) => void;\n setOpen: (id: string, open: boolean) => void;\n toggleSelected: (id: string) => void;\n ensureLoaded: (item: ITreeNodeItem, nodeId: string) => void;\n selectable: boolean;\n checkboxes: boolean;\n nodeIcon: { opened?: string; closed?: string };\n listIcon: string;\n renderLabel: ((item: ITreeNodeItem, nodeId: string) => JSX.Element) | undefined;\n hasLoader: boolean;\n}\n\nconst TreeContext = createContext<TreeContextValue>();\n\nfunction TreeNode(props: { item: ITreeNodeItem; path: string }): JSX.Element {\n const ctx = useContext(TreeContext)!;\n const nodeId = (): string => props.item.id ?? props.path;\n const resolvedChildren = (): ITreeNodeItem[] | undefined => props.item.children ?? ctx.loadedChildren()[nodeId()];\n const isLazy = (): boolean => ctx.hasLoader && (!!props.item.hasChildren || !!ctx.loadedChildren()[nodeId()]);\n const hasChildNodes = (): boolean => (!!resolvedChildren() && (resolvedChildren()?.length ?? 0) > 0) || isLazy();\n const isOpen = (): boolean => ctx.expandedIds().includes(nodeId());\n const isSelected = (): boolean => ctx.selectedIds().includes(nodeId());\n const isLoading = (): boolean => ctx.loadingIds().includes(nodeId());\n\n const onLabelClick = (): void => {\n if (hasChildNodes()) {\n if (!isOpen()) ctx.ensureLoaded(props.item, nodeId());\n ctx.toggleExpanded(nodeId());\n }\n if (ctx.selectable) ctx.toggleSelected(nodeId());\n };\n\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onLabelClick();\n } else if (event.key === \"ArrowRight\" && hasChildNodes()) {\n ctx.ensureLoaded(props.item, nodeId());\n ctx.setOpen(nodeId(), true);\n } else if (event.key === \"ArrowLeft\" && hasChildNodes()) {\n ctx.setOpen(nodeId(), false);\n }\n };\n\n return (\n <div\n class={cn(\"smwb-tree__node\", { \"smwb-tree__node_selected\": isSelected() })}\n role=\"treeitem\"\n aria-expanded={hasChildNodes() ? isOpen() : undefined}\n aria-selected={ctx.selectable || ctx.checkboxes ? isSelected() : undefined}\n >\n <span class=\"smwb-tree__node__content\" onClick={onLabelClick} onKeyDown={onKeyDown} tabindex={0} role=\"button\">\n <Show when={ctx.checkboxes}>\n <input\n type=\"checkbox\"\n class=\"smwb-tree__node__checkbox\"\n checked={isSelected()}\n onClick={(e) => e.stopPropagation()}\n onChange={() => ctx.toggleSelected(nodeId())}\n aria-label={props.item.label}\n />\n </Show>\n <span class=\"smwb-tree__node__label\">\n <Show when={hasChildNodes()} fallback={<Icon name={ctx.listIcon} size={20} />}>\n <Icon name={isOpen() ? ctx.nodeIcon.opened ?? \"folder_open\" : ctx.nodeIcon.closed ?? \"folder\"} fill={1} size={20} />\n </Show>\n {ctx.renderLabel ? ctx.renderLabel(props.item, nodeId()) : props.item.label}\n </span>\n </span>\n <Show when={hasChildNodes() && isOpen()}>\n <div role=\"group\">\n <Show\n when={!(isLoading() && !resolvedChildren())}\n fallback={\n <div class=\"smwb-tree__node__loading\" role=\"status\">\n Загрузка…\n </div>\n }\n >\n <For each={resolvedChildren() ?? []}>\n {(child, idx) => <TreeNode item={child} path={`${props.path}.${idx()}`} />}\n </For>\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport function TreeView(props: TreeViewProps): JSX.Element {\n const merged = mergeProps(\n {\n listIcon: \"draft\",\n nodeIcon: { closed: \"folder\", opened: \"folder_open\" } as { opened?: string; closed?: string },\n data: [] as ITreeNodeItem[],\n defaultExpanded: [] as string[],\n defaultSelected: [] as string[],\n selectable: false,\n checkboxes: false,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"listIcon\",\n \"nodeIcon\",\n \"data\",\n \"expanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"selected\",\n \"defaultSelected\",\n \"onSelectedChange\",\n \"selectable\",\n \"checkboxes\",\n \"renderLabel\",\n \"loadChildren\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [loadedChildren, setLoadedChildren] = createSignal<Record<string, ITreeNodeItem[]>>({});\n const [loadingIds, setLoadingIds] = createSignal<string[]>([]);\n const [expandedIds, setExpandedIds] = createControllableState<string[]>({\n value: () => local.expanded,\n defaultValue: local.defaultExpanded,\n onChange: (next) => local.onExpandedChange?.(next),\n });\n let lastToggled: { id: string; selected: boolean } | undefined;\n const [selectedIds, setSelectedIds] = createControllableState<string[]>({\n value: () => local.selected,\n defaultValue: local.defaultSelected,\n onChange: (next) => {\n // createControllableState calls onChange synchronously from the setter,\n // so lastToggled still refers to the toggle that caused this change.\n const changed = lastToggled;\n lastToggled = undefined;\n local.onSelectedChange?.(next, changed);\n },\n });\n\n const toggleExpanded = (id: string): void =>\n setExpandedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n\n const setOpen = (id: string, open: boolean): void =>\n setExpandedIds((prev) => {\n const has = prev.includes(id);\n if (open && !has) return [...prev, id];\n if (!open && has) return prev.filter((x) => x !== id);\n return prev;\n });\n\n const toggleSelected = (id: string): void => {\n lastToggled = { id, selected: !selectedIds().includes(id) };\n setSelectedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n };\n\n const ensureLoaded = (item: ITreeNodeItem, nodeId: string): void => {\n if (!local.loadChildren || loadedChildren()[nodeId] || (item.children && item.children.length > 0)) return;\n setLoadingIds((prev) => (prev.includes(nodeId) ? prev : [...prev, nodeId]));\n void local\n .loadChildren(item, nodeId)\n .then((children) => setLoadedChildren((prev) => ({ ...prev, [nodeId]: children })))\n .finally(() => setLoadingIds((prev) => prev.filter((x) => x !== nodeId)));\n };\n\n const contextValue: TreeContextValue = {\n expandedIds,\n selectedIds,\n loadedChildren,\n loadingIds,\n toggleExpanded,\n setOpen,\n toggleSelected,\n ensureLoaded,\n get selectable() {\n return local.selectable;\n },\n get checkboxes() {\n return local.checkboxes;\n },\n get nodeIcon() {\n return local.nodeIcon;\n },\n get listIcon() {\n return local.listIcon;\n },\n get renderLabel() {\n return local.renderLabel;\n },\n get hasLoader() {\n return !!local.loadChildren;\n },\n };\n\n return (\n <TreeContext.Provider value={contextValue}>\n <div\n {...rest}\n data-testid={local[\"data-testid\"] ?? \"tree-view\"}\n ref={mergeRefs(local.ref)}\n role=\"tree\"\n class={cn(\"smwb-tree\", local.class)}\n >\n <For each={local.data}>\n {(node, idx) => (\n <div class=\"smwb-tree__wrapper\" role=\"presentation\">\n <TreeNode item={node} path={`${idx()}`} />\n </div>\n )}\n </For>\n </div>\n </TreeContext.Provider>\n );\n}\n\nexport default TreeView;\n"],"names":["TreeContext","createContext","TreeNode","props","ctx","useContext","nodeId","item","id","path","resolvedChildren","children","loadedChildren","isLazy","hasLoader","hasChildren","hasChildNodes","length","isOpen","expandedIds","includes","isSelected","selectedIds","isLoading","loadingIds","onLabelClick","ensureLoaded","toggleExpanded","selectable","toggleSelected","onKeyDown","event","key","preventDefault","setOpen","_el$","_tmpl$3","_el$2","firstChild","_el$4","$$keydown","$$click","_$insert","_$createComponent","Show","when","checkboxes","_el$3","_tmpl$","addEventListener","e","stopPropagation","_$effect","_$setAttribute","label","checked","fallback","Icon","name","listIcon","size","_$memo","nodeIcon","opened","closed","fill","_c$","renderLabel","_el$5","_tmpl$2","_tmpl$4","For","each","child","idx","_p$","_v$","cn","_v$2","undefined","_v$3","_$className","t","a","TreeView","merged","mergeProps","data","defaultExpanded","defaultSelected","local","rest","splitProps","setLoadedChildren","createSignal","setLoadingIds","setExpandedIds","createControllableState","value","expanded","defaultValue","onChange","next","onExpandedChange","lastToggled","setSelectedIds","selected","changed","onSelectedChange","contextValue","prev","filter","x","open","has","loadChildren","then","finally","Provider","_el$7","_tmpl$5","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","class","node","_el$8","_tmpl$6","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"treeView.js","sources":["../../../../../src/components/dataDisplay/treeView/treeView.tsx"],"sourcesContent":["import {\n type Accessor,\n type JSX,\n For,\n Show,\n createContext,\n createMemo,\n createSignal,\n createUniqueId,\n mergeProps,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { isOwnClick } from \"../../../utils/ownClick\";\n\nexport interface ITreeNodeItem {\n /** Stable identifier. Falls back to the positional path when omitted. */\n id?: string;\n label: string;\n children?: ITreeNodeItem[];\n /** Hint that the node is expandable even before its children are loaded. */\n hasChildren?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n nodeIcon?: { opened?: string; closed?: string };\n listIcon?: string;\n data: ITreeNodeItem[];\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (expanded: string[]) => void;\n selected?: string[];\n defaultSelected?: string[];\n /** Reports the full selection plus, for user toggles, the node that just changed. */\n onSelectedChange?: (selected: string[], changed?: { id: string; selected: boolean }) => void;\n /**\n * Enables row selection: a click, Enter or Space on a row toggles its selection. The chevron and the\n * Left/Right keys never change it.\n */\n selectable?: boolean;\n /** Renders a checkbox per node bound to selection. */\n checkboxes?: boolean;\n /**\n * Whether a click, Enter or Space on a row also expands or collapses its children. The chevron and the\n * Right/Left keys always do. Defaults to `true` while the tree is not `selectable` (a row has nothing else to\n * do) and to `false` otherwise, so that selecting a row leaves it open or closed.\n */\n toggleOnRowClick?: boolean;\n /** Custom node renderer. */\n renderLabel?: (item: ITreeNodeItem, nodeId: string) => JSX.Element;\n /**\n * Per-node actions (buttons, a menu trigger), drawn at the end of the row. They sit beside the row's\n * button, not inside it, so they take their own clicks, Enter and Space, focus and accessible names.\n */\n renderActions?: (item: ITreeNodeItem, nodeId: string) => JSX.Element;\n /** Text shown while `loadChildren` is pending; \"Loading…\" unless given. */\n loadingText?: string;\n /** Lazily resolves children the first time a node is expanded. */\n loadChildren?: (item: ITreeNodeItem, nodeId: string) => Promise<ITreeNodeItem[]>;\n /** Test id of the root `<div>`; `tree-view` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface TreeContextValue {\n expandedIds: Accessor<string[]>;\n selectedIds: Accessor<string[]>;\n loadedChildren: Accessor<Record<string, ITreeNodeItem[]>>;\n loadingIds: Accessor<string[]>;\n toggleExpanded: (id: string) => void;\n setOpen: (id: string, open: boolean) => void;\n toggleSelected: (id: string) => void;\n ensureLoaded: (item: ITreeNodeItem, nodeId: string) => void;\n selectable: boolean;\n checkboxes: boolean;\n toggleOnRowClick: boolean;\n loadingText: string;\n nodeIcon: { opened?: string; closed?: string };\n listIcon: string;\n renderLabel: ((item: ITreeNodeItem, nodeId: string) => JSX.Element) | undefined;\n renderActions: ((item: ITreeNodeItem, nodeId: string) => JSX.Element) | undefined;\n hasLoader: boolean;\n}\n\nconst TreeContext = createContext<TreeContextValue>();\n\ninterface TreeEntry {\n id: string;\n item: ITreeNodeItem;\n path: string;\n}\n\n/**\n * Whether two items are the same as far as a row's own markup goes. A caller that refetches hands the tree\n * brand-new objects for the same nodes, and comparing those by identity would rebuild the `renderLabel` /\n * `renderActions` output on every refetch: Solid replaces a dynamic child, so the elements the caller drew\n * (and the focus in them, an open menu anchored to one, a caret) would be thrown away while the row around\n * them survives. Children are compared one level deep — a row draws that it has them, not their subtrees.\n */\nfunction sameItem(a: ITreeNodeItem, b: ITreeNodeItem): boolean {\n if (a === b) return true;\n if (a.id !== b.id || a.label !== b.label || a.hasChildren !== b.hasChildren) return false;\n const left = a.children;\n const right = b.children;\n if (left === right) return true;\n if (!left || !right || left.length !== right.length) return false;\n return left.every((child, idx) => {\n const other = right[idx];\n return !!other && child.id === other.id && child.label === other.label && child.hasChildren === other.hasChildren;\n });\n}\n\n/**\n * The rows of one level, keyed by node id. `For` keys by reference, so it would rebuild every row (and drop\n * the focus in it) whenever the caller hands in new objects for the same nodes. It is given the ids instead:\n * equal strings are the same row, and a row reads its item from the current data.\n */\nfunction TreeNodes(props: { items: ITreeNodeItem[]; path: string; wrap?: boolean }): JSX.Element {\n const entries = createMemo<TreeEntry[]>(() =>\n props.items.map((item, idx) => {\n const path = props.path === \"\" ? `${idx}` : `${props.path}.${idx}`;\n return { id: item.id ?? path, item, path };\n })\n );\n const byId = createMemo(() => new Map(entries().map((entry) => [entry.id, entry])));\n const ids = createMemo(() => entries().map((entry) => entry.id));\n\n return (\n <For each={ids()}>\n {(id) => {\n // A removed row is disposed after the lookup recomputes, so keep the last entry for that pass.\n let last = byId().get(id)!;\n const entry = (): TreeEntry => (last = byId().get(id) ?? last);\n return props.wrap ? (\n <div class=\"smwb-tree__wrapper\" role=\"presentation\">\n <TreeNode entry={entry} />\n </div>\n ) : (\n <TreeNode entry={entry} />\n );\n }}\n </For>\n );\n}\n\nfunction TreeNode(props: { entry: Accessor<TreeEntry> }): JSX.Element {\n const ctx = useContext(TreeContext)!;\n // The id is the row's identity and never changes while the row lives.\n const nodeId = props.entry().id;\n const item = (): ITreeNodeItem => props.entry().item;\n // Names the treeitem: its own content would drag the actions and the checkbox into the node's name.\n const labelId = `${createUniqueId()}-label`;\n // What the caller's renderers see. Held by value, not by identity, so a refetch that hands in new\n // objects for the same nodes does not rebuild the slots below (see sameItem).\n const slotItem = createMemo(() => item(), undefined, { equals: sameItem });\n const labelSlot = createMemo<JSX.Element>(() =>\n ctx.renderLabel ? ctx.renderLabel(slotItem(), nodeId) : slotItem().label\n );\n const resolvedChildren = (): ITreeNodeItem[] | undefined => item().children ?? ctx.loadedChildren()[nodeId];\n const isLazy = (): boolean => ctx.hasLoader && (!!item().hasChildren || !!ctx.loadedChildren()[nodeId]);\n const hasChildNodes = (): boolean => (!!resolvedChildren() && (resolvedChildren()?.length ?? 0) > 0) || isLazy();\n const isOpen = (): boolean => ctx.expandedIds().includes(nodeId);\n const isSelected = (): boolean => ctx.selectedIds().includes(nodeId);\n const isLoading = (): boolean => ctx.loadingIds().includes(nodeId);\n\n const toggleNode = (): void => {\n if (!isOpen()) ctx.ensureLoaded(item(), nodeId);\n ctx.toggleExpanded(nodeId);\n };\n\n const activateRow = (): void => {\n if (ctx.toggleOnRowClick && hasChildNodes()) toggleNode();\n if (ctx.selectable) ctx.toggleSelected(nodeId);\n };\n\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n // Keys from controls a custom label draws are theirs.\n if (event.target !== event.currentTarget) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n activateRow();\n } else if (event.key === \"ArrowRight\" && hasChildNodes()) {\n ctx.ensureLoaded(item(), nodeId);\n ctx.setOpen(nodeId, true);\n } else if (event.key === \"ArrowLeft\" && hasChildNodes()) {\n ctx.setOpen(nodeId, false);\n }\n };\n\n const onContentClick: JSX.EventHandler<HTMLSpanElement, MouseEvent> = (event) => {\n if (isOwnClick(event)) activateRow();\n };\n\n return (\n <div\n class={cn(\"smwb-tree__node\", { \"smwb-tree__node_selected\": isSelected() })}\n role=\"treeitem\"\n aria-labelledby={labelId}\n aria-expanded={hasChildNodes() ? isOpen() : undefined}\n aria-selected={ctx.selectable || ctx.checkboxes ? isSelected() : undefined}\n >\n <div class=\"smwb-tree__node__row\">\n {/*\n A pointer shortcut: the keyboard expands with ArrowRight/ArrowLeft on the row, so the chevron is\n decorative, unnamed and no Tab stop. If it ever becomes a real <button>, `aria-hidden` must go with\n it (a focusable element inside `aria-hidden` is an ARIA violation) and it then needs a name plus\n `aria-expanded`.\n */}\n <span class=\"smwb-tree__node__toggle\" aria-hidden=\"true\" onClick={() => hasChildNodes() && toggleNode()}>\n <Show when={hasChildNodes()}>\n <Icon name={isOpen() ? \"expand_more\" : \"chevron_right\"} size={20} />\n </Show>\n </span>\n <Show when={ctx.checkboxes}>\n <input\n type=\"checkbox\"\n class=\"smwb-tree__node__checkbox\"\n checked={isSelected()}\n onChange={() => ctx.toggleSelected(nodeId)}\n aria-label={item().label}\n />\n </Show>\n <span class=\"smwb-tree__node__content\" onClick={onContentClick} onKeyDown={onKeyDown} tabindex={0} role=\"button\">\n <span class=\"smwb-tree__node__label\" id={labelId}>\n <Show when={hasChildNodes()} fallback={<Icon name={ctx.listIcon} size={20} />}>\n <Icon name={isOpen() ? ctx.nodeIcon.opened ?? \"folder_open\" : ctx.nodeIcon.closed ?? \"folder\"} fill={1} size={20} />\n </Show>\n {labelSlot()}\n </span>\n </span>\n <Show when={ctx.renderActions}>\n {(renderActions) => {\n // Created inside the branch that draws it, so SSR and hydration agree on which keys exist.\n const actionsSlot = createMemo<JSX.Element>(() => renderActions()(slotItem(), nodeId));\n return <span class=\"smwb-tree__node__actions\">{actionsSlot()}</span>;\n }}\n </Show>\n </div>\n <Show when={hasChildNodes() && isOpen()}>\n <div role=\"group\">\n <Show\n when={!(isLoading() && !resolvedChildren())}\n fallback={\n <div class=\"smwb-tree__node__loading\" role=\"status\">\n {ctx.loadingText}\n </div>\n }\n >\n <TreeNodes items={resolvedChildren() ?? []} path={props.entry().path} />\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport function TreeView(props: TreeViewProps): JSX.Element {\n const merged = mergeProps(\n {\n listIcon: \"draft\",\n nodeIcon: { closed: \"folder\", opened: \"folder_open\" } as { opened?: string; closed?: string },\n data: [] as ITreeNodeItem[],\n defaultExpanded: [] as string[],\n defaultSelected: [] as string[],\n selectable: false,\n checkboxes: false,\n loadingText: \"Loading…\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"listIcon\",\n \"nodeIcon\",\n \"data\",\n \"expanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"selected\",\n \"defaultSelected\",\n \"onSelectedChange\",\n \"selectable\",\n \"checkboxes\",\n \"toggleOnRowClick\",\n \"renderLabel\",\n \"renderActions\",\n \"loadingText\",\n \"loadChildren\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [loadedChildren, setLoadedChildren] = createSignal<Record<string, ITreeNodeItem[]>>({});\n const [loadingIds, setLoadingIds] = createSignal<string[]>([]);\n const [expandedIds, setExpandedIds] = createControllableState<string[]>({\n value: () => local.expanded,\n defaultValue: local.defaultExpanded,\n onChange: (next) => local.onExpandedChange?.(next),\n });\n let lastToggled: { id: string; selected: boolean } | undefined;\n const [selectedIds, setSelectedIds] = createControllableState<string[]>({\n value: () => local.selected,\n defaultValue: local.defaultSelected,\n onChange: (next) => {\n // createControllableState calls onChange synchronously from the setter,\n // so lastToggled still refers to the toggle that caused this change.\n const changed = lastToggled;\n lastToggled = undefined;\n local.onSelectedChange?.(next, changed);\n },\n });\n\n const toggleExpanded = (id: string): void =>\n setExpandedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n\n const setOpen = (id: string, open: boolean): void =>\n setExpandedIds((prev) => {\n const has = prev.includes(id);\n if (open && !has) return [...prev, id];\n if (!open && has) return prev.filter((x) => x !== id);\n return prev;\n });\n\n const toggleSelected = (id: string): void => {\n lastToggled = { id, selected: !selectedIds().includes(id) };\n setSelectedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n };\n\n const ensureLoaded = (item: ITreeNodeItem, nodeId: string): void => {\n if (!local.loadChildren || loadedChildren()[nodeId] || (item.children && item.children.length > 0)) return;\n setLoadingIds((prev) => (prev.includes(nodeId) ? prev : [...prev, nodeId]));\n void local\n .loadChildren(item, nodeId)\n .then((children) => setLoadedChildren((prev) => ({ ...prev, [nodeId]: children })))\n .finally(() => setLoadingIds((prev) => prev.filter((x) => x !== nodeId)));\n };\n\n const contextValue: TreeContextValue = {\n expandedIds,\n selectedIds,\n loadedChildren,\n loadingIds,\n toggleExpanded,\n setOpen,\n toggleSelected,\n ensureLoaded,\n get selectable() {\n return local.selectable;\n },\n get checkboxes() {\n return local.checkboxes;\n },\n get toggleOnRowClick() {\n return local.toggleOnRowClick ?? !local.selectable;\n },\n get loadingText() {\n return local.loadingText;\n },\n get nodeIcon() {\n return local.nodeIcon;\n },\n get listIcon() {\n return local.listIcon;\n },\n get renderLabel() {\n return local.renderLabel;\n },\n get renderActions() {\n return local.renderActions;\n },\n get hasLoader() {\n return !!local.loadChildren;\n },\n };\n\n return (\n <TreeContext.Provider value={contextValue}>\n <div\n {...rest}\n data-testid={local[\"data-testid\"] ?? \"tree-view\"}\n ref={mergeRefs(local.ref)}\n role=\"tree\"\n class={cn(\"smwb-tree\", local.class)}\n >\n <TreeNodes items={local.data} path=\"\" wrap />\n </div>\n </TreeContext.Provider>\n );\n}\n\nexport default TreeView;\n"],"names":["TreeContext","createContext","sameItem","a","b","id","label","hasChildren","left","children","right","length","every","child","idx","other","TreeNodes","props","entries","createMemo","items","map","item","path","byId","Map","entry","ids","_$createComponent","For","each","last","get","wrap","_el$","_tmpl$","_$insert","TreeNode","ctx","useContext","nodeId","labelId","createUniqueId","slotItem","undefined","equals","labelSlot","renderLabel","resolvedChildren","loadedChildren","isLazy","hasLoader","hasChildNodes","isOpen","expandedIds","includes","isSelected","selectedIds","isLoading","loadingIds","toggleNode","ensureLoaded","toggleExpanded","activateRow","toggleOnRowClick","selectable","toggleSelected","onKeyDown","event","target","currentTarget","key","preventDefault","setOpen","onContentClick","isOwnClick","_el$2","_tmpl$4","_el$3","firstChild","_el$4","_el$6","nextSibling","_el$7","_$setAttribute","$$click","Show","when","Icon","name","size","checkboxes","_el$5","_tmpl$2","addEventListener","_$effect","checked","$$keydown","fallback","listIcon","_$memo","nodeIcon","opened","closed","fill","renderActions","actionsSlot","_el$9","_tmpl$5","_el$8","_tmpl$3","_el$0","_tmpl$6","loadingText","_p$","_v$","cn","_v$2","_v$3","e","_$className","t","TreeView","merged","mergeProps","data","defaultExpanded","defaultSelected","local","rest","splitProps","setLoadedChildren","createSignal","setLoadingIds","setExpandedIds","createControllableState","value","expanded","defaultValue","onChange","next","onExpandedChange","lastToggled","setSelectedIds","selected","changed","onSelectedChange","contextValue","prev","filter","x","open","has","loadChildren","then","finally","Provider","_el$1","_tmpl$7","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","class","_$delegateEvents"],"mappings":"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"}
|