@smwb/ui-solid 0.13.0 → 1.0.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
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { isServer as Se, use as C, spread as Re, mergeProps as Ae, insert as c, createComponent as b, effect as S, setAttribute as i, memo as Ce, className as oe, setStyleProperty as ae, template as f, delegateEvents as Oe } from "solid-js/web";
|
|
2
|
+
import { mergeProps as Te, splitProps as $e, untrack as re, createSignal as Pe, createEffect as Fe, onMount as ke, children as ne, Show as p } from "solid-js";
|
|
3
|
+
import O from "clsx";
|
|
4
|
+
import { callHandler as g } from "../../../primitives/callHandler.js";
|
|
5
|
+
import { createControllableState as Ee } from "../../../primitives/createControllableState.js";
|
|
6
|
+
import { createDropzone as Ie } from "../../../primitives/createDropzone.js";
|
|
7
|
+
import { createId as Ke } from "../../../primitives/createId.js";
|
|
8
|
+
import { mergeRefs as se } from "../../../primitives/mergeRefs.js";
|
|
9
|
+
import { isFileDrag as ie, filterAttachedFiles as Be } from "./composerFiles.js";
|
|
10
|
+
import { resolveComposerKeyAction as Me } from "./composerKeys.js";
|
|
11
|
+
import { Icon as le } from "../../base/icon/icon.js";
|
|
12
|
+
var Ve = /* @__PURE__ */ f("<div class=smwb-composer__attachments data-testid=composer-attachments>"), ze = /* @__PURE__ */ f('<button type=button class="smwb-composer__icon-button smwb-composer__attach"data-testid=composer-attach>'), Ne = /* @__PURE__ */ f("<div class=smwb-composer__toolbar data-testid=composer-toolbar>"), je = /* @__PURE__ */ f("<span data-testid=composer-counter>"), He = /* @__PURE__ */ f("<span class=smwb-composer__status role=status data-testid=composer-status>"), We = /* @__PURE__ */ f("<input type=file data-testid=composer-file-input style=display:none>"), qe = /* @__PURE__ */ f("<div><div class=smwb-composer__field><textarea class=smwb-composer__input data-testid=composer-input></textarea></div><button type=button data-testid=composer-action>");
|
|
13
|
+
const Ge = (l) => l >= 0 ? `${l} characters left` : `${-l} characters over the limit`;
|
|
14
|
+
function Je(l) {
|
|
15
|
+
l.preventDefault();
|
|
16
|
+
}
|
|
17
|
+
function T(l) {
|
|
18
|
+
return Array.isArray(l) ? l.some(T) : l != null && typeof l != "boolean" && l !== "";
|
|
19
|
+
}
|
|
20
|
+
function st(l) {
|
|
21
|
+
const ce = Te({
|
|
22
|
+
sendKey: "modEnter",
|
|
23
|
+
clearOnSend: !0,
|
|
24
|
+
busy: !1,
|
|
25
|
+
counterAnnouncement: Ge,
|
|
26
|
+
minRows: 1,
|
|
27
|
+
maxRows: 8,
|
|
28
|
+
layout: "stacked",
|
|
29
|
+
multiple: !0,
|
|
30
|
+
disabled: !1,
|
|
31
|
+
readOnly: !1,
|
|
32
|
+
sendLabel: "Send",
|
|
33
|
+
stopLabel: "Stop",
|
|
34
|
+
attachLabel: "Attach file"
|
|
35
|
+
}, l), [t, de] = $e(ce, [
|
|
36
|
+
"value",
|
|
37
|
+
"defaultValue",
|
|
38
|
+
"onValueChange",
|
|
39
|
+
"onSend",
|
|
40
|
+
"sendKey",
|
|
41
|
+
"clearOnSend",
|
|
42
|
+
"busy",
|
|
43
|
+
"onStop",
|
|
44
|
+
"placeholder",
|
|
45
|
+
"maxLength",
|
|
46
|
+
"counter",
|
|
47
|
+
"counterAnnouncement",
|
|
48
|
+
"minRows",
|
|
49
|
+
"maxRows",
|
|
50
|
+
"layout",
|
|
51
|
+
"toolbar",
|
|
52
|
+
"attachments",
|
|
53
|
+
"onAttach",
|
|
54
|
+
"accept",
|
|
55
|
+
"multiple",
|
|
56
|
+
"maxFiles",
|
|
57
|
+
"dropTarget",
|
|
58
|
+
"disabled",
|
|
59
|
+
"readOnly",
|
|
60
|
+
"autofocus",
|
|
61
|
+
"name",
|
|
62
|
+
"id",
|
|
63
|
+
"aria-label",
|
|
64
|
+
"aria-labelledby",
|
|
65
|
+
"aria-describedby",
|
|
66
|
+
"onKeyDown",
|
|
67
|
+
"onFocus",
|
|
68
|
+
"onBlur",
|
|
69
|
+
"inputRef",
|
|
70
|
+
"sendLabel",
|
|
71
|
+
"stopLabel",
|
|
72
|
+
"attachLabel",
|
|
73
|
+
"class",
|
|
74
|
+
"data-testid",
|
|
75
|
+
"ref",
|
|
76
|
+
// The root sets these too; its own handlers call the caller's first.
|
|
77
|
+
"onDragOver",
|
|
78
|
+
"onDragLeave",
|
|
79
|
+
"onDrop"
|
|
80
|
+
]), [d, $] = Ee({
|
|
81
|
+
value: () => t.value,
|
|
82
|
+
defaultValue: re(() => t.defaultValue) ?? "",
|
|
83
|
+
onChange: (o) => t.onValueChange?.(o)
|
|
84
|
+
}), [ue, P] = Pe(!1), me = Ke(void 0, "smwb-composer"), F = () => t.id ?? me, k = () => `${F()}-counter`;
|
|
85
|
+
let h;
|
|
86
|
+
const v = Ie({
|
|
87
|
+
get accept() {
|
|
88
|
+
return t.accept;
|
|
89
|
+
},
|
|
90
|
+
get multiple() {
|
|
91
|
+
return t.multiple;
|
|
92
|
+
},
|
|
93
|
+
get disabled() {
|
|
94
|
+
return t.disabled;
|
|
95
|
+
},
|
|
96
|
+
// `maxFiles` is not passed on: the cut has to come after `accept`, see `filterAttachedFiles`.
|
|
97
|
+
onDrop: (o) => {
|
|
98
|
+
const n = Be(o, {
|
|
99
|
+
accept: t.accept,
|
|
100
|
+
multiple: t.multiple,
|
|
101
|
+
maxFiles: t.maxFiles
|
|
102
|
+
});
|
|
103
|
+
n.length > 0 && t.onAttach?.(n);
|
|
104
|
+
}
|
|
105
|
+
}), R = () => t.onAttach !== void 0, x = () => R() && t.dropTarget !== !1, _ = () => v.getInputProps(), D = () => t.counter ?? t.maxLength !== void 0, L = () => t.maxLength !== void 0 && d().length > t.maxLength, E = () => !!t.onSend && d().trim() !== "" && !t.disabled && !t.readOnly && !t.busy && !L(), ve = () => {
|
|
106
|
+
const o = t.maxLength;
|
|
107
|
+
if (!D() || o === void 0) return "";
|
|
108
|
+
const n = o - d().length;
|
|
109
|
+
return n <= Math.max(10, Math.ceil(o * 0.1)) ? t.counterAnnouncement(n, o) : "";
|
|
110
|
+
}, A = re(d), be = Se && A.startsWith(`
|
|
111
|
+
`) ? `
|
|
112
|
+
${A}` : A;
|
|
113
|
+
Fe(() => {
|
|
114
|
+
const o = d();
|
|
115
|
+
h && h.value !== o && (h.value = o);
|
|
116
|
+
});
|
|
117
|
+
const I = () => {
|
|
118
|
+
E() && (t.onSend?.(d().trim()), t.clearOnSend && $(""));
|
|
119
|
+
}, fe = (o) => {
|
|
120
|
+
const n = o.currentTarget;
|
|
121
|
+
$(n.value), n.value !== d() && (n.value = d());
|
|
122
|
+
}, pe = (o) => {
|
|
123
|
+
g(t.onKeyDown, o), !(o.defaultPrevented || Me(o, t.sendKey) === "native") && (o.preventDefault(), I());
|
|
124
|
+
}, ge = (o) => {
|
|
125
|
+
g(t.onFocus, o), P(!0);
|
|
126
|
+
}, he = (o) => {
|
|
127
|
+
g(t.onBlur, o), P(!1);
|
|
128
|
+
}, we = (o) => {
|
|
129
|
+
if (!(o.detail > 1)) {
|
|
130
|
+
if (t.busy) {
|
|
131
|
+
t.disabled || t.onStop?.();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
I();
|
|
135
|
+
}
|
|
136
|
+
}, ye = (o) => {
|
|
137
|
+
g(t.onDragOver, o), x() && ie(o.dataTransfer) && v.getRootProps().onDragOver(o);
|
|
138
|
+
}, xe = (o) => {
|
|
139
|
+
g(t.onDragLeave, o), x() && (o.relatedTarget instanceof Node && o.currentTarget.contains(o.relatedTarget) || v.getRootProps().onDragLeave());
|
|
140
|
+
}, _e = (o) => {
|
|
141
|
+
g(t.onDrop, o), x() && ie(o.dataTransfer) && v.getRootProps().onDrop(o);
|
|
142
|
+
}, De = (o) => {
|
|
143
|
+
_().onChange(o), o.currentTarget.value = "";
|
|
144
|
+
};
|
|
145
|
+
ke(() => {
|
|
146
|
+
t.autofocus && h?.focus();
|
|
147
|
+
});
|
|
148
|
+
const K = ne(() => t.toolbar), B = ne(() => t.attachments), Le = () => [t["aria-describedby"], D() ? k() : void 0].filter(Boolean).join(" ") || void 0;
|
|
149
|
+
return (() => {
|
|
150
|
+
var o = qe(), n = o.firstChild, r = n.firstChild, u = n.nextSibling, M = se(t.ref);
|
|
151
|
+
typeof M == "function" && C(M, o), Re(o, Ae(de, {
|
|
152
|
+
get class() {
|
|
153
|
+
return O("smwb-composer", `smwb-composer_${t.layout}`, ue() && "smwb-composer_focused", t.busy && "smwb-composer_busy", t.disabled && "smwb-composer_disabled", x() && v.isDragActive() && "smwb-composer_drag-active", L() && "smwb-composer_over-limit", t.class);
|
|
154
|
+
},
|
|
155
|
+
get "data-testid"() {
|
|
156
|
+
return t["data-testid"] ?? "composer";
|
|
157
|
+
},
|
|
158
|
+
onDragOver: ye,
|
|
159
|
+
onDragLeave: xe,
|
|
160
|
+
onDrop: _e
|
|
161
|
+
}), !1, !0), c(o, b(p, {
|
|
162
|
+
get when() {
|
|
163
|
+
return T(B());
|
|
164
|
+
},
|
|
165
|
+
get children() {
|
|
166
|
+
var e = Ve();
|
|
167
|
+
return c(e, B), e;
|
|
168
|
+
}
|
|
169
|
+
}), n), r.addEventListener("blur", he), r.addEventListener("focus", ge), r.$$keydown = pe, r.$$input = fe;
|
|
170
|
+
var V = se(t.inputRef, (e) => h = e);
|
|
171
|
+
return typeof V == "function" && C(V, r), c(r, be), c(o, b(p, {
|
|
172
|
+
get when() {
|
|
173
|
+
return R();
|
|
174
|
+
},
|
|
175
|
+
get children() {
|
|
176
|
+
var e = ze();
|
|
177
|
+
return e.$$click = () => v.open(), c(e, b(le, {
|
|
178
|
+
name: "attach_file",
|
|
179
|
+
size: 20
|
|
180
|
+
})), S((a) => {
|
|
181
|
+
var s = t.attachLabel, m = t.disabled;
|
|
182
|
+
return s !== a.e && i(e, "aria-label", a.e = s), m !== a.t && (e.disabled = a.t = m), a;
|
|
183
|
+
}, {
|
|
184
|
+
e: void 0,
|
|
185
|
+
t: void 0
|
|
186
|
+
}), e;
|
|
187
|
+
}
|
|
188
|
+
}), u), c(o, b(p, {
|
|
189
|
+
get when() {
|
|
190
|
+
return T(K());
|
|
191
|
+
},
|
|
192
|
+
get children() {
|
|
193
|
+
var e = Ne();
|
|
194
|
+
return c(e, K), e;
|
|
195
|
+
}
|
|
196
|
+
}), u), c(o, b(p, {
|
|
197
|
+
get when() {
|
|
198
|
+
return D();
|
|
199
|
+
},
|
|
200
|
+
get children() {
|
|
201
|
+
var e = je();
|
|
202
|
+
return c(e, (() => {
|
|
203
|
+
var a = Ce(() => t.maxLength !== void 0);
|
|
204
|
+
return () => a() ? `${d().length} / ${t.maxLength}` : d().length;
|
|
205
|
+
})()), S((a) => {
|
|
206
|
+
var s = k(), m = O("smwb-composer__counter", L() && "smwb-composer__counter_error");
|
|
207
|
+
return s !== a.e && i(e, "id", a.e = s), m !== a.t && oe(e, a.t = m), a;
|
|
208
|
+
}, {
|
|
209
|
+
e: void 0,
|
|
210
|
+
t: void 0
|
|
211
|
+
}), e;
|
|
212
|
+
}
|
|
213
|
+
}), u), u.$$click = we, u.$$mousedown = Je, c(u, b(le, {
|
|
214
|
+
get name() {
|
|
215
|
+
return t.busy ? "stop" : "send";
|
|
216
|
+
},
|
|
217
|
+
size: 20
|
|
218
|
+
})), c(o, b(p, {
|
|
219
|
+
get when() {
|
|
220
|
+
return D();
|
|
221
|
+
},
|
|
222
|
+
get children() {
|
|
223
|
+
var e = He();
|
|
224
|
+
return c(e, ve), e;
|
|
225
|
+
}
|
|
226
|
+
}), null), c(o, b(p, {
|
|
227
|
+
get when() {
|
|
228
|
+
return R();
|
|
229
|
+
},
|
|
230
|
+
get children() {
|
|
231
|
+
var e = We();
|
|
232
|
+
e.addEventListener("change", De);
|
|
233
|
+
var a = v.inputRef;
|
|
234
|
+
return typeof a == "function" ? C(a, e) : v.inputRef = e, S((s) => {
|
|
235
|
+
var m = _().multiple, w = _().accept, y = _().disabled;
|
|
236
|
+
return m !== s.e && (e.multiple = s.e = m), w !== s.t && i(e, "accept", s.t = w), y !== s.a && (e.disabled = s.a = y), s;
|
|
237
|
+
}, {
|
|
238
|
+
e: void 0,
|
|
239
|
+
t: void 0,
|
|
240
|
+
a: void 0
|
|
241
|
+
}), e;
|
|
242
|
+
}
|
|
243
|
+
}), null), S((e) => {
|
|
244
|
+
var a = d(), s = String(t.minRows), m = String(Math.max(t.maxRows, t.minRows)), w = F(), y = t.name, z = t.minRows, N = t.placeholder, j = t.maxLength, H = t.disabled, W = t.readOnly, q = t.autofocus, G = t["aria-label"], J = t["aria-labelledby"], Q = Le(), U = L() || void 0, X = O("smwb-composer__icon-button", "smwb-composer__action", t.busy && "smwb-composer__action_stop"), Y = t.busy ? t.stopLabel : t.sendLabel, Z = !t.busy && !E() ? "true" : void 0, ee = t.disabled, te = t.busy ? "stop" : "send";
|
|
245
|
+
return a !== e.e && i(n, "data-value", e.e = a), s !== e.t && ae(n, "--smwb-composer-min-rows", e.t = s), m !== e.a && ae(n, "--smwb-composer-max-rows", e.a = m), w !== e.o && i(r, "id", e.o = w), y !== e.i && i(r, "name", e.i = y), z !== e.n && i(r, "rows", e.n = z), N !== e.s && i(r, "placeholder", e.s = N), j !== e.h && i(r, "maxlength", e.h = j), H !== e.r && (r.disabled = e.r = H), W !== e.d && (r.readOnly = e.d = W), q !== e.l && (r.autofocus = e.l = q), G !== e.u && i(r, "aria-label", e.u = G), J !== e.c && i(r, "aria-labelledby", e.c = J), Q !== e.w && i(r, "aria-describedby", e.w = Q), U !== e.m && i(r, "aria-invalid", e.m = U), X !== e.f && oe(u, e.f = X), Y !== e.y && i(u, "aria-label", e.y = Y), Z !== e.g && i(u, "aria-disabled", e.g = Z), ee !== e.p && (u.disabled = e.p = ee), te !== e.b && i(u, "data-action", e.b = te), e;
|
|
246
|
+
}, {
|
|
247
|
+
e: void 0,
|
|
248
|
+
t: void 0,
|
|
249
|
+
a: void 0,
|
|
250
|
+
o: void 0,
|
|
251
|
+
i: void 0,
|
|
252
|
+
n: void 0,
|
|
253
|
+
s: void 0,
|
|
254
|
+
h: void 0,
|
|
255
|
+
r: void 0,
|
|
256
|
+
d: void 0,
|
|
257
|
+
l: void 0,
|
|
258
|
+
u: void 0,
|
|
259
|
+
c: void 0,
|
|
260
|
+
w: void 0,
|
|
261
|
+
m: void 0,
|
|
262
|
+
f: void 0,
|
|
263
|
+
y: void 0,
|
|
264
|
+
g: void 0,
|
|
265
|
+
p: void 0,
|
|
266
|
+
b: void 0
|
|
267
|
+
}), o;
|
|
268
|
+
})();
|
|
269
|
+
}
|
|
270
|
+
Oe(["input", "keydown", "click", "mousedown"]);
|
|
271
|
+
export {
|
|
272
|
+
st as Composer
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.js","sources":["../../../../../src/components/inputs/composer/composer.tsx"],"sourcesContent":["import {\n type JSX,\n Show,\n children,\n createEffect,\n createSignal,\n mergeProps,\n onMount,\n splitProps,\n untrack,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createDropzone } from \"../../../primitives/createDropzone\";\nimport { createId } from \"../../../primitives/createId\";\nimport { mergeRefs } from \"../../../primitives/mergeRefs\";\nimport { filterAttachedFiles, isFileDrag } from \"./composerFiles\";\nimport { resolveComposerKeyAction } from \"./composerKeys\";\nimport type { ComposerSendKey } from \"./composerKeys\";\n\n/** Where the toolbar and the action sit: under the field (`stacked`) or in one row with it (`inline`). */\nexport type ComposerLayout = \"stacked\" | \"inline\";\n\ntype TextareaKeyEvent = KeyboardEvent & { currentTarget: HTMLTextAreaElement; target: Element };\ntype TextareaFocusEvent = FocusEvent & { currentTarget: HTMLTextAreaElement; target: Element };\ntype RootDragEvent = DragEvent & { currentTarget: HTMLDivElement; target: Element };\n\nexport interface ComposerProps extends Omit<\n JSX.HTMLAttributes<HTMLDivElement>,\n \"onChange\" | \"defaultValue\" | \"onKeyDown\" | \"onFocus\" | \"onBlur\" | \"children\"\n> {\n /**\n * Controlled text. The composer is controlled while this is not `undefined` (checked reactively); a parent that\n * ignores `onValueChange` keeps the field showing this value.\n */\n value?: string | undefined;\n /** Initial text while uncontrolled. Defaults to an empty string. */\n defaultValue?: string | undefined;\n /** Called on every text change: typing, a newline, and the clear after a send. Called in both modes. */\n onValueChange?: ((value: string) => void) | undefined;\n /**\n * Called with the trimmed text when the user sends it: the send key (see `sendKey`) or a click on the action\n * button. Nothing is called while sending is not allowed: no `onSend`, an empty or whitespace-only text, `disabled`,\n * `readOnly`, `busy`, or a text over `maxLength`. Async work is shown with `busy`; the return value is ignored.\n */\n onSend?: ((text: string) => void) | undefined;\n /**\n * Which Enter sends. `\"modEnter\"` (default): Ctrl/⌘+Enter sends and Enter inserts a newline. `\"enter\"`: Enter sends,\n * Shift+Enter inserts a newline, Ctrl/⌘+Enter sends too. An Enter that commits an IME composition never sends.\n */\n sendKey?: ComposerSendKey | undefined;\n /**\n * Clear the text after `onSend`: the composer's own state while uncontrolled, `onValueChange(\"\")` while controlled.\n * Defaults to `true`.\n */\n clearOnSend?: boolean | undefined;\n /**\n * The agent is working: the action button turns into Stop and calls `onStop`, and the keys and the button do not\n * send. The text stays editable. The composer never changes `busy` itself, the parent owns it.\n */\n busy?: boolean | undefined;\n /**\n * Called when Stop is pressed (click, Enter or Space on the button) while `busy` and not `disabled`. Without it the\n * Stop button does nothing, so pass it whenever `busy` can be set.\n */\n onStop?: (() => void) | undefined;\n /** Placeholder of the textarea. It is not a name for the field, set `aria-label` or `aria-labelledby` as well. */\n placeholder?: string | undefined;\n /**\n * Hard limit on the text (the native `maxlength` of the textarea, counted in UTF-16 units, so an emoji is 2).\n * Turns the counter on.\n */\n maxLength?: number | undefined;\n /** Show the counter (`n / maxLength`, or `n` without `maxLength`). Defaults to `true` when `maxLength` is set. */\n counter?: boolean | undefined;\n /**\n * Text for the polite status region that announces how many characters are left. It is spoken only near the limit\n * (within the larger of 10 characters and 10% of `maxLength`) and when the text is over it, with a negative\n * `remaining`. Defaults to \"N characters left\" / \"N characters over the limit\".\n */\n counterAnnouncement?: ((remaining: number, maxLength: number) => string) | undefined;\n /** Height of the empty field in rows, and the `rows` of the textarea. Defaults to `1`. */\n minRows?: number | undefined;\n /** Rows the field grows to before it scrolls. Clamped to at least `minRows`. Defaults to `8`. */\n maxRows?: number | undefined;\n /**\n * `\"stacked\"` (default): the field on top, a bar under it with the attach button, the toolbar, the counter and the\n * action. `\"inline\"`: the attach button, the field, the counter and the action in one row, the toolbar (if any)\n * in a row under it.\n */\n layout?: ComposerLayout | undefined;\n /**\n * Slot under the field for chips and selectors (agent, model, mode, …). Drawn in every state. It is a plain `div`,\n * not `role=\"toolbar\"`: the content brings its own keyboard handling and disabled state.\n */\n toolbar?: JSX.Element;\n /**\n * Slot above the field for the app's file chips. The composer keeps no file state: the app lists what `onAttach`\n * gave it here.\n */\n attachments?: JSX.Element;\n /**\n * Turns on the attach button, the hidden file input and the drop target (the whole composer). Called with the files\n * of a pick or a drop that are left after `accept`, `multiple` and `maxFiles`, never with an empty list. Only a drag\n * of files is taken: dragged text or a link still goes into the field.\n */\n onAttach?: ((files: File[]) => void) | undefined;\n /**\n * Accepted file types, as a record of mime type to extensions or a raw `accept` string (`image/*`, `.pdf`, an exact\n * mime type). It sets the picker's filter, and the files of a pick or a drop that do not match are left out.\n */\n accept?: Record<string, string[]> | string | undefined;\n /** Allow several files per pick or drop. When `false` the picker takes one and a drop keeps the first. Defaults to `true`. */\n multiple?: boolean | undefined;\n /** Files beyond this number are dropped from a pick or a drop (counted after `accept`). */\n maxFiles?: number | undefined;\n /**\n * Whether `onAttach` also makes the composer a drop target for files. Set `false` when a parent already takes drops\n * (a chat panel): the attach button and the picker stay, and a drop on the composer bubbles to the parent untouched.\n * Defaults to `true`.\n */\n dropTarget?: boolean | undefined;\n /**\n * Disables the textarea, the attach button, the action button and the drop target. Toolbar content is the app's to\n * disable.\n */\n disabled?: boolean | undefined;\n /** The textarea is `readonly`: sending is unavailable, Stop still works. */\n readOnly?: boolean | undefined;\n /** Focus the textarea on mount. */\n autofocus?: boolean | undefined;\n /** Name of the textarea. */\n name?: string | undefined;\n /** Id of the textarea (the root keeps no id). Generated when not given. */\n id?: string | undefined;\n /** Accessible name of the textarea. Set this or `aria-labelledby`: a placeholder is not a name. */\n \"aria-label\"?: string | undefined;\n /** Id(s) of the element(s) that name the textarea. */\n \"aria-labelledby\"?: string | undefined;\n /** Id(s) that describe the textarea. They come first, the counter's id is appended. */\n \"aria-describedby\"?: string | undefined;\n /** Key handler of the textarea. It runs before the composer's own; if it calls `preventDefault()`, the composer does nothing for that key. */\n onKeyDown?: JSX.EventHandlerUnion<HTMLTextAreaElement, KeyboardEvent> | undefined;\n /** Focus handler of the textarea. */\n onFocus?: JSX.EventHandlerUnion<HTMLTextAreaElement, FocusEvent> | undefined;\n /** Blur handler of the textarea. */\n onBlur?: JSX.EventHandlerUnion<HTMLTextAreaElement, FocusEvent> | undefined;\n /** Ref of the textarea (the root takes the component's own `ref`). */\n inputRef?: ((el: HTMLTextAreaElement) => void) | undefined;\n /** Accessible name of the action button while it sends. Defaults to \"Send\". */\n sendLabel?: string | undefined;\n /** Accessible name of the action button while `busy`. Defaults to \"Stop\". */\n stopLabel?: string | undefined;\n /** Accessible name of the attach button. Defaults to \"Attach file\". */\n attachLabel?: string | undefined;\n /**\n * Class name(s) for the root `<div>`. `style`, `ref`, `data-*` attributes and every other HTML attribute or event\n * handler go to the root too; the root's drag handlers run after yours.\n */\n class?: string | undefined;\n /** Test id of the root `<div>`. Defaults to `composer`; the parts inside have their own (`composer-input`, `composer-action`, …). */\n \"data-testid\"?: string | undefined;\n}\n\nconst defaultCounterAnnouncement = (remaining: number): string =>\n remaining >= 0 ? `${remaining} characters left` : `${-remaining} characters over the limit`;\n\nfunction stopMouseDown(event: MouseEvent): void {\n // Keeps the focus in the textarea when the action button is clicked with a mouse.\n event.preventDefault();\n}\n\n// Whether a resolved slot draws anything.\nfunction isDrawn(resolved: unknown): boolean {\n if (Array.isArray(resolved)) return resolved.some(isDrawn);\n return resolved != null && typeof resolved !== \"boolean\" && resolved !== \"\";\n}\n\n/**\n * A task input: a multi-line field that grows from `minRows` to `maxRows`, a `toolbar` slot under it for chip\n * selectors, a send button that becomes Stop while `busy`, keyboard send (Ctrl/⌘+Enter by default), an optional\n * attach button and drop target, and a character counter.\n *\n * ```tsx\n * <Composer aria-label=\"Task for the agent\" onSend={(text) => run(text)} busy={running()} onStop={cancel} />\n * ```\n */\nexport function Composer(props: ComposerProps): JSX.Element {\n const merged = mergeProps(\n {\n sendKey: \"modEnter\" as ComposerSendKey,\n clearOnSend: true,\n busy: false,\n counterAnnouncement: defaultCounterAnnouncement as (remaining: number, maxLength: number) => string,\n minRows: 1,\n maxRows: 8,\n layout: \"stacked\" as ComposerLayout,\n multiple: true,\n disabled: false,\n readOnly: false,\n sendLabel: \"Send\",\n stopLabel: \"Stop\",\n attachLabel: \"Attach file\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"value\",\n \"defaultValue\",\n \"onValueChange\",\n \"onSend\",\n \"sendKey\",\n \"clearOnSend\",\n \"busy\",\n \"onStop\",\n \"placeholder\",\n \"maxLength\",\n \"counter\",\n \"counterAnnouncement\",\n \"minRows\",\n \"maxRows\",\n \"layout\",\n \"toolbar\",\n \"attachments\",\n \"onAttach\",\n \"accept\",\n \"multiple\",\n \"maxFiles\",\n \"dropTarget\",\n \"disabled\",\n \"readOnly\",\n \"autofocus\",\n \"name\",\n \"id\",\n \"aria-label\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"onKeyDown\",\n \"onFocus\",\n \"onBlur\",\n \"inputRef\",\n \"sendLabel\",\n \"stopLabel\",\n \"attachLabel\",\n \"class\",\n \"data-testid\",\n \"ref\",\n // The root sets these too; its own handlers call the caller's first.\n \"onDragOver\",\n \"onDragLeave\",\n \"onDrop\",\n ]);\n\n const [text, setText] = createControllableState<string>({\n value: () => local.value,\n defaultValue: untrack(() => local.defaultValue) ?? \"\",\n onChange: (next) => local.onValueChange?.(next),\n });\n const [focused, setFocused] = createSignal(false);\n // Generated once; a caller's id, which may come and go, takes precedence.\n const generatedId = createId(undefined, \"smwb-composer\");\n const textareaId = (): string => local.id ?? generatedId;\n const counterId = (): string => `${textareaId()}-counter`;\n let textareaEl: HTMLTextAreaElement | undefined;\n\n const dropzone = createDropzone({\n get accept() {\n return local.accept;\n },\n get multiple() {\n return local.multiple;\n },\n get disabled() {\n return local.disabled;\n },\n // `maxFiles` is not passed on: the cut has to come after `accept`, see `filterAttachedFiles`.\n onDrop: (files) => {\n const attached = filterAttachedFiles(files, {\n accept: local.accept,\n multiple: local.multiple,\n maxFiles: local.maxFiles,\n });\n if (attached.length > 0) local.onAttach?.(attached);\n },\n });\n const attachable = (): boolean => local.onAttach !== undefined;\n // `dropTarget={false}` keeps the attach button and the picker but hands drops to a parent that owns the target.\n // Compared to `false` and not falsy-checked: an explicit `undefined` must keep the default `true`.\n const dropping = (): boolean => attachable() && local.dropTarget !== false;\n const inputProps = () => dropzone.getInputProps();\n\n const showCounter = (): boolean => local.counter ?? local.maxLength !== undefined;\n const overLimit = (): boolean => local.maxLength !== undefined && text().length > local.maxLength;\n const canSend = (): boolean =>\n !!local.onSend && text().trim() !== \"\" && !local.disabled && !local.readOnly && !local.busy && !overLimit();\n\n const status = (): string => {\n const max = local.maxLength;\n if (!showCounter() || max === undefined) return \"\";\n const remaining = max - text().length;\n return remaining <= Math.max(10, Math.ceil(max * 0.1)) ? local.counterAnnouncement(remaining, max) : \"\";\n };\n\n // The text is the textarea's child, not a `value` binding: on the server a\n // `value` prints as an attribute browsers ignore, and hydration skips the\n // property write, so the field would come up empty. Later changes are written\n // to the element directly (a property write is not gated by hydration).\n // The server parser drops the first line feed after `<textarea>`, so a text that starts with one gets a second.\n const initialText = untrack(text);\n const serverText = isServer && initialText.startsWith(\"\\n\") ? `\\n${initialText}` : initialText;\n createEffect(() => {\n const next = text();\n if (textareaEl && textareaEl.value !== next) textareaEl.value = next;\n });\n\n const send = (): void => {\n if (!canSend()) return;\n local.onSend?.(text().trim());\n if (local.clearOnSend) setText(\"\");\n };\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n const el = event.currentTarget;\n setText(el.value);\n // A controlled parent that ignores the edit keeps its text, as in React.\n if (el.value !== text()) el.value = text();\n };\n\n const onKeyDown = (event: TextareaKeyEvent): void => {\n callHandler(local.onKeyDown, event);\n if (event.defaultPrevented) return;\n const action = resolveComposerKeyAction(event, local.sendKey);\n if (action === \"native\") return;\n event.preventDefault();\n send();\n };\n\n const onFocus = (event: TextareaFocusEvent): void => {\n callHandler(local.onFocus, event);\n setFocused(true);\n };\n\n const onBlur = (event: TextareaFocusEvent): void => {\n callHandler(local.onBlur, event);\n setFocused(false);\n };\n\n // One button in both states: its handler reads `busy` when pressed.\n const onActionClick = (event: MouseEvent): void => {\n // The second click of a double-click lands on the node the first one turned into the other action (Send into\n // Stop once the parent sets `busy`). It is not a new press: keyboard activation has `detail` 0, a click 1.\n if (event.detail > 1) return;\n if (local.busy) {\n if (!local.disabled) local.onStop?.();\n return;\n }\n send();\n };\n\n // The drop target works only with `onAttach` unless `dropTarget` is off; the caller's handlers always run, first.\n const onDragOver = (event: RootDragEvent): void => {\n callHandler(local.onDragOver, event);\n // Only a drag of files is the dropzone's. Text or a link keeps its default: the textarea inserts it.\n if (dropping() && isFileDrag(event.dataTransfer)) dropzone.getRootProps().onDragOver(event);\n };\n const onDragLeave = (event: RootDragEvent): void => {\n callHandler(local.onDragLeave, event);\n if (!dropping()) return;\n // A leave onto a descendant is not a leave: it would flicker the drag-active state over the toolbar chips.\n if (event.relatedTarget instanceof Node && event.currentTarget.contains(event.relatedTarget)) return;\n dropzone.getRootProps().onDragLeave();\n };\n const onDrop = (event: RootDragEvent): void => {\n callHandler(local.onDrop, event);\n if (dropping() && isFileDrag(event.dataTransfer)) dropzone.getRootProps().onDrop(event);\n };\n\n const onFileChange = (event: Event & { currentTarget: HTMLInputElement; target: Element }): void => {\n inputProps().onChange(event);\n // Lets the same file be picked again.\n event.currentTarget.value = \"\";\n };\n\n // `autofocus` alone is not \"focus on mount\": Chromium ignores it on an element inserted after the page already has\n // a focused element (a composer opened in a panel, or after a route change). The attribute stays for the server HTML.\n onMount(() => {\n if (local.autofocus) textareaEl?.focus();\n });\n\n // Read each slot once: markup passed as a prop is created anew on every read,\n // and during hydration a copy the server never rendered has no DOM node.\n const toolbar = children(() => local.toolbar);\n const attachments = children(() => local.attachments);\n\n const describedBy = (): string | undefined =>\n [local[\"aria-describedby\"], showCounter() ? counterId() : undefined].filter(Boolean).join(\" \") || undefined;\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\n \"smwb-composer\",\n `smwb-composer_${local.layout}`,\n focused() && \"smwb-composer_focused\",\n local.busy && \"smwb-composer_busy\",\n local.disabled && \"smwb-composer_disabled\",\n dropping() && dropzone.isDragActive() && \"smwb-composer_drag-active\",\n overLimit() && \"smwb-composer_over-limit\",\n local.class\n )}\n data-testid={local[\"data-testid\"] ?? \"composer\"}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n <Show when={isDrawn(attachments())}>\n <div class=\"smwb-composer__attachments\" data-testid=\"composer-attachments\">\n {attachments()}\n </div>\n </Show>\n <div\n class=\"smwb-composer__field\"\n data-value={text()}\n style={{\n \"--smwb-composer-min-rows\": String(local.minRows),\n \"--smwb-composer-max-rows\": String(Math.max(local.maxRows, local.minRows)),\n }}\n >\n <textarea\n ref={mergeRefs(local.inputRef, (el) => (textareaEl = el))}\n class=\"smwb-composer__input\"\n id={textareaId()}\n name={local.name}\n rows={local.minRows}\n placeholder={local.placeholder}\n maxlength={local.maxLength}\n disabled={local.disabled}\n readonly={local.readOnly}\n autofocus={local.autofocus}\n aria-label={local[\"aria-label\"]}\n aria-labelledby={local[\"aria-labelledby\"]}\n aria-describedby={describedBy()}\n aria-invalid={overLimit() || undefined}\n data-testid=\"composer-input\"\n onInput={onInput}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {serverText}\n </textarea>\n </div>\n <Show when={attachable()}>\n <button\n type=\"button\"\n class=\"smwb-composer__icon-button smwb-composer__attach\"\n aria-label={local.attachLabel}\n disabled={local.disabled}\n data-testid=\"composer-attach\"\n onClick={() => dropzone.open()}\n >\n <Icon name=\"attach_file\" size={20} />\n </button>\n </Show>\n <Show when={isDrawn(toolbar())}>\n <div class=\"smwb-composer__toolbar\" data-testid=\"composer-toolbar\">\n {toolbar()}\n </div>\n </Show>\n <Show when={showCounter()}>\n <span\n id={counterId()}\n class={cn(\"smwb-composer__counter\", overLimit() && \"smwb-composer__counter_error\")}\n data-testid=\"composer-counter\"\n >\n {local.maxLength !== undefined ? `${text().length} / ${local.maxLength}` : text().length}\n </span>\n </Show>\n <button\n type=\"button\"\n class={cn(\"smwb-composer__icon-button\", \"smwb-composer__action\", local.busy && \"smwb-composer__action_stop\")}\n aria-label={local.busy ? local.stopLabel : local.sendLabel}\n aria-disabled={!local.busy && !canSend() ? \"true\" : undefined}\n disabled={local.disabled}\n data-action={local.busy ? \"stop\" : \"send\"}\n data-testid=\"composer-action\"\n onMouseDown={stopMouseDown}\n onClick={onActionClick}\n >\n <Icon name={local.busy ? \"stop\" : \"send\"} size={20} />\n </button>\n <Show when={showCounter()}>\n <span class=\"smwb-composer__status\" role=\"status\" data-testid=\"composer-status\">\n {status()}\n </span>\n </Show>\n <Show when={attachable()}>\n <input\n ref={dropzone.inputRef}\n type=\"file\"\n multiple={inputProps().multiple}\n accept={inputProps().accept}\n disabled={inputProps().disabled}\n style={{ display: \"none\" }}\n data-testid=\"composer-file-input\"\n onChange={onFileChange}\n />\n </Show>\n </div>\n );\n}\n\nexport default Composer;\n"],"names":["defaultCounterAnnouncement","remaining","stopMouseDown","event","preventDefault","isDrawn","resolved","Array","isArray","some","Composer","props","merged","mergeProps","sendKey","clearOnSend","busy","counterAnnouncement","minRows","maxRows","layout","multiple","disabled","readOnly","sendLabel","stopLabel","attachLabel","local","rest","splitProps","text","setText","createControllableState","value","defaultValue","untrack","onChange","next","onValueChange","focused","setFocused","createSignal","generatedId","createId","undefined","textareaId","id","counterId","textareaEl","dropzone","createDropzone","accept","onDrop","files","attached","filterAttachedFiles","maxFiles","length","onAttach","attachable","dropping","dropTarget","inputProps","getInputProps","showCounter","counter","maxLength","overLimit","canSend","onSend","trim","status","max","Math","ceil","initialText","serverText","isServer","startsWith","createEffect","send","onInput","el","currentTarget","onKeyDown","callHandler","defaultPrevented","resolveComposerKeyAction","onFocus","onBlur","onActionClick","detail","onStop","onDragOver","isFileDrag","dataTransfer","getRootProps","onDragLeave","relatedTarget","Node","contains","onFileChange","onMount","autofocus","focus","toolbar","children","attachments","describedBy","filter","Boolean","join","_el$","_tmpl$7","_el$3","firstChild","_el$4","_el$8","nextSibling","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","cn","isDragActive","class","_$insert","_$createComponent","Show","when","_el$2","_tmpl$","addEventListener","$$keydown","$$input","_ref$2","inputRef","_el$5","_tmpl$2","$$click","open","Icon","name","size","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","_el$6","_tmpl$3","_el$7","_tmpl$4","_c$","_$memo","_v$3","_v$4","_$className","$$mousedown","_el$9","_tmpl$5","_el$0","_tmpl$6","_ref$3","_v$5","_v$6","_v$7","a","_v$8","_v$9","String","_v$0","_v$1","_v$10","_v$11","_v$12","placeholder","_v$13","_v$14","_v$15","_v$16","_v$17","_v$18","_v$19","_v$20","_v$21","_v$22","_v$23","_v$24","_v$25","_$setStyleProperty","o","i","n","s","h","r","d","l","u","c","w","m","f","y","g","p","b","_$delegateEvents"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function f(e) {
|
|
2
|
+
return e ? Array.from(e.types ?? []).includes("Files") ? !0 : (e.files?.length ?? 0) > 0 : !1;
|
|
3
|
+
}
|
|
4
|
+
function u(e) {
|
|
5
|
+
return e ? (typeof e == "string" ? e.split(",") : Object.entries(e).flatMap(([r, s]) => [r, ...s])).map((r) => r.trim().toLowerCase()).filter(Boolean) : [];
|
|
6
|
+
}
|
|
7
|
+
function a(e, t) {
|
|
8
|
+
return t === "*/*" ? !0 : t.startsWith(".") ? e.name.toLowerCase().endsWith(t) : t.endsWith("/*") ? e.type.toLowerCase().startsWith(t.slice(0, -1)) : e.type.toLowerCase() === t;
|
|
9
|
+
}
|
|
10
|
+
function o(e, t) {
|
|
11
|
+
const r = u(t.accept), s = r.length === 0 ? e : e.filter((n) => r.some((l) => a(n, l))), i = t.multiple === !1 ? 1 : t.maxFiles && t.maxFiles > 0 ? t.maxFiles : void 0;
|
|
12
|
+
return i === void 0 ? s : s.slice(0, i);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
o as filterAttachedFiles,
|
|
16
|
+
f as isFileDrag
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=composerFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composerFiles.js","sources":["../../../../../src/components/inputs/composer/composerFiles.ts"],"sourcesContent":["/** Accepted file types as `Composer` takes them: a record of mime type to extensions, or a raw `accept` string. */\nexport type ComposerAccept = Record<string, string[]> | string;\n\n/** The part of a `DataTransfer` the drag guard reads. */\nexport interface ComposerDragData {\n types?: ArrayLike<string> | null | undefined;\n files?: ArrayLike<unknown> | null | undefined;\n}\n\n/** The options that decide which of the picked or dropped files `Composer` passes on. */\nexport interface ComposerFileOptions {\n accept?: ComposerAccept | undefined;\n multiple?: boolean | undefined;\n maxFiles?: number | undefined;\n}\n\n/**\n * Whether a drag carries files. A text or link drag does not and stays with the browser (the textarea inserts it).\n * `dragover` exposes only `types`, and Firefox gives a `DOMStringList` there, hence `Array.from`; a `drop` has the\n * file list as well.\n */\nexport function isFileDrag(data: ComposerDragData | null | undefined): boolean {\n if (!data) return false;\n if (Array.from(data.types ?? []).includes(\"Files\")) return true;\n return (data.files?.length ?? 0) > 0;\n}\n\nfunction acceptTokens(accept: ComposerAccept | undefined): string[] {\n if (!accept) return [];\n const tokens =\n typeof accept === \"string\" ? accept.split(\",\") : Object.entries(accept).flatMap(([mime, exts]) => [mime, ...exts]);\n return tokens.map((token) => token.trim().toLowerCase()).filter(Boolean);\n}\n\n// The same three forms as the `accept` attribute: `.ext`, `type/*` and an exact mime type.\nfunction matchesToken(file: File, token: string): boolean {\n if (token === \"*/*\") return true;\n if (token.startsWith(\".\")) return file.name.toLowerCase().endsWith(token);\n if (token.endsWith(\"/*\")) return file.type.toLowerCase().startsWith(token.slice(0, -1));\n return file.type.toLowerCase() === token;\n}\n\n/**\n * The files of a pick or a drop that `Composer` passes to `onAttach`: those that match `accept` (a drop is not\n * filtered by the browser, and the picker's \"All files\" choice lifts its filter), cut to one file when `multiple` is\n * `false`, then to `maxFiles`. The cut comes last, so the files it drops are the ones past the limit, not the ones\n * `accept` would have refused anyway.\n */\nexport function filterAttachedFiles(files: File[], options: ComposerFileOptions): File[] {\n const tokens = acceptTokens(options.accept);\n const accepted =\n tokens.length === 0 ? files : files.filter((file) => tokens.some((token) => matchesToken(file, token)));\n const limit =\n options.multiple === false ? 1 : options.maxFiles && options.maxFiles > 0 ? options.maxFiles : undefined;\n return limit === undefined ? accepted : accepted.slice(0, limit);\n}\n"],"names":["isFileDrag","data","acceptTokens","accept","mime","exts","token","matchesToken","file","filterAttachedFiles","files","options","tokens","accepted","limit"],"mappings":"AAqBO,SAASA,EAAWC,GAAoD;AAC7E,SAAKA,IACD,MAAM,KAAKA,EAAK,SAAS,CAAA,CAAE,EAAE,SAAS,OAAO,IAAU,MACnDA,EAAK,OAAO,UAAU,KAAK,IAFjB;AAGpB;AAEA,SAASC,EAAaC,GAA8C;AAClE,SAAKA,KAEH,OAAOA,KAAW,WAAWA,EAAO,MAAM,GAAG,IAAI,OAAO,QAAQA,CAAM,EAAE,QAAQ,CAAC,CAACC,GAAMC,CAAI,MAAM,CAACD,GAAM,GAAGC,CAAI,CAAC,GACrG,IAAI,CAACC,MAAUA,EAAM,KAAA,EAAO,YAAA,CAAa,EAAE,OAAO,OAAO,IAHnD,CAAA;AAItB;AAGA,SAASC,EAAaC,GAAYF,GAAwB;AACxD,SAAIA,MAAU,QAAc,KACxBA,EAAM,WAAW,GAAG,IAAUE,EAAK,KAAK,YAAA,EAAc,SAASF,CAAK,IACpEA,EAAM,SAAS,IAAI,IAAUE,EAAK,KAAK,YAAA,EAAc,WAAWF,EAAM,MAAM,GAAG,EAAE,CAAC,IAC/EE,EAAK,KAAK,YAAA,MAAkBF;AACrC;AAQO,SAASG,EAAoBC,GAAeC,GAAsC;AACvF,QAAMC,IAASV,EAAaS,EAAQ,MAAM,GACpCE,IACJD,EAAO,WAAW,IAAIF,IAAQA,EAAM,OAAO,CAACF,MAASI,EAAO,KAAK,CAACN,MAAUC,EAAaC,GAAMF,CAAK,CAAC,CAAC,GAClGQ,IACJH,EAAQ,aAAa,KAAQ,IAAIA,EAAQ,YAAYA,EAAQ,WAAW,IAAIA,EAAQ,WAAW;AACjG,SAAOG,MAAU,SAAYD,IAAWA,EAAS,MAAM,GAAGC,CAAK;AACjE;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function i(r, e) {
|
|
2
|
+
return r.isComposing || r.keyCode === 229 || r.key !== "Enter" || r.altKey || r.shiftKey ? "native" : r.ctrlKey || r.metaKey || e === "enter" ? "send" : "native";
|
|
3
|
+
}
|
|
4
|
+
export {
|
|
5
|
+
i as resolveComposerKeyAction
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=composerKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composerKeys.js","sources":["../../../../../src/components/inputs/composer/composerKeys.ts"],"sourcesContent":["/** Which Enter sends in a `Composer`: `\"modEnter\"` is Ctrl/⌘+Enter, `\"enter\"` is a plain Enter. */\nexport type ComposerSendKey = \"modEnter\" | \"enter\";\n\n/**\n * What the composer does with a key press in its textarea:\n * - `\"send\"`: prevent the default and send, if sending is allowed;\n * - `\"native\"`: leave the key to the browser (a newline, IME commit, …).\n */\nexport type ComposerKeyAction = \"send\" | \"native\";\n\n/** The part of a keyboard event the key map reads. */\nexport interface ComposerKeyEvent {\n key: string;\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n /** Set by Chromium and Firefox while an IME composition is open. */\n isComposing?: boolean | undefined;\n /** Safari reports the commit Enter of a composition as keyCode 229 with `isComposing` false. */\n keyCode?: number | undefined;\n}\n\n/**\n * The composer's keyboard map (Escape and every other key stay native).\n *\n * - IME composition: always native, so an Enter that commits a CJK candidate is not a send.\n * - Ctrl/⌘+Enter (no Shift, no Alt): send in both modes.\n * - Enter alone: send with `sendKey=\"enter\"`, a native newline with `\"modEnter\"`.\n * - Shift+Enter and every other combination: native.\n */\nexport function resolveComposerKeyAction(event: ComposerKeyEvent, sendKey: ComposerSendKey): ComposerKeyAction {\n if (event.isComposing || event.keyCode === 229) return \"native\";\n if (event.key !== \"Enter\") return \"native\";\n if (event.altKey || event.shiftKey) return \"native\";\n\n if (event.ctrlKey || event.metaKey) return \"send\";\n return sendKey === \"enter\" ? \"send\" : \"native\";\n}\n"],"names":["resolveComposerKeyAction","event","sendKey"],"mappings":"AA+BO,SAASA,EAAyBC,GAAyBC,GAA6C;AAG7G,SAFID,EAAM,eAAeA,EAAM,YAAY,OACvCA,EAAM,QAAQ,WACdA,EAAM,UAAUA,EAAM,WAAiB,WAEvCA,EAAM,WAAWA,EAAM,WACpBC,MAAY,UADwB,SACL;AACxC;"}
|