@smwb/ui-react 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/dist/assets/styles/less/components/avatar/avatar.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/menu/menu.entry.css +1 -1
- package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -1
- 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/table/table.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/typography/typography.entry.css +1 -1
- package/dist/assets/styles/less/connects/rt/table.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/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/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/descriptionList/descriptionList.d.ts +11 -3
- package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
- 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/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/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/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/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 +2 -0
- package/dist/components/dataDisplay/treeView/treeView.js +24 -23
- 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 +40 -40
- 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 +2 -0
- package/dist/components/inputs/button/button.js +62 -58
- 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/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 +2 -0
- package/dist/components/layout/sheet/sheet.js +80 -79
- 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/navigation/appBar/appBar.d.ts +2 -0
- package/dist/components/navigation/appBar/appBar.js +24 -23
- 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/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.js +39 -38
- 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/tab/tab.js +42 -40
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.d.ts +6 -0
- package/dist/components/navigation/tabs/tabs.js +83 -86
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- 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/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/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/descriptionList/descriptionList.js.map +1 -1
- 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/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/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/stat/stat.js +27 -15
- package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
- 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 +24 -23
- 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 +44 -44
- 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 +62 -58
- 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/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 +80 -79
- 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/navigation/appBar/appBar.js +15 -14
- 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/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 +29 -28
- 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 +41 -39
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.js +95 -98
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/hooks/useDismissOnEscape.js +16 -0
- package/dist/headless/hooks/useDismissOnEscape.js.map +1 -0
- package/dist/headless/hooks/useFocusTrap.js +1 -0
- 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/utils/controlProps.js +14 -0
- package/dist/headless/utils/controlProps.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/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 +2 -0
- package/dist/hooks/useFocusTrap.js +1 -0
- 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/index.cjs +2 -2
- package/dist/index.cjs.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/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/package.json +2 -2
|
@@ -1,55 +1,57 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as p, jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import '../../../../assets/styles/less/components/tabs/tab/tab.entry.css';import '../../../../assets/styles/less/tokens.entry.css';/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { Ripple as
|
|
7
|
-
const
|
|
4
|
+
import f from "react";
|
|
5
|
+
import j from "clsx";
|
|
6
|
+
import { Ripple as k } from "../../../base/ripple/ripple.js";
|
|
7
|
+
const y = f.forwardRef(function(w, u) {
|
|
8
8
|
const {
|
|
9
|
-
className:
|
|
10
|
-
label:
|
|
11
|
-
isActive:
|
|
12
|
-
contentRef:
|
|
13
|
-
icon:
|
|
14
|
-
stacked:
|
|
15
|
-
tag:
|
|
16
|
-
disabled:
|
|
17
|
-
onMouseDown:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}, x = (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"smwb-tab--
|
|
9
|
+
className: R,
|
|
10
|
+
label: i,
|
|
11
|
+
isActive: e = !1,
|
|
12
|
+
contentRef: _,
|
|
13
|
+
icon: l,
|
|
14
|
+
stacked: h = !1,
|
|
15
|
+
tag: s,
|
|
16
|
+
disabled: t,
|
|
17
|
+
onMouseDown: n,
|
|
18
|
+
// The tab sets this on its root too; its own handler calls the caller's first.
|
|
19
|
+
onPointerDown: c,
|
|
20
|
+
...b
|
|
21
|
+
} = w, r = f.useRef(null), x = (a) => {
|
|
22
|
+
n == null || n(a);
|
|
23
|
+
}, N = (a) => {
|
|
24
|
+
var m;
|
|
25
|
+
c == null || c(a), (m = r.current) == null || m.onRipple(a);
|
|
26
|
+
}, d = s != null ? s : s || "button", T = j("smwb-tab", R, {
|
|
27
|
+
"smwb-tab--active": e,
|
|
28
|
+
"smwb-tab--stacked": h,
|
|
29
|
+
"smwb-tab--disabled": t
|
|
28
30
|
});
|
|
29
|
-
return /* @__PURE__ */
|
|
30
|
-
|
|
31
|
+
return /* @__PURE__ */ p(
|
|
32
|
+
d,
|
|
31
33
|
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
...b,
|
|
35
|
+
ref: u,
|
|
36
|
+
className: T,
|
|
37
|
+
onMouseDown: x,
|
|
38
|
+
onPointerDown: N,
|
|
36
39
|
role: "tab",
|
|
37
|
-
"aria-selected":
|
|
38
|
-
"aria-disabled":
|
|
39
|
-
tabIndex:
|
|
40
|
-
disabled:
|
|
41
|
-
..._,
|
|
40
|
+
"aria-selected": e,
|
|
41
|
+
"aria-disabled": t || b["aria-disabled"],
|
|
42
|
+
tabIndex: e ? 0 : -1,
|
|
43
|
+
disabled: d === "button" ? t : void 0,
|
|
42
44
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
/* @__PURE__ */ p("span", { className: "smwb-tab__content", ref: _, children: [
|
|
46
|
+
l && /* @__PURE__ */ o("span", { className: "smwb-tab__icon", children: l }),
|
|
47
|
+
i && /* @__PURE__ */ o("span", { className: "smwb-tab__text-label", children: i })
|
|
46
48
|
] }),
|
|
47
|
-
/* @__PURE__ */ o(
|
|
49
|
+
/* @__PURE__ */ o(k, { actionRef: r, classes: { child: "tab__ripple-child" } })
|
|
48
50
|
]
|
|
49
51
|
}
|
|
50
52
|
);
|
|
51
53
|
});
|
|
52
54
|
export {
|
|
53
|
-
|
|
55
|
+
y as Tab
|
|
54
56
|
};
|
|
55
57
|
//# sourceMappingURL=tab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab.js","sources":["../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { Ripple, RippleActionsRef } from \"../../../base/ripple/ripple\";\n\nexport interface TabProps extends React.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: string | React.ReactNode;\n isActive?: boolean;\n contentRef?: React.Ref<unknown>;\n icon?: React.ReactNode;\n stacked?: boolean;\n tag?: React.ElementType;\n /** With `tag=\"a\"`: where the link goes, so the tab stays a real link. */\n href?: string;\n disabled?: boolean;\n}\n\nexport const Tab = React.forwardRef<HTMLButtonElement | HTMLAnchorElement, TabProps>(function Tab(props, ref) {\n const {\n className,\n label,\n isActive = false,\n contentRef,\n icon,\n stacked = false,\n tag,\n disabled,\n onMouseDown: onMouseDownProp,\n ...rest\n } = props;\n const rippleRef = React.useRef<RippleActionsRef>(null);\n\n const onMouseDown = (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n onMouseDownProp?.(event);\n };\n\n // Ripple on pointerdown so it fires for touch and pen, not just mouse.\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n rippleRef.current?.onRipple(event);\n };\n\n const Tag = tag ?? (tag || \"button\");\n const classes = cn(\"smwb-tab\", className, {\n \"smwb-tab--active\": isActive,\n \"smwb-tab--stacked\": stacked,\n \"smwb-tab--disabled\": disabled,\n });\n\n return (\n <Tag\n ref={ref}\n className={classes}\n onMouseDown={onMouseDown}\n onPointerDown={onPointerDown}\n role={\"tab\"}\n aria-selected={isActive}\n aria-disabled={disabled ||
|
|
1
|
+
{"version":3,"file":"tab.js","sources":["../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { Ripple, RippleActionsRef } from \"../../../base/ripple/ripple\";\n\nexport interface TabProps extends React.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: string | React.ReactNode;\n isActive?: boolean;\n contentRef?: React.Ref<unknown>;\n icon?: React.ReactNode;\n stacked?: boolean;\n tag?: React.ElementType;\n /** With `tag=\"a\"`: where the link goes, so the tab stays a real link. */\n href?: string;\n disabled?: boolean;\n}\n\nexport const Tab = React.forwardRef<HTMLButtonElement | HTMLAnchorElement, TabProps>(function Tab(props, ref) {\n const {\n className,\n label,\n isActive = false,\n contentRef,\n icon,\n stacked = false,\n tag,\n disabled,\n onMouseDown: onMouseDownProp,\n // The tab sets this on its root too; its own handler calls the caller's first.\n onPointerDown: onPointerDownProp,\n ...rest\n } = props;\n const rippleRef = React.useRef<RippleActionsRef>(null);\n\n const onMouseDown = (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n onMouseDownProp?.(event);\n };\n\n // Ripple on pointerdown so it fires for touch and pen, not just mouse.\n const onPointerDown = (event: React.PointerEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n onPointerDownProp?.(event);\n rippleRef.current?.onRipple(event);\n };\n\n const Tag = tag ?? (tag || \"button\");\n const classes = cn(\"smwb-tab\", className, {\n \"smwb-tab--active\": isActive,\n \"smwb-tab--stacked\": stacked,\n \"smwb-tab--disabled\": disabled,\n });\n\n return (\n <Tag\n {...rest}\n ref={ref}\n className={classes}\n onMouseDown={onMouseDown}\n onPointerDown={onPointerDown}\n // The role, the selection and the roving tabIndex belong to the tab list:\n // they win over the caller's. A tab that is not disabled keeps the\n // caller's aria-disabled.\n role={\"tab\"}\n aria-selected={isActive}\n aria-disabled={disabled || rest[\"aria-disabled\"]}\n tabIndex={isActive ? 0 : -1}\n disabled={Tag === \"button\" ? disabled : undefined}\n >\n <span className=\"smwb-tab__content\" ref={contentRef as React.Ref<HTMLSpanElement>}>\n {icon && <span className=\"smwb-tab__icon\">{icon}</span>}\n {label && <span className=\"smwb-tab__text-label\">{label}</span>}\n </span>\n <Ripple actionRef={rippleRef} classes={{ child: \"tab__ripple-child\" }} />\n </Tag>\n );\n});\n"],"names":["Tab","React","props","ref","className","label","isActive","contentRef","icon","stacked","tag","disabled","onMouseDownProp","onPointerDownProp","rest","rippleRef","onMouseDown","event","onPointerDown","_a","Tag","classes","cn","jsxs","jsx","Ripple"],"mappings":";;;;;;AAkBO,MAAMA,IAAMC,EAAM,WAA4D,SAAaC,GAAOC,GAAK;AAC5G,QAAM;AAAA,IACJ,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,YAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,KAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAaC;AAAA;AAAA,IAEb,eAAeC;AAAA,IACf,GAAGC;AAAA,EAAA,IACDZ,GACEa,IAAYd,EAAM,OAAyB,IAAI,GAE/Ce,IAAc,CAACC,MAAmE;AACtF,IAAAL,KAAA,QAAAA,EAAkBK;AAAA,EACpB,GAGMC,IAAgB,CAACD,MAAqE;;AAC1F,IAAAJ,KAAA,QAAAA,EAAoBI,KACpBE,IAAAJ,EAAU,YAAV,QAAAI,EAAmB,SAASF;AAAA,EAC9B,GAEMG,IAAMV,KAAA,OAAAA,IAAQA,KAAO,UACrBW,IAAUC,EAAG,YAAYlB,GAAW;AAAA,IACxC,oBAAoBE;AAAA,IACpB,qBAAqBG;AAAA,IACrB,sBAAsBE;AAAA,EAAA,CACvB;AAED,SACE,gBAAAY;AAAA,IAACH;AAAA,IAAA;AAAA,MACE,GAAGN;AAAA,MACJ,KAAAX;AAAA,MACA,WAAWkB;AAAA,MACX,aAAAL;AAAA,MACA,eAAAE;AAAA,MAIA,MAAM;AAAA,MACN,iBAAeZ;AAAA,MACf,iBAAeK,KAAYG,EAAK,eAAe;AAAA,MAC/C,UAAUR,IAAW,IAAI;AAAA,MACzB,UAAUc,MAAQ,WAAWT,IAAW;AAAA,MAExC,UAAA;AAAA,QAAA,gBAAAY,EAAC,QAAA,EAAK,WAAU,qBAAoB,KAAKhB,GACtC,UAAA;AAAA,UAAAC,KAAQ,gBAAAgB,EAAC,QAAA,EAAK,WAAU,kBAAkB,UAAAhB,GAAK;AAAA,UAC/CH,KAAS,gBAAAmB,EAAC,QAAA,EAAK,WAAU,wBAAwB,UAAAnB,EAAA,CAAM;AAAA,QAAA,GAC1D;AAAA,QACA,gBAAAmB,EAACC,KAAO,WAAWV,GAAW,SAAS,EAAE,OAAO,sBAAoB,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG7E,CAAC;"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Tab, TabProps } from "./tab/tab";
|
|
3
3
|
export interface TabsProps {
|
|
4
|
+
/**
|
|
5
|
+
* Index of the selected tab. Tabs count in the order they render: a tab left out,
|
|
6
|
+
* such as `{show && <Tab />}` while `show` is false, takes no index.
|
|
7
|
+
*/
|
|
4
8
|
value: number;
|
|
9
|
+
/** Called with the index of the clicked tab, counted as for `value`. */
|
|
5
10
|
onChange: (e: React.MouseEvent<HTMLButtonElement>, index: number) => void;
|
|
11
|
+
/** Draw the indicator as wide as the selected tab's label rather than the whole tab. */
|
|
6
12
|
indicatorContent?: boolean;
|
|
7
13
|
/**
|
|
8
14
|
* Let the tab row scroll sideways instead of clipping it. The edge beyond which
|
|
@@ -1,31 +1,30 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as y, jsx as i } from "react/jsx-runtime";
|
|
2
2
|
import '../../../assets/styles/less/components/tabs/tabs.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
4
|
import n from "react";
|
|
5
|
-
import
|
|
6
|
-
import { debounce as
|
|
7
|
-
import { useEventCallback as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
const x = {
|
|
5
|
+
import E from "clsx";
|
|
6
|
+
import { debounce as H } from "../../../utils/debounce.js";
|
|
7
|
+
import { useEventCallback as p } from "../../../hooks/useEventCallback.js";
|
|
8
|
+
import { animate as J } from "../../../utils/animate.js";
|
|
9
|
+
import { Icon as M } from "../../base/icon/icon.js";
|
|
10
|
+
const z = {
|
|
12
11
|
root: {},
|
|
13
12
|
content: {}
|
|
14
|
-
},
|
|
13
|
+
}, K = 0.8, ot = n.forwardRef(function(x, k) {
|
|
15
14
|
const {
|
|
16
|
-
className:
|
|
17
|
-
children:
|
|
18
|
-
onChange:
|
|
19
|
-
value:
|
|
20
|
-
indicatorContent:
|
|
21
|
-
scrollable:
|
|
22
|
-
scrollButtons:
|
|
23
|
-
dense:
|
|
24
|
-
scrollBackAriaLabel:
|
|
25
|
-
scrollForwardAriaLabel:
|
|
26
|
-
"aria-label":
|
|
27
|
-
...
|
|
28
|
-
} =
|
|
15
|
+
className: B,
|
|
16
|
+
children: I,
|
|
17
|
+
onChange: W,
|
|
18
|
+
value: v,
|
|
19
|
+
indicatorContent: _ = !1,
|
|
20
|
+
scrollable: m = !1,
|
|
21
|
+
scrollButtons: A = !1,
|
|
22
|
+
dense: O = !1,
|
|
23
|
+
scrollBackAriaLabel: T = "Scroll tabs back",
|
|
24
|
+
scrollForwardAriaLabel: V = "Scroll tabs forward",
|
|
25
|
+
"aria-label": D,
|
|
26
|
+
...P
|
|
27
|
+
} = x, [j, q] = n.useState(!1), [a, L] = n.useState(z), [f, F] = n.useState({ start: !1, end: !1 }), l = n.useRef(null), b = n.useRef(null), S = 40, g = () => {
|
|
29
28
|
const t = l.current;
|
|
30
29
|
let e;
|
|
31
30
|
if (t) {
|
|
@@ -42,15 +41,18 @@ const x = {
|
|
|
42
41
|
};
|
|
43
42
|
}
|
|
44
43
|
let r = null, s = null;
|
|
45
|
-
if (
|
|
46
|
-
const o =
|
|
44
|
+
if (b.current || console.error("tabListRef.current is undefined"), t && b.current) {
|
|
45
|
+
const o = b.current.children;
|
|
47
46
|
if (o.length > 0) {
|
|
48
|
-
const
|
|
49
|
-
r =
|
|
47
|
+
const c = o[v];
|
|
48
|
+
if (r = c ? c.getBoundingClientRect() : null, _) {
|
|
49
|
+
const d = c ? c.querySelector(".smwb-tab__content") : null;
|
|
50
|
+
s = d ? d.getBoundingClientRect() : null;
|
|
51
|
+
}
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
return { tabsMeta: e, tabMeta: r, tabContentMeta: s };
|
|
53
|
-
},
|
|
55
|
+
}, w = p(() => {
|
|
54
56
|
const { tabsMeta: t, tabMeta: e, tabContentMeta: r } = g();
|
|
55
57
|
let s = 0;
|
|
56
58
|
e && t && (s = 1 * (e.left - t.left + t.scrollLeft));
|
|
@@ -60,44 +62,44 @@ const x = {
|
|
|
60
62
|
width: e ? e.width : 0
|
|
61
63
|
}
|
|
62
64
|
};
|
|
63
|
-
if (
|
|
65
|
+
if (_ && r && (o.content = {
|
|
64
66
|
width: r.width
|
|
65
|
-
}), isNaN(
|
|
66
|
-
|
|
67
|
+
}), isNaN(a.root.left) || isNaN(a.root.width))
|
|
68
|
+
L(o);
|
|
67
69
|
else {
|
|
68
|
-
const
|
|
69
|
-
(
|
|
70
|
+
const c = Math.abs(a.root.left - o.root.left), d = Math.abs(a.root.width - o.root.width);
|
|
71
|
+
(c >= 1 || d >= 1) && L(o);
|
|
70
72
|
}
|
|
71
|
-
}),
|
|
72
|
-
l.current && (e ?
|
|
73
|
+
}), h = (t, { animation: e = !0 } = {}) => {
|
|
74
|
+
l.current && (e ? J(l.current, "scrollLeft", t, {
|
|
73
75
|
duration: 300
|
|
74
76
|
}) : l.current.scrollLeft = t);
|
|
75
|
-
},
|
|
76
|
-
const t = l.current, e = t ? t.scrollWidth - t.clientWidth : 0, r = t &&
|
|
77
|
-
|
|
78
|
-
}),
|
|
77
|
+
}, u = p(() => {
|
|
78
|
+
const t = l.current, e = t ? t.scrollWidth - t.clientWidth : 0, r = t && m ? { start: t.scrollLeft > 1, end: t.scrollLeft < e - 1 } : { start: !1, end: !1 };
|
|
79
|
+
F((s) => s.start === r.start && s.end === r.end ? s : r);
|
|
80
|
+
}), R = (t) => {
|
|
79
81
|
const e = l.current;
|
|
80
|
-
e &&
|
|
81
|
-
}, C =
|
|
82
|
+
e && h(e.scrollLeft + t * e.clientWidth * K);
|
|
83
|
+
}, C = p((t) => {
|
|
82
84
|
const { tabsMeta: e, tabMeta: r } = g();
|
|
83
85
|
if (!(!r || !e)) {
|
|
84
86
|
if (r.left < e.left) {
|
|
85
87
|
const s = e.scrollLeft + (r.left - e.left);
|
|
86
|
-
|
|
88
|
+
h(s - S, { animation: t });
|
|
87
89
|
} else if (r.right > e.right) {
|
|
88
90
|
const s = e.scrollLeft + (r.right - e.right);
|
|
89
|
-
|
|
91
|
+
h(s + S, { animation: t });
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
});
|
|
93
95
|
n.useEffect(() => {
|
|
94
|
-
|
|
96
|
+
q(!0);
|
|
95
97
|
}, []), n.useEffect(() => {
|
|
96
|
-
|
|
98
|
+
w();
|
|
97
99
|
}), n.useEffect(() => {
|
|
98
|
-
var o,
|
|
99
|
-
const t =
|
|
100
|
-
l.current && (
|
|
100
|
+
var o, c;
|
|
101
|
+
const t = H(() => {
|
|
102
|
+
l.current && (w(), u());
|
|
101
103
|
}, 166);
|
|
102
104
|
if (!l.current || !l.current.ownerDocument.defaultView) {
|
|
103
105
|
console.error("tabsRef.current.ownerDocument.defaultView is undefined");
|
|
@@ -106,80 +108,75 @@ const x = {
|
|
|
106
108
|
const e = l.current.ownerDocument.defaultView;
|
|
107
109
|
e.addEventListener("resize", t);
|
|
108
110
|
const r = l.current;
|
|
109
|
-
r.addEventListener("scroll",
|
|
111
|
+
r.addEventListener("scroll", u, { passive: !0 });
|
|
110
112
|
let s;
|
|
111
|
-
return typeof ResizeObserver != "undefined" && (s = new ResizeObserver(t), s.observe(r), Array.from((
|
|
112
|
-
s.observe(
|
|
113
|
-
})),
|
|
114
|
-
t.cancel(), e.removeEventListener("resize", t), r.removeEventListener("scroll",
|
|
113
|
+
return typeof ResizeObserver != "undefined" && (s = new ResizeObserver(t), s.observe(r), Array.from((c = (o = b.current) == null ? void 0 : o.children) != null ? c : []).forEach((d) => {
|
|
114
|
+
s.observe(d);
|
|
115
|
+
})), u(), () => {
|
|
116
|
+
t.cancel(), e.removeEventListener("resize", t), r.removeEventListener("scroll", u), s && s.disconnect();
|
|
115
117
|
};
|
|
116
|
-
}, [
|
|
117
|
-
C(
|
|
118
|
-
}, [C,
|
|
119
|
-
const
|
|
120
|
-
W,
|
|
118
|
+
}, [w, u]), n.useEffect(() => {
|
|
119
|
+
C(z !== a);
|
|
120
|
+
}, [C, a]);
|
|
121
|
+
const G = n.Children.toArray(I).filter((t) => n.isValidElement(t)).map(
|
|
121
122
|
(t, e) => n.cloneElement(t, {
|
|
122
|
-
isActive:
|
|
123
|
+
isActive: v === e,
|
|
124
|
+
// The tab's own onClick runs first, then the tab list picks the tab.
|
|
123
125
|
onClick: (r) => {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
...m && {
|
|
127
|
-
contentRef: (r) => {
|
|
128
|
-
const { contentRef: s } = t.props;
|
|
129
|
-
h.current.push(r), s && K(s, r);
|
|
130
|
-
}
|
|
126
|
+
var s, o;
|
|
127
|
+
(o = (s = t.props).onClick) == null || o.call(s, r), W(r, e);
|
|
131
128
|
}
|
|
132
129
|
})
|
|
133
|
-
),
|
|
134
|
-
return /* @__PURE__ */
|
|
130
|
+
), N = m && A && (f.start || f.end);
|
|
131
|
+
return /* @__PURE__ */ y(
|
|
135
132
|
"div",
|
|
136
133
|
{
|
|
137
|
-
className:
|
|
134
|
+
className: E(
|
|
138
135
|
"smwb-tabs",
|
|
139
136
|
{
|
|
140
|
-
"smwb-tabs--dense":
|
|
137
|
+
"smwb-tabs--dense": O,
|
|
141
138
|
"smwb-tabs--overflow-start": f.start,
|
|
142
139
|
"smwb-tabs--overflow-end": f.end
|
|
143
140
|
},
|
|
144
|
-
|
|
141
|
+
B
|
|
145
142
|
),
|
|
146
143
|
role: "tabpanel",
|
|
147
|
-
ref:
|
|
148
|
-
...
|
|
144
|
+
ref: k,
|
|
145
|
+
...P,
|
|
149
146
|
children: [
|
|
150
|
-
|
|
147
|
+
N && /* @__PURE__ */ i(
|
|
151
148
|
"button",
|
|
152
149
|
{
|
|
153
150
|
type: "button",
|
|
154
151
|
className: "smwb-tabs__scroll-button smwb-tabs__scroll-button--start",
|
|
155
|
-
"aria-label":
|
|
152
|
+
"aria-label": T,
|
|
156
153
|
disabled: !f.start,
|
|
157
|
-
onClick: () =>
|
|
158
|
-
children: /* @__PURE__ */ i(
|
|
154
|
+
onClick: () => R(-1),
|
|
155
|
+
children: /* @__PURE__ */ i(M, { name: "chevron_left", size: 20 })
|
|
159
156
|
}
|
|
160
157
|
),
|
|
161
|
-
/* @__PURE__ */
|
|
158
|
+
/* @__PURE__ */ y(
|
|
162
159
|
"div",
|
|
163
160
|
{
|
|
164
|
-
className:
|
|
165
|
-
"smwb-tabs__scroller--scrollable":
|
|
161
|
+
className: E("smwb-tabs__scroller", {
|
|
162
|
+
"smwb-tabs__scroller--scrollable": m
|
|
166
163
|
}),
|
|
167
164
|
ref: l,
|
|
168
165
|
children: [
|
|
169
|
-
/* @__PURE__ */ i("div", { className: "smwb-tabs__scroll-area", ref:
|
|
170
|
-
|
|
166
|
+
/* @__PURE__ */ i("div", { className: "smwb-tabs__scroll-area", ref: b, role: "tablist", "aria-label": D, children: G }),
|
|
167
|
+
j && /* @__PURE__ */ i("span", { className: "smwb-tabs__indicator", style: a.root, children: /* @__PURE__ */ i("span", { className: "smwb-tabs__indicator-content", style: a.content }) })
|
|
171
168
|
]
|
|
172
169
|
}
|
|
173
170
|
),
|
|
174
|
-
|
|
171
|
+
N && /* @__PURE__ */ i(
|
|
175
172
|
"button",
|
|
176
173
|
{
|
|
177
174
|
type: "button",
|
|
178
175
|
className: "smwb-tabs__scroll-button smwb-tabs__scroll-button--end",
|
|
179
|
-
"aria-label":
|
|
176
|
+
"aria-label": V,
|
|
180
177
|
disabled: !f.end,
|
|
181
|
-
onClick: () =>
|
|
182
|
-
children: /* @__PURE__ */ i(
|
|
178
|
+
onClick: () => R(1),
|
|
179
|
+
children: /* @__PURE__ */ i(M, { name: "chevron_right", size: 20 })
|
|
183
180
|
}
|
|
184
181
|
)
|
|
185
182
|
]
|
|
@@ -187,6 +184,6 @@ const x = {
|
|
|
187
184
|
);
|
|
188
185
|
});
|
|
189
186
|
export {
|
|
190
|
-
|
|
187
|
+
ot as Tabs
|
|
191
188
|
};
|
|
192
189
|
//# sourceMappingURL=tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sources":["../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { Tab, TabProps } from \"./tab/tab\";\nimport { useEventCallback } from \"../../../hooks/useEventCallback\";\nimport { setRef } from \"../../../utils/setRef\";\nimport { animate } from \"../../../utils/animate\";\nimport Icon from \"../../base/icon/icon\";\n\nexport interface TabsProps {\n value: number;\n onChange: (e: React.MouseEvent<HTMLButtonElement>, index: number) => void;\n indicatorContent?: boolean;\n /**\n * Let the tab row scroll sideways instead of clipping it. The edge beyond which\n * more tabs are hidden fades out.\n */\n scrollable?: boolean;\n /** With `scrollable`: buttons at both ends that scroll the row while it overflows. */\n scrollButtons?: boolean;\n /** Compact tabs: labels as written (no capitals, no letter spacing) and less padding. */\n dense?: boolean;\n /** Accessible label of the button that scrolls back. */\n scrollBackAriaLabel?: string;\n /** Accessible label of the button that scrolls forward. */\n scrollForwardAriaLabel?: string;\n className?: string;\n children?: React.ReactNode;\n /** Accessible label for the tab list. */\n \"aria-label\"?: string;\n}\n\ninterface IndicatorStyle {\n root: {\n left: number;\n width: number;\n };\n content?: {\n width: number;\n };\n}\n\nconst defaultIndicatorStyle = {\n root: {},\n content: {},\n} as IndicatorStyle;\n\n/** A scroll button moves the row by this share of its visible width. */\nconst SCROLL_PAGE = 0.8;\n\ninterface Overflow {\n start: boolean;\n end: boolean;\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(function Tabs(props, ref) {\n const {\n className,\n children,\n onChange,\n value,\n indicatorContent = false,\n scrollable = false,\n scrollButtons = false,\n dense = false,\n scrollBackAriaLabel = \"Scroll tabs back\",\n scrollForwardAriaLabel = \"Scroll tabs forward\",\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [indicatorStyle, setIndicatorStyle] = React.useState<IndicatorStyle>(defaultIndicatorStyle);\n // Whether tabs are hidden past the start / the end of a scrollable row. Only\n // measured in the browser, so the server markup shows neither.\n const [overflow, setOverflow] = React.useState<Overflow>({ start: false, end: false });\n\n const tabsRef = React.useRef<HTMLDivElement>(null);\n const tabListRef = React.useRef<HTMLDivElement>(null);\n const contentTabsRef = React.useRef<HTMLSpanElement[]>([]);\n\n // Видимость следующего таба в пикселях\n const viewNextTabInPixels = 40;\n\n const getTabsMeta = () => {\n const tabsNode = tabsRef.current;\n\n let tabsMeta;\n\n if (tabsNode) {\n const rect = tabsNode.getBoundingClientRect();\n\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n };\n }\n\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n\n if (!tabListRef.current) {\n console.error(\"tabListRef.current is undefined\");\n }\n if (tabsNode && tabListRef.current) {\n const children = tabListRef.current.children;\n\n if (children.length > 0) {\n const tab = children[value];\n\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n\n if (indicatorContent) {\n tabContentMeta = contentTabsRef.current[value] ? contentTabsRef.current[value].getBoundingClientRect() : null;\n }\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = useEventCallback(() => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n\n if (tabMeta && tabsMeta) {\n startValue = 1 * (tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft);\n }\n\n const newIndicatorStyle: IndicatorStyle = {\n root: {\n left: startValue,\n width: tabMeta ? tabMeta.width : 0,\n },\n };\n\n if (indicatorContent && tabContentMeta) {\n newIndicatorStyle.content = {\n width: tabContentMeta.width,\n };\n }\n\n if (isNaN(indicatorStyle.root.left) || isNaN(indicatorStyle.root.width)) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n const dStart = Math.abs(indicatorStyle.root.left - newIndicatorStyle.root.left);\n const dSize = Math.abs(indicatorStyle.root.width - newIndicatorStyle.root.width);\n\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n\n const scroll = (scrollValue: number, { animation = true } = {}) => {\n if (!tabsRef.current) {\n return;\n }\n if (animation) {\n animate(tabsRef.current, \"scrollLeft\", scrollValue, {\n duration: 300,\n });\n } else {\n tabsRef.current.scrollLeft = scrollValue;\n }\n };\n\n const updateOverflow = useEventCallback(() => {\n const node = tabsRef.current;\n const max = node ? node.scrollWidth - node.clientWidth : 0;\n const next: Overflow =\n node && scrollable\n ? { start: node.scrollLeft > 1, end: node.scrollLeft < max - 1 }\n : { start: false, end: false };\n setOverflow((prev) => (prev.start === next.start && prev.end === next.end ? prev : next));\n });\n\n const scrollByPage = (direction: -1 | 1) => {\n const node = tabsRef.current;\n if (node) {\n scroll(node.scrollLeft + direction * node.clientWidth * SCROLL_PAGE);\n }\n };\n\n const scrollSelectedIntoView = useEventCallback((animation: boolean) => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n\n if (!tabMeta || !tabsMeta) {\n return;\n }\n\n if (tabMeta.left < tabsMeta.left) {\n // Левая сторона таба не видна.\n const nextScrollStart = tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left);\n scroll(nextScrollStart - viewNextTabInPixels, { animation });\n } else if (tabMeta.right > tabsMeta.right) {\n // Правая сторона таба не видна.\n const nextScrollStart = tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right);\n scroll(nextScrollStart + viewNextTabInPixels, { animation });\n }\n });\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n updateIndicatorState();\n });\n\n React.useEffect(() => {\n const onResize = debounce(() => {\n if (tabsRef.current) {\n updateIndicatorState();\n updateOverflow();\n }\n }, 166);\n if (!tabsRef.current || !tabsRef.current.ownerDocument.defaultView) {\n console.error(`tabsRef.current.ownerDocument.defaultView is undefined`);\n return;\n }\n const window: Window & typeof globalThis = tabsRef.current.ownerDocument.defaultView;\n\n window.addEventListener(\"resize\", onResize);\n const scroller = tabsRef.current;\n scroller.addEventListener(\"scroll\", updateOverflow, { passive: true });\n\n let resizeObserver: ResizeObserver;\n\n // The row and each tab: a label can grow with its data while the row keeps\n // its width.\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(scroller);\n\n Array.from(tabListRef.current?.children ?? []).forEach((child) => {\n resizeObserver.observe(child);\n });\n }\n updateOverflow();\n\n return () => {\n onResize.cancel();\n\n window.removeEventListener(\"resize\", onResize);\n scroller.removeEventListener(\"scroll\", updateOverflow);\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [updateIndicatorState, updateOverflow]);\n\n React.useEffect(() => {\n // Не анимировать при первом рендере\n scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n }, [scrollSelectedIntoView, indicatorStyle]);\n\n const tabs = React.Children.map(\n children as React.ReactElement<TabProps>[],\n (child: React.ReactElement<TabProps>, index) =>\n React.cloneElement(child, {\n isActive: value === index,\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => {\n onChange(event, index);\n },\n ...(indicatorContent && {\n contentRef: (ref: HTMLSpanElement) => {\n const { contentRef } = child.props;\n\n contentTabsRef.current.push(ref);\n\n if (contentRef) {\n setRef(contentRef as React.Ref<unknown>, ref);\n }\n },\n }),\n } as TabProps)\n );\n\n const showScrollButtons = scrollable && scrollButtons && (overflow.start || overflow.end);\n\n return (\n <div\n className={cn(\n \"smwb-tabs\",\n {\n \"smwb-tabs--dense\": dense,\n \"smwb-tabs--overflow-start\": overflow.start,\n \"smwb-tabs--overflow-end\": overflow.end,\n },\n className\n )}\n role={\"tabpanel\"}\n ref={ref}\n {...rest}\n >\n {showScrollButtons && (\n <button\n type=\"button\"\n className=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--start\"\n aria-label={scrollBackAriaLabel}\n disabled={!overflow.start}\n onClick={() => scrollByPage(-1)}\n >\n <Icon name=\"chevron_left\" size={20} />\n </button>\n )}\n <div\n className={cn(\"smwb-tabs__scroller\", {\n \"smwb-tabs__scroller--scrollable\": scrollable,\n })}\n ref={tabsRef}\n >\n <div className=\"smwb-tabs__scroll-area\" ref={tabListRef} role=\"tablist\" aria-label={ariaLabel}>\n {tabs}\n </div>\n {mounted && (\n <span className=\"smwb-tabs__indicator\" style={indicatorStyle.root}>\n <span className=\"smwb-tabs__indicator-content\" style={indicatorStyle.content} />\n </span>\n )}\n </div>\n {showScrollButtons && (\n <button\n type=\"button\"\n className=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--end\"\n aria-label={scrollForwardAriaLabel}\n disabled={!overflow.end}\n onClick={() => scrollByPage(1)}\n >\n <Icon name=\"chevron_right\" size={20} />\n </button>\n )}\n </div>\n );\n});\n\nexport { Tab };\nexport type { TabProps };\n"],"names":["defaultIndicatorStyle","SCROLL_PAGE","Tabs","React","props","ref","className","children","onChange","value","indicatorContent","scrollable","scrollButtons","dense","scrollBackAriaLabel","scrollForwardAriaLabel","ariaLabel","rest","mounted","setMounted","indicatorStyle","setIndicatorStyle","overflow","setOverflow","tabsRef","tabListRef","contentTabsRef","viewNextTabInPixels","getTabsMeta","tabsNode","tabsMeta","rect","tabMeta","tabContentMeta","tab","updateIndicatorState","useEventCallback","startValue","newIndicatorStyle","dStart","dSize","scroll","scrollValue","animation","animate","updateOverflow","node","max","next","prev","scrollByPage","direction","scrollSelectedIntoView","nextScrollStart","onResize","debounce","window","scroller","resizeObserver","_b","_a","child","tabs","index","event","contentRef","setRef","showScrollButtons","jsxs","cn","jsx","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabs.js","sources":["../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { Tab, TabProps } from \"./tab/tab\";\nimport { useEventCallback } from \"../../../hooks/useEventCallback\";\nimport { animate } from \"../../../utils/animate\";\nimport Icon from \"../../base/icon/icon\";\n\nexport interface TabsProps {\n /**\n * Index of the selected tab. Tabs count in the order they render: a tab left out,\n * such as `{show && <Tab />}` while `show` is false, takes no index.\n */\n value: number;\n /** Called with the index of the clicked tab, counted as for `value`. */\n onChange: (e: React.MouseEvent<HTMLButtonElement>, index: number) => void;\n /** Draw the indicator as wide as the selected tab's label rather than the whole tab. */\n indicatorContent?: boolean;\n /**\n * Let the tab row scroll sideways instead of clipping it. The edge beyond which\n * more tabs are hidden fades out.\n */\n scrollable?: boolean;\n /** With `scrollable`: buttons at both ends that scroll the row while it overflows. */\n scrollButtons?: boolean;\n /** Compact tabs: labels as written (no capitals, no letter spacing) and less padding. */\n dense?: boolean;\n /** Accessible label of the button that scrolls back. */\n scrollBackAriaLabel?: string;\n /** Accessible label of the button that scrolls forward. */\n scrollForwardAriaLabel?: string;\n className?: string;\n children?: React.ReactNode;\n /** Accessible label for the tab list. */\n \"aria-label\"?: string;\n}\n\ninterface IndicatorStyle {\n root: {\n left: number;\n width: number;\n };\n content?: {\n width: number;\n };\n}\n\nconst defaultIndicatorStyle = {\n root: {},\n content: {},\n} as IndicatorStyle;\n\n/** A scroll button moves the row by this share of its visible width. */\nconst SCROLL_PAGE = 0.8;\n\ninterface Overflow {\n start: boolean;\n end: boolean;\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(function Tabs(props, ref) {\n const {\n className,\n children,\n onChange,\n value,\n indicatorContent = false,\n scrollable = false,\n scrollButtons = false,\n dense = false,\n scrollBackAriaLabel = \"Scroll tabs back\",\n scrollForwardAriaLabel = \"Scroll tabs forward\",\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [indicatorStyle, setIndicatorStyle] = React.useState<IndicatorStyle>(defaultIndicatorStyle);\n // Whether tabs are hidden past the start / the end of a scrollable row. Only\n // measured in the browser, so the server markup shows neither.\n const [overflow, setOverflow] = React.useState<Overflow>({ start: false, end: false });\n\n const tabsRef = React.useRef<HTMLDivElement>(null);\n const tabListRef = React.useRef<HTMLDivElement>(null);\n\n // Видимость следующего таба в пикселях\n const viewNextTabInPixels = 40;\n\n const getTabsMeta = () => {\n const tabsNode = tabsRef.current;\n\n let tabsMeta;\n\n if (tabsNode) {\n const rect = tabsNode.getBoundingClientRect();\n\n tabsMeta = {\n clientWidth: tabsNode.clientWidth,\n scrollLeft: tabsNode.scrollLeft,\n scrollTop: tabsNode.scrollTop,\n scrollWidth: tabsNode.scrollWidth,\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n };\n }\n\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n\n if (!tabListRef.current) {\n console.error(\"tabListRef.current is undefined\");\n }\n if (tabsNode && tabListRef.current) {\n const children = tabListRef.current.children;\n\n if (children.length > 0) {\n const tab = children[value];\n\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n\n if (indicatorContent) {\n // The label box of that same tab, found in the DOM like the tab itself.\n const content = tab ? tab.querySelector(\".smwb-tab__content\") : null;\n tabContentMeta = content ? content.getBoundingClientRect() : null;\n }\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = useEventCallback(() => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n\n if (tabMeta && tabsMeta) {\n startValue = 1 * (tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft);\n }\n\n const newIndicatorStyle: IndicatorStyle = {\n root: {\n left: startValue,\n width: tabMeta ? tabMeta.width : 0,\n },\n };\n\n if (indicatorContent && tabContentMeta) {\n newIndicatorStyle.content = {\n width: tabContentMeta.width,\n };\n }\n\n if (isNaN(indicatorStyle.root.left) || isNaN(indicatorStyle.root.width)) {\n setIndicatorStyle(newIndicatorStyle);\n } else {\n const dStart = Math.abs(indicatorStyle.root.left - newIndicatorStyle.root.left);\n const dSize = Math.abs(indicatorStyle.root.width - newIndicatorStyle.root.width);\n\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(newIndicatorStyle);\n }\n }\n });\n\n const scroll = (scrollValue: number, { animation = true } = {}) => {\n if (!tabsRef.current) {\n return;\n }\n if (animation) {\n animate(tabsRef.current, \"scrollLeft\", scrollValue, {\n duration: 300,\n });\n } else {\n tabsRef.current.scrollLeft = scrollValue;\n }\n };\n\n const updateOverflow = useEventCallback(() => {\n const node = tabsRef.current;\n const max = node ? node.scrollWidth - node.clientWidth : 0;\n const next: Overflow =\n node && scrollable\n ? { start: node.scrollLeft > 1, end: node.scrollLeft < max - 1 }\n : { start: false, end: false };\n setOverflow((prev) => (prev.start === next.start && prev.end === next.end ? prev : next));\n });\n\n const scrollByPage = (direction: -1 | 1) => {\n const node = tabsRef.current;\n if (node) {\n scroll(node.scrollLeft + direction * node.clientWidth * SCROLL_PAGE);\n }\n };\n\n const scrollSelectedIntoView = useEventCallback((animation: boolean) => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n\n if (!tabMeta || !tabsMeta) {\n return;\n }\n\n if (tabMeta.left < tabsMeta.left) {\n // Левая сторона таба не видна.\n const nextScrollStart = tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left);\n scroll(nextScrollStart - viewNextTabInPixels, { animation });\n } else if (tabMeta.right > tabsMeta.right) {\n // Правая сторона таба не видна.\n const nextScrollStart = tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right);\n scroll(nextScrollStart + viewNextTabInPixels, { animation });\n }\n });\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n updateIndicatorState();\n });\n\n React.useEffect(() => {\n const onResize = debounce(() => {\n if (tabsRef.current) {\n updateIndicatorState();\n updateOverflow();\n }\n }, 166);\n if (!tabsRef.current || !tabsRef.current.ownerDocument.defaultView) {\n console.error(`tabsRef.current.ownerDocument.defaultView is undefined`);\n return;\n }\n const window: Window & typeof globalThis = tabsRef.current.ownerDocument.defaultView;\n\n window.addEventListener(\"resize\", onResize);\n const scroller = tabsRef.current;\n scroller.addEventListener(\"scroll\", updateOverflow, { passive: true });\n\n let resizeObserver: ResizeObserver;\n\n // The row and each tab: a label can grow with its data while the row keeps\n // its width.\n if (typeof ResizeObserver !== \"undefined\") {\n resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(scroller);\n\n Array.from(tabListRef.current?.children ?? []).forEach((child) => {\n resizeObserver.observe(child);\n });\n }\n updateOverflow();\n\n return () => {\n onResize.cancel();\n\n window.removeEventListener(\"resize\", onResize);\n scroller.removeEventListener(\"scroll\", updateOverflow);\n\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n };\n }, [updateIndicatorState, updateOverflow]);\n\n React.useEffect(() => {\n // Не анимировать при первом рендере\n scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n }, [scrollSelectedIntoView, indicatorStyle]);\n\n // Only elements are tabs: a child left out, such as `{show && <Tab />}`, takes no\n // index, so `value` counts the tabs that render, as the indicator does in the DOM.\n const tabs = React.Children.toArray(children)\n .filter((child): child is React.ReactElement<TabProps> => React.isValidElement(child))\n .map((child, index) =>\n React.cloneElement(child, {\n isActive: value === index,\n // The tab's own onClick runs first, then the tab list picks the tab.\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => {\n child.props.onClick?.(event);\n onChange(event, index);\n },\n } as TabProps)\n );\n\n const showScrollButtons = scrollable && scrollButtons && (overflow.start || overflow.end);\n\n return (\n <div\n className={cn(\n \"smwb-tabs\",\n {\n \"smwb-tabs--dense\": dense,\n \"smwb-tabs--overflow-start\": overflow.start,\n \"smwb-tabs--overflow-end\": overflow.end,\n },\n className\n )}\n role={\"tabpanel\"}\n ref={ref}\n {...rest}\n >\n {showScrollButtons && (\n <button\n type=\"button\"\n className=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--start\"\n aria-label={scrollBackAriaLabel}\n disabled={!overflow.start}\n onClick={() => scrollByPage(-1)}\n >\n <Icon name=\"chevron_left\" size={20} />\n </button>\n )}\n <div\n className={cn(\"smwb-tabs__scroller\", {\n \"smwb-tabs__scroller--scrollable\": scrollable,\n })}\n ref={tabsRef}\n >\n <div className=\"smwb-tabs__scroll-area\" ref={tabListRef} role=\"tablist\" aria-label={ariaLabel}>\n {tabs}\n </div>\n {mounted && (\n <span className=\"smwb-tabs__indicator\" style={indicatorStyle.root}>\n <span className=\"smwb-tabs__indicator-content\" style={indicatorStyle.content} />\n </span>\n )}\n </div>\n {showScrollButtons && (\n <button\n type=\"button\"\n className=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--end\"\n aria-label={scrollForwardAriaLabel}\n disabled={!overflow.end}\n onClick={() => scrollByPage(1)}\n >\n <Icon name=\"chevron_right\" size={20} />\n </button>\n )}\n </div>\n );\n});\n\nexport { Tab };\nexport type { TabProps };\n"],"names":["defaultIndicatorStyle","SCROLL_PAGE","Tabs","React","props","ref","className","children","onChange","value","indicatorContent","scrollable","scrollButtons","dense","scrollBackAriaLabel","scrollForwardAriaLabel","ariaLabel","rest","mounted","setMounted","indicatorStyle","setIndicatorStyle","overflow","setOverflow","tabsRef","tabListRef","viewNextTabInPixels","getTabsMeta","tabsNode","tabsMeta","rect","tabMeta","tabContentMeta","tab","content","updateIndicatorState","useEventCallback","startValue","newIndicatorStyle","dStart","dSize","scroll","scrollValue","animation","animate","updateOverflow","node","max","next","prev","scrollByPage","direction","scrollSelectedIntoView","nextScrollStart","onResize","debounce","window","scroller","resizeObserver","_b","_a","child","tabs","index","event","showScrollButtons","jsxs","cn","jsx","Icon"],"mappings":"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"}
|
|
@@ -8,7 +8,10 @@ export interface HeaderCellRendererProps<T extends object> {
|
|
|
8
8
|
* Header text that turns into a text field on click, to rename the column.
|
|
9
9
|
*
|
|
10
10
|
* In a sortable table the click on the text only opens the field; the sort
|
|
11
|
-
* marker, and Enter or Space on the focused header, sort the column.
|
|
11
|
+
* marker, and Enter or Space on the focused header, sort the column. The field
|
|
12
|
+
* is named after the column and closes when it loses focus; a click elsewhere
|
|
13
|
+
* (on the marker, on another header) still does what it would do without the
|
|
14
|
+
* field open.
|
|
12
15
|
*/
|
|
13
16
|
declare const HeaderCellRenderer: <T extends object>({ header, onChange }: HeaderCellRendererProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
14
17
|
export default HeaderCellRenderer;
|
|
@@ -1,21 +1,51 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { TextField as
|
|
4
|
-
const
|
|
5
|
-
var
|
|
6
|
-
const [
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
n && ((
|
|
1
|
+
import { jsx as f, Fragment as C } from "react/jsx-runtime";
|
|
2
|
+
import { useState as R, useRef as m, useEffect as b } from "react";
|
|
3
|
+
import { TextField as S } from "../../../components/inputs/textField/textField.js";
|
|
4
|
+
const N = ({ header: t, onChange: l }) => {
|
|
5
|
+
var a, d;
|
|
6
|
+
const [g, D] = R(((a = t == null ? void 0 : t.column.columnDef.header) == null ? void 0 : a.toString()) || ""), [n, c] = R(!1), i = m(null), u = m(!1), r = m(!1), s = t == null ? void 0 : t.column.columnDef, F = typeof (s == null ? void 0 : s.header) == "string" ? s.header : (d = t == null ? void 0 : t.column.id) != null ? d : "";
|
|
7
|
+
b(() => {
|
|
8
|
+
var e;
|
|
9
|
+
n && ((e = i.current) == null || e.focus());
|
|
10
|
+
}, [n]), b(() => {
|
|
11
|
+
var E, L;
|
|
12
|
+
if (!n) return;
|
|
13
|
+
const e = (L = (E = i.current) == null ? void 0 : E.ownerDocument) != null ? L : document;
|
|
14
|
+
let v;
|
|
15
|
+
const p = (B) => {
|
|
16
|
+
u.current = B.button === 0;
|
|
17
|
+
}, o = () => {
|
|
18
|
+
u.current = !1, r.current && (v = setTimeout(() => {
|
|
19
|
+
r.current && c(!1);
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
return e.addEventListener("mousedown", p, !0), e.addEventListener("mouseup", o, !0), e.addEventListener("dragend", o, !0), () => {
|
|
23
|
+
e.removeEventListener("mousedown", p, !0), e.removeEventListener("mouseup", o, !0), e.removeEventListener("dragend", o, !0), clearTimeout(v), u.current = !1, r.current = !1;
|
|
24
|
+
};
|
|
10
25
|
}, [n]);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
|
|
26
|
+
const w = (e) => {
|
|
27
|
+
t && (D(e.target.value), l == null || l(e, t));
|
|
28
|
+
}, x = (e) => {
|
|
29
|
+
e.preventDefault(), c(!0);
|
|
30
|
+
}, T = () => {
|
|
31
|
+
r.current = !1;
|
|
32
|
+
}, k = () => {
|
|
33
|
+
u.current ? r.current = !0 : c(!1);
|
|
15
34
|
};
|
|
16
|
-
return
|
|
35
|
+
return t ? /* @__PURE__ */ f("div", { onClick: x, children: n ? /* @__PURE__ */ f(
|
|
36
|
+
S,
|
|
37
|
+
{
|
|
38
|
+
ref: i,
|
|
39
|
+
"aria-label": F,
|
|
40
|
+
value: g,
|
|
41
|
+
onChange: w,
|
|
42
|
+
inline: !0,
|
|
43
|
+
onFocus: T,
|
|
44
|
+
onBlur: k
|
|
45
|
+
}
|
|
46
|
+
) : t.column.columnDef.header }) : /* @__PURE__ */ f(C, {});
|
|
17
47
|
};
|
|
18
48
|
export {
|
|
19
|
-
|
|
49
|
+
N as default
|
|
20
50
|
};
|
|
21
51
|
//# sourceMappingURL=headerCellRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headerCellRenderer.js","sources":["../../../../src/connects/rt/table/headerCellRenderer.tsx"],"sourcesContent":["import { Header } from \"@tanstack/react-table\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { TextField } from \"../../../components/inputs/textField\";\n\nexport interface HeaderCellRendererProps<T extends object> {\n header?: Header<T, unknown>;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>, header: Header<T, unknown>) => void;\n}\n\n/**\n * Header text that turns into a text field on click, to rename the column.\n *\n * In a sortable table the click on the text only opens the field; the sort\n * marker, and Enter or Space on the focused header, sort the column.\n */\nconst HeaderCellRenderer = <T extends object>({ header, onChange }: HeaderCellRendererProps<T>) => {\n const [value, setValue] = useState<string>(header?.column.columnDef.header?.toString() || \"\");\n const [editable, setEditable] = useState(false);\n const fieldRef = useRef<HTMLInputElement>(null);\n\n // The click that opens the field leaves focus on the header's sort control,\n // where Space and Enter would sort instead of typing.\n useEffect(() => {\n if (editable) fieldRef.current?.focus();\n }, [editable]);\n\n const handleChangeCell = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!header) return;\n setValue(e.target.value);\n onChange?.(e, header);\n };\n\n // A sortable header draws this inside its sort control, and a click here is\n // for editing: preventDefault() tells the control not to sort on it.\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n setEditable(true);\n };\n\n if (!header) return <></>;\n\n return (\n <div onClick={handleClick}>\n {editable ? (\n <TextField
|
|
1
|
+
{"version":3,"file":"headerCellRenderer.js","sources":["../../../../src/connects/rt/table/headerCellRenderer.tsx"],"sourcesContent":["import { Header } from \"@tanstack/react-table\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { TextField } from \"../../../components/inputs/textField\";\n\nexport interface HeaderCellRendererProps<T extends object> {\n header?: Header<T, unknown>;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>, header: Header<T, unknown>) => void;\n}\n\n/**\n * Header text that turns into a text field on click, to rename the column.\n *\n * In a sortable table the click on the text only opens the field; the sort\n * marker, and Enter or Space on the focused header, sort the column. The field\n * is named after the column and closes when it loses focus; a click elsewhere\n * (on the marker, on another header) still does what it would do without the\n * field open.\n */\nconst HeaderCellRenderer = <T extends object>({ header, onChange }: HeaderCellRendererProps<T>) => {\n const [value, setValue] = useState<string>(header?.column.columnDef.header?.toString() || \"\");\n const [editable, setEditable] = useState(false);\n const fieldRef = useRef<HTMLInputElement>(null);\n // Whether the primary button is down, tracked while the field is open.\n const pressed = useRef(false);\n // The field lost focus to a press and closes when the press is over.\n const closeOnRelease = useRef(false);\n\n const columnDef = header?.column.columnDef;\n const columnName = typeof columnDef?.header === \"string\" ? columnDef.header : (header?.column.id ?? \"\");\n\n // The click that opens the field leaves focus on the header's sort control,\n // where Space and Enter would sort instead of typing.\n useEffect(() => {\n if (editable) fieldRef.current?.focus();\n }, [editable]);\n\n // A press elsewhere takes the focus from the field as the button goes down.\n // Closing the field right then would shrink the header under the pointer\n // (the field is wider than the text), what was pressed (the sort marker,\n // another header) would move away before the release, and the browser would\n // send the click to some ancestor of both. So such a field closes a task\n // after the release, once the click that follows it has been handled.\n useEffect(() => {\n if (!editable) return;\n const doc = fieldRef.current?.ownerDocument ?? document;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const onPress = (event: MouseEvent) => {\n pressed.current = event.button === 0;\n };\n const onRelease = () => {\n pressed.current = false;\n if (!closeOnRelease.current) return;\n timer = setTimeout(() => {\n if (closeOnRelease.current) setEditable(false);\n });\n };\n doc.addEventListener(\"mousedown\", onPress, true);\n doc.addEventListener(\"mouseup\", onRelease, true);\n // A press that turns into a drag ends without a mouseup.\n doc.addEventListener(\"dragend\", onRelease, true);\n return () => {\n doc.removeEventListener(\"mousedown\", onPress, true);\n doc.removeEventListener(\"mouseup\", onRelease, true);\n doc.removeEventListener(\"dragend\", onRelease, true);\n clearTimeout(timer);\n pressed.current = false;\n closeOnRelease.current = false;\n };\n }, [editable]);\n\n const handleChangeCell = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!header) return;\n setValue(e.target.value);\n onChange?.(e, header);\n };\n\n // A sortable header draws this inside its sort control, and a click here is\n // for editing: preventDefault() tells the control not to sort on it.\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n setEditable(true);\n };\n\n const handleFocus = () => {\n closeOnRelease.current = false;\n };\n\n const handleBlur = () => {\n if (pressed.current) closeOnRelease.current = true;\n else setEditable(false);\n };\n\n if (!header) return <></>;\n\n return (\n <div onClick={handleClick}>\n {editable ? (\n <TextField\n ref={fieldRef}\n aria-label={columnName}\n value={value}\n onChange={handleChangeCell}\n inline\n onFocus={handleFocus}\n onBlur={handleBlur}\n />\n ) : (\n (header.column.columnDef.header as string)\n )}\n </div>\n );\n};\n\nexport default HeaderCellRenderer;\n"],"names":["HeaderCellRenderer","header","onChange","value","setValue","useState","_a","editable","setEditable","fieldRef","useRef","pressed","closeOnRelease","columnDef","columnName","_b","useEffect","doc","timer","onPress","event","onRelease","handleChangeCell","handleClick","handleFocus","handleBlur","jsx","TextField","Fragment"],"mappings":";;;AAkBA,MAAMA,IAAqB,CAAmB,EAAE,QAAAC,GAAQ,UAAAC,QAA2C;;AACjG,QAAM,CAACC,GAAOC,CAAQ,IAAIC,IAAiBC,IAAAL,KAAA,gBAAAA,EAAQ,OAAO,UAAU,WAAzB,gBAAAK,EAAiC,eAAc,EAAE,GACtF,CAACC,GAAUC,CAAW,IAAIH,EAAS,EAAK,GACxCI,IAAWC,EAAyB,IAAI,GAExCC,IAAUD,EAAO,EAAK,GAEtBE,IAAiBF,EAAO,EAAK,GAE7BG,IAAYZ,KAAA,gBAAAA,EAAQ,OAAO,WAC3Ba,IAAa,QAAOD,KAAA,gBAAAA,EAAW,WAAW,WAAWA,EAAU,UAAUE,IAAAd,KAAA,gBAAAA,EAAQ,OAAO,OAAf,OAAAc,IAAqB;AAIpG,EAAAC,EAAU,MAAM;;AACd,IAAIT,OAAUD,IAAAG,EAAS,YAAT,QAAAH,EAAkB;AAAA,EAClC,GAAG,CAACC,CAAQ,CAAC,GAQbS,EAAU,MAAM;;AACd,QAAI,CAACT,EAAU;AACf,UAAMU,KAAMF,KAAAT,IAAAG,EAAS,YAAT,gBAAAH,EAAkB,kBAAlB,OAAAS,IAAmC;AAC/C,QAAIG;AACJ,UAAMC,IAAU,CAACC,MAAsB;AACrC,MAAAT,EAAQ,UAAUS,EAAM,WAAW;AAAA,IACrC,GACMC,IAAY,MAAM;AAEtB,MADAV,EAAQ,UAAU,IACbC,EAAe,YACpBM,IAAQ,WAAW,MAAM;AACvB,QAAIN,EAAe,WAASJ,EAAY,EAAK;AAAA,MAC/C,CAAC;AAAA,IACH;AACA,WAAAS,EAAI,iBAAiB,aAAaE,GAAS,EAAI,GAC/CF,EAAI,iBAAiB,WAAWI,GAAW,EAAI,GAE/CJ,EAAI,iBAAiB,WAAWI,GAAW,EAAI,GACxC,MAAM;AACX,MAAAJ,EAAI,oBAAoB,aAAaE,GAAS,EAAI,GAClDF,EAAI,oBAAoB,WAAWI,GAAW,EAAI,GAClDJ,EAAI,oBAAoB,WAAWI,GAAW,EAAI,GAClD,aAAaH,CAAK,GAClBP,EAAQ,UAAU,IAClBC,EAAe,UAAU;AAAA,IAC3B;AAAA,EACF,GAAG,CAACL,CAAQ,CAAC;AAEb,QAAMe,IAAmB,CAAC,MAA2C;AACnE,IAAKrB,MACLG,EAAS,EAAE,OAAO,KAAK,GACvBF,KAAA,QAAAA,EAAW,GAAGD;AAAA,EAChB,GAIMsB,IAAc,CAAC,MAAwC;AAC3D,MAAE,eAAA,GACFf,EAAY,EAAI;AAAA,EAClB,GAEMgB,IAAc,MAAM;AACxB,IAAAZ,EAAe,UAAU;AAAA,EAC3B,GAEMa,IAAa,MAAM;AACvB,IAAId,EAAQ,UAASC,EAAe,UAAU,OAC7B,EAAK;AAAA,EACxB;AAEA,SAAKX,IAGH,gBAAAyB,EAAC,OAAA,EAAI,SAASH,GACX,UAAAhB,IACC,gBAAAmB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKlB;AAAA,MACL,cAAYK;AAAA,MACZ,OAAAX;AAAA,MACA,UAAUmB;AAAA,MACV,QAAM;AAAA,MACN,SAASE;AAAA,MACT,QAAQC;AAAA,IAAA;AAAA,EAAA,IAGTxB,EAAO,OAAO,UAAU,OAAA,CAE7B,IAjBkB,gBAAAyB,EAAAE,GAAA,CAAA,CAAE;AAmBxB;"}
|