@smwb/ui-react 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_LESS_OVERRIDES.md +84 -21
- package/AI_THEMING.md +72 -28
- package/README.md +681 -0
- package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
- package/dist/assets/styles/less/components/button/button.entry.css +1 -1
- package/dist/assets/styles/less/components/card/card.entry.css +1 -1
- package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
- package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
- package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
- package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
- package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -0
- package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
- package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
- package/dist/assets/styles/less/components/list/list.entry.css +1 -1
- package/dist/assets/styles/less/components/menu/menu.entry.css +1 -1
- package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -1
- package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
- package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
- package/dist/assets/styles/less/components/rating/rating.entry.css +1 -1
- package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
- package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
- package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
- package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
- package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
- package/dist/assets/styles/less/components/table/table.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
- package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
- package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
- package/dist/assets/styles/less/components/thumbCard/thumbCard.entry.css +1 -1
- package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
- package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
- package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
- package/dist/assets/styles/less/connects/rt/table.entry.css +1 -1
- package/dist/assets/styles/less/tokens.entry.css +1 -1
- package/dist/components/base/icon/icon.d.ts +6 -2
- package/dist/components/base/icon/icon.js +49 -37
- package/dist/components/base/icon/icon.js.map +1 -1
- package/dist/components/base/ripple/ripple.d.ts +3 -0
- package/dist/components/base/ripple/ripple.js +38 -23
- package/dist/components/base/ripple/ripple.js.map +1 -1
- package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
- package/dist/components/dataDisplay/avatar/avatar.js +50 -37
- package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/components/dataDisplay/badge/badge.js +37 -28
- package/dist/components/dataDisplay/badge/badge.js.map +1 -1
- package/dist/components/dataDisplay/card/card.d.ts +30 -2
- package/dist/components/dataDisplay/card/card.js +50 -23
- package/dist/components/dataDisplay/card/card.js.map +1 -1
- package/dist/components/dataDisplay/carousel/carousel.js +70 -70
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/chart/chart.d.ts +2 -0
- package/dist/components/dataDisplay/chart/chart.js +66 -53
- package/dist/components/dataDisplay/chart/chart.js.map +1 -1
- package/dist/components/dataDisplay/chat/chat.d.ts +43 -1
- package/dist/components/dataDisplay/chat/chat.js +179 -150
- package/dist/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
- package/dist/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatIconButton.d.ts +1 -1
- package/dist/components/dataDisplay/chat/chatIconButton.js +30 -26
- package/dist/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatLayout.d.ts +3 -1
- package/dist/components/dataDisplay/chat/chatLayout.js +56 -55
- package/dist/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatOverlayLayout.d.ts +3 -1
- package/dist/components/dataDisplay/chat/index.d.ts +1 -1
- package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
- package/dist/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/components/dataDisplay/chip/chip.d.ts +31 -0
- package/dist/components/dataDisplay/chip/chip.js +110 -83
- package/dist/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/components/dataDisplay/chipGroup/chipGroup.js +34 -30
- package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/components/dataDisplay/dagView/dagLayout.d.ts +74 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/components/dataDisplay/dagView/dagView.d.ts +157 -0
- package/dist/components/dataDisplay/dagView/dagView.js +543 -0
- package/dist/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/components/dataDisplay/dagView/index.d.ts +4 -0
- package/dist/components/dataDisplay/dagView/panZoom.d.ts +75 -0
- package/dist/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +11 -3
- package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/components/dataDisplay/diffStat/diffStat.d.ts +54 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js +63 -0
- package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/components/dataDisplay/kanban/kanban.d.ts +6 -0
- package/dist/components/dataDisplay/kanban/kanban.js +46 -35
- package/dist/components/dataDisplay/kanban/kanban.js.map +1 -1
- package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
- package/dist/components/dataDisplay/kbd/kbd.d.ts +40 -0
- package/dist/components/dataDisplay/kbd/kbd.js +27 -0
- package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/components/dataDisplay/lazyImage/lazyImage.js +31 -30
- package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/components/dataDisplay/list/list.d.ts +2 -0
- package/dist/components/dataDisplay/list/list.js +15 -14
- package/dist/components/dataDisplay/list/list.js.map +1 -1
- package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
- package/dist/components/dataDisplay/list/listItem.js +47 -24
- package/dist/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/components/dataDisplay/meter/meter.d.ts +2 -0
- package/dist/components/dataDisplay/meter/meter.js +24 -23
- package/dist/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/components/dataDisplay/personChip/personChip.d.ts +2 -0
- package/dist/components/dataDisplay/personChip/personChip.js +39 -27
- package/dist/components/dataDisplay/personChip/personChip.js.map +1 -1
- package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
- package/dist/components/dataDisplay/qrCode/qrCode.d.ts +28 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js +78 -0
- package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/components/dataDisplay/stat/stat.d.ts +2 -0
- package/dist/components/dataDisplay/stat/stat.js +25 -13
- package/dist/components/dataDisplay/stat/stat.js.map +1 -1
- package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
- package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js +30 -0
- package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +53 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js +357 -0
- package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/components/dataDisplay/table/table.d.ts +16 -1
- package/dist/components/dataDisplay/table/table.js +40 -36
- package/dist/components/dataDisplay/table/table.js.map +1 -1
- package/dist/components/dataDisplay/table/tableBody.js +10 -4
- package/dist/components/dataDisplay/table/tableBody.js.map +1 -1
- package/dist/components/dataDisplay/table/tableCell.d.ts +10 -2
- package/dist/components/dataDisplay/table/tableCell.js +20 -13
- package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableColumns.d.ts +83 -0
- package/dist/components/dataDisplay/table/tableColumns.js +112 -0
- package/dist/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/components/dataDisplay/table/tableHead.js +9 -3
- package/dist/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/components/dataDisplay/table/tableHeadCell.d.ts +24 -3
- package/dist/components/dataDisplay/table/tableHeadCell.js +60 -65
- package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableRow.d.ts +3 -1
- package/dist/components/dataDisplay/table/tableRow.js +28 -16
- package/dist/components/dataDisplay/table/tableRow.js.map +1 -1
- package/dist/components/dataDisplay/thumbCard/thumbCard.d.ts +44 -3
- package/dist/components/dataDisplay/thumbCard/thumbCard.js +79 -59
- package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/components/dataDisplay/treeView/treeView.d.ts +19 -1
- package/dist/components/dataDisplay/treeView/treeView.js +113 -91
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/feedBack/emptyState/emptyState.d.ts +2 -0
- package/dist/components/feedBack/emptyState/emptyState.js +22 -12
- package/dist/components/feedBack/emptyState/emptyState.js.map +1 -1
- package/dist/components/feedBack/message/message.d.ts +2 -0
- package/dist/components/feedBack/message/message.js +30 -19
- package/dist/components/feedBack/message/message.js.map +1 -1
- package/dist/components/feedBack/modal/modal.js +84 -63
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/feedBack/skeleton/skeleton.d.ts +10 -2
- package/dist/components/feedBack/skeleton/skeleton.js +37 -34
- package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/components/feedBack/snackbar/snackbar.js +104 -103
- package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/components/feedBack/tooltip/tooltip.d.ts +9 -1
- package/dist/components/feedBack/tooltip/tooltip.js +67 -47
- package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +15 -1
- package/dist/components/inputs/button/button.js +73 -63
- package/dist/components/inputs/button/button.js.map +1 -1
- package/dist/components/inputs/buttonGroups/buttonGroup.d.ts +2 -0
- package/dist/components/inputs/buttonGroups/buttonGroup.js +40 -36
- package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/components/inputs/checkbox/checkbox.d.ts +10 -0
- package/dist/components/inputs/checkbox/checkbox.js +84 -59
- package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/components/inputs/composer/composer.d.ts +149 -0
- package/dist/components/inputs/composer/composer.js +219 -0
- package/dist/components/inputs/composer/composer.js.map +1 -0
- package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
- package/dist/components/inputs/composer/composerFiles.js +19 -0
- package/dist/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
- package/dist/components/inputs/composer/composerKeys.js +7 -0
- package/dist/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/components/inputs/composer/index.d.ts +3 -0
- package/dist/components/inputs/datePicker/datePicker.js +170 -164
- package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerDay.d.ts +1 -1
- package/dist/components/inputs/datePicker/datePickerDay.js +52 -44
- package/dist/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/components/inputs/datePicker/datePickerIconButton.d.ts +1 -1
- package/dist/components/inputs/datePicker/datePickerIconButton.js +32 -28
- package/dist/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/components/inputs/floatingButton/floatingButton.js +32 -30
- package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/components/inputs/radioButton/radioButton.d.ts +9 -0
- package/dist/components/inputs/radioButton/radioButton.js +77 -58
- package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/components/inputs/rating/rating.d.ts +8 -0
- package/dist/components/inputs/rating/rating.js +85 -70
- package/dist/components/inputs/rating/rating.js.map +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.d.ts +20 -1
- package/dist/components/inputs/selectField/dropdownMenu.js +266 -113
- package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/components/inputs/selectField/optionNavigation.d.ts +17 -0
- package/dist/components/inputs/selectField/optionNavigation.js +38 -0
- package/dist/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/components/inputs/selectField/selectField.d.ts +31 -1
- package/dist/components/inputs/selectField/selectField.js +358 -218
- package/dist/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/components/inputs/slider/slider.d.ts +22 -1
- package/dist/components/inputs/slider/slider.js +330 -261
- package/dist/components/inputs/slider/slider.js.map +1 -1
- package/dist/components/inputs/textField/textField.d.ts +7 -0
- package/dist/components/inputs/textField/textField.js +118 -100
- package/dist/components/inputs/textField/textField.js.map +1 -1
- package/dist/components/inputs/textField/textFieldWrapper.d.ts +15 -1
- package/dist/components/inputs/textField/textFieldWrapper.js +45 -34
- package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/components/inputs/timePicker/timePicker.js +91 -85
- package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/components/inputs/toggle/toggle.d.ts +4 -0
- package/dist/components/inputs/toggle/toggle.js +80 -61
- package/dist/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/components/inputs/valueSlider/valueSlider.d.ts +12 -0
- package/dist/components/inputs/valueSlider/valueSlider.js +23 -22
- package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/components/layout/appLayout/appLayout.d.ts +2 -0
- package/dist/components/layout/appLayout/appLayout.js +25 -24
- package/dist/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/components/layout/divider/divider.d.ts +2 -0
- package/dist/components/layout/divider/divider.js +23 -22
- package/dist/components/layout/divider/divider.js.map +1 -1
- package/dist/components/layout/floatingWindow/floatingWindow.d.ts +2 -0
- package/dist/components/layout/floatingWindow/floatingWindow.js +145 -139
- package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/components/layout/grid/grid.d.ts +12 -1
- package/dist/components/layout/grid/grid.js +51 -36
- package/dist/components/layout/grid/grid.js.map +1 -1
- package/dist/components/layout/page/page.d.ts +2 -0
- package/dist/components/layout/page/page.js +16 -8
- package/dist/components/layout/page/page.js.map +1 -1
- package/dist/components/layout/pageHeader/pageHeader.d.ts +2 -0
- package/dist/components/layout/pageHeader/pageHeader.js +22 -13
- package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/components/layout/sectionHeader/sectionHeader.d.ts +2 -0
- package/dist/components/layout/sectionHeader/sectionHeader.js +37 -27
- package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -1
- package/dist/components/layout/sheet/sheet.d.ts +14 -0
- package/dist/components/layout/sheet/sheet.js +148 -132
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/stack/stack.d.ts +2 -0
- package/dist/components/layout/stack/stack.js +29 -17
- package/dist/components/layout/stack/stack.js.map +1 -1
- package/dist/components/layout/tabGroups/index.d.ts +4 -0
- package/dist/components/layout/tabGroups/tabGroups.d.ts +94 -0
- package/dist/components/layout/tabGroups/tabGroups.js +783 -0
- package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/components/navigation/appBar/appBar.d.ts +24 -0
- package/dist/components/navigation/appBar/appBar.js +39 -33
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/bottomBar/bottomBar.js +81 -77
- package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +2 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js +29 -27
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/navigation/commandPalette/commandPalette.d.ts +111 -0
- package/dist/components/navigation/commandPalette/commandPalette.js +337 -0
- package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
- package/dist/components/navigation/commandPalette/index.d.ts +4 -0
- package/dist/components/navigation/menu/menu.d.ts +12 -0
- package/dist/components/navigation/menu/menu.js.map +1 -1
- package/dist/components/navigation/menu/menuContext.d.ts +2 -0
- package/dist/components/navigation/menu/menuContext.js.map +1 -1
- package/dist/components/navigation/menu/menuFloating.js +42 -30
- package/dist/components/navigation/menu/menuFloating.js.map +1 -1
- package/dist/components/navigation/menu/menuItem.d.ts +4 -0
- package/dist/components/navigation/menu/menuItem.js +60 -48
- package/dist/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/components/navigation/menu/menuList.d.ts +5 -1
- package/dist/components/navigation/menu/menuList.js +30 -19
- package/dist/components/navigation/menu/menuList.js.map +1 -1
- package/dist/components/navigation/menu/menuSubmenu.js +53 -40
- package/dist/components/navigation/menu/menuSubmenu.js.map +1 -1
- package/dist/components/navigation/pagination/pagination.d.ts +2 -0
- package/dist/components/navigation/pagination/pagination.js +51 -49
- package/dist/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
- package/dist/components/navigation/sidebar/sidebar.js +65 -62
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/components/navigation/stepper/stepper.d.ts +2 -0
- package/dist/components/navigation/stepper/stepper.js +37 -28
- package/dist/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/components/navigation/tabs/index.d.ts +3 -1
- package/dist/components/navigation/tabs/tab/tab.d.ts +88 -1
- package/dist/components/navigation/tabs/tab/tab.js +116 -35
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +19 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js +27 -0
- package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.d.ts +80 -4
- package/dist/components/navigation/tabs/tabs.js +369 -148
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
- package/dist/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/components/navigation/tabs/tabsContext.d.ts +11 -0
- package/dist/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/connects/rt/table/headerCellRenderer.d.ts +4 -1
- package/dist/connects/rt/table/headerCellRenderer.js +45 -15
- package/dist/connects/rt/table/headerCellRenderer.js.map +1 -1
- package/dist/connects/rt/table/table.d.ts +15 -1
- package/dist/connects/rt/table/table.js +125 -131
- package/dist/connects/rt/table/table.js.map +1 -1
- package/dist/headless/components/base/icon/icon.js +49 -37
- package/dist/headless/components/base/icon/icon.js.map +1 -1
- package/dist/headless/components/base/ripple/ripple.js +42 -27
- package/dist/headless/components/base/ripple/ripple.js.map +1 -1
- package/dist/headless/components/dataDisplay/avatar/avatar.js +51 -38
- package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/headless/components/dataDisplay/badge/badge.js +37 -28
- package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
- package/dist/headless/components/dataDisplay/card/card.js +50 -23
- package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/carousel.js +55 -55
- package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chat.js +179 -150
- package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatComposer.js +31 -29
- package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js +30 -26
- package/dist/headless/components/dataDisplay/chat/chatIconButton.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatLayout.js +56 -55
- package/dist/headless/components/dataDisplay/chat/chatLayout.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
- package/dist/headless/components/dataDisplay/chip/chip.js +108 -81
- package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +35 -31
- package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js +289 -0
- package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js +541 -0
- package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js +171 -0
- package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js +61 -0
- package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/headless/components/dataDisplay/kanban/kanban.js +45 -34
- package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -1
- package/dist/headless/components/dataDisplay/kbd/kbd.js +25 -0
- package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +72 -0
- package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +30 -29
- package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/list.js +15 -14
- package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
- package/dist/headless/components/dataDisplay/list/listItem.js +47 -24
- package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
- package/dist/headless/components/dataDisplay/meter/meter.js +19 -18
- package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/headless/components/dataDisplay/personChip/personChip.js +39 -27
- package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -1
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js +76 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
- package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
- package/dist/headless/components/dataDisplay/stat/stat.js +27 -15
- package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js +28 -0
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +355 -0
- package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/table.js +40 -36
- package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableBody.js +10 -4
- package/dist/headless/components/dataDisplay/table/tableBody.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableCell.js +20 -13
- package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableColumns.js +112 -0
- package/dist/headless/components/dataDisplay/table/tableColumns.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/tableHead.js +9 -3
- package/dist/headless/components/dataDisplay/table/tableHead.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js +60 -65
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableRow.js +28 -16
- package/dist/headless/components/dataDisplay/table/tableRow.js.map +1 -1
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +78 -58
- package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/headless/components/dataDisplay/treeView/treeView.js +113 -91
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/feedBack/emptyState/emptyState.js +21 -11
- package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -1
- package/dist/headless/components/feedBack/message/message.js +31 -20
- package/dist/headless/components/feedBack/message/message.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +84 -63
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/feedBack/skeleton/skeleton.js +38 -35
- package/dist/headless/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/headless/components/feedBack/snackbar/snackbar.js +108 -107
- package/dist/headless/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/headless/components/feedBack/tooltip/tooltip.js +67 -47
- package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +73 -63
- package/dist/headless/components/inputs/button/button.js.map +1 -1
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js +40 -36
- package/dist/headless/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/headless/components/inputs/checkbox/checkbox.js +85 -60
- package/dist/headless/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/headless/components/inputs/composer/composer.js +217 -0
- package/dist/headless/components/inputs/composer/composer.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerFiles.js +19 -0
- package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
- package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
- package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
- package/dist/headless/components/inputs/datePicker/datePicker.js +170 -164
- package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerDay.js +52 -44
- package/dist/headless/components/inputs/datePicker/datePickerDay.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js +32 -28
- package/dist/headless/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/headless/components/inputs/floatingButton/floatingButton.js +32 -30
- package/dist/headless/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/headless/components/inputs/radioButton/radioButton.js +77 -58
- package/dist/headless/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/headless/components/inputs/rating/rating.js +85 -70
- package/dist/headless/components/inputs/rating/rating.js.map +1 -1
- package/dist/headless/components/inputs/selectField/dropdownMenu.js +266 -113
- package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/headless/components/inputs/selectField/optionNavigation.js +38 -0
- package/dist/headless/components/inputs/selectField/optionNavigation.js.map +1 -0
- package/dist/headless/components/inputs/selectField/selectField.js +358 -218
- package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/headless/components/inputs/slider/slider.js +330 -261
- package/dist/headless/components/inputs/slider/slider.js.map +1 -1
- package/dist/headless/components/inputs/textField/textField.js +118 -100
- package/dist/headless/components/inputs/textField/textField.js.map +1 -1
- package/dist/headless/components/inputs/textField/textFieldWrapper.js +45 -34
- package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
- package/dist/headless/components/inputs/timePicker/timePicker.js +91 -85
- package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/headless/components/inputs/toggle/toggle.js +79 -60
- package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/headless/components/inputs/valueSlider/valueSlider.js +25 -24
- package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/headless/components/layout/appLayout/appLayout.js +27 -26
- package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/headless/components/layout/divider/divider.js +18 -17
- package/dist/headless/components/layout/divider/divider.js.map +1 -1
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js +145 -139
- package/dist/headless/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/headless/components/layout/grid/grid.js +48 -33
- package/dist/headless/components/layout/grid/grid.js.map +1 -1
- package/dist/headless/components/layout/page/page.js +15 -7
- package/dist/headless/components/layout/page/page.js.map +1 -1
- package/dist/headless/components/layout/pageHeader/pageHeader.js +20 -11
- package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js +36 -26
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -1
- package/dist/headless/components/layout/sheet/sheet.js +156 -140
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/layout/stack/stack.js +29 -17
- package/dist/headless/components/layout/stack/stack.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroups.js +781 -0
- package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +199 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +497 -0
- package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
- package/dist/headless/components/navigation/appBar/appBar.js +35 -29
- package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/headless/components/navigation/bottomBar/bottomBar.js +81 -77
- package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +32 -30
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/headless/components/navigation/commandPalette/commandPalette.js +335 -0
- package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
- package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
- package/dist/headless/components/navigation/menu/menu.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuContext.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuFloating.js +42 -30
- package/dist/headless/components/navigation/menu/menuFloating.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuItem.js +60 -48
- package/dist/headless/components/navigation/menu/menuItem.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuList.js +30 -19
- package/dist/headless/components/navigation/menu/menuList.js.map +1 -1
- package/dist/headless/components/navigation/menu/menuSubmenu.js +53 -40
- package/dist/headless/components/navigation/menu/menuSubmenu.js.map +1 -1
- package/dist/headless/components/navigation/pagination/pagination.js +51 -49
- package/dist/headless/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/headless/components/navigation/sidebar/sidebar.js +55 -52
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/navigation/stepper/stepper.js +42 -33
- package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +117 -36
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +25 -0
- package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabs.js +362 -141
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
- package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js +6 -0
- package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -0
- package/dist/headless/hooks/useDismissOnEscape.js +16 -0
- package/dist/headless/hooks/useDismissOnEscape.js.map +1 -0
- package/dist/headless/hooks/useFocusTrap.js +24 -20
- package/dist/headless/hooks/useFocusTrap.js.map +1 -1
- package/dist/headless/hooks/useHelperText.js +13 -0
- package/dist/headless/hooks/useHelperText.js.map +1 -0
- package/dist/headless/hooks/useKeyboardShortcut.js +19 -0
- package/dist/headless/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/headless/index.js +360 -316
- package/dist/headless/index.js.map +1 -1
- package/dist/headless/utils/controlProps.js +14 -0
- package/dist/headless/utils/controlProps.js.map +1 -0
- package/dist/headless/utils/keyboardShortcut.js +49 -0
- package/dist/headless/utils/keyboardShortcut.js.map +1 -0
- package/dist/headless/utils/linkAttrs.js +13 -0
- package/dist/headless/utils/linkAttrs.js.map +1 -0
- package/dist/headless/utils/overlayLayer.js +14 -7
- package/dist/headless/utils/overlayLayer.js.map +1 -1
- package/dist/headless/utils/ownClick.js +40 -0
- package/dist/headless/utils/ownClick.js.map +1 -0
- package/dist/headless/utils/readOnlyToggle.js +14 -0
- package/dist/headless/utils/readOnlyToggle.js.map +1 -0
- package/dist/headless/utils/restoreFocus.js +10 -0
- package/dist/headless/utils/restoreFocus.js.map +1 -0
- package/dist/hooks/useDismissOnEscape.d.ts +11 -0
- package/dist/hooks/useDismissOnEscape.js +16 -0
- package/dist/hooks/useDismissOnEscape.js.map +1 -0
- package/dist/hooks/useFocusTrap.d.ts +8 -1
- package/dist/hooks/useFocusTrap.js +24 -20
- package/dist/hooks/useFocusTrap.js.map +1 -1
- package/dist/hooks/useHelperText.d.ts +21 -0
- package/dist/hooks/useHelperText.js +13 -0
- package/dist/hooks/useHelperText.js.map +1 -0
- package/dist/hooks/useKeyboardShortcut.d.ts +30 -0
- package/dist/hooks/useKeyboardShortcut.js +19 -0
- package/dist/hooks/useKeyboardShortcut.js.map +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.js +360 -316
- package/dist/index.js.map +1 -1
- package/dist/utils/controlProps.d.ts +16 -0
- package/dist/utils/controlProps.js +14 -0
- package/dist/utils/controlProps.js.map +1 -0
- package/dist/utils/keyboardShortcut.d.ts +12 -0
- package/dist/utils/keyboardShortcut.js +49 -0
- package/dist/utils/keyboardShortcut.js.map +1 -0
- package/dist/utils/linkAttrs.d.ts +13 -0
- package/dist/utils/linkAttrs.js +13 -0
- package/dist/utils/linkAttrs.js.map +1 -0
- package/dist/utils/overlayLayer.d.ts +15 -3
- package/dist/utils/overlayLayer.js +14 -7
- package/dist/utils/overlayLayer.js.map +1 -1
- package/dist/utils/ownClick.d.ts +16 -0
- package/dist/utils/ownClick.js +40 -0
- package/dist/utils/ownClick.js.map +1 -0
- package/dist/utils/readOnlyToggle.d.ts +15 -0
- package/dist/utils/readOnlyToggle.js +14 -0
- package/dist/utils/readOnlyToggle.js.map +1 -0
- package/dist/utils/restoreFocus.d.ts +8 -0
- package/dist/utils/restoreFocus.js +10 -0
- package/dist/utils/restoreFocus.js.map +1 -0
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatComposer.js","sources":["../../../../src/components/dataDisplay/chat/chatComposer.tsx"],"sourcesContent":["import React, { useId, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport Icon from \"../../base/icon/icon\";\nimport { TextField } from \"../../inputs/textField\";\nimport { TextFieldWrapper } from \"../../inputs/textField/textFieldWrapper\";\nimport ChatIconButton from \"./chatIconButton\";\nimport { shouldComposerNewlineOnEnter } from \"./utils\";\n\nexport interface ChatComposerProps {\n className?: string;\n onSendMessage?: (text: string) => void | Promise<void>;\n placeholder?: string;\n disabled?: boolean;\n sendAriaLabel?: string;\n shiftEnterNewline?: boolean;\n ctrlEnterNewline?: boolean;\n fileUpload?: boolean;\n attachInputId?: string;\n onAttachClick?: () => void;\n attachAriaLabel?: string;\n}\n\nfunction stopPropagation(event: React.SyntheticEvent) {\n event.stopPropagation();\n}\n\nfunction insertNewlineAtCursor(element: HTMLTextAreaElement, value: string, setValue: (next: string) => void) {\n const start = element.selectionStart ?? value.length;\n const end = element.selectionEnd ?? value.length;\n const nextValue = `${value.slice(0, start)}\\n${value.slice(end)}`;\n\n setValue(nextValue);\n\n requestAnimationFrame(() => {\n element.selectionStart = start + 1;\n element.selectionEnd = start + 1;\n });\n}\n\nexport function ChatComposer({\n className,\n onSendMessage,\n placeholder = \"message\",\n disabled = false,\n sendAriaLabel = \"Send message\",\n shiftEnterNewline = true,\n ctrlEnterNewline = true,\n fileUpload = false,\n attachInputId,\n onAttachClick,\n attachAriaLabel = \"Attach file\",\n}: ChatComposerProps) {\n const [value, setValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const inputId = useId();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const multiline = shiftEnterNewline || ctrlEnterNewline;\n const canSend = Boolean(onSendMessage) && value.trim().length > 0 && !disabled;\n const showAttach = fileUpload && Boolean(attachInputId || onAttachClick);\n\n const handleSend = () => {\n if (!onSendMessage) {\n return;\n }\n\n const text = value.trim();\n\n if (!text || disabled) {\n return;\n }\n\n void onSendMessage(text);\n setValue(\"\");\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (shouldComposerNewlineOnEnter(event, { shiftEnterNewline, ctrlEnterNewline })) {\n if (event.currentTarget instanceof HTMLTextAreaElement) {\n event.preventDefault();\n insertNewlineAtCursor(event.currentTarget, value, setValue);\n }\n\n return;\n }\n\n if (event.key !== \"Enter\") {\n return;\n }\n\n event.preventDefault();\n handleSend();\n };\n\n const attachClassName = cn(\n \"smwb-chat-icon-button\",\n \"smwb-chat-icon-button_edge-start\",\n disabled && \"smwb-chat-icon-button_disabled\"\n );\n\n const attachButton = showAttach ? (\n attachInputId ? (\n <label\n htmlFor={disabled ? undefined : attachInputId}\n className={attachClassName}\n aria-label={attachAriaLabel}\n aria-disabled={disabled || undefined}\n data-testid=\"chat-composer-attach\"\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </label>\n ) : (\n <ChatIconButton\n edge=\"start\"\n aria-label={attachAriaLabel}\n data-testid=\"chat-composer-attach\"\n disabled={disabled}\n onClick={onAttachClick}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </ChatIconButton>\n )\n ) : null;\n\n const sendButton = onSendMessage ? (\n <ChatIconButton\n edge=\"end\"\n color=\"primary\"\n aria-label={sendAriaLabel}\n data-testid=\"chat-composer-send\"\n disabled={!canSend}\n onClick={handleSend}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"send\" size={24} />\n </ChatIconButton>\n ) : null;\n\n if (showAttach && !onSendMessage) {\n return (\n <div\n className={cn(\"smwb-chat-composer\", \"smwb-chat-composer_attach-only\", className)}\n data-testid=\"chat-composer\"\n >\n {attachButton}\n </div>\n );\n }\n\n if (!multiline) {\n return (\n <TextField\n className={cn(\"smwb-chat-composer\", className)}\n data-testid=\"chat-composer\"\n fullWidth\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(event) => setValue(event.target.value)}\n startAdornment={attachButton}\n endAdornment={sendButton}\n onKeyDown={handleKeyDown}\n />\n );\n }\n\n const onHolderMouseDown: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (textareaRef.current && event.currentTarget === event.target) {\n event.preventDefault();\n textareaRef.current.focus();\n }\n };\n\n return (\n <TextFieldWrapper\n className={cn(\"smwb-chat-composer\", className)}\n data-testid=\"chat-composer\"\n fullWidth\n disabled={disabled}\n isFilledState={value.length > 0}\n isFocused={isFocused}\n htmlFor={inputId}\n shrink={Boolean(attachButton)}\n onHolderMouseDown={onHolderMouseDown}\n startAdornment={attachButton}\n endAdornment={sendButton}\n >\n <textarea\n id={inputId}\n ref={textareaRef}\n className={cn(\n \"smwb-text-field__input\",\n \"smwb-chat-composer__input\",\n \"smwb-text-field__input--show-placeholder\",\n attachButton && \"smwb-text-field__input--adornment-start\",\n sendButton && \"smwb-text-field__input--adornment-end\"\n )}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n rows={1}\n onChange={(event) => setValue(event.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n />\n </TextFieldWrapper>\n );\n}\n\nexport default ChatComposer;\n"],"names":["stopPropagation","event","insertNewlineAtCursor","element","value","setValue","start","_a","end","_b","nextValue","ChatComposer","className","onSendMessage","placeholder","disabled","sendAriaLabel","shiftEnterNewline","ctrlEnterNewline","fileUpload","attachInputId","onAttachClick","attachAriaLabel","useState","isFocused","setIsFocused","inputId","useId","textareaRef","useRef","multiline","canSend","showAttach","handleSend","text","handleKeyDown","shouldComposerNewlineOnEnter","attachClassName","cn","attachButton","jsx","Icon","ChatIconButton","sendButton","TextField","onHolderMouseDown","TextFieldWrapper"],"mappings":";;;;;;;;AAsBA,SAASA,EAAgBC,GAA6B;AACpD,EAAAA,EAAM,gBAAA;AACR;AAEA,SAASC,EAAsBC,GAA8BC,GAAeC,GAAkC;;AAC5G,QAAMC,KAAQC,IAAAJ,EAAQ,mBAAR,OAAAI,IAA0BH,EAAM,QACxCI,KAAMC,IAAAN,EAAQ,iBAAR,OAAAM,IAAwBL,EAAM,QACpCM,IAAY,GAAGN,EAAM,MAAM,GAAGE,CAAK,CAAC;AAAA,EAAKF,EAAM,MAAMI,CAAG,CAAC;AAE/D,EAAAH,EAASK,CAAS,GAElB,sBAAsB,MAAM;AAC1B,IAAAP,EAAQ,iBAAiBG,IAAQ,GACjCH,EAAQ,eAAeG,IAAQ;AAAA,EACjC,CAAC;AACH;AAEO,SAASK,EAAa;AAAA,EAC3B,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,eAAAC,IAAgB;AAAA,EAChB,mBAAAC,IAAoB;AAAA,EACpB,kBAAAC,IAAmB;AAAA,EACnB,YAAAC,IAAa;AAAA,EACb,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,iBAAAC,IAAkB;AACpB,GAAsB;AACpB,QAAM,CAAClB,GAAOC,CAAQ,IAAIkB,EAAS,EAAE,GAC/B,CAACC,GAAWC,CAAY,IAAIF,EAAS,EAAK,GAC1CG,IAAUC,EAAA,GACVC,IAAcC,EAA4B,IAAI,GAC9CC,IAAYb,KAAqBC,GACjCa,IAAU,EAAQlB,KAAkBT,EAAM,OAAO,SAAS,KAAK,CAACW,GAChEiB,IAAab,KAAc,GAAQC,KAAiBC,IAEpDY,IAAa,MAAM;AACvB,QAAI,CAACpB;AACH;AAGF,UAAMqB,IAAO9B,EAAM,KAAA;AAEnB,IAAI,CAAC8B,KAAQnB,MAIRF,EAAcqB,CAAI,GACvB7B,EAAS,EAAE;AAAA,EACb,GAEM8B,IAAgB,CAAClC,MAAuE;AAC5F,QAAImC,EAA6BnC,GAAO,EAAE,mBAAAgB,GAAmB,kBAAAC,EAAA,CAAkB,GAAG;AAChF,MAAIjB,EAAM,yBAAyB,wBACjCA,EAAM,eAAA,GACNC,EAAsBD,EAAM,eAAeG,GAAOC,CAAQ;AAG5D;AAAA,IACF;AAEA,IAAIJ,EAAM,QAAQ,YAIlBA,EAAM,eAAA,GACNgC,EAAA;AAAA,EACF,GAEMI,IAAkBC;AAAA,IACtB;AAAA,IACA;AAAA,IACAvB,KAAY;AAAA,EAAA,GAGRwB,IAAeP,IACnBZ,IACE,gBAAAoB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAASzB,IAAW,SAAYK;AAAA,MAChC,WAAWiB;AAAA,MACX,cAAYf;AAAA,MACZ,iBAAeP,KAAY;AAAA,MAC3B,eAAY;AAAA,MACZ,aAAaf;AAAA,MAEb,UAAA,gBAAAwC,EAACC,GAAA,EAAK,MAAK,eAAc,MAAM,GAAA,CAAI;AAAA,IAAA;AAAA,EAAA,IAGrC,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAYpB;AAAA,MACZ,eAAY;AAAA,MACZ,UAAAP;AAAA,MACA,SAASM;AAAA,MACT,aAAarB;AAAA,MAEb,UAAA,gBAAAwC,EAACC,GAAA,EAAK,MAAK,eAAc,MAAM,GAAA,CAAI;AAAA,IAAA;AAAA,EAAA,IAGrC,MAEEE,IAAa9B,IACjB,gBAAA2B;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAM;AAAA,MACN,cAAY1B;AAAA,MACZ,eAAY;AAAA,MACZ,UAAU,CAACe;AAAA,MACX,SAASE;AAAA,MACT,aAAajC;AAAA,MAEb,UAAA,gBAAAwC,EAACC,GAAA,EAAK,MAAK,QAAO,MAAM,GAAA,CAAI;AAAA,IAAA;AAAA,EAAA,IAE5B;AAEJ,MAAIT,KAAc,CAACnB;AACjB,WACE,gBAAA2B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWF,EAAG,sBAAsB,kCAAkC1B,CAAS;AAAA,QAC/E,eAAY;AAAA,QAEX,UAAA2B;AAAA,MAAA;AAAA,IAAA;AAKP,MAAI,CAACT;AACH,WACE,gBAAAU;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,WAAWN,EAAG,sBAAsB1B,CAAS;AAAA,QAC7C,eAAY;AAAA,QACZ,WAAS;AAAA,QACT,OAAAR;AAAA,QACA,UAAAW;AAAA,QACA,aAAAD;AAAA,QACA,UAAU,CAACb,MAAUI,EAASJ,EAAM,OAAO,KAAK;AAAA,QAChD,gBAAgBsC;AAAA,QAChB,cAAcI;AAAA,QACd,WAAWR;AAAA,MAAA;AAAA,IAAA;AAKjB,QAAMU,IAA6D,CAAC5C,MAAU;AAC5E,IAAI2B,EAAY,WAAW3B,EAAM,kBAAkBA,EAAM,WACvDA,EAAM,eAAA,GACN2B,EAAY,QAAQ,MAAA;AAAA,EAExB;AAEA,SACE,gBAAAY;AAAA,IAACM;AAAA,IAAA;AAAA,MACC,WAAWR,EAAG,sBAAsB1B,CAAS;AAAA,MAC7C,eAAY;AAAA,MACZ,WAAS;AAAA,MACT,UAAAG;AAAA,MACA,eAAeX,EAAM,SAAS;AAAA,MAC9B,WAAAoB;AAAA,MACA,SAASE;AAAA,MACT,QAAQ,EAAQa;AAAA,MAChB,mBAAAM;AAAA,MACA,gBAAgBN;AAAA,MAChB,cAAcI;AAAA,MAEd,UAAA,gBAAAH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAId;AAAA,UACJ,KAAKE;AAAA,UACL,WAAWU;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACAC,KAAgB;AAAA,YAChBI,KAAc;AAAA,UAAA;AAAA,UAEhB,OAAAvC;AAAA,UACA,UAAAW;AAAA,UACA,aAAAD;AAAA,UACA,MAAM;AAAA,UACN,UAAU,CAACb,MAAUI,EAASJ,EAAM,OAAO,KAAK;AAAA,UAChD,SAAS,MAAMwB,EAAa,EAAI;AAAA,UAChC,QAAQ,MAAMA,EAAa,EAAK;AAAA,UAChC,WAAWU;AAAA,QAAA;AAAA,MAAA;AAAA,IACb;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"chatComposer.js","sources":["../../../../src/components/dataDisplay/chat/chatComposer.tsx"],"sourcesContent":["import React, { useId, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport Icon from \"../../base/icon/icon\";\nimport { TextField } from \"../../inputs/textField\";\nimport { TextFieldWrapper } from \"../../inputs/textField/textFieldWrapper\";\nimport ChatIconButton from \"./chatIconButton\";\nimport { shouldComposerNewlineOnEnter } from \"./utils\";\n\n/**\n * Deprecated: the props of the old chat input. Use `ComposerProps` — `Chat` now draws a `Composer` as its footer,\n * and the standalone `Composer` replaces these props (`onSendMessage` → `onSend`, `sendAriaLabel` → `sendLabel`,\n * `attachAriaLabel` → `attachLabel`, `fileUpload` + `attachInputId`/`onAttachClick` → `onAttach`,\n * `shiftEnterNewline` → `sendKey=\"enter\"`; `ctrlEnterNewline` has no equivalent — Ctrl/⌘+Enter always sends).\n * Removed in the next major.\n *\n * @deprecated Use `Composer` (`ComposerProps`); see the README section \"Migrating from ChatComposer\".\n */\nexport interface ChatComposerProps {\n className?: string;\n onSendMessage?: (text: string) => void | Promise<void>;\n placeholder?: string;\n disabled?: boolean;\n sendAriaLabel?: string;\n shiftEnterNewline?: boolean;\n ctrlEnterNewline?: boolean;\n fileUpload?: boolean;\n attachInputId?: string;\n onAttachClick?: () => void;\n attachAriaLabel?: string;\n}\n\nfunction stopPropagation(event: React.SyntheticEvent) {\n event.stopPropagation();\n}\n\nfunction insertNewlineAtCursor(element: HTMLTextAreaElement, value: string, setValue: (next: string) => void) {\n const start = element.selectionStart ?? value.length;\n const end = element.selectionEnd ?? value.length;\n const nextValue = `${value.slice(0, start)}\\n${value.slice(end)}`;\n\n setValue(nextValue);\n\n requestAnimationFrame(() => {\n element.selectionStart = start + 1;\n element.selectionEnd = start + 1;\n });\n}\n\n/**\n * Deprecated: the old chat input — Enter sends, a TextField-based DOM and the `chat-composer*` test ids.\n * `Chat` draws a `Composer` as its footer now, and the standalone `Composer` replaces this component\n * (`onSendMessage` → `onSend`, Enter-to-send → `sendKey=\"enter\"`). Kept for the migration and removed in the\n * next major; to keep this markup inside a Chat while migrating, pass `legacyComposer` to `Chat`.\n *\n * @deprecated Use `Composer`; see the README section \"Migrating from ChatComposer\".\n */\nexport function ChatComposer({\n className,\n onSendMessage,\n placeholder = \"message\",\n disabled = false,\n sendAriaLabel = \"Send message\",\n shiftEnterNewline = true,\n ctrlEnterNewline = true,\n fileUpload = false,\n attachInputId,\n onAttachClick,\n attachAriaLabel = \"Attach file\",\n}: ChatComposerProps) {\n const [value, setValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const inputId = useId();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const multiline = shiftEnterNewline || ctrlEnterNewline;\n const canSend = Boolean(onSendMessage) && value.trim().length > 0 && !disabled;\n const showAttach = fileUpload && Boolean(attachInputId || onAttachClick);\n\n const handleSend = () => {\n if (!onSendMessage) {\n return;\n }\n\n const text = value.trim();\n\n if (!text || disabled) {\n return;\n }\n\n void onSendMessage(text);\n setValue(\"\");\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n // Enter that commits or cancels an IME composition belongs to the IME, not to the composer.\n if (event.nativeEvent.isComposing || event.keyCode === 229) {\n return;\n }\n\n if (shouldComposerNewlineOnEnter(event, { shiftEnterNewline, ctrlEnterNewline })) {\n if (event.currentTarget instanceof HTMLTextAreaElement) {\n event.preventDefault();\n insertNewlineAtCursor(event.currentTarget, value, setValue);\n }\n\n return;\n }\n\n if (event.key !== \"Enter\") {\n return;\n }\n\n event.preventDefault();\n handleSend();\n };\n\n const attachClassName = cn(\n \"smwb-chat-icon-button\",\n \"smwb-chat-icon-button_edge-start\",\n disabled && \"smwb-chat-icon-button_disabled\"\n );\n\n const attachButton = showAttach ? (\n attachInputId ? (\n <label\n htmlFor={disabled ? undefined : attachInputId}\n className={attachClassName}\n aria-label={attachAriaLabel}\n aria-disabled={disabled || undefined}\n data-testid=\"chat-composer-attach\"\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </label>\n ) : (\n <ChatIconButton\n edge=\"start\"\n aria-label={attachAriaLabel}\n data-testid=\"chat-composer-attach\"\n disabled={disabled}\n onClick={onAttachClick}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"attach_file\" size={24} />\n </ChatIconButton>\n )\n ) : null;\n\n const sendButton = onSendMessage ? (\n <ChatIconButton\n edge=\"end\"\n color=\"primary\"\n aria-label={sendAriaLabel}\n data-testid=\"chat-composer-send\"\n disabled={!canSend}\n onClick={handleSend}\n onMouseDown={stopPropagation}\n >\n <Icon name=\"send\" size={24} />\n </ChatIconButton>\n ) : null;\n\n if (showAttach && !onSendMessage) {\n return (\n <div\n className={cn(\"smwb-chat-composer\", \"smwb-chat-composer_attach-only\", className)}\n data-testid=\"chat-composer\"\n >\n {attachButton}\n </div>\n );\n }\n\n if (!multiline) {\n return (\n <TextField\n className={cn(\"smwb-chat-composer\", className)}\n data-testid=\"chat-composer\"\n fullWidth\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(event) => setValue(event.target.value)}\n startAdornment={attachButton}\n endAdornment={sendButton}\n onKeyDown={handleKeyDown}\n />\n );\n }\n\n const onHolderMouseDown: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (textareaRef.current && event.currentTarget === event.target) {\n event.preventDefault();\n textareaRef.current.focus();\n }\n };\n\n return (\n <TextFieldWrapper\n className={cn(\"smwb-chat-composer\", className)}\n data-testid=\"chat-composer\"\n fullWidth\n disabled={disabled}\n isFilledState={value.length > 0}\n isFocused={isFocused}\n htmlFor={inputId}\n shrink={Boolean(attachButton)}\n onHolderMouseDown={onHolderMouseDown}\n startAdornment={attachButton}\n endAdornment={sendButton}\n >\n <textarea\n id={inputId}\n ref={textareaRef}\n className={cn(\n \"smwb-text-field__input\",\n \"smwb-chat-composer__input\",\n \"smwb-text-field__input--show-placeholder\",\n attachButton && \"smwb-text-field__input--adornment-start\",\n sendButton && \"smwb-text-field__input--adornment-end\"\n )}\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n rows={1}\n onChange={(event) => setValue(event.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n />\n </TextFieldWrapper>\n );\n}\n\nexport default ChatComposer;\n"],"names":["stopPropagation","event","insertNewlineAtCursor","element","value","setValue","start","_a","end","_b","nextValue","ChatComposer","className","onSendMessage","placeholder","disabled","sendAriaLabel","shiftEnterNewline","ctrlEnterNewline","fileUpload","attachInputId","onAttachClick","attachAriaLabel","useState","isFocused","setIsFocused","inputId","useId","textareaRef","useRef","multiline","canSend","showAttach","handleSend","text","handleKeyDown","shouldComposerNewlineOnEnter","attachClassName","cn","attachButton","jsx","Icon","ChatIconButton","sendButton","TextField","onHolderMouseDown","TextFieldWrapper"],"mappings":"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"}
|
|
@@ -4,5 +4,5 @@ export interface ChatIconButtonProps extends React.ButtonHTMLAttributes<HTMLButt
|
|
|
4
4
|
edge?: "start" | "end";
|
|
5
5
|
color?: "default" | "primary";
|
|
6
6
|
}
|
|
7
|
-
export declare function ChatIconButton({ className, children, disabled, edge, color, onMouseDown: onMouseDownProp, ...rest }: ChatIconButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function ChatIconButton({ className, children, disabled, edge, color, onMouseDown: onMouseDownProp, onPointerDown: onPointerDownProp, type, ...rest }: ChatIconButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
export default ChatIconButton;
|
|
@@ -1,47 +1,51 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { Ripple as
|
|
5
|
-
function
|
|
1
|
+
import { jsxs as h, jsx as R } from "react/jsx-runtime";
|
|
2
|
+
import p from "react";
|
|
3
|
+
import _ from "clsx";
|
|
4
|
+
import { Ripple as x } from "../../base/ripple/ripple.js";
|
|
5
|
+
function w({
|
|
6
6
|
className: i,
|
|
7
|
-
children:
|
|
7
|
+
children: r,
|
|
8
8
|
disabled: t,
|
|
9
|
-
edge:
|
|
10
|
-
color:
|
|
9
|
+
edge: a,
|
|
10
|
+
color: s = "default",
|
|
11
11
|
onMouseDown: n,
|
|
12
|
-
|
|
12
|
+
// The button sets this on its root too; its own handler calls the caller's first.
|
|
13
|
+
onPointerDown: m,
|
|
14
|
+
// A default: the caller's type wins.
|
|
15
|
+
type: f = "button",
|
|
16
|
+
...b
|
|
13
17
|
}) {
|
|
14
|
-
const
|
|
18
|
+
const u = p.useRef(null), l = (c) => {
|
|
15
19
|
n == null || n(c);
|
|
16
|
-
},
|
|
17
|
-
var
|
|
18
|
-
t || (
|
|
20
|
+
}, o = (c) => {
|
|
21
|
+
var e;
|
|
22
|
+
m == null || m(c), t || (e = u.current) == null || e.onRipple(c);
|
|
19
23
|
};
|
|
20
|
-
return /* @__PURE__ */
|
|
24
|
+
return /* @__PURE__ */ h(
|
|
21
25
|
"button",
|
|
22
26
|
{
|
|
23
|
-
type:
|
|
24
|
-
className:
|
|
27
|
+
type: f,
|
|
28
|
+
className: _(
|
|
25
29
|
"smwb-chat-icon-button",
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
a === "start" && "smwb-chat-icon-button_edge-start",
|
|
31
|
+
a === "end" && "smwb-chat-icon-button_edge-end",
|
|
32
|
+
s === "primary" && "smwb-chat-icon-button_primary",
|
|
29
33
|
t && "smwb-chat-icon-button_disabled",
|
|
30
34
|
i
|
|
31
35
|
),
|
|
32
36
|
disabled: t,
|
|
33
|
-
onMouseDown:
|
|
34
|
-
onPointerDown:
|
|
35
|
-
...
|
|
37
|
+
onMouseDown: l,
|
|
38
|
+
onPointerDown: o,
|
|
39
|
+
...b,
|
|
36
40
|
children: [
|
|
37
|
-
|
|
38
|
-
t ? null : /* @__PURE__ */
|
|
41
|
+
r,
|
|
42
|
+
t ? null : /* @__PURE__ */ R(x, { actionRef: u, center: !0 })
|
|
39
43
|
]
|
|
40
44
|
}
|
|
41
45
|
);
|
|
42
46
|
}
|
|
43
47
|
export {
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
w as ChatIconButton,
|
|
49
|
+
w as default
|
|
46
50
|
};
|
|
47
51
|
//# sourceMappingURL=chatIconButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatIconButton.js","sources":["../../../../src/components/dataDisplay/chat/chatIconButton.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { Ripple, RippleActionsRef } from \"../../base/ripple/ripple\";\n\nexport interface ChatIconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string;\n edge?: \"start\" | \"end\";\n color?: \"default\" | \"primary\";\n}\n\nexport function ChatIconButton({\n className,\n children,\n disabled,\n edge,\n color = \"default\",\n onMouseDown: onMouseDownProp,\n ...rest\n}: ChatIconButtonProps) {\n const rippleRef = React.useRef<RippleActionsRef>(null);\n\n const onMouseDown = (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseDownProp?.(event);\n };\n\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\n if (!disabled) {\n rippleRef.current?.onRipple(event);\n }\n };\n\n return (\n <button\n type
|
|
1
|
+
{"version":3,"file":"chatIconButton.js","sources":["../../../../src/components/dataDisplay/chat/chatIconButton.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { Ripple, RippleActionsRef } from \"../../base/ripple/ripple\";\n\nexport interface ChatIconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n className?: string;\n edge?: \"start\" | \"end\";\n color?: \"default\" | \"primary\";\n}\n\nexport function ChatIconButton({\n className,\n children,\n disabled,\n edge,\n color = \"default\",\n onMouseDown: onMouseDownProp,\n // The button sets this on its root too; its own handler calls the caller's first.\n onPointerDown: onPointerDownProp,\n // A default: the caller's type wins.\n type = \"button\",\n ...rest\n}: ChatIconButtonProps) {\n const rippleRef = React.useRef<RippleActionsRef>(null);\n\n const onMouseDown = (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseDownProp?.(event);\n };\n\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement>) => {\n onPointerDownProp?.(event);\n if (!disabled) {\n rippleRef.current?.onRipple(event);\n }\n };\n\n return (\n <button\n type={type}\n className={cn(\n \"smwb-chat-icon-button\",\n edge === \"start\" && \"smwb-chat-icon-button_edge-start\",\n edge === \"end\" && \"smwb-chat-icon-button_edge-end\",\n color === \"primary\" && \"smwb-chat-icon-button_primary\",\n disabled && \"smwb-chat-icon-button_disabled\",\n className\n )}\n disabled={disabled}\n onMouseDown={onMouseDown}\n onPointerDown={onPointerDown}\n {...rest}\n >\n {children}\n {!disabled ? <Ripple actionRef={rippleRef} center /> : null}\n </button>\n );\n}\n\nexport default ChatIconButton;\n"],"names":["ChatIconButton","className","children","disabled","edge","color","onMouseDownProp","onPointerDownProp","type","rest","rippleRef","React","onMouseDown","event","onPointerDown","_a","jsxs","cn","jsx","Ripple"],"mappings":";;;;AAUO,SAASA,EAAe;AAAA,EAC7B,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,aAAaC;AAAA;AAAA,EAEb,eAAeC;AAAA;AAAA,EAEf,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,GAAwB;AACtB,QAAMC,IAAYC,EAAM,OAAyB,IAAI,GAE/CC,IAAc,CAACC,MAA+C;AAClE,IAAAP,KAAA,QAAAA,EAAkBO;AAAA,EACpB,GAEMC,IAAgB,CAACD,MAAiD;;AACtE,IAAAN,KAAA,QAAAA,EAAoBM,IACfV,MACHY,IAAAL,EAAU,YAAV,QAAAK,EAAmB,SAASF;AAAA,EAEhC;AAEA,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAR;AAAA,MACA,WAAWS;AAAA,QACT;AAAA,QACAb,MAAS,WAAW;AAAA,QACpBA,MAAS,SAAS;AAAA,QAClBC,MAAU,aAAa;AAAA,QACvBF,KAAY;AAAA,QACZF;AAAA,MAAA;AAAA,MAEF,UAAAE;AAAA,MACA,aAAAS;AAAA,MACA,eAAAE;AAAA,MACC,GAAGL;AAAA,MAEH,UAAA;AAAA,QAAAP;AAAA,QACCC,IAAqD,OAA1C,gBAAAe,EAACC,GAAA,EAAO,WAAWT,GAAW,QAAM,IAAC;AAAA,MAAK;AAAA,IAAA;AAAA,EAAA;AAG7D;"}
|
|
@@ -15,6 +15,8 @@ export interface ChatLayoutProps extends PropsWithChildren, HTMLAttributes<HTMLD
|
|
|
15
15
|
expandAriaLabel?: string;
|
|
16
16
|
floatingAnchor?: ChatAnchor;
|
|
17
17
|
chat: ChatLayoutChatProps;
|
|
18
|
+
/** Test id of the root `<div>`; `chat-layout` unless given. */
|
|
19
|
+
"data-testid"?: string;
|
|
18
20
|
}
|
|
19
|
-
export declare function ChatLayout({ className, contentClassName, chatClassName, side, chatWidth, collapsed: collapsedProp, defaultCollapsed, onCollapsedChange, collapseAriaLabel, expandAriaLabel, floatingAnchor, chat, children, style, ...rest }: ChatLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function ChatLayout({ className, contentClassName, chatClassName, side, chatWidth, collapsed: collapsedProp, defaultCollapsed, onCollapsedChange, collapseAriaLabel, expandAriaLabel, floatingAnchor, chat, children, style, "data-testid": dataTestId, ...rest }: ChatLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
20
22
|
export default ChatLayout;
|
|
@@ -1,102 +1,103 @@
|
|
|
1
|
-
import { jsxs as l, Fragment as
|
|
2
|
-
import { useEffect as
|
|
1
|
+
import { jsxs as l, Fragment as b, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as H } from "react";
|
|
3
3
|
import n from "clsx";
|
|
4
|
-
import { Icon as
|
|
5
|
-
import { ChatIconButton as
|
|
6
|
-
import { useControllableState as
|
|
7
|
-
import { Chat as
|
|
8
|
-
const
|
|
9
|
-
function
|
|
4
|
+
import { Icon as g } from "../../base/icon/icon.js";
|
|
5
|
+
import { ChatIconButton as w } from "./chatIconButton.js";
|
|
6
|
+
import { useControllableState as C } from "../../../hooks/useControllableState.js";
|
|
7
|
+
import { Chat as x } from "./chat.js";
|
|
8
|
+
const S = (a) => typeof a == "number" ? `${a}px` : a, $ = (a) => a === "left" ? "bottom-left" : "bottom-right";
|
|
9
|
+
function R({
|
|
10
10
|
className: a,
|
|
11
|
-
contentClassName:
|
|
12
|
-
chatClassName:
|
|
11
|
+
contentClassName: i,
|
|
12
|
+
chatClassName: r,
|
|
13
13
|
side: e = "right",
|
|
14
|
-
chatWidth:
|
|
15
|
-
collapsed:
|
|
16
|
-
defaultCollapsed:
|
|
17
|
-
onCollapsedChange:
|
|
18
|
-
collapseAriaLabel:
|
|
19
|
-
expandAriaLabel:
|
|
20
|
-
floatingAnchor:
|
|
14
|
+
chatWidth: k = 400,
|
|
15
|
+
collapsed: I,
|
|
16
|
+
defaultCollapsed: N = !1,
|
|
17
|
+
onCollapsedChange: v,
|
|
18
|
+
collapseAriaLabel: A = "Collapse chat panel",
|
|
19
|
+
expandAriaLabel: B = "Expand chat panel",
|
|
20
|
+
floatingAnchor: s,
|
|
21
21
|
chat: o,
|
|
22
22
|
children: u,
|
|
23
23
|
style: p,
|
|
24
|
-
|
|
24
|
+
"data-testid": m = "chat-layout",
|
|
25
|
+
...f
|
|
25
26
|
}) {
|
|
26
|
-
const [
|
|
27
|
-
value:
|
|
28
|
-
defaultValue:
|
|
29
|
-
onChange:
|
|
30
|
-
}), [
|
|
27
|
+
const [c, h] = C({
|
|
28
|
+
value: I,
|
|
29
|
+
defaultValue: N,
|
|
30
|
+
onChange: v
|
|
31
|
+
}), [F, d] = C({
|
|
31
32
|
defaultValue: !1
|
|
32
33
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}, [
|
|
36
|
-
const
|
|
37
|
-
|
|
34
|
+
H(() => {
|
|
35
|
+
c || d(!1);
|
|
36
|
+
}, [c, d]);
|
|
37
|
+
const L = s != null ? s : $(e), O = e === "left" ? "dock_to_left" : "dock_to_right", V = /* @__PURE__ */ t(
|
|
38
|
+
w,
|
|
38
39
|
{
|
|
39
|
-
"aria-label":
|
|
40
|
+
"aria-label": A,
|
|
40
41
|
"data-testid": "chat-layout-collapse",
|
|
41
42
|
onClick: () => h(!0),
|
|
42
|
-
children: /* @__PURE__ */ t(
|
|
43
|
+
children: /* @__PURE__ */ t(g, { name: e === "left" ? "left_panel_close" : "right_panel_close", size: 18 })
|
|
43
44
|
}
|
|
44
|
-
),
|
|
45
|
-
o.headerActions,
|
|
46
|
-
O
|
|
47
|
-
] }), z = /* @__PURE__ */ l(_, { children: [
|
|
45
|
+
), j = /* @__PURE__ */ t(w, { "aria-label": B, "data-testid": "chat-layout-expand", onClick: () => h(!1), children: /* @__PURE__ */ t(g, { name: O, size: 18 }) }), z = /* @__PURE__ */ l(b, { children: [
|
|
48
46
|
o.headerActions,
|
|
49
47
|
V
|
|
50
|
-
] }),
|
|
51
|
-
|
|
48
|
+
] }), E = /* @__PURE__ */ l(b, { children: [
|
|
49
|
+
o.headerActions,
|
|
50
|
+
j
|
|
51
|
+
] }), y = {
|
|
52
|
+
"--smwb-chat-layout-w": S(k)
|
|
52
53
|
};
|
|
53
|
-
if (
|
|
54
|
+
if (c)
|
|
54
55
|
return /* @__PURE__ */ l(
|
|
55
56
|
"div",
|
|
56
57
|
{
|
|
57
58
|
className: n("smwb-chat-layout", "smwb-chat-layout_collapsed", a),
|
|
58
|
-
style: { ...
|
|
59
|
-
"data-testid":
|
|
59
|
+
style: { ...y, ...p },
|
|
60
|
+
"data-testid": m,
|
|
61
|
+
...f,
|
|
60
62
|
"data-collapsed": "true",
|
|
61
|
-
...m,
|
|
62
63
|
children: [
|
|
63
|
-
/* @__PURE__ */ t("div", { className: n("smwb-chat-layout__content",
|
|
64
|
+
/* @__PURE__ */ t("div", { className: n("smwb-chat-layout__content", i), "data-testid": "chat-layout-content", children: u }),
|
|
64
65
|
/* @__PURE__ */ t(
|
|
65
|
-
|
|
66
|
+
x,
|
|
66
67
|
{
|
|
67
68
|
...o,
|
|
68
|
-
className:
|
|
69
|
+
className: r,
|
|
69
70
|
floatingTrigger: !0,
|
|
70
|
-
anchor:
|
|
71
|
+
anchor: L,
|
|
71
72
|
allowedLayouts: ["floating"],
|
|
72
73
|
layout: "floating",
|
|
73
|
-
open:
|
|
74
|
+
open: F,
|
|
74
75
|
onOpenChange: d,
|
|
75
|
-
headerActions:
|
|
76
|
+
headerActions: E
|
|
76
77
|
}
|
|
77
78
|
)
|
|
78
79
|
]
|
|
79
80
|
}
|
|
80
81
|
);
|
|
81
|
-
const
|
|
82
|
+
const _ = /* @__PURE__ */ t("aside", { className: "smwb-chat-layout__panel", "data-testid": "chat-layout-panel", children: /* @__PURE__ */ t(x, { ...o, className: r, embedded: !0, allowedLayouts: [], headerActions: z }) });
|
|
82
83
|
return /* @__PURE__ */ l(
|
|
83
84
|
"div",
|
|
84
85
|
{
|
|
85
86
|
className: n("smwb-chat-layout", `smwb-chat-layout_${e}`, a),
|
|
86
|
-
style: { ...
|
|
87
|
-
"data-testid":
|
|
87
|
+
style: { ...y, ...p },
|
|
88
|
+
"data-testid": m,
|
|
89
|
+
...f,
|
|
88
90
|
"data-collapsed": "false",
|
|
89
|
-
...m,
|
|
90
91
|
children: [
|
|
91
|
-
e === "left" ?
|
|
92
|
-
/* @__PURE__ */ t("div", { className: n("smwb-chat-layout__content",
|
|
93
|
-
e === "right" ?
|
|
92
|
+
e === "left" ? _ : null,
|
|
93
|
+
/* @__PURE__ */ t("div", { className: n("smwb-chat-layout__content", i), "data-testid": "chat-layout-content", children: u }),
|
|
94
|
+
e === "right" ? _ : null
|
|
94
95
|
]
|
|
95
96
|
}
|
|
96
97
|
);
|
|
97
98
|
}
|
|
98
99
|
export {
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
R as ChatLayout,
|
|
101
|
+
R as default
|
|
101
102
|
};
|
|
102
103
|
//# sourceMappingURL=chatLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatLayout.js","sources":["../../../../src/components/dataDisplay/chat/chatLayout.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, useEffect } from \"react\";\nimport cn from \"clsx\";\nimport Icon from \"../../base/icon/icon\";\nimport ChatIconButton from \"./chatIconButton\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport Chat, { ChatProps } from \"./chat\";\nimport { ChatAnchor, ChatLayoutSide } from \"./types\";\n\nconst len = (value: number | string) => (typeof value === \"number\" ? `${value}px` : value);\n\nconst floatingAnchorForSide = (side: ChatLayoutSide): ChatAnchor => (side === \"left\" ? \"bottom-left\" : \"bottom-right\");\n\nexport type ChatLayoutChatProps = Omit<\n ChatProps,\n | \"className\"\n | \"embedded\"\n | \"floatingTrigger\"\n | \"anchor\"\n | \"allowedLayouts\"\n | \"layout\"\n | \"defaultLayout\"\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"onLayoutChange\"\n>;\n\nexport interface ChatLayoutProps extends PropsWithChildren, HTMLAttributes<HTMLDivElement> {\n className?: string;\n contentClassName?: string;\n chatClassName?: string;\n side?: ChatLayoutSide;\n chatWidth?: number | string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n collapseAriaLabel?: string;\n expandAriaLabel?: string;\n floatingAnchor?: ChatAnchor;\n chat: ChatLayoutChatProps;\n}\n\nexport function ChatLayout({\n className,\n contentClassName,\n chatClassName,\n side = \"right\",\n chatWidth = 400,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseAriaLabel = \"Collapse chat panel\",\n expandAriaLabel = \"Expand chat panel\",\n floatingAnchor,\n chat,\n children,\n style,\n ...rest\n}: ChatLayoutProps) {\n const [collapsed, setCollapsed] = useControllableState<boolean>({\n value: collapsedProp,\n defaultValue: defaultCollapsed,\n onChange: onCollapsedChange,\n });\n\n const [floatingOpen, setFloatingOpen] = useControllableState<boolean>({\n defaultValue: false,\n });\n\n useEffect(() => {\n if (!collapsed) {\n setFloatingOpen(false);\n }\n }, [collapsed, setFloatingOpen]);\n\n const anchor = floatingAnchor ?? floatingAnchorForSide(side);\n const dockIcon = side === \"left\" ? \"dock_to_left\" : \"dock_to_right\";\n const collapseIcon = side === \"left\" ? \"left_panel_close\" : \"right_panel_close\";\n\n const collapseButton = (\n <ChatIconButton\n aria-label={collapseAriaLabel}\n data-testid=\"chat-layout-collapse\"\n onClick={() => setCollapsed(true)}\n >\n <Icon name={collapseIcon} size={18} />\n </ChatIconButton>\n );\n\n const expandButton = (\n <ChatIconButton aria-label={expandAriaLabel} data-testid=\"chat-layout-expand\" onClick={() => setCollapsed(false)}>\n <Icon name={dockIcon} size={18} />\n </ChatIconButton>\n );\n\n const dockedHeaderActions = (\n <>\n {chat.headerActions}\n {collapseButton}\n </>\n );\n\n const floatingHeaderActions = (\n <>\n {chat.headerActions}\n {expandButton}\n </>\n );\n\n const cssVars = {\n \"--smwb-chat-layout-w\": len(chatWidth),\n } as CSSProperties;\n\n if (collapsed) {\n return (\n <div\n className={cn(\"smwb-chat-layout\", \"smwb-chat-layout_collapsed\", className)}\n style={{ ...cssVars, ...style }}\n data-testid
|
|
1
|
+
{"version":3,"file":"chatLayout.js","sources":["../../../../src/components/dataDisplay/chat/chatLayout.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, useEffect } from \"react\";\nimport cn from \"clsx\";\nimport Icon from \"../../base/icon/icon\";\nimport ChatIconButton from \"./chatIconButton\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport Chat, { ChatProps } from \"./chat\";\nimport { ChatAnchor, ChatLayoutSide } from \"./types\";\n\nconst len = (value: number | string) => (typeof value === \"number\" ? `${value}px` : value);\n\nconst floatingAnchorForSide = (side: ChatLayoutSide): ChatAnchor => (side === \"left\" ? \"bottom-left\" : \"bottom-right\");\n\nexport type ChatLayoutChatProps = Omit<\n ChatProps,\n | \"className\"\n | \"embedded\"\n | \"floatingTrigger\"\n | \"anchor\"\n | \"allowedLayouts\"\n | \"layout\"\n | \"defaultLayout\"\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"onLayoutChange\"\n>;\n\nexport interface ChatLayoutProps extends PropsWithChildren, HTMLAttributes<HTMLDivElement> {\n className?: string;\n contentClassName?: string;\n chatClassName?: string;\n side?: ChatLayoutSide;\n chatWidth?: number | string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n collapseAriaLabel?: string;\n expandAriaLabel?: string;\n floatingAnchor?: ChatAnchor;\n chat: ChatLayoutChatProps;\n /** Test id of the root `<div>`; `chat-layout` unless given. */\n \"data-testid\"?: string;\n}\n\nexport function ChatLayout({\n className,\n contentClassName,\n chatClassName,\n side = \"right\",\n chatWidth = 400,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseAriaLabel = \"Collapse chat panel\",\n expandAriaLabel = \"Expand chat panel\",\n floatingAnchor,\n chat,\n children,\n style,\n \"data-testid\": dataTestId = \"chat-layout\",\n ...rest\n}: ChatLayoutProps) {\n const [collapsed, setCollapsed] = useControllableState<boolean>({\n value: collapsedProp,\n defaultValue: defaultCollapsed,\n onChange: onCollapsedChange,\n });\n\n const [floatingOpen, setFloatingOpen] = useControllableState<boolean>({\n defaultValue: false,\n });\n\n useEffect(() => {\n if (!collapsed) {\n setFloatingOpen(false);\n }\n }, [collapsed, setFloatingOpen]);\n\n const anchor = floatingAnchor ?? floatingAnchorForSide(side);\n const dockIcon = side === \"left\" ? \"dock_to_left\" : \"dock_to_right\";\n const collapseIcon = side === \"left\" ? \"left_panel_close\" : \"right_panel_close\";\n\n const collapseButton = (\n <ChatIconButton\n aria-label={collapseAriaLabel}\n data-testid=\"chat-layout-collapse\"\n onClick={() => setCollapsed(true)}\n >\n <Icon name={collapseIcon} size={18} />\n </ChatIconButton>\n );\n\n const expandButton = (\n <ChatIconButton aria-label={expandAriaLabel} data-testid=\"chat-layout-expand\" onClick={() => setCollapsed(false)}>\n <Icon name={dockIcon} size={18} />\n </ChatIconButton>\n );\n\n const dockedHeaderActions = (\n <>\n {chat.headerActions}\n {collapseButton}\n </>\n );\n\n const floatingHeaderActions = (\n <>\n {chat.headerActions}\n {expandButton}\n </>\n );\n\n const cssVars = {\n \"--smwb-chat-layout-w\": len(chatWidth),\n } as CSSProperties;\n\n if (collapsed) {\n return (\n <div\n className={cn(\"smwb-chat-layout\", \"smwb-chat-layout_collapsed\", className)}\n style={{ ...cssVars, ...style }}\n data-testid={dataTestId}\n {...rest}\n // The collapsed state is the layout's own; it wins over the caller's.\n data-collapsed=\"true\"\n >\n <div className={cn(\"smwb-chat-layout__content\", contentClassName)} data-testid=\"chat-layout-content\">\n {children}\n </div>\n <Chat\n {...chat}\n className={chatClassName}\n floatingTrigger\n anchor={anchor}\n allowedLayouts={[\"floating\"]}\n layout=\"floating\"\n open={floatingOpen}\n onOpenChange={setFloatingOpen}\n headerActions={floatingHeaderActions}\n />\n </div>\n );\n }\n\n const panel = (\n <aside className=\"smwb-chat-layout__panel\" data-testid=\"chat-layout-panel\">\n <Chat {...chat} className={chatClassName} embedded allowedLayouts={[]} headerActions={dockedHeaderActions} />\n </aside>\n );\n\n return (\n <div\n className={cn(\"smwb-chat-layout\", `smwb-chat-layout_${side}`, className)}\n style={{ ...cssVars, ...style }}\n data-testid={dataTestId}\n {...rest}\n // The collapsed state is the layout's own; it wins over the caller's.\n data-collapsed=\"false\"\n >\n {side === \"left\" ? panel : null}\n <div className={cn(\"smwb-chat-layout__content\", contentClassName)} data-testid=\"chat-layout-content\">\n {children}\n </div>\n {side === \"right\" ? panel : null}\n </div>\n );\n}\n\nexport default ChatLayout;\n"],"names":["len","value","floatingAnchorForSide","side","ChatLayout","className","contentClassName","chatClassName","chatWidth","collapsedProp","defaultCollapsed","onCollapsedChange","collapseAriaLabel","expandAriaLabel","floatingAnchor","chat","children","style","dataTestId","rest","collapsed","setCollapsed","useControllableState","floatingOpen","setFloatingOpen","useEffect","anchor","dockIcon","collapseButton","jsx","ChatIconButton","Icon","expandButton","dockedHeaderActions","jsxs","Fragment","floatingHeaderActions","cssVars","cn","Chat","panel"],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export interface ChatOverlayLayoutProps extends PropsWithChildren, HTMLAttribute
|
|
|
12
12
|
defaultLayout?: ChatLayoutMode;
|
|
13
13
|
defaultOpen?: boolean;
|
|
14
14
|
chat: ChatOverlayLayoutChatProps;
|
|
15
|
+
/** Test id of the root `<div>`; `chat-overlay-layout` unless given. */
|
|
16
|
+
"data-testid"?: string;
|
|
15
17
|
}
|
|
16
|
-
export declare function ChatOverlayLayout({ className, contentClassName, chatClassName, side, chatWidth, allowedLayouts, defaultLayout, defaultOpen, chat, children, style, ...rest }: ChatOverlayLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export declare function ChatOverlayLayout({ className, contentClassName, chatClassName, side, chatWidth, allowedLayouts, defaultLayout, defaultOpen, chat, children, style, "data-testid": dataTestId, ...rest }: ChatOverlayLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
17
19
|
export default ChatOverlayLayout;
|
|
@@ -3,7 +3,7 @@ export type { ChatLayoutProps, ChatLayoutChatProps } from "./chatLayout";
|
|
|
3
3
|
export { default as ChatOverlayLayout } from "./chatOverlayLayout";
|
|
4
4
|
export type { ChatOverlayLayoutProps, ChatOverlayLayoutChatProps } from "./chatOverlayLayout";
|
|
5
5
|
export { default as Chat } from "./chat";
|
|
6
|
-
export type { ChatProps } from "./chat";
|
|
6
|
+
export type { ChatProps, ChatFooterComposerProps } from "./chat";
|
|
7
7
|
export { default as ChatShell } from "./chatShell";
|
|
8
8
|
export type { ChatShellProps } from "./chatShell";
|
|
9
9
|
export { default as ChatHeader } from "./chatHeader";
|
|
@@ -14,10 +14,24 @@ export declare function shouldShowChatCloseButton(options: {
|
|
|
14
14
|
effectiveLayout?: ChatLayoutMode;
|
|
15
15
|
showCloseButton?: boolean;
|
|
16
16
|
}): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Deprecated: the newline flags of the old `ChatComposer`. `Composer` picks the send key with `sendKey` instead
|
|
19
|
+
* (`"enter"` = Enter sends, Shift+Enter makes a newline; `"modEnter"` = Ctrl/⌘+Enter sends). Removed with
|
|
20
|
+
* `ChatComposer` in the next major.
|
|
21
|
+
*
|
|
22
|
+
* @deprecated Use `Composer`'s `sendKey`; see the README section "Migrating from ChatComposer".
|
|
23
|
+
*/
|
|
17
24
|
export interface ChatComposerNewlineOptions {
|
|
18
25
|
shiftEnterNewline?: boolean;
|
|
19
26
|
ctrlEnterNewline?: boolean;
|
|
20
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Deprecated: the key rule of the old `ChatComposer` (which Enter sends, which makes a newline).
|
|
30
|
+
* `Composer` resolves the same choice through `sendKey` in `resolveComposerKeyAction`, and `Chat` draws a `Composer`
|
|
31
|
+
* by default. Kept for `ChatComposer` and `legacyComposer` only; removed in the next major.
|
|
32
|
+
*
|
|
33
|
+
* @deprecated Use `Composer`'s `sendKey`; see the README section "Migrating from ChatComposer".
|
|
34
|
+
*/
|
|
21
35
|
export declare function shouldComposerNewlineOnEnter(event: {
|
|
22
36
|
key: string;
|
|
23
37
|
shiftKey: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/components/dataDisplay/chat/utils.ts"],"sourcesContent":["import {\n ChatAttachment,\n ChatLayoutMode,\n CHAT_EXPAND_LAYOUTS,\n CHAT_MESSAGE_DELIVERY_STATUSES,\n CHAT_MESSAGE_STATUS_ICONS,\n CHAT_MESSAGE_STATUS_LABELS,\n ChatMessageDeliveryStatus,\n ChatMessageStatus,\n ChatMessageStatusIcons,\n} from \"./types\";\n\nexport function isChatMessageDeliveryStatus(status: ChatMessageStatus): status is ChatMessageDeliveryStatus {\n return CHAT_MESSAGE_DELIVERY_STATUSES.includes(status as ChatMessageDeliveryStatus);\n}\n\nexport function resolveChatMessageStatusIcon(\n status: ChatMessageStatus,\n icons?: ChatMessageStatusIcons & Record<string, string | undefined>\n): string | undefined {\n const custom = icons?.[status];\n if (custom) {\n return custom;\n }\n\n if (isChatMessageDeliveryStatus(status)) {\n return CHAT_MESSAGE_STATUS_ICONS[status];\n }\n\n return undefined;\n}\n\nexport function resolveChatMessageStatusLabel(status: ChatMessageStatus): string {\n if (isChatMessageDeliveryStatus(status)) {\n return CHAT_MESSAGE_STATUS_LABELS[status];\n }\n\n return String(status);\n}\n\nexport function isImageAttachment(attachment: ChatAttachment): boolean {\n if (attachment.mimeType?.startsWith(\"image/\")) {\n return true;\n }\n\n return /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name);\n}\n\nexport function formatChatTimestamp(value?: string | Date): string {\n if (!value) {\n return \"\";\n }\n\n const date = value instanceof Date ? value : new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return String(value);\n }\n\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n}\n\nexport function resolveAllowedLayouts(input?: ChatLayoutMode[]): ChatLayoutMode[] {\n if (input == null) {\n return [\"floating\"];\n }\n\n if (input.length === 0) {\n return [];\n }\n\n return CHAT_EXPAND_LAYOUTS.filter((mode) => input.includes(mode));\n}\n\nexport function pickInitialLayout(allowed: ChatLayoutMode[], preferred?: ChatLayoutMode): ChatLayoutMode {\n if (preferred && preferred !== \"closed\" && allowed.includes(preferred)) {\n return preferred;\n }\n\n return allowed[0] ?? \"floating\";\n}\n\nexport function getChatLayoutActions(\n allowedLayouts: ChatLayoutMode[],\n currentLayout?: ChatLayoutMode\n): Exclude<ChatLayoutMode, \"closed\">[] {\n return resolveAllowedLayouts(allowedLayouts).filter(\n (mode): mode is Exclude<ChatLayoutMode, \"closed\"> => mode !== \"closed\" && mode !== currentLayout\n );\n}\n\nexport function shouldShowChatCloseButton(options: {\n floatingTrigger?: boolean;\n embedded?: boolean;\n overlayContext?: boolean;\n effectiveLayout?: ChatLayoutMode;\n showCloseButton?: boolean;\n}): boolean {\n if (options.showCloseButton === false) {\n return false;\n }\n\n if (options.showCloseButton === true) {\n return true;\n }\n\n if (\n options.overlayContext &&\n options.floatingTrigger &&\n !options.embedded &&\n (options.effectiveLayout === \"floating\" || options.effectiveLayout === \"fullHeight\")\n ) {\n return true;\n }\n\n return Boolean(options.floatingTrigger && !options.embedded && options.effectiveLayout === \"floating\");\n}\n\nexport interface ChatComposerNewlineOptions {\n shiftEnterNewline?: boolean;\n ctrlEnterNewline?: boolean;\n}\n\nexport function shouldComposerNewlineOnEnter(\n event: { key: string; shiftKey: boolean; ctrlKey: boolean; metaKey: boolean },\n options: ChatComposerNewlineOptions = {}\n): boolean {\n if (event.key !== \"Enter\") {\n return false;\n }\n\n const { shiftEnterNewline = true, ctrlEnterNewline = true } = options;\n const isCtrl = event.ctrlKey || event.metaKey;\n\n if (shiftEnterNewline && event.shiftKey && !isCtrl) {\n return true;\n }\n\n if (ctrlEnterNewline && isCtrl && !event.shiftKey) {\n return true;\n }\n\n return false;\n}\n"],"names":["isChatMessageDeliveryStatus","status","CHAT_MESSAGE_DELIVERY_STATUSES","resolveChatMessageStatusIcon","icons","custom","CHAT_MESSAGE_STATUS_ICONS","resolveChatMessageStatusLabel","CHAT_MESSAGE_STATUS_LABELS","isImageAttachment","attachment","_a","formatChatTimestamp","value","date","resolveAllowedLayouts","input","CHAT_EXPAND_LAYOUTS","mode","pickInitialLayout","allowed","preferred","getChatLayoutActions","allowedLayouts","currentLayout","shouldShowChatCloseButton","options","shouldComposerNewlineOnEnter","event","shiftEnterNewline","ctrlEnterNewline","isCtrl"],"mappings":";AAYO,SAASA,EAA4BC,GAAgE;AAC1G,SAAOC,EAA+B,SAASD,CAAmC;AACpF;AAEO,SAASE,EACdF,GACAG,GACoB;AACpB,QAAMC,IAASD,KAAA,gBAAAA,EAAQH;AACvB,MAAII;AACF,WAAOA;AAGT,MAAIL,EAA4BC,CAAM;AACpC,WAAOK,EAA0BL,CAAM;AAI3C;AAEO,SAASM,EAA8BN,GAAmC;AAC/E,SAAID,EAA4BC,CAAM,IAC7BO,EAA2BP,CAAM,IAGnC,OAAOA,CAAM;AACtB;AAEO,SAASQ,EAAkBC,GAAqC;;AACrE,UAAIC,IAAAD,EAAW,aAAX,QAAAC,EAAqB,WAAW,YAC3B,KAGF,mCAAmC,KAAKD,EAAW,IAAI;AAChE;AAEO,SAASE,EAAoBC,GAA+B;AACjE,MAAI,CAACA;AACH,WAAO;AAGT,QAAMC,IAAOD,aAAiB,OAAOA,IAAQ,IAAI,KAAKA,CAAK;AAE3D,SAAI,OAAO,MAAMC,EAAK,QAAA,CAAS,IACtB,OAAOD,CAAK,IAGd,IAAI,KAAK,eAAe,QAAW;AAAA,IACxC,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT,EAAE,OAAOC,CAAI;AAChB;AAEO,SAASC,EAAsBC,GAA4C;AAChF,SAAIA,KAAS,OACJ,CAAC,UAAU,IAGhBA,EAAM,WAAW,IACZ,CAAA,IAGFC,EAAoB,OAAO,CAACC,MAASF,EAAM,SAASE,CAAI,CAAC;AAClE;AAEO,SAASC,EAAkBC,GAA2BC,GAA4C;;AACvG,SAAIA,KAAaA,MAAc,YAAYD,EAAQ,SAASC,CAAS,IAC5DA,KAGFV,IAAAS,EAAQ,CAAC,MAAT,OAAAT,IAAc;AACvB;AAEO,SAASW,EACdC,GACAC,GACqC;AACrC,SAAOT,EAAsBQ,CAAc,EAAE;AAAA,IAC3C,CAACL,MAAoDA,MAAS,YAAYA,MAASM;AAAA,EAAA;AAEvF;AAEO,SAASC,EAA0BC,GAM9B;AACV,SAAIA,EAAQ,oBAAoB,KACvB,KAGLA,EAAQ,oBAAoB,MAK9BA,EAAQ,kBACRA,EAAQ,mBACR,CAACA,EAAQ,aACRA,EAAQ,oBAAoB,cAAcA,EAAQ,oBAAoB,gBAEhE,KAGF,GAAQA,EAAQ,mBAAmB,CAACA,EAAQ,YAAYA,EAAQ,oBAAoB;AAC7F;
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/components/dataDisplay/chat/utils.ts"],"sourcesContent":["import {\n ChatAttachment,\n ChatLayoutMode,\n CHAT_EXPAND_LAYOUTS,\n CHAT_MESSAGE_DELIVERY_STATUSES,\n CHAT_MESSAGE_STATUS_ICONS,\n CHAT_MESSAGE_STATUS_LABELS,\n ChatMessageDeliveryStatus,\n ChatMessageStatus,\n ChatMessageStatusIcons,\n} from \"./types\";\n\nexport function isChatMessageDeliveryStatus(status: ChatMessageStatus): status is ChatMessageDeliveryStatus {\n return CHAT_MESSAGE_DELIVERY_STATUSES.includes(status as ChatMessageDeliveryStatus);\n}\n\nexport function resolveChatMessageStatusIcon(\n status: ChatMessageStatus,\n icons?: ChatMessageStatusIcons & Record<string, string | undefined>\n): string | undefined {\n const custom = icons?.[status];\n if (custom) {\n return custom;\n }\n\n if (isChatMessageDeliveryStatus(status)) {\n return CHAT_MESSAGE_STATUS_ICONS[status];\n }\n\n return undefined;\n}\n\nexport function resolveChatMessageStatusLabel(status: ChatMessageStatus): string {\n if (isChatMessageDeliveryStatus(status)) {\n return CHAT_MESSAGE_STATUS_LABELS[status];\n }\n\n return String(status);\n}\n\nexport function isImageAttachment(attachment: ChatAttachment): boolean {\n if (attachment.mimeType?.startsWith(\"image/\")) {\n return true;\n }\n\n return /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name);\n}\n\nexport function formatChatTimestamp(value?: string | Date): string {\n if (!value) {\n return \"\";\n }\n\n const date = value instanceof Date ? value : new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return String(value);\n }\n\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n}\n\nexport function resolveAllowedLayouts(input?: ChatLayoutMode[]): ChatLayoutMode[] {\n if (input == null) {\n return [\"floating\"];\n }\n\n if (input.length === 0) {\n return [];\n }\n\n return CHAT_EXPAND_LAYOUTS.filter((mode) => input.includes(mode));\n}\n\nexport function pickInitialLayout(allowed: ChatLayoutMode[], preferred?: ChatLayoutMode): ChatLayoutMode {\n if (preferred && preferred !== \"closed\" && allowed.includes(preferred)) {\n return preferred;\n }\n\n return allowed[0] ?? \"floating\";\n}\n\nexport function getChatLayoutActions(\n allowedLayouts: ChatLayoutMode[],\n currentLayout?: ChatLayoutMode\n): Exclude<ChatLayoutMode, \"closed\">[] {\n return resolveAllowedLayouts(allowedLayouts).filter(\n (mode): mode is Exclude<ChatLayoutMode, \"closed\"> => mode !== \"closed\" && mode !== currentLayout\n );\n}\n\nexport function shouldShowChatCloseButton(options: {\n floatingTrigger?: boolean;\n embedded?: boolean;\n overlayContext?: boolean;\n effectiveLayout?: ChatLayoutMode;\n showCloseButton?: boolean;\n}): boolean {\n if (options.showCloseButton === false) {\n return false;\n }\n\n if (options.showCloseButton === true) {\n return true;\n }\n\n if (\n options.overlayContext &&\n options.floatingTrigger &&\n !options.embedded &&\n (options.effectiveLayout === \"floating\" || options.effectiveLayout === \"fullHeight\")\n ) {\n return true;\n }\n\n return Boolean(options.floatingTrigger && !options.embedded && options.effectiveLayout === \"floating\");\n}\n\n/**\n * Deprecated: the newline flags of the old `ChatComposer`. `Composer` picks the send key with `sendKey` instead\n * (`\"enter\"` = Enter sends, Shift+Enter makes a newline; `\"modEnter\"` = Ctrl/⌘+Enter sends). Removed with\n * `ChatComposer` in the next major.\n *\n * @deprecated Use `Composer`'s `sendKey`; see the README section \"Migrating from ChatComposer\".\n */\nexport interface ChatComposerNewlineOptions {\n shiftEnterNewline?: boolean;\n ctrlEnterNewline?: boolean;\n}\n\n/**\n * Deprecated: the key rule of the old `ChatComposer` (which Enter sends, which makes a newline).\n * `Composer` resolves the same choice through `sendKey` in `resolveComposerKeyAction`, and `Chat` draws a `Composer`\n * by default. Kept for `ChatComposer` and `legacyComposer` only; removed in the next major.\n *\n * @deprecated Use `Composer`'s `sendKey`; see the README section \"Migrating from ChatComposer\".\n */\nexport function shouldComposerNewlineOnEnter(\n event: { key: string; shiftKey: boolean; ctrlKey: boolean; metaKey: boolean },\n options: ChatComposerNewlineOptions = {}\n): boolean {\n if (event.key !== \"Enter\") {\n return false;\n }\n\n const { shiftEnterNewline = true, ctrlEnterNewline = true } = options;\n const isCtrl = event.ctrlKey || event.metaKey;\n\n if (shiftEnterNewline && event.shiftKey && !isCtrl) {\n return true;\n }\n\n if (ctrlEnterNewline && isCtrl && !event.shiftKey) {\n return true;\n }\n\n return false;\n}\n"],"names":["isChatMessageDeliveryStatus","status","CHAT_MESSAGE_DELIVERY_STATUSES","resolveChatMessageStatusIcon","icons","custom","CHAT_MESSAGE_STATUS_ICONS","resolveChatMessageStatusLabel","CHAT_MESSAGE_STATUS_LABELS","isImageAttachment","attachment","_a","formatChatTimestamp","value","date","resolveAllowedLayouts","input","CHAT_EXPAND_LAYOUTS","mode","pickInitialLayout","allowed","preferred","getChatLayoutActions","allowedLayouts","currentLayout","shouldShowChatCloseButton","options","shouldComposerNewlineOnEnter","event","shiftEnterNewline","ctrlEnterNewline","isCtrl"],"mappings":";AAYO,SAASA,EAA4BC,GAAgE;AAC1G,SAAOC,EAA+B,SAASD,CAAmC;AACpF;AAEO,SAASE,EACdF,GACAG,GACoB;AACpB,QAAMC,IAASD,KAAA,gBAAAA,EAAQH;AACvB,MAAII;AACF,WAAOA;AAGT,MAAIL,EAA4BC,CAAM;AACpC,WAAOK,EAA0BL,CAAM;AAI3C;AAEO,SAASM,EAA8BN,GAAmC;AAC/E,SAAID,EAA4BC,CAAM,IAC7BO,EAA2BP,CAAM,IAGnC,OAAOA,CAAM;AACtB;AAEO,SAASQ,EAAkBC,GAAqC;;AACrE,UAAIC,IAAAD,EAAW,aAAX,QAAAC,EAAqB,WAAW,YAC3B,KAGF,mCAAmC,KAAKD,EAAW,IAAI;AAChE;AAEO,SAASE,EAAoBC,GAA+B;AACjE,MAAI,CAACA;AACH,WAAO;AAGT,QAAMC,IAAOD,aAAiB,OAAOA,IAAQ,IAAI,KAAKA,CAAK;AAE3D,SAAI,OAAO,MAAMC,EAAK,QAAA,CAAS,IACtB,OAAOD,CAAK,IAGd,IAAI,KAAK,eAAe,QAAW;AAAA,IACxC,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT,EAAE,OAAOC,CAAI;AAChB;AAEO,SAASC,EAAsBC,GAA4C;AAChF,SAAIA,KAAS,OACJ,CAAC,UAAU,IAGhBA,EAAM,WAAW,IACZ,CAAA,IAGFC,EAAoB,OAAO,CAACC,MAASF,EAAM,SAASE,CAAI,CAAC;AAClE;AAEO,SAASC,EAAkBC,GAA2BC,GAA4C;;AACvG,SAAIA,KAAaA,MAAc,YAAYD,EAAQ,SAASC,CAAS,IAC5DA,KAGFV,IAAAS,EAAQ,CAAC,MAAT,OAAAT,IAAc;AACvB;AAEO,SAASW,EACdC,GACAC,GACqC;AACrC,SAAOT,EAAsBQ,CAAc,EAAE;AAAA,IAC3C,CAACL,MAAoDA,MAAS,YAAYA,MAASM;AAAA,EAAA;AAEvF;AAEO,SAASC,EAA0BC,GAM9B;AACV,SAAIA,EAAQ,oBAAoB,KACvB,KAGLA,EAAQ,oBAAoB,MAK9BA,EAAQ,kBACRA,EAAQ,mBACR,CAACA,EAAQ,aACRA,EAAQ,oBAAoB,cAAcA,EAAQ,oBAAoB,gBAEhE,KAGF,GAAQA,EAAQ,mBAAmB,CAACA,EAAQ,YAAYA,EAAQ,oBAAoB;AAC7F;AAqBO,SAASC,EACdC,GACAF,IAAsC,IAC7B;AACT,MAAIE,EAAM,QAAQ;AAChB,WAAO;AAGT,QAAM,EAAE,mBAAAC,IAAoB,IAAM,kBAAAC,IAAmB,OAASJ,GACxDK,IAASH,EAAM,WAAWA,EAAM;AAMtC,SAJI,GAAAC,KAAqBD,EAAM,YAAY,CAACG,KAIxCD,KAAoBC,KAAU,CAACH,EAAM;AAK3C;"}
|
|
@@ -1,24 +1,55 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export type ChipColor = "default" | "primary" | "secondary" | "error" | "success" | "warning" | "info";
|
|
3
3
|
export interface ChipProps extends React.HTMLAttributes<HTMLSpanElement | HTMLAnchorElement> {
|
|
4
|
+
/**
|
|
5
|
+
* Class name(s) for the chip's root, a `<span>` (an `<a>` with `asLink`). `style`, `id`, `data-*`, `aria-hidden`,
|
|
6
|
+
* `ref` and event handlers go to the root too. In a clickable chip (`onClick`), `role`, `tabIndex`, `onFocus`,
|
|
7
|
+
* `onBlur` and the other `aria-*` attributes go to its button, `.smwb-chip__content` (the icon and the label), which
|
|
8
|
+
* is also the element to focus. Otherwise they stay on the root, which holds the delete button too.
|
|
9
|
+
*/
|
|
4
10
|
className?: string;
|
|
5
11
|
variant?: "filled" | "outlined";
|
|
6
12
|
size?: "small" | "medium";
|
|
7
13
|
color?: ChipColor;
|
|
14
|
+
/**
|
|
15
|
+
* Shows a delete button in the chip and runs when it is pressed: a click, or
|
|
16
|
+
* Enter / Space while the button has focus. In a clickable chip it sits
|
|
17
|
+
* beside the chip's button, not inside it, and pressing it does not run the
|
|
18
|
+
* chip's `onClick`.
|
|
19
|
+
*/
|
|
8
20
|
onDelete?: (event: React.SyntheticEvent) => void;
|
|
9
21
|
icon?: React.ReactNode;
|
|
10
22
|
deleteIcon?: React.ReactNode;
|
|
11
23
|
label: string;
|
|
24
|
+
/**
|
|
25
|
+
* Makes the chip clickable: its icon and label become a button, named by
|
|
26
|
+
* them, with a focus ring around the whole chip. The delete button is not
|
|
27
|
+
* part of that button but its sibling, so it keeps its own name.
|
|
28
|
+
*
|
|
29
|
+
* Runs on a click on the chip and on Enter / Space while the chip's button
|
|
30
|
+
* has focus, but not on a click or key on the delete button.
|
|
31
|
+
*/
|
|
12
32
|
onClick?: () => void;
|
|
13
33
|
onDeleteMouseDown?: React.MouseEventHandler;
|
|
34
|
+
/**
|
|
35
|
+
* Disables the chip: it is dimmed, takes no pointer input and says `aria-disabled`, and its delete button is
|
|
36
|
+
* disabled too. With `onClick` the chip is still a button, out of the tab order.
|
|
37
|
+
*/
|
|
14
38
|
disabled?: boolean;
|
|
15
39
|
asLink?: boolean;
|
|
16
40
|
href?: string;
|
|
17
41
|
/** Open the link in a new tab (asLink only). */
|
|
18
42
|
target?: string;
|
|
19
43
|
selected?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Id of the label's element, for another element to take the chip's text as
|
|
46
|
+
* its name (`aria-labelledby`) without the delete button's name.
|
|
47
|
+
*/
|
|
48
|
+
labelId?: string;
|
|
20
49
|
/** Accessible label for the delete control. */
|
|
21
50
|
deleteAriaLabel?: string;
|
|
51
|
+
/** Test id of the root; `chip`, or `chip-link` for a link, unless given. */
|
|
52
|
+
"data-testid"?: string;
|
|
22
53
|
}
|
|
23
54
|
export declare const Chip: React.ForwardRefExoticComponent<ChipProps & React.RefAttributes<HTMLSpanElement | HTMLAnchorElement>>;
|
|
24
55
|
export default Chip;
|