@smwb/ui-react 2.6.2 → 2.7.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 +4 -2
- package/AI_THEMING.md +17 -1
- package/README.md +84 -35
- package/dist/assets/styles/less/components/accordion/accordion.entry.css +1 -1
- package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
- package/dist/assets/styles/less/components/chart/chart.entry.css +1 -0
- package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
- package/dist/assets/styles/less/components/descriptionList/descriptionList.entry.css +1 -0
- package/dist/assets/styles/less/components/emptyState/emptyState.entry.css +1 -0
- package/dist/assets/styles/less/components/kanban/kanban.entry.css +1 -0
- package/dist/assets/styles/less/components/meter/meter.entry.css +1 -0
- package/dist/assets/styles/less/components/modal/modal.entry.css +1 -1
- package/dist/assets/styles/less/components/overflowMenu/overflowMenu.entry.css +1 -1
- package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -0
- package/dist/assets/styles/less/components/progressIndicator/progressIndicator.entry.css +1 -1
- package/dist/assets/styles/less/components/sectionHeader/sectionHeader.entry.css +1 -0
- package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
- package/dist/assets/styles/less/components/stat/stat.entry.css +1 -0
- package/dist/assets/styles/less/components/stepper/stepper.entry.css +1 -1
- 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/tabs.entry.css +1 -1
- package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
- package/dist/assets/styles/less/components/timeline/timeline.entry.css +1 -0
- package/dist/assets/styles/less/components/tooltip/tooltip.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 -0
- package/dist/assets/styles/less/tokens.entry.css +1 -0
- package/dist/chart.d.ts +2 -0
- package/dist/chart.js +8 -0
- package/dist/chart.js.map +1 -0
- package/dist/components/base/icon/icon.js +8 -7
- package/dist/components/base/icon/icon.js.map +1 -1
- package/dist/components/base/ripple/ripple.js +11 -10
- package/dist/components/base/ripple/ripple.js.map +1 -1
- package/dist/components/dataDisplay/accordion/accordion.d.ts +18 -1
- package/dist/components/dataDisplay/accordion/accordion.js +77 -54
- package/dist/components/dataDisplay/accordion/accordion.js.map +1 -1
- package/dist/components/dataDisplay/assetGrid/assetGrid.js +15 -14
- package/dist/components/dataDisplay/assetGrid/assetGrid.js.map +1 -1
- package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
- package/dist/components/dataDisplay/avatar/avatar.js +45 -30
- package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/components/dataDisplay/badge/badge.js +11 -10
- package/dist/components/dataDisplay/badge/badge.js.map +1 -1
- package/dist/components/dataDisplay/card/card.js +16 -15
- package/dist/components/dataDisplay/card/card.js.map +1 -1
- package/dist/components/dataDisplay/carousel/carousel.js +23 -22
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/chart/chart.d.ts +65 -0
- package/dist/components/dataDisplay/chart/chart.js +133 -0
- package/dist/components/dataDisplay/chart/chart.js.map +1 -0
- package/dist/components/dataDisplay/chart/chartTheme.d.ts +35 -0
- package/dist/components/dataDisplay/chart/chartTheme.js +74 -0
- package/dist/components/dataDisplay/chart/chartTheme.js.map +1 -0
- package/dist/components/dataDisplay/chart/index.d.ts +4 -0
- package/dist/components/dataDisplay/chat/chat.js +5 -4
- package/dist/components/dataDisplay/chat/chat.js.map +1 -1
- package/dist/components/dataDisplay/chip/chip.js +5 -4
- package/dist/components/dataDisplay/chip/chip.js.map +1 -1
- package/dist/components/dataDisplay/chipGroup/chipGroup.js +10 -9
- package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
- package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +37 -0
- package/dist/components/dataDisplay/descriptionList/descriptionList.js +43 -0
- package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
- package/dist/components/dataDisplay/descriptionList/index.d.ts +2 -0
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +5 -4
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/components/dataDisplay/imagesList/imagesList.js +11 -10
- package/dist/components/dataDisplay/imagesList/imagesList.js.map +1 -1
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +31 -24
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.d.ts +1 -1
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js +16 -13
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js.map +1 -1
- package/dist/components/dataDisplay/kanban/index.d.ts +2 -0
- package/dist/components/dataDisplay/kanban/kanban.d.ts +47 -0
- package/dist/components/dataDisplay/kanban/kanban.js +63 -0
- package/dist/components/dataDisplay/kanban/kanban.js.map +1 -0
- package/dist/components/dataDisplay/lazyImage/lazyImage.js +9 -8
- package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
- package/dist/components/dataDisplay/list/list.js +11 -10
- package/dist/components/dataDisplay/list/list.js.map +1 -1
- package/dist/components/dataDisplay/meter/index.d.ts +2 -0
- package/dist/components/dataDisplay/meter/meter.d.ts +33 -0
- package/dist/components/dataDisplay/meter/meter.js +62 -0
- package/dist/components/dataDisplay/meter/meter.js.map +1 -0
- package/dist/components/dataDisplay/personChip/index.d.ts +2 -0
- package/dist/components/dataDisplay/personChip/personChip.d.ts +31 -0
- package/dist/components/dataDisplay/personChip/personChip.js +61 -0
- package/dist/components/dataDisplay/personChip/personChip.js.map +1 -0
- package/dist/components/dataDisplay/stat/index.d.ts +2 -0
- package/dist/components/dataDisplay/stat/stat.d.ts +36 -0
- package/dist/components/dataDisplay/stat/stat.js +48 -0
- package/dist/components/dataDisplay/stat/stat.js.map +1 -0
- package/dist/components/dataDisplay/table/table.d.ts +7 -0
- package/dist/components/dataDisplay/table/table.js +21 -15
- package/dist/components/dataDisplay/table/table.js.map +1 -1
- package/dist/components/dataDisplay/table/tableCell.d.ts +3 -1
- package/dist/components/dataDisplay/table/tableCell.js +11 -2
- package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tableHeadCell.d.ts +11 -1
- package/dist/components/dataDisplay/table/tableHeadCell.js +54 -24
- package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/components/dataDisplay/table/tablePagination/tablePagination.js +10 -9
- package/dist/components/dataDisplay/table/tablePagination/tablePagination.js.map +1 -1
- package/dist/components/dataDisplay/thumbCard/thumbCard.js +10 -9
- package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
- package/dist/components/dataDisplay/timeline/index.d.ts +2 -0
- package/dist/components/dataDisplay/timeline/timeline.d.ts +43 -0
- package/dist/components/dataDisplay/timeline/timeline.js +44 -0
- package/dist/components/dataDisplay/timeline/timeline.js.map +1 -0
- package/dist/components/dataDisplay/treeView/treeView.js +5 -4
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/dataDisplay/typography/typography.d.ts +4 -0
- package/dist/components/dataDisplay/typography/typography.js +41 -23
- package/dist/components/dataDisplay/typography/typography.js.map +1 -1
- package/dist/components/feedBack/confirmDialog/confirmDialog.js +14 -13
- package/dist/components/feedBack/confirmDialog/confirmDialog.js.map +1 -1
- package/dist/components/feedBack/emptyState/emptyState.d.ts +26 -0
- package/dist/components/feedBack/emptyState/emptyState.js +27 -0
- package/dist/components/feedBack/emptyState/emptyState.js.map +1 -0
- package/dist/components/feedBack/emptyState/index.d.ts +2 -0
- package/dist/components/feedBack/message/message.js +8 -7
- package/dist/components/feedBack/message/message.js.map +1 -1
- package/dist/components/feedBack/modal/modal.js +5 -4
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/feedBack/progressIndicator/progressIndicator.d.ts +14 -1
- package/dist/components/feedBack/progressIndicator/progressIndicator.js +72 -40
- package/dist/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
- package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js +31 -29
- package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
- package/dist/components/feedBack/skeleton/skeleton.js +17 -16
- package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
- package/dist/components/feedBack/snackbar/snackbar.js +6 -5
- package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
- package/dist/components/feedBack/tooltip/tooltip.js +57 -49
- package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/components/inputs/button/button.js +16 -15
- package/dist/components/inputs/button/button.js.map +1 -1
- package/dist/components/inputs/buttonGroups/buttonGroup.js +5 -4
- package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
- package/dist/components/inputs/checkbox/checkbox.js +10 -9
- package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/components/inputs/datePicker/datePicker.js +123 -120
- package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js +121 -119
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/components/inputs/fileDrop/fileDrop.js +13 -12
- package/dist/components/inputs/fileDrop/fileDrop.js.map +1 -1
- package/dist/components/inputs/fileInput/fileInput.js +4 -3
- package/dist/components/inputs/fileInput/fileInput.js.map +1 -1
- package/dist/components/inputs/floatingButton/floatingButton.js +17 -16
- package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
- package/dist/components/inputs/radioButton/radioButton.js +11 -10
- package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
- package/dist/components/inputs/rating/rating.js +18 -17
- package/dist/components/inputs/rating/rating.js.map +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.d.ts +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.js +72 -69
- package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/components/inputs/selectField/selectField.d.ts +2 -0
- package/dist/components/inputs/selectField/selectField.js +128 -117
- package/dist/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/components/inputs/slider/slider.js +4 -3
- package/dist/components/inputs/slider/slider.js.map +1 -1
- package/dist/components/inputs/textField/textField.js +16 -15
- package/dist/components/inputs/textField/textField.js.map +1 -1
- package/dist/components/inputs/textField/utils.d.ts +1 -1
- package/dist/components/inputs/timePicker/timePicker.js +66 -63
- package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/components/inputs/toggle/toggle.js +14 -13
- package/dist/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/components/inputs/valueSlider/valueSlider.js +9 -8
- package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
- package/dist/components/layout/appLayout/appLayout.js +20 -19
- package/dist/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/components/layout/divider/divider.js +9 -8
- package/dist/components/layout/divider/divider.js.map +1 -1
- package/dist/components/layout/floatingWindow/floatingWindow.js +4 -3
- package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
- package/dist/components/layout/grid/grid.js +17 -16
- package/dist/components/layout/grid/grid.js.map +1 -1
- package/dist/components/layout/page/page.js +9 -8
- package/dist/components/layout/page/page.js.map +1 -1
- package/dist/components/layout/pageHeader/pageHeader.js +10 -9
- package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
- package/dist/components/layout/screenDivider/screenDivider.js +19 -18
- package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
- package/dist/components/layout/sectionHeader/index.d.ts +2 -0
- package/dist/components/layout/sectionHeader/sectionHeader.d.ts +31 -0
- package/dist/components/layout/sectionHeader/sectionHeader.js +67 -0
- package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -0
- package/dist/components/layout/sheet/sheet.js +5 -4
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/stack/stack.js +10 -9
- package/dist/components/layout/stack/stack.js.map +1 -1
- package/dist/components/navigation/appBar/appBar.js +18 -17
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/bottomBar/bottomBar.js +5 -4
- package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js +5 -4
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/navigation/menu/menu.js +6 -5
- package/dist/components/navigation/menu/menu.js.map +1 -1
- package/dist/components/navigation/overflowMenu/overflowMenu.js +16 -15
- package/dist/components/navigation/overflowMenu/overflowMenu.js.map +1 -1
- package/dist/components/navigation/pagination/pagination.js +5 -4
- package/dist/components/navigation/pagination/pagination.js.map +1 -1
- package/dist/components/navigation/sidebar/sidebar.js +13 -12
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/components/navigation/stepper/stepper.d.ts +10 -2
- package/dist/components/navigation/stepper/stepper.js +33 -30
- package/dist/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/components/navigation/tabs/tab/tab.d.ts +2 -0
- package/dist/components/navigation/tabs/tab/tab.js +14 -13
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.d.ts +12 -0
- package/dist/components/navigation/tabs/tabs.js +138 -83
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/connects/rt/table/draggableHeader.d.ts +1 -1
- package/dist/connects/rt/table/draggableHeader.js.map +1 -0
- package/dist/connects/rt/table/headerCellRenderer.d.ts +6 -0
- package/dist/connects/rt/table/headerCellRenderer.js +21 -0
- package/dist/connects/rt/table/headerCellRenderer.js.map +1 -0
- package/dist/connects/rt/table/table.d.ts +2 -0
- package/dist/connects/rt/table/table.js +200 -0
- package/dist/connects/rt/table/table.js.map +1 -0
- package/dist/connects/rt/table/utils.js.map +1 -0
- package/dist/headless/components/dataDisplay/accordion/accordion.js +76 -54
- package/dist/headless/components/dataDisplay/accordion/accordion.js.map +1 -1
- package/dist/headless/components/dataDisplay/avatar/avatar.js +45 -31
- package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js +41 -0
- package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +29 -23
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js +16 -13
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js.map +1 -1
- package/dist/headless/components/dataDisplay/kanban/kanban.js +61 -0
- package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -0
- package/dist/headless/components/dataDisplay/meter/meter.js +60 -0
- package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -0
- package/dist/headless/components/dataDisplay/personChip/personChip.js +59 -0
- package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -0
- package/dist/headless/components/dataDisplay/stat/stat.js +46 -0
- package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -0
- package/dist/headless/components/dataDisplay/table/table.js +16 -11
- package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableCell.js +11 -2
- package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js +54 -24
- package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
- package/dist/headless/components/dataDisplay/timeline/timeline.js +42 -0
- package/dist/headless/components/dataDisplay/timeline/timeline.js.map +1 -0
- package/dist/headless/components/dataDisplay/typography/typography.js +39 -22
- package/dist/headless/components/dataDisplay/typography/typography.js.map +1 -1
- package/dist/headless/components/feedBack/confirmDialog/confirmDialog.js +9 -9
- package/dist/headless/components/feedBack/confirmDialog/confirmDialog.js.map +1 -1
- package/dist/headless/components/feedBack/emptyState/emptyState.js +25 -0
- package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -0
- package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js +70 -39
- package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
- package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js +27 -26
- package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
- package/dist/headless/components/feedBack/tooltip/tooltip.js +53 -46
- package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePicker.js +112 -110
- package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +121 -119
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/headless/components/inputs/selectField/dropdownMenu.js +72 -69
- package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/headless/components/inputs/selectField/selectField.js +109 -99
- package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
- package/dist/headless/components/inputs/timePicker/timePicker.js +65 -63
- package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js +65 -0
- package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -0
- package/dist/headless/components/navigation/stepper/stepper.js +31 -29
- package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.js +129 -75
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/hooks/useSafeLayoutEffect.js +4 -2
- package/dist/headless/hooks/useSafeLayoutEffect.js.map +1 -1
- package/dist/headless/icons/catalog.js +78 -1
- package/dist/headless/icons/catalog.js.map +1 -1
- package/dist/headless/icons/index.js +596 -574
- package/dist/headless/icons/index.js.map +1 -1
- package/dist/headless/icons/svg/accountTree.js +9 -0
- package/dist/headless/icons/svg/accountTree.js.map +1 -0
- package/dist/headless/icons/svg/callSplit.js +9 -0
- package/dist/headless/icons/svg/callSplit.js.map +1 -0
- package/dist/headless/icons/svg/deviceHub.js +8 -0
- package/dist/headless/icons/svg/deviceHub.js.map +1 -0
- package/dist/headless/icons/svg/editNote.js +9 -0
- package/dist/headless/icons/svg/editNote.js.map +1 -0
- package/dist/headless/icons/svg/filterList.js +9 -0
- package/dist/headless/icons/svg/filterList.js.map +1 -0
- package/dist/headless/icons/svg/forkRight.js +8 -0
- package/dist/headless/icons/svg/forkRight.js.map +1 -0
- package/dist/headless/icons/svg/groups.js +9 -0
- package/dist/headless/icons/svg/groups.js.map +1 -0
- package/dist/headless/icons/svg/hub.js +8 -0
- package/dist/headless/icons/svg/hub.js.map +1 -0
- package/dist/headless/icons/svg/index.js +598 -576
- package/dist/headless/icons/svg/index.js.map +1 -1
- package/dist/headless/icons/svg/lan.js +9 -0
- package/dist/headless/icons/svg/lan.js.map +1 -0
- package/dist/headless/icons/svg/personOff.js +9 -0
- package/dist/headless/icons/svg/personOff.js.map +1 -0
- package/dist/headless/icons/svg/schema.js +9 -0
- package/dist/headless/icons/svg/schema.js.map +1 -0
- package/dist/headless/index.js +209 -183
- package/dist/headless/index.js.map +1 -1
- package/dist/hooks/useSafeLayoutEffect.d.ts +7 -1
- package/dist/hooks/useSafeLayoutEffect.js +4 -2
- package/dist/hooks/useSafeLayoutEffect.js.map +1 -1
- package/dist/icons/catalog.d.ts +1 -1
- package/dist/icons/catalog.js +78 -1
- package/dist/icons/catalog.js.map +1 -1
- package/dist/icons/index.js +596 -574
- package/dist/icons/index.js.map +1 -1
- package/dist/icons/svg/accountTree.d.ts +4 -0
- package/dist/icons/svg/accountTree.js +9 -0
- package/dist/icons/svg/accountTree.js.map +1 -0
- package/dist/icons/svg/callSplit.d.ts +4 -0
- package/dist/icons/svg/callSplit.js +9 -0
- package/dist/icons/svg/callSplit.js.map +1 -0
- package/dist/icons/svg/deviceHub.d.ts +4 -0
- package/dist/icons/svg/deviceHub.js +8 -0
- package/dist/icons/svg/deviceHub.js.map +1 -0
- package/dist/icons/svg/editNote.d.ts +4 -0
- package/dist/icons/svg/editNote.js +9 -0
- package/dist/icons/svg/editNote.js.map +1 -0
- package/dist/icons/svg/filterList.d.ts +4 -0
- package/dist/icons/svg/filterList.js +9 -0
- package/dist/icons/svg/filterList.js.map +1 -0
- package/dist/icons/svg/forkRight.d.ts +4 -0
- package/dist/icons/svg/forkRight.js +8 -0
- package/dist/icons/svg/forkRight.js.map +1 -0
- package/dist/icons/svg/groups.d.ts +4 -0
- package/dist/icons/svg/groups.js +9 -0
- package/dist/icons/svg/groups.js.map +1 -0
- package/dist/icons/svg/hub.d.ts +4 -0
- package/dist/icons/svg/hub.js +8 -0
- package/dist/icons/svg/hub.js.map +1 -0
- package/dist/icons/svg/index.d.ts +11 -0
- package/dist/icons/svg/index.js +598 -576
- package/dist/icons/svg/index.js.map +1 -1
- package/dist/icons/svg/lan.d.ts +4 -0
- package/dist/icons/svg/lan.js +9 -0
- package/dist/icons/svg/lan.js.map +1 -0
- package/dist/icons/svg/personOff.d.ts +4 -0
- package/dist/icons/svg/personOff.js +9 -0
- package/dist/icons/svg/personOff.js.map +1 -0
- package/dist/icons/svg/schema.d.ts +4 -0
- package/dist/icons/svg/schema.js +9 -0
- package/dist/icons/svg/schema.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.cjs.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +16 -0
- package/dist/index.js +209 -183
- package/dist/index.js.map +1 -1
- package/package.json +18 -7
- package/dist/react-table/components/base/icon/icon.js +0 -60
- package/dist/react-table/components/base/icon/icon.js.map +0 -1
- package/dist/react-table/components/base/icon/iconProvider.js +0 -15
- package/dist/react-table/components/base/icon/iconProvider.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/table.js +0 -37
- package/dist/react-table/components/dataDisplay/table/table.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tableBody.js +0 -7
- package/dist/react-table/components/dataDisplay/table/tableBody.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tableCell.js +0 -7
- package/dist/react-table/components/dataDisplay/table/tableCell.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tableHead.js +0 -7
- package/dist/react-table/components/dataDisplay/table/tableHead.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tableHeadCell.js +0 -48
- package/dist/react-table/components/dataDisplay/table/tableHeadCell.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tablePagination/tablePagination.js +0 -40
- package/dist/react-table/components/dataDisplay/table/tablePagination/tablePagination.js.map +0 -1
- package/dist/react-table/components/dataDisplay/table/tableRow.js +0 -20
- package/dist/react-table/components/dataDisplay/table/tableRow.js.map +0 -1
- package/dist/react-table/components/feedBack/message/message.js +0 -31
- package/dist/react-table/components/feedBack/message/message.js.map +0 -1
- package/dist/react-table/components/feedBack/progressIndicator/progressIndicator.js +0 -51
- package/dist/react-table/components/feedBack/progressIndicator/progressIndicator.js.map +0 -1
- package/dist/react-table/components/inputs/textField/textField.js +0 -125
- package/dist/react-table/components/inputs/textField/textField.js.map +0 -1
- package/dist/react-table/components/inputs/textField/textFieldAdornment.js +0 -25
- package/dist/react-table/components/inputs/textField/textFieldAdornment.js.map +0 -1
- package/dist/react-table/components/inputs/textField/textFieldWrapper.js +0 -50
- package/dist/react-table/components/inputs/textField/textFieldWrapper.js.map +0 -1
- package/dist/react-table/components/inputs/textField/utils.js +0 -11
- package/dist/react-table/components/inputs/textField/utils.js.map +0 -1
- package/dist/react-table/connects/rt/table/draggableHeader.js.map +0 -1
- package/dist/react-table/connects/rt/table/headerCellRenderer.js +0 -14
- package/dist/react-table/connects/rt/table/headerCellRenderer.js.map +0 -1
- package/dist/react-table/connects/rt/table/table.js +0 -180
- package/dist/react-table/connects/rt/table/table.js.map +0 -1
- package/dist/react-table/connects/rt/table/utils.js.map +0 -1
- package/dist/react-table/hooks/useForkRef.js +0 -13
- package/dist/react-table/hooks/useForkRef.js.map +0 -1
- package/dist/react-table/hooks/useSafeLayoutEffect.js +0 -6
- package/dist/react-table/hooks/useSafeLayoutEffect.js.map +0 -1
- package/dist/react-table/icons/config.js +0 -9
- package/dist/react-table/icons/config.js.map +0 -1
- package/dist/react-table/icons/registry.js +0 -12
- package/dist/react-table/icons/registry.js.map +0 -1
- package/dist/react-table/icons/store.js +0 -10
- package/dist/react-table/icons/store.js.map +0 -1
- package/dist/react-table/utils/setRef.js +0 -7
- package/dist/react-table/utils/setRef.js.map +0 -1
- package/dist/storybook/storyPlay.d.ts +0 -19
- /package/dist/{react-table/connects → connects}/rt/table/draggableHeader.js +0 -0
- /package/dist/{react-table/connects → connects}/rt/table/utils.js +0 -0
- /package/dist/{react-table/react-table.js → react-table.js} +0 -0
- /package/dist/{react-table/react-table.js.map → react-table.js.map} +0 -0
|
@@ -1,44 +1,58 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import
|
|
4
|
-
const
|
|
5
|
-
const [
|
|
1
|
+
import { jsx as o, jsxs as C } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as N, useState as $, Children as E, isValidElement as S } from "react";
|
|
3
|
+
import h from "clsx";
|
|
4
|
+
const _ = (u) => typeof u == "string", j = N(function({ className: d, src: s, alt: e, size: t = "medium", variant: i = "circular", color: l, style: m, imgProps: a, children: v, ...r }, f) {
|
|
5
|
+
const [b, c] = $(!1), n = !!s && !b, x = h(
|
|
6
6
|
"smwb-avatar",
|
|
7
|
-
`smwb-avatar_${
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
`smwb-avatar_${i}`,
|
|
8
|
+
_(t) ? `smwb-avatar_${t}` : null,
|
|
9
|
+
d
|
|
10
10
|
), y = {
|
|
11
|
-
...
|
|
12
|
-
...
|
|
13
|
-
...
|
|
11
|
+
...m,
|
|
12
|
+
..._(t) ? {} : { width: t, height: t, fontSize: t / 2.5 },
|
|
13
|
+
...l && !n ? { backgroundColor: l } : {}
|
|
14
14
|
};
|
|
15
|
-
return /* @__PURE__ */
|
|
15
|
+
return /* @__PURE__ */ o("div", { ref: f, ...r, "data-testid": "avatar", className: x, style: y, children: n ? /* @__PURE__ */ o(
|
|
16
16
|
"img",
|
|
17
17
|
{
|
|
18
18
|
...a,
|
|
19
|
-
className:
|
|
20
|
-
src:
|
|
19
|
+
className: h("smwb-avatar__img", a == null ? void 0 : a.className),
|
|
20
|
+
src: s,
|
|
21
21
|
alt: e,
|
|
22
22
|
onError: (A) => {
|
|
23
|
-
var
|
|
24
|
-
|
|
23
|
+
var w;
|
|
24
|
+
c(!0), (w = a == null ? void 0 : a.onError) == null || w.call(a, A);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
) : /* @__PURE__ */
|
|
28
|
-
}), I =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
) : /* @__PURE__ */ o("span", { className: "smwb-avatar__fallback", role: "img", "aria-label": e, children: v }) });
|
|
28
|
+
}), I = N(function({
|
|
29
|
+
className: d,
|
|
30
|
+
max: s = 5,
|
|
31
|
+
total: e,
|
|
32
|
+
onSurplusClick: t,
|
|
33
|
+
surplusAriaLabel: i = (r) => `${r} more`,
|
|
34
|
+
size: l,
|
|
35
|
+
children: m,
|
|
36
|
+
...a
|
|
37
|
+
}, v) {
|
|
38
|
+
const r = E.toArray(m).filter(S), f = e != null ? e : r.length, b = Math.max(s, 1), c = r.slice(0, b), n = f - c.length;
|
|
39
|
+
return (
|
|
40
|
+
// In order, the first avatar first; the "+N" chip ends the row.
|
|
41
|
+
/* @__PURE__ */ C("div", { ref: v, ...a, "data-testid": "avatar-group", className: h("smwb-avatar-group", d), children: [
|
|
42
|
+
c,
|
|
43
|
+
n > 0 ? /* @__PURE__ */ o(
|
|
44
|
+
j,
|
|
45
|
+
{
|
|
46
|
+
className: "smwb-avatar-group__surplus",
|
|
47
|
+
size: l,
|
|
48
|
+
alt: i(n),
|
|
49
|
+
onClick: t,
|
|
50
|
+
style: t ? { cursor: "pointer" } : void 0,
|
|
51
|
+
children: `+${n}`
|
|
52
|
+
}
|
|
53
|
+
) : null
|
|
54
|
+
] })
|
|
55
|
+
);
|
|
42
56
|
});
|
|
43
57
|
export {
|
|
44
58
|
j as Avatar,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar.js","sources":["../../../../../src/components/dataDisplay/avatar/avatar.tsx"],"sourcesContent":["import {\n Children,\n CSSProperties,\n forwardRef,\n HTMLAttributes,\n ImgHTMLAttributes,\n isValidElement,\n PropsWithChildren,\n ReactNode,\n useState,\n} from \"react\";\nimport cn from \"clsx\";\n\nexport type AvatarSize = \"small\" | \"medium\" | \"large\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** Image source. Falls back to children (initials / icon) on error or when absent. */\n src?: string;\n alt?: string;\n /** Preset size or an explicit pixel value. */\n size?: AvatarSize | number;\n variant?: \"circular\" | \"rounded\" | \"square\";\n /** Background color for the fallback (initials / icon). */\n color?: string;\n /** Extra attributes forwarded to the underlying <img> (srcSet, loading…). */\n imgProps?: ImgHTMLAttributes<HTMLImageElement>;\n}\n\nconst isPresetSize = (size: AvatarSize | number): size is AvatarSize => typeof size === \"string\";\n\nexport const Avatar = forwardRef<HTMLDivElement, PropsWithChildren<AvatarProps>>(function Avatar(\n { className, src, alt, size = \"medium\", variant = \"circular\", color, style, imgProps, children, ...props },\n ref\n) {\n const [imgFailed, setImgFailed] = useState(false);\n const showImage = Boolean(src) && !imgFailed;\n\n const avatarClassName = cn(\n \"smwb-avatar\",\n `smwb-avatar_${variant}`,\n isPresetSize(size) ? `smwb-avatar_${size}` : null,\n className\n );\n\n const inlineStyle: CSSProperties = {\n ...style,\n ...(isPresetSize(size) ? {} : { width: size, height: size, fontSize: size / 2.5 }),\n ...(color && !showImage ? { backgroundColor: color } : {}),\n };\n\n return (\n <div ref={ref} {...props} data-testid=\"avatar\" className={avatarClassName} style={inlineStyle}>\n {showImage ? (\n <img\n {...imgProps}\n className={cn(\"smwb-avatar__img\", imgProps?.className)}\n src={src}\n alt={alt}\n onError={(e) => {\n setImgFailed(true);\n imgProps?.onError?.(e);\n }}\n />\n ) : (\n <span className=\"smwb-avatar__fallback\" role=\"img\" aria-label={alt}>\n {children}\n </span>\n )}\n </div>\n );\n});\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** Maximum avatars to show before collapsing the rest into a \"+N\" surplus. */\n max?: number;\n /** Override the total count used for the surplus label (defaults to children count). */\n total?: number;\n /** Click handler for the \"+N\" surplus chip. */\n onSurplusClick?: () => void;\n}\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, PropsWithChildren<AvatarGroupProps>>(function AvatarGroup(\n {
|
|
1
|
+
{"version":3,"file":"avatar.js","sources":["../../../../../src/components/dataDisplay/avatar/avatar.tsx"],"sourcesContent":["import {\n Children,\n CSSProperties,\n forwardRef,\n HTMLAttributes,\n ImgHTMLAttributes,\n isValidElement,\n PropsWithChildren,\n ReactNode,\n useState,\n} from \"react\";\nimport cn from \"clsx\";\n\nexport type AvatarSize = \"small\" | \"medium\" | \"large\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** Image source. Falls back to children (initials / icon) on error or when absent. */\n src?: string;\n alt?: string;\n /** Preset size or an explicit pixel value. */\n size?: AvatarSize | number;\n variant?: \"circular\" | \"rounded\" | \"square\";\n /** Background color for the fallback (initials / icon). */\n color?: string;\n /** Extra attributes forwarded to the underlying <img> (srcSet, loading…). */\n imgProps?: ImgHTMLAttributes<HTMLImageElement>;\n}\n\nconst isPresetSize = (size: AvatarSize | number): size is AvatarSize => typeof size === \"string\";\n\nexport const Avatar = forwardRef<HTMLDivElement, PropsWithChildren<AvatarProps>>(function Avatar(\n { className, src, alt, size = \"medium\", variant = \"circular\", color, style, imgProps, children, ...props },\n ref\n) {\n const [imgFailed, setImgFailed] = useState(false);\n const showImage = Boolean(src) && !imgFailed;\n\n const avatarClassName = cn(\n \"smwb-avatar\",\n `smwb-avatar_${variant}`,\n isPresetSize(size) ? `smwb-avatar_${size}` : null,\n className\n );\n\n const inlineStyle: CSSProperties = {\n ...style,\n ...(isPresetSize(size) ? {} : { width: size, height: size, fontSize: size / 2.5 }),\n ...(color && !showImage ? { backgroundColor: color } : {}),\n };\n\n return (\n <div ref={ref} {...props} data-testid=\"avatar\" className={avatarClassName} style={inlineStyle}>\n {showImage ? (\n <img\n {...imgProps}\n className={cn(\"smwb-avatar__img\", imgProps?.className)}\n src={src}\n alt={alt}\n onError={(e) => {\n setImgFailed(true);\n imgProps?.onError?.(e);\n }}\n />\n ) : (\n <span className=\"smwb-avatar__fallback\" role=\"img\" aria-label={alt}>\n {children}\n </span>\n )}\n </div>\n );\n});\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** Maximum avatars to show before collapsing the rest into a \"+N\" surplus. */\n max?: number;\n /** Override the total count used for the surplus label (defaults to children count). */\n total?: number;\n /** Click handler for the \"+N\" surplus chip. */\n onSurplusClick?: () => void;\n /** Accessible name of the \"+N\" surplus chip. */\n surplusAriaLabel?: (count: number) => string;\n /** Size of the \"+N\" surplus chip: match the avatars in the group. */\n size?: AvatarSize | number;\n}\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, PropsWithChildren<AvatarGroupProps>>(function AvatarGroup(\n {\n className,\n max = 5,\n total,\n onSurplusClick,\n surplusAriaLabel = (count: number) => `${count} more`,\n size,\n children,\n ...props\n },\n ref\n) {\n const items = Children.toArray(children).filter(isValidElement);\n const totalCount = total ?? items.length;\n const clampedMax = Math.max(max, 1);\n const visible: ReactNode[] = items.slice(0, clampedMax);\n const surplus = totalCount - visible.length;\n\n return (\n // In order, the first avatar first; the \"+N\" chip ends the row.\n <div ref={ref} {...props} data-testid=\"avatar-group\" className={cn(\"smwb-avatar-group\", className)}>\n {visible}\n {surplus > 0 ? (\n <Avatar\n className=\"smwb-avatar-group__surplus\"\n size={size}\n alt={surplusAriaLabel(surplus)}\n onClick={onSurplusClick}\n style={onSurplusClick ? { cursor: \"pointer\" } : undefined}\n >\n {`+${surplus}`}\n </Avatar>\n ) : null}\n </div>\n );\n});\n\nexport default Avatar;\n"],"names":["isPresetSize","size","Avatar","forwardRef","className","src","alt","variant","color","style","imgProps","children","props","ref","imgFailed","setImgFailed","useState","showImage","avatarClassName","cn","inlineStyle","jsx","e","_a","AvatarGroup","max","total","onSurplusClick","surplusAriaLabel","count","items","Children","isValidElement","totalCount","clampedMax","visible","surplus","jsxs"],"mappings":";;;AA6BA,MAAMA,IAAe,CAACC,MAAkD,OAAOA,KAAS,UAE3EC,IAASC,EAA2D,SAC/E,EAAE,WAAAC,GAAW,KAAAC,GAAK,KAAAC,GAAK,MAAAL,IAAO,UAAU,SAAAM,IAAU,YAAY,OAAAC,GAAO,OAAAC,GAAO,UAAAC,GAAU,UAAAC,GAAU,GAAGC,EAAA,GACnGC,GACA;AACA,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAY,EAAQZ,KAAQ,CAACS,GAE7BI,IAAkBC;AAAA,IACtB;AAAA,IACA,eAAeZ,CAAO;AAAA,IACtBP,EAAaC,CAAI,IAAI,eAAeA,CAAI,KAAK;AAAA,IAC7CG;AAAA,EAAA,GAGIgB,IAA6B;AAAA,IACjC,GAAGX;AAAA,IACH,GAAIT,EAAaC,CAAI,IAAI,CAAA,IAAK,EAAE,OAAOA,GAAM,QAAQA,GAAM,UAAUA,IAAO,IAAA;AAAA,IAC5E,GAAIO,KAAS,CAACS,IAAY,EAAE,iBAAiBT,EAAA,IAAU,CAAA;AAAA,EAAC;AAG1D,SACE,gBAAAa,EAAC,OAAA,EAAI,KAAAR,GAAW,GAAGD,GAAO,eAAY,UAAS,WAAWM,GAAiB,OAAOE,GAC/E,UAAAH,IACC,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGX;AAAA,MACJ,WAAWS,EAAG,oBAAoBT,KAAA,gBAAAA,EAAU,SAAS;AAAA,MACrD,KAAAL;AAAA,MACA,KAAAC;AAAA,MACA,SAAS,CAACgB,MAAM;;AACd,QAAAP,EAAa,EAAI,IACjBQ,IAAAb,KAAA,gBAAAA,EAAU,YAAV,QAAAa,EAAA,KAAAb,GAAoBY;AAAA,MACtB;AAAA,IAAA;AAAA,EAAA,IAGF,gBAAAD,EAAC,QAAA,EAAK,WAAU,yBAAwB,MAAK,OAAM,cAAYf,GAC5D,UAAAK,EAAA,CACH,EAAA,CAEJ;AAEJ,CAAC,GAgBYa,IAAcrB,EAAgE,SACzF;AAAA,EACE,WAAAC;AAAA,EACA,KAAAqB,IAAM;AAAA,EACN,OAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,kBAAAC,IAAmB,CAACC,MAAkB,GAAGA,CAAK;AAAA,EAC9C,MAAA5B;AAAA,EACA,UAAAU;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMiB,IAAQC,EAAS,QAAQpB,CAAQ,EAAE,OAAOqB,CAAc,GACxDC,IAAaP,KAAA,OAAAA,IAASI,EAAM,QAC5BI,IAAa,KAAK,IAAIT,GAAK,CAAC,GAC5BU,IAAuBL,EAAM,MAAM,GAAGI,CAAU,GAChDE,IAAUH,IAAaE,EAAQ;AAErC;AAAA;AAAA,IAEE,gBAAAE,EAAC,OAAA,EAAI,KAAAxB,GAAW,GAAGD,GAAO,eAAY,gBAAe,WAAWO,EAAG,qBAAqBf,CAAS,GAC9F,UAAA;AAAA,MAAA+B;AAAA,MACAC,IAAU,IACT,gBAAAf;AAAA,QAACnB;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAAD;AAAA,UACA,KAAK2B,EAAiBQ,CAAO;AAAA,UAC7B,SAAST;AAAA,UACT,OAAOA,IAAiB,EAAE,QAAQ,cAAc;AAAA,UAE/C,cAAIS,CAAO;AAAA,QAAA;AAAA,MAAA,IAEZ;AAAA,IAAA,EAAA,CACN;AAAA;AAEJ,CAAC;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsxs as p, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import m from "react";
|
|
3
|
+
import l from "clsx";
|
|
4
|
+
const x = m.forwardRef(
|
|
5
|
+
function({ className: t, term: r, children: s, ...e }, i) {
|
|
6
|
+
return /* @__PURE__ */ p("div", { ...e, ref: i, className: l("smwb-description-list__item", t), children: [
|
|
7
|
+
/* @__PURE__ */ n("dt", { className: "smwb-description-list__term", children: r }),
|
|
8
|
+
/* @__PURE__ */ n("dd", { className: "smwb-description-list__details", children: s })
|
|
9
|
+
] });
|
|
10
|
+
}
|
|
11
|
+
), R = m.forwardRef(
|
|
12
|
+
function({ className: t, style: r, items: s, layout: e = "auto", termWidth: i, dense: f, children: w, ...b }, _) {
|
|
13
|
+
const c = typeof i == "number" ? `${i}px` : i;
|
|
14
|
+
return /* @__PURE__ */ p(
|
|
15
|
+
"dl",
|
|
16
|
+
{
|
|
17
|
+
...b,
|
|
18
|
+
ref: _,
|
|
19
|
+
className: l(
|
|
20
|
+
"smwb-description-list",
|
|
21
|
+
`smwb-description-list_${e}`,
|
|
22
|
+
{ "smwb-description-list_dense": f },
|
|
23
|
+
t
|
|
24
|
+
),
|
|
25
|
+
style: c === void 0 ? r : { ...r, "--smwb-description-term": c },
|
|
26
|
+
children: [
|
|
27
|
+
s == null ? void 0 : s.map((o, u) => {
|
|
28
|
+
var d;
|
|
29
|
+
return /* @__PURE__ */ n(x, { term: o.term, children: o.description }, (d = o.key) != null ? d : u);
|
|
30
|
+
}),
|
|
31
|
+
w
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
export {
|
|
38
|
+
x as DescriptionItem,
|
|
39
|
+
R as DescriptionList
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=descriptionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptionList.js","sources":["../../../../../src/components/dataDisplay/descriptionList/descriptionList.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode } from \"react\";\nimport cn from \"clsx\";\n\nexport interface DescriptionListEntry {\n term: ReactNode;\n description: ReactNode;\n /** React key; the index is used without it. */\n key?: React.Key;\n}\n\n/**\n * `auto`: the term beside its description while the list's container is at\n * least 420px wide, above it when narrower (a container query). `row` and\n * `stacked` fix one layout.\n */\nexport type DescriptionListLayout = \"auto\" | \"row\" | \"stacked\";\n\nexport interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {\n className?: string;\n /** The pairs as data; `DescriptionItem` children work too, and come after them. */\n items?: DescriptionListEntry[];\n layout?: DescriptionListLayout;\n /** Width of the term column in the row layout: px or any CSS track size. 30% of the list, at least 6rem, by default. */\n termWidth?: number | string;\n /** Tighter spacing, for side panels. */\n dense?: boolean;\n}\n\nexport interface DescriptionItemProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /** The field's name. */\n term: ReactNode;\n}\n\n/** One pair: the term and, as children, its description. */\nexport const DescriptionItem = React.forwardRef<HTMLDivElement, PropsWithChildren<DescriptionItemProps>>(\n function DescriptionItem({ className, term, children, ...rest }, ref) {\n return (\n <div {...rest} ref={ref} className={cn(\"smwb-description-list__item\", className)}>\n <dt className=\"smwb-description-list__term\">{term}</dt>\n <dd className=\"smwb-description-list__details\">{children}</dd>\n </div>\n );\n }\n);\n\n/** Field–value pairs (a `<dl>`): side by side, stacking on a narrow container. */\nexport const DescriptionList = React.forwardRef<HTMLDListElement, PropsWithChildren<DescriptionListProps>>(\n function DescriptionList({ className, style, items, layout = \"auto\", termWidth, dense, children, ...rest }, ref) {\n const width = typeof termWidth === \"number\" ? `${termWidth}px` : termWidth;\n return (\n <dl\n {...rest}\n ref={ref}\n className={cn(\n \"smwb-description-list\",\n `smwb-description-list_${layout}`,\n { \"smwb-description-list_dense\": dense },\n className\n )}\n style={width === undefined ? style : ({ ...style, \"--smwb-description-term\": width } as CSSProperties)}\n >\n {items?.map((item, index) => (\n <DescriptionItem key={item.key ?? index} term={item.term}>\n {item.description}\n </DescriptionItem>\n ))}\n {children}\n </dl>\n );\n }\n);\n\nexport default DescriptionList;\n"],"names":["DescriptionItem","React","className","term","children","rest","ref","jsxs","cn","jsx","DescriptionList","style","items","layout","termWidth","dense","width","item","index","_a"],"mappings":";;;AAmCO,MAAMA,IAAkBC,EAAM;AAAA,EACnC,SAAyB,EAAE,WAAAC,GAAW,MAAAC,GAAM,UAAAC,GAAU,GAAGC,EAAA,GAAQC,GAAK;AACpE,WACE,gBAAAC,EAAC,SAAK,GAAGF,GAAM,KAAAC,GAAU,WAAWE,EAAG,+BAA+BN,CAAS,GAC7E,UAAA;AAAA,MAAA,gBAAAO,EAAC,MAAA,EAAG,WAAU,+BAA+B,UAAAN,GAAK;AAAA,MAClD,gBAAAM,EAAC,MAAA,EAAG,WAAU,kCAAkC,UAAAL,EAAA,CAAS;AAAA,IAAA,GAC3D;AAAA,EAEJ;AACF,GAGaM,IAAkBT,EAAM;AAAA,EACnC,SAAyB,EAAE,WAAAC,GAAW,OAAAS,GAAO,OAAAC,GAAO,QAAAC,IAAS,QAAQ,WAAAC,GAAW,OAAAC,GAAO,UAAAX,GAAU,GAAGC,EAAA,GAAQC,GAAK;AAC/G,UAAMU,IAAQ,OAAOF,KAAc,WAAW,GAAGA,CAAS,OAAOA;AACjE,WACE,gBAAAP;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGF;AAAA,QACJ,KAAAC;AAAA,QACA,WAAWE;AAAA,UACT;AAAA,UACA,yBAAyBK,CAAM;AAAA,UAC/B,EAAE,+BAA+BE,EAAA;AAAA,UACjCb;AAAA,QAAA;AAAA,QAEF,OAAOc,MAAU,SAAYL,IAAS,EAAE,GAAGA,GAAO,2BAA2BK,EAAA;AAAA,QAE5E,UAAA;AAAA,UAAAJ,KAAA,gBAAAA,EAAO,IAAI,CAACK,GAAMC,MAAA;;qCAChBlB,GAAA,EAAwC,MAAMiB,EAAK,MACjD,UAAAA,EAAK,YAAA,IADcE,IAAAF,EAAK,QAAL,OAAAE,IAAYD,CAElC;AAAA;AAAA,UAEDd;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;"}
|
|
@@ -1,54 +1,60 @@
|
|
|
1
|
-
import { jsxs as n, Fragment as
|
|
2
|
-
import { useContext as
|
|
3
|
-
import
|
|
4
|
-
import { useModalState as
|
|
5
|
-
import { ImagesListContext as
|
|
6
|
-
import
|
|
7
|
-
const
|
|
1
|
+
import { jsxs as n, Fragment as y, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useContext as _, useEffect as h } from "react";
|
|
3
|
+
import m from "clsx";
|
|
4
|
+
import { useModalState as v } from "../../../../hooks/useModalState.js";
|
|
5
|
+
import { ImagesListContext as x } from "../imagesListContext.js";
|
|
6
|
+
import I from "./imagesListItemModal.js";
|
|
7
|
+
const M = ({
|
|
8
8
|
className: s,
|
|
9
9
|
src: i,
|
|
10
10
|
rounded: o,
|
|
11
|
-
itemBarContent:
|
|
11
|
+
itemBarContent: r,
|
|
12
12
|
cols: d = 1,
|
|
13
|
-
rows:
|
|
13
|
+
rows: l = 1,
|
|
14
14
|
itemBarPlacement: g = "bottom",
|
|
15
15
|
alt: c = "image"
|
|
16
16
|
}) => {
|
|
17
|
-
const { isOpen:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const { isOpen: t, onClose: b, onOpen: p } = v(), { rowsHeight: a, variant: w } = _(x);
|
|
18
|
+
h(() => {
|
|
19
|
+
if (!t) return;
|
|
20
|
+
const u = document.body.style.overflow;
|
|
21
|
+
return document.body.style.overflow = "hidden", () => {
|
|
22
|
+
document.body.style.overflow = u;
|
|
23
|
+
};
|
|
24
|
+
}, [t]);
|
|
21
25
|
const f = {
|
|
22
|
-
height:
|
|
23
|
-
|
|
26
|
+
// No height is undefined, not "": React writes an empty value on the client
|
|
27
|
+
// but not on the server, and hydration reports the style as mismatched.
|
|
28
|
+
height: a ? `${a * l}px` : void 0,
|
|
29
|
+
gridRowEnd: `span ${l}`,
|
|
24
30
|
gridColumnEnd: `span ${d}`
|
|
25
31
|
};
|
|
26
|
-
return /* @__PURE__ */ n(
|
|
32
|
+
return /* @__PURE__ */ n(y, { children: [
|
|
27
33
|
/* @__PURE__ */ e(
|
|
28
34
|
"li",
|
|
29
35
|
{
|
|
30
36
|
"data-testid": "images-list-item",
|
|
31
|
-
className:
|
|
37
|
+
className: m("smwb-gallery__list__item", s, "smwb-gallery-item", `smwb-${w}`),
|
|
32
38
|
onClick: p,
|
|
33
39
|
style: f,
|
|
34
40
|
children: /* @__PURE__ */ n("div", { className: "smwb-gallery-item__inner", children: [
|
|
35
|
-
/* @__PURE__ */ e("div", { className: "smwb-gallery-item__img-wrapper", children: /* @__PURE__ */ e("img", { src: i, alt: c || "image", className:
|
|
36
|
-
|
|
41
|
+
/* @__PURE__ */ e("div", { className: "smwb-gallery-item__img-wrapper", children: /* @__PURE__ */ e("img", { src: i, alt: c || "image", className: m("smwb-gallery-item__img", { "smwb-rounded": o }) }) }),
|
|
42
|
+
r && /* @__PURE__ */ e(
|
|
37
43
|
"div",
|
|
38
44
|
{
|
|
39
|
-
className:
|
|
45
|
+
className: m("smwb-gallery-item__bar", s, `smwb-${g}`, {
|
|
40
46
|
"smwb-rounded": o
|
|
41
47
|
}),
|
|
42
|
-
children:
|
|
48
|
+
children: r
|
|
43
49
|
}
|
|
44
50
|
)
|
|
45
51
|
] })
|
|
46
52
|
}
|
|
47
53
|
),
|
|
48
|
-
/* @__PURE__ */ e(
|
|
54
|
+
/* @__PURE__ */ e(I, { src: i, onClose: b, isOpen: t })
|
|
49
55
|
] });
|
|
50
56
|
};
|
|
51
57
|
export {
|
|
52
|
-
|
|
58
|
+
M as default
|
|
53
59
|
};
|
|
54
60
|
//# sourceMappingURL=imagesListItem.js.map
|
package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagesListItem.js","sources":["../../../../../../src/components/dataDisplay/imagesList/imagesListItem/imagesListItem.tsx"],"sourcesContent":["import React, { CSSProperties, useContext, useEffect } from \"react\";\nimport cn from \"clsx\";\nimport { useModalState } from \"../../../../hooks/useModalState\";\nimport { ImagesListItemModal } from \"../index\";\nimport { ImagesListContext } from \"../imagesListContext\";\n\nexport interface ImagesListItemProps {\n className?: string;\n src: string;\n rowsHeight?: number;\n cols: number;\n rows: number;\n rounded?: boolean;\n itemBarPlacement?: \"top\" | \"bottom\" | \"under\";\n itemBarContent?: React.ReactNode;\n alt?: string;\n}\n\nconst ImagesListItem = ({\n className,\n src,\n rounded,\n itemBarContent,\n cols = 1,\n rows = 1,\n itemBarPlacement = \"bottom\",\n alt = \"image\",\n}: ImagesListItemProps) => {\n const { isOpen, onClose, onOpen } = useModalState();\n const { rowsHeight, variant } = useContext(ImagesListContext);\n\n useEffect(() => {\n if (isOpen)
|
|
1
|
+
{"version":3,"file":"imagesListItem.js","sources":["../../../../../../src/components/dataDisplay/imagesList/imagesListItem/imagesListItem.tsx"],"sourcesContent":["import React, { CSSProperties, useContext, useEffect } from \"react\";\nimport cn from \"clsx\";\nimport { useModalState } from \"../../../../hooks/useModalState\";\nimport { ImagesListItemModal } from \"../index\";\nimport { ImagesListContext } from \"../imagesListContext\";\n\nexport interface ImagesListItemProps {\n className?: string;\n src: string;\n rowsHeight?: number;\n cols: number;\n rows: number;\n rounded?: boolean;\n itemBarPlacement?: \"top\" | \"bottom\" | \"under\";\n itemBarContent?: React.ReactNode;\n alt?: string;\n}\n\nconst ImagesListItem = ({\n className,\n src,\n rounded,\n itemBarContent,\n cols = 1,\n rows = 1,\n itemBarPlacement = \"bottom\",\n alt = \"image\",\n}: ImagesListItemProps) => {\n const { isOpen, onClose, onOpen } = useModalState();\n const { rowsHeight, variant } = useContext(ImagesListContext);\n\n // Lock the page's scroll while the viewer is open, and give it back as it was.\n // (Every item used to set it to \"auto\" when it mounted, undoing another lock.)\n useEffect(() => {\n if (!isOpen) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [isOpen]);\n\n const style: CSSProperties = {\n // No height is undefined, not \"\": React writes an empty value on the client\n // but not on the server, and hydration reports the style as mismatched.\n height: rowsHeight ? `${rowsHeight * rows}px` : undefined,\n gridRowEnd: `span ${rows}`,\n gridColumnEnd: `span ${cols}`,\n };\n\n return (\n <>\n <li\n data-testid=\"images-list-item\"\n className={cn(\"smwb-gallery__list__item\", className, \"smwb-gallery-item\", `smwb-${variant}`)}\n onClick={onOpen}\n style={style}\n >\n <div className=\"smwb-gallery-item__inner\">\n <div className=\"smwb-gallery-item__img-wrapper\">\n <img src={src} alt={alt || \"image\"} className={cn(\"smwb-gallery-item__img\", { \"smwb-rounded\": rounded })} />\n </div>\n {itemBarContent && (\n <div\n className={cn(\"smwb-gallery-item__bar\", className, `smwb-${itemBarPlacement}`, {\n \"smwb-rounded\": rounded,\n })}\n >\n {itemBarContent}\n </div>\n )}\n </div>\n </li>\n <ImagesListItemModal src={src} onClose={onClose} isOpen={isOpen} />\n </>\n );\n};\n\nexport default ImagesListItem;\n"],"names":["ImagesListItem","className","src","rounded","itemBarContent","cols","rows","itemBarPlacement","alt","isOpen","onClose","onOpen","useModalState","rowsHeight","variant","useContext","ImagesListContext","useEffect","previous","style","jsxs","Fragment","jsx","cn","ImagesListItemModal"],"mappings":";;;;;;AAkBA,MAAMA,IAAiB,CAAC;AAAA,EACtB,WAAAC;AAAA,EACA,KAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,kBAAAC,IAAmB;AAAA,EACnB,KAAAC,IAAM;AACR,MAA2B;AACzB,QAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,QAAAC,EAAA,IAAWC,EAAA,GAC9B,EAAE,YAAAC,GAAY,SAAAC,MAAYC,EAAWC,CAAiB;AAI5D,EAAAC,EAAU,MAAM;AACd,QAAI,CAACR,EAAQ;AACb,UAAMS,IAAW,SAAS,KAAK,MAAM;AACrC,oBAAS,KAAK,MAAM,WAAW,UACxB,MAAM;AACX,eAAS,KAAK,MAAM,WAAWA;AAAA,IACjC;AAAA,EACF,GAAG,CAACT,CAAM,CAAC;AAEX,QAAMU,IAAuB;AAAA;AAAA;AAAA,IAG3B,QAAQN,IAAa,GAAGA,IAAaP,CAAI,OAAO;AAAA,IAChD,YAAY,QAAQA,CAAI;AAAA,IACxB,eAAe,QAAQD,CAAI;AAAA,EAAA;AAG7B,SACE,gBAAAe,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAWC,EAAG,4BAA4BtB,GAAW,qBAAqB,QAAQa,CAAO,EAAE;AAAA,QAC3F,SAASH;AAAA,QACT,OAAAQ;AAAA,QAEA,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,UAAA,gBAAAE,EAAC,SAAI,WAAU,kCACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,KAAApB,GAAU,KAAKM,KAAO,SAAS,WAAWe,EAAG,0BAA0B,EAAE,gBAAgBpB,EAAA,CAAS,GAAG,GAC5G;AAAA,UACCC,KACC,gBAAAkB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC,EAAG,0BAA0BtB,GAAW,QAAQM,CAAgB,IAAI;AAAA,gBAC7E,gBAAgBJ;AAAA,cAAA,CACjB;AAAA,cAEA,UAAAC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAkB,EAACE,GAAA,EAAoB,KAAAtB,GAAU,SAAAQ,GAAkB,QAAAD,EAAA,CAAgB;AAAA,EAAA,GACnE;AAEJ;"}
|
package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js
CHANGED
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { createPortal as
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { useRef as l, useState as s } from "react";
|
|
3
|
+
import { createPortal as c } from "react-dom";
|
|
4
|
+
import { useSafeLayoutEffect as d } from "../../../../hooks/useSafeLayoutEffect.js";
|
|
5
|
+
import { CSSTransition as u } from "react-transition-group";
|
|
6
|
+
const b = ({ src: a, onClose: m, isOpen: r }) => {
|
|
7
|
+
const o = l(null), [t, n] = s();
|
|
8
|
+
return d(() => {
|
|
9
|
+
n(document.body);
|
|
10
|
+
}, []), t ? c(
|
|
8
11
|
/* @__PURE__ */ e(
|
|
9
|
-
|
|
12
|
+
u,
|
|
10
13
|
{
|
|
11
14
|
timeout: 100,
|
|
12
|
-
in:
|
|
15
|
+
in: r,
|
|
13
16
|
classNames: {
|
|
14
17
|
enterActive: "smwb-image-modal__overlay-enter-active",
|
|
15
18
|
enterDone: "smwb-image-modal__overlay-enter-done"
|
|
16
19
|
},
|
|
17
20
|
mountOnEnter: !0,
|
|
18
21
|
unmountOnExit: !0,
|
|
19
|
-
nodeRef:
|
|
20
|
-
children: /* @__PURE__ */ e("div", { className: "smwb-image-modal__overlay", onClick:
|
|
22
|
+
nodeRef: o,
|
|
23
|
+
children: /* @__PURE__ */ e("div", { className: "smwb-image-modal__overlay", onClick: m, ref: o, children: /* @__PURE__ */ e("div", { className: "smwb-image-modal", onClick: (i) => i.stopPropagation(), children: /* @__PURE__ */ e("img", { src: a, alt: "", className: "smwb-image-modal__img" }) }) })
|
|
21
24
|
}
|
|
22
25
|
),
|
|
23
|
-
|
|
24
|
-
);
|
|
26
|
+
t
|
|
27
|
+
) : null;
|
|
25
28
|
};
|
|
26
29
|
export {
|
|
27
|
-
|
|
30
|
+
b as default
|
|
28
31
|
};
|
|
29
32
|
//# sourceMappingURL=imagesListItemModal.js.map
|
package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imagesListItemModal.js","sources":["../../../../../../src/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CSSTransition } from \"react-transition-group\";\n\nexport interface ImagesListItemModalProps {\n src: string;\n onClose: () => void;\n isOpen: boolean;\n}\n\nconst ImagesListItemModal = ({ src, onClose, isOpen }: ImagesListItemModalProps) => {\n const nodeRef = useRef<HTMLDivElement>(null);\n return createPortal(\n <CSSTransition\n timeout={100}\n in={isOpen}\n classNames={{\n enterActive: \"smwb-image-modal__overlay-enter-active\",\n enterDone: \"smwb-image-modal__overlay-enter-done\",\n }}\n mountOnEnter\n unmountOnExit\n nodeRef={nodeRef}\n >\n <div className=\"smwb-image-modal__overlay\" onClick={onClose} ref={nodeRef}>\n <div className=\"smwb-image-modal\" onClick={(e) => e.stopPropagation()}>\n <img src={src} alt=\"\" className=\"smwb-image-modal__img\" />\n </div>\n </div>\n </CSSTransition>,\n
|
|
1
|
+
{"version":3,"file":"imagesListItemModal.js","sources":["../../../../../../src/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.tsx"],"sourcesContent":["import { useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useSafeLayoutEffect } from \"../../../../hooks/useSafeLayoutEffect\";\nimport { CSSTransition } from \"react-transition-group\";\n\nexport interface ImagesListItemModalProps {\n src: string;\n onClose: () => void;\n isOpen: boolean;\n}\n\nconst ImagesListItemModal = ({ src, onClose, isOpen }: ImagesListItemModalProps) => {\n const nodeRef = useRef<HTMLDivElement>(null);\n // The viewer is portalled: its target is resolved in the browser only, so the\n // image list renders on the server and hydrates.\n const [portalRoot, setPortalRoot] = useState<HTMLElement>();\n useSafeLayoutEffect(() => {\n setPortalRoot(document.body);\n }, []);\n if (!portalRoot) return null;\n return createPortal(\n <CSSTransition\n timeout={100}\n in={isOpen}\n classNames={{\n enterActive: \"smwb-image-modal__overlay-enter-active\",\n enterDone: \"smwb-image-modal__overlay-enter-done\",\n }}\n mountOnEnter\n unmountOnExit\n nodeRef={nodeRef}\n >\n <div className=\"smwb-image-modal__overlay\" onClick={onClose} ref={nodeRef}>\n <div className=\"smwb-image-modal\" onClick={(e) => e.stopPropagation()}>\n <img src={src} alt=\"\" className=\"smwb-image-modal__img\" />\n </div>\n </div>\n </CSSTransition>,\n portalRoot\n );\n};\n\nexport default ImagesListItemModal;\n"],"names":["ImagesListItemModal","src","onClose","isOpen","nodeRef","useRef","portalRoot","setPortalRoot","useState","useSafeLayoutEffect","createPortal","jsx","CSSTransition","e"],"mappings":";;;;;AAWA,MAAMA,IAAsB,CAAC,EAAE,KAAAC,GAAK,SAAAC,GAAS,QAAAC,QAAuC;AAClF,QAAMC,IAAUC,EAAuB,IAAI,GAGrC,CAACC,GAAYC,CAAa,IAAIC,EAAA;AAIpC,SAHAC,EAAoB,MAAM;AACxB,IAAAF,EAAc,SAAS,IAAI;AAAA,EAC7B,GAAG,CAAA,CAAE,GACAD,IACEI;AAAA,IACL,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,IAAIT;AAAA,QACJ,YAAY;AAAA,UACV,aAAa;AAAA,UACb,WAAW;AAAA,QAAA;AAAA,QAEb,cAAY;AAAA,QACZ,eAAa;AAAA,QACb,SAAAC;AAAA,QAEA,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,6BAA4B,SAAST,GAAS,KAAKE,GAChE,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,oBAAmB,SAAS,CAACE,MAAMA,EAAE,gBAAA,GAClD,UAAA,gBAAAF,EAAC,OAAA,EAAI,KAAAV,GAAU,KAAI,IAAG,WAAU,wBAAA,CAAwB,EAAA,CAC1D,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFK;AAAA,EAAA,IAnBsB;AAqB1B;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as s, jsxs as o } from "react/jsx-runtime";
|
|
2
|
+
import m, { useId as N } from "react";
|
|
3
|
+
import _ from "clsx";
|
|
4
|
+
const h = (a) => typeof a == "number" ? `${a}px` : a, i = (a) => a != null && a !== !1 && a !== !0 && a !== "", K = m.forwardRef(function({ className: t, style: c, columnWidth: l, children: n, ...r }, e) {
|
|
5
|
+
return /* @__PURE__ */ s(
|
|
6
|
+
"div",
|
|
7
|
+
{
|
|
8
|
+
"data-testid": "kanban",
|
|
9
|
+
...r,
|
|
10
|
+
ref: e,
|
|
11
|
+
className: _("smwb-kanban", t),
|
|
12
|
+
style: { ...c, "--smwb-kanban-column-width": h(l) },
|
|
13
|
+
children: n
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}), g = m.forwardRef(
|
|
17
|
+
function({ className: t, style: c, title: l, count: n, accent: r, empty: e, footer: b, children: d, ...w }, u) {
|
|
18
|
+
const k = `${N()}-title`, f = m.Children.toArray(d).length > 0;
|
|
19
|
+
return /* @__PURE__ */ o(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
"data-testid": "kanban-column",
|
|
23
|
+
role: "group",
|
|
24
|
+
"aria-labelledby": k,
|
|
25
|
+
...w,
|
|
26
|
+
ref: u,
|
|
27
|
+
className: _("smwb-kanban__column", t),
|
|
28
|
+
style: { ...c, "--smwb-kanban-accent": r },
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ o("div", { className: "smwb-kanban__column-header", children: [
|
|
31
|
+
/* @__PURE__ */ s("div", { className: "smwb-kanban__column-title", id: k, children: l }),
|
|
32
|
+
n != null ? /* @__PURE__ */ s("span", { className: "smwb-kanban__count", children: n }) : null
|
|
33
|
+
] }),
|
|
34
|
+
f ? /* @__PURE__ */ s("ul", { className: "smwb-kanban__cards", role: "list", children: d }) : i(e) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__empty", children: e }) : null,
|
|
35
|
+
i(b) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__column-footer", children: b }) : null
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
), v = m.forwardRef(function({ className: t, style: c, title: l, href: n, titleLines: r = 3, children: e, ...b }, d) {
|
|
41
|
+
return /* @__PURE__ */ o(
|
|
42
|
+
"li",
|
|
43
|
+
{
|
|
44
|
+
"data-testid": "kanban-card",
|
|
45
|
+
...b,
|
|
46
|
+
ref: d,
|
|
47
|
+
className: _("smwb-kanban__card", { "smwb-kanban__card_link": !!n }, t),
|
|
48
|
+
style: { ...c, "--smwb-kanban-title-lines": String(r) },
|
|
49
|
+
children: [
|
|
50
|
+
i(l) ? n ? /* @__PURE__ */ s("a", { className: "smwb-kanban__card-title", href: n, children: l }) : /* @__PURE__ */ s("div", { className: "smwb-kanban__card-title", children: l }) : null,
|
|
51
|
+
i(e) ? /* @__PURE__ */ s("div", { className: "smwb-kanban__card-body", children: e }) : null
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
export {
|
|
57
|
+
K as Kanban,
|
|
58
|
+
v as KanbanCard,
|
|
59
|
+
g as KanbanColumn
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=kanban.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kanban.js","sources":["../../../../../src/components/dataDisplay/kanban/kanban.tsx"],"sourcesContent":["import React, { CSSProperties, HTMLAttributes, PropsWithChildren, ReactNode, useId } from \"react\";\nimport cn from \"clsx\";\n\nexport interface KanbanProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n /**\n * The narrowest a column gets before the board scrolls sideways: a number of\n * pixels or any CSS length. 15.5rem by default.\n */\n columnWidth?: number | string;\n}\n\nexport interface KanbanColumnProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n className?: string;\n /** The column's name: text or a badge. It names the column for assistive technology. */\n title: ReactNode;\n /** How many cards the column holds (it may show fewer), beside the title. Nothing is shown for null. */\n count?: number | string | null;\n /** The column's colour, a stripe along its top: any CSS colour. */\n accent?: string;\n /** Shown in place of the cards when there are none, e.g. \"Empty\". */\n empty?: ReactNode;\n /** Under the cards, e.g. a link to the rest as a list. */\n footer?: ReactNode;\n}\n\nexport interface KanbanCardProps extends Omit<HTMLAttributes<HTMLLIElement>, \"title\"> {\n className?: string;\n /** The card's title, clamped to `titleLines` lines. */\n title?: ReactNode;\n /** Makes the title a link, and the whole card open it. */\n href?: string;\n /** Lines the title is clamped to: 3 by default. */\n titleLines?: number;\n}\n\nconst cssLength = (value: number | string | undefined): string | undefined =>\n typeof value === \"number\" ? `${value}px` : value;\n\nconst present = (value: ReactNode): boolean =>\n value !== undefined && value !== null && value !== false && value !== true && value !== \"\";\n\n/** A board: KanbanColumn children side by side, scrolling sideways when they do not fit. */\nexport const Kanban = React.forwardRef<HTMLDivElement, PropsWithChildren<KanbanProps>>(function Kanban(\n { className, style, columnWidth, children, ...rest },\n ref\n) {\n return (\n <div\n data-testid=\"kanban\"\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban\", className)}\n style={{ ...style, \"--smwb-kanban-column-width\": cssLength(columnWidth) } as CSSProperties}\n >\n {children}\n </div>\n );\n});\n\n/** A column of the board: its title and count, then its KanbanCard children, or `empty` when it has none. */\nexport const KanbanColumn = React.forwardRef<HTMLDivElement, PropsWithChildren<KanbanColumnProps>>(\n function KanbanColumn({ className, style, title, count, accent, empty, footer, children, ...rest }, ref) {\n const titleId = `${useId()}-title`;\n const hasCards = React.Children.toArray(children).length > 0;\n return (\n <div\n data-testid=\"kanban-column\"\n role=\"group\"\n aria-labelledby={titleId}\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban__column\", className)}\n style={{ ...style, \"--smwb-kanban-accent\": accent } as CSSProperties}\n >\n <div className=\"smwb-kanban__column-header\">\n <div className=\"smwb-kanban__column-title\" id={titleId}>\n {title}\n </div>\n {count !== undefined && count !== null ? <span className=\"smwb-kanban__count\">{count}</span> : null}\n </div>\n {hasCards ? (\n <ul className=\"smwb-kanban__cards\" role=\"list\">\n {children}\n </ul>\n ) : present(empty) ? (\n <div className=\"smwb-kanban__empty\">{empty}</div>\n ) : null}\n {present(footer) ? <div className=\"smwb-kanban__column-footer\">{footer}</div> : null}\n </div>\n );\n }\n);\n\n/**\n * A card on the board: its title (a link with `href`, and then the whole card\n * opens it) and the children under it.\n */\nexport const KanbanCard = React.forwardRef<HTMLLIElement, PropsWithChildren<KanbanCardProps>>(function KanbanCard(\n { className, style, title, href, titleLines = 3, children, ...rest },\n ref\n) {\n return (\n <li\n data-testid=\"kanban-card\"\n {...rest}\n ref={ref}\n className={cn(\"smwb-kanban__card\", { \"smwb-kanban__card_link\": Boolean(href) }, className)}\n style={{ ...style, \"--smwb-kanban-title-lines\": String(titleLines) } as CSSProperties}\n >\n {present(title) ? (\n href ? (\n <a className=\"smwb-kanban__card-title\" href={href}>\n {title}\n </a>\n ) : (\n <div className=\"smwb-kanban__card-title\">{title}</div>\n )\n ) : null}\n {present(children) ? <div className=\"smwb-kanban__card-body\">{children}</div> : null}\n </li>\n );\n});\n\nexport default Kanban;\n"],"names":["cssLength","value","present","Kanban","React","className","style","columnWidth","children","rest","ref","jsx","cn","KanbanColumn","title","count","accent","empty","footer","titleId","useId","hasCards","jsxs","KanbanCard","href","titleLines"],"mappings":";;;AAoCA,MAAMA,IAAY,CAACC,MACjB,OAAOA,KAAU,WAAW,GAAGA,CAAK,OAAOA,GAEvCC,IAAU,CAACD,MACQA,KAAU,QAAQA,MAAU,MAASA,MAAU,MAAQA,MAAU,IAG7EE,IAASC,EAAM,WAA2D,SACrF,EAAE,WAAAC,GAAW,OAAAC,GAAO,aAAAC,GAAa,UAAAC,GAAU,GAAGC,EAAA,GAC9CC,GACA;AACA,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACX,GAAGF;AAAA,MACJ,KAAAC;AAAA,MACA,WAAWE,EAAG,eAAeP,CAAS;AAAA,MACtC,OAAO,EAAE,GAAGC,GAAO,8BAA8BN,EAAUO,CAAW,EAAA;AAAA,MAErE,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC,GAGYK,IAAeT,EAAM;AAAA,EAChC,SAAsB,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAQ,GAAO,OAAAC,GAAO,QAAAC,GAAQ,OAAAC,GAAO,QAAAC,GAAQ,UAAAV,GAAU,GAAGC,EAAA,GAAQC,GAAK;AACvG,UAAMS,IAAU,GAAGC,EAAA,CAAO,UACpBC,IAAWjB,EAAM,SAAS,QAAQI,CAAQ,EAAE,SAAS;AAC3D,WACE,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,MAAK;AAAA,QACL,mBAAiBH;AAAA,QAChB,GAAGV;AAAA,QACJ,KAAAC;AAAA,QACA,WAAWE,EAAG,uBAAuBP,CAAS;AAAA,QAC9C,OAAO,EAAE,GAAGC,GAAO,wBAAwBU,EAAA;AAAA,QAE3C,UAAA;AAAA,UAAA,gBAAAM,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,YAAA,gBAAAX,EAAC,OAAA,EAAI,WAAU,6BAA4B,IAAIQ,GAC5C,UAAAL,GACH;AAAA,YACwBC,KAAU,yBAAQ,QAAA,EAAK,WAAU,sBAAsB,UAAAA,EAAA,CAAM,IAAU;AAAA,UAAA,GACjG;AAAA,UACCM,IACC,gBAAAV,EAAC,MAAA,EAAG,WAAU,sBAAqB,MAAK,QACrC,UAAAH,GACH,IACEN,EAAQe,CAAK,IACf,gBAAAN,EAAC,SAAI,WAAU,sBAAsB,aAAM,IACzC;AAAA,UACHT,EAAQgB,CAAM,IAAI,gBAAAP,EAAC,SAAI,WAAU,8BAA8B,aAAO,IAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtF;AACF,GAMaY,IAAanB,EAAM,WAA8D,SAC5F,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAQ,GAAO,MAAAU,GAAM,YAAAC,IAAa,GAAG,UAAAjB,GAAU,GAAGC,EAAA,GAC9DC,GACA;AACA,SACE,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACX,GAAGb;AAAA,MACJ,KAAAC;AAAA,MACA,WAAWE,EAAG,qBAAqB,EAAE,0BAA0B,EAAQY,EAAI,GAAKnB,CAAS;AAAA,MACzF,OAAO,EAAE,GAAGC,GAAO,6BAA6B,OAAOmB,CAAU,EAAA;AAAA,MAEhE,UAAA;AAAA,QAAAvB,EAAQY,CAAK,IACZU,IACE,gBAAAb,EAAC,OAAE,WAAU,2BAA0B,MAAAa,GACpC,UAAAV,GACH,IAEA,gBAAAH,EAAC,OAAA,EAAI,WAAU,2BAA2B,aAAM,IAEhD;AAAA,QACHT,EAAQM,CAAQ,IAAI,gBAAAG,EAAC,SAAI,WAAU,0BAA0B,UAAAH,GAAS,IAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGtF,CAAC;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsxs as o, jsx as s, Fragment as w } from "react/jsx-runtime";
|
|
2
|
+
import b from "react";
|
|
3
|
+
import p from "clsx";
|
|
4
|
+
const N = [
|
|
5
|
+
{ from: 0, color: "info" },
|
|
6
|
+
{ from: 1, color: "success" }
|
|
7
|
+
];
|
|
8
|
+
function M(i, m) {
|
|
9
|
+
let r = "neutral", e = -1 / 0;
|
|
10
|
+
for (const t of m)
|
|
11
|
+
i >= t.from && t.from >= e && (r = t.color, e = t.from);
|
|
12
|
+
return r;
|
|
13
|
+
}
|
|
14
|
+
const R = b.forwardRef(function({
|
|
15
|
+
className: m,
|
|
16
|
+
value: r,
|
|
17
|
+
max: e,
|
|
18
|
+
label: t,
|
|
19
|
+
text: a,
|
|
20
|
+
ofLabel: l = "of",
|
|
21
|
+
thresholds: d = N,
|
|
22
|
+
color: n,
|
|
23
|
+
hideText: c,
|
|
24
|
+
..._
|
|
25
|
+
}, h) {
|
|
26
|
+
const f = e > 0 ? Math.min(1, Math.max(0, r / e)) : 0, u = n != null ? n : M(f, d);
|
|
27
|
+
return /* @__PURE__ */ o(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
..._,
|
|
31
|
+
ref: h,
|
|
32
|
+
role: "meter",
|
|
33
|
+
"aria-label": t,
|
|
34
|
+
"aria-valuenow": r,
|
|
35
|
+
"aria-valuemin": 0,
|
|
36
|
+
"aria-valuemax": e,
|
|
37
|
+
"aria-valuetext": `${r} ${l} ${e}`,
|
|
38
|
+
"data-testid": "meter",
|
|
39
|
+
className: p("smwb-meter", `smwb-meter_color-${u}`, { "smwb-meter_bar-only": c }, m),
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ s("span", { className: "smwb-meter__track", "aria-hidden": "true", children: /* @__PURE__ */ s("span", { className: "smwb-meter__fill", style: { width: `${f * 100}%` } }) }),
|
|
42
|
+
c ? null : /* @__PURE__ */ s("span", { className: "smwb-meter__text", "aria-hidden": "true", children: a === void 0 ? /* @__PURE__ */ o(w, { children: [
|
|
43
|
+
/* @__PURE__ */ s("b", { className: "smwb-meter__value", children: r }),
|
|
44
|
+
/* @__PURE__ */ o("span", { className: "smwb-meter__of", children: [
|
|
45
|
+
" ",
|
|
46
|
+
l,
|
|
47
|
+
" ",
|
|
48
|
+
e
|
|
49
|
+
] })
|
|
50
|
+
] }) : typeof a == "function" ? a(r, e) : a })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
export {
|
|
56
|
+
N as DEFAULT_METER_THRESHOLDS,
|
|
57
|
+
R as Meter,
|
|
58
|
+
M as meterColor
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=meter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meter.js","sources":["../../../../../src/components/dataDisplay/meter/meter.tsx"],"sourcesContent":["import React, { HTMLAttributes, ReactNode } from \"react\";\nimport cn from \"clsx\";\n\nexport type MeterColor = \"neutral\" | \"primary\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\n/** From this share of `max` (0–1) on, the meter takes `color`. */\nexport interface MeterThreshold {\n from: number;\n color: MeterColor;\n}\n\n/** Info while under way, success when complete. */\nexport const DEFAULT_METER_THRESHOLDS: readonly MeterThreshold[] = [\n { from: 0, color: \"info\" },\n { from: 1, color: \"success\" },\n];\n\nexport interface MeterProps extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n className?: string;\n /** How many are done (X of Y). */\n value: number;\n /** How many there are in all (X of Y). */\n max: number;\n /** What is measured — the accessible name, e.g. \"Requirements accepted\". */\n label: string;\n /** Visible text instead of \"X of Y\": markup, or a function of (value, max). */\n text?: ReactNode | ((value: number, max: number) => ReactNode);\n /** The word between the figures in the default text and in aria-valuetext. */\n ofLabel?: string;\n /** Colour by share of `max`: the last threshold the share reaches wins. */\n thresholds?: readonly MeterThreshold[];\n /** A fixed colour, instead of the thresholds. */\n color?: MeterColor;\n /** The bar only; the text stays available to assistive technology. */\n hideText?: boolean;\n}\n\n/** The colour for a share of the whole: the last threshold (by `from`) the share reaches. */\nexport function meterColor(share: number, thresholds: readonly MeterThreshold[]): MeterColor {\n let color: MeterColor = \"neutral\";\n let from = -Infinity;\n for (const threshold of thresholds) {\n if (share >= threshold.from && threshold.from >= from) {\n color = threshold.color;\n from = threshold.from;\n }\n }\n return color;\n}\n\n/** A share of a whole, \"X of Y\": a bar and the figures beside it, coloured by thresholds. */\nexport const Meter = React.forwardRef<HTMLDivElement, MeterProps>(function Meter(\n {\n className,\n value,\n max,\n label,\n text,\n ofLabel = \"of\",\n thresholds = DEFAULT_METER_THRESHOLDS,\n color,\n hideText,\n ...rest\n },\n ref\n) {\n const share = max > 0 ? Math.min(1, Math.max(0, value / max)) : 0;\n const tone = color ?? meterColor(share, thresholds);\n return (\n <div\n {...rest}\n ref={ref}\n role=\"meter\"\n aria-label={label}\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuetext={`${value} ${ofLabel} ${max}`}\n data-testid=\"meter\"\n className={cn(\"smwb-meter\", `smwb-meter_color-${tone}`, { \"smwb-meter_bar-only\": hideText }, className)}\n >\n <span className=\"smwb-meter__track\" aria-hidden=\"true\">\n <span className=\"smwb-meter__fill\" style={{ width: `${share * 100}%` }} />\n </span>\n {hideText ? null : (\n <span className=\"smwb-meter__text\" aria-hidden=\"true\">\n {text === undefined ? (\n <>\n <b className=\"smwb-meter__value\">{value}</b>\n <span className=\"smwb-meter__of\">\n {\" \"}\n {ofLabel} {max}\n </span>\n </>\n ) : typeof text === \"function\" ? (\n text(value, max)\n ) : (\n text\n )}\n </span>\n )}\n </div>\n );\n});\n\nexport default Meter;\n"],"names":["DEFAULT_METER_THRESHOLDS","meterColor","share","thresholds","color","from","threshold","Meter","React","className","value","max","label","text","ofLabel","hideText","rest","ref","tone","jsxs","cn","jsx","Fragment"],"mappings":";;;AAYO,MAAMA,IAAsD;AAAA,EACjE,EAAE,MAAM,GAAG,OAAO,OAAA;AAAA,EAClB,EAAE,MAAM,GAAG,OAAO,UAAA;AACpB;AAuBO,SAASC,EAAWC,GAAeC,GAAmD;AAC3F,MAAIC,IAAoB,WACpBC,IAAO;AACX,aAAWC,KAAaH;AACtB,IAAID,KAASI,EAAU,QAAQA,EAAU,QAAQD,MAC/CD,IAAQE,EAAU,OAClBD,IAAOC,EAAU;AAGrB,SAAOF;AACT;AAGO,MAAMG,IAAQC,EAAM,WAAuC,SAChE;AAAA,EACE,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,YAAAX,IAAaH;AAAA,EACb,OAAAI;AAAA,EACA,UAAAW;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMf,IAAQS,IAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGD,IAAQC,CAAG,CAAC,IAAI,GAC1DO,IAAOd,KAAA,OAAAA,IAASH,EAAWC,GAAOC,CAAU;AAClD,SACE,gBAAAgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,KAAAC;AAAA,MACA,MAAK;AAAA,MACL,cAAYL;AAAA,MACZ,iBAAeF;AAAA,MACf,iBAAe;AAAA,MACf,iBAAeC;AAAA,MACf,kBAAgB,GAAGD,CAAK,IAAII,CAAO,IAAIH,CAAG;AAAA,MAC1C,eAAY;AAAA,MACZ,WAAWS,EAAG,cAAc,oBAAoBF,CAAI,IAAI,EAAE,uBAAuBH,EAAA,GAAYN,CAAS;AAAA,MAEtG,UAAA;AAAA,QAAA,gBAAAY,EAAC,UAAK,WAAU,qBAAoB,eAAY,QAC9C,4BAAC,QAAA,EAAK,WAAU,oBAAmB,OAAO,EAAE,OAAO,GAAGnB,IAAQ,GAAG,OAAO,GAC1E;AAAA,QACCa,IAAW,OACV,gBAAAM,EAAC,QAAA,EAAK,WAAU,oBAAmB,eAAY,QAC5C,UAAAR,MAAS,SACR,gBAAAM,EAAAG,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAD,EAAC,KAAA,EAAE,WAAU,qBAAqB,UAAAX,GAAM;AAAA,UACxC,gBAAAS,EAAC,QAAA,EAAK,WAAU,kBACb,UAAA;AAAA,YAAA;AAAA,YACAL;AAAA,YAAQ;AAAA,YAAEH;AAAA,UAAA,EAAA,CACb;AAAA,QAAA,GACF,IACE,OAAOE,KAAS,aAClBA,EAAKH,GAAOC,CAAG,IAEfE,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsxs as h, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import d from "react";
|
|
3
|
+
import _ from "clsx";
|
|
4
|
+
import { Avatar as u } from "../avatar/avatar.js";
|
|
5
|
+
function b(a) {
|
|
6
|
+
const i = a.trim().split(/\s+/).filter(Boolean), s = (r) => {
|
|
7
|
+
var n;
|
|
8
|
+
return r && (n = Array.from(r)[0]) != null ? n : "";
|
|
9
|
+
};
|
|
10
|
+
return (s(i[0]) + (i.length > 1 ? s(i[i.length - 1]) : "")).toUpperCase();
|
|
11
|
+
}
|
|
12
|
+
function w(a) {
|
|
13
|
+
var s;
|
|
14
|
+
let i = 0;
|
|
15
|
+
for (const r of a) i = i * 31 + ((s = r.codePointAt(0)) != null ? s : 0) >>> 0;
|
|
16
|
+
return `hsl(${i % 360} 42% 42%)`;
|
|
17
|
+
}
|
|
18
|
+
const A = d.forwardRef(function({ className: i, name: s, src: r, href: n, compact: t, size: c = 24, colorSeed: p, color: e, meta: l, ...m }, f) {
|
|
19
|
+
return /* @__PURE__ */ h(
|
|
20
|
+
n ? "a" : "span",
|
|
21
|
+
{
|
|
22
|
+
...m,
|
|
23
|
+
ref: f,
|
|
24
|
+
...n ? { href: n } : {},
|
|
25
|
+
title: t ? s : void 0,
|
|
26
|
+
role: t && !n ? "img" : void 0,
|
|
27
|
+
"aria-label": t ? s : void 0,
|
|
28
|
+
"data-testid": "person-chip",
|
|
29
|
+
className: _(
|
|
30
|
+
"smwb-person-chip",
|
|
31
|
+
{ "smwb-person-chip_link": !!n, "smwb-person-chip_compact": t },
|
|
32
|
+
i
|
|
33
|
+
),
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ o(
|
|
36
|
+
u,
|
|
37
|
+
{
|
|
38
|
+
className: "smwb-person-chip__avatar",
|
|
39
|
+
size: c,
|
|
40
|
+
src: r,
|
|
41
|
+
color: e != null ? e : w(p != null ? p : s),
|
|
42
|
+
"aria-hidden": "true",
|
|
43
|
+
children: b(s)
|
|
44
|
+
}
|
|
45
|
+
),
|
|
46
|
+
t ? null : /* @__PURE__ */ h("span", { className: "smwb-person-chip__text", children: [
|
|
47
|
+
/* @__PURE__ */ o("span", { className: "smwb-person-chip__name", children: s }),
|
|
48
|
+
l ? /* @__PURE__ */ o("span", { className: "smwb-person-chip__meta", children: l }) : null
|
|
49
|
+
] })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
export {
|
|
55
|
+
A as PersonChip,
|
|
56
|
+
w as avatarColor,
|
|
57
|
+
b as initialsOf
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=personChip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personChip.js","sources":["../../../../../src/components/dataDisplay/personChip/personChip.tsx"],"sourcesContent":["import React, { HTMLAttributes, ReactNode } from \"react\";\nimport cn from \"clsx\";\nimport { Avatar, type AvatarSize } from \"../avatar\";\n\n/** Up to two initials from a name: \"Anna Petrova\" → \"AP\", \"anna\" → \"A\". */\nexport function initialsOf(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const first = (word: string | undefined): string => (word ? (Array.from(word)[0] ?? \"\") : \"\");\n return (first(words[0]) + (words.length > 1 ? first(words[words.length - 1]) : \"\")).toUpperCase();\n}\n\n/**\n * A steady background colour for a person's avatar, derived from a seed (an id\n * or the name): the same person always gets the same colour, on the server too.\n */\nexport function avatarColor(seed: string): string {\n let hash = 0;\n for (const char of seed) hash = (hash * 31 + (char.codePointAt(0) ?? 0)) >>> 0;\n return `hsl(${hash % 360} 42% 42%)`;\n}\n\nexport interface PersonChipProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n className?: string;\n /** The person's name: shown beside the avatar, and the source of its initials. */\n name: string;\n /** Avatar image; initials on a colour without it or when it fails. */\n src?: string;\n /** Link to the person's card. */\n href?: string;\n /** The avatar only; the name becomes its tooltip and accessible name. */\n compact?: boolean;\n /** Avatar size: a preset or pixels. 24px by default. */\n size?: AvatarSize | number;\n /** Seed for the avatar colour (an id); the name by default. */\n colorSeed?: string;\n /** A fixed avatar colour instead of the derived one. */\n color?: string;\n /** A second line under the name: a role, a date. */\n meta?: ReactNode;\n}\n\n/** A person: avatar and name, a link to their card when `href` is set. */\nexport const PersonChip = React.forwardRef<HTMLElement, PersonChipProps>(function PersonChip(\n { className, name, src, href, compact, size = 24, colorSeed, color, meta, ...rest },\n ref\n) {\n const Tag = (href ? \"a\" : \"span\") as \"span\";\n return (\n <Tag\n {...rest}\n ref={ref}\n {...(href ? { href } : {})}\n title={compact ? name : undefined}\n role={compact && !href ? \"img\" : undefined}\n aria-label={compact ? name : undefined}\n data-testid=\"person-chip\"\n className={cn(\n \"smwb-person-chip\",\n { \"smwb-person-chip_link\": !!href, \"smwb-person-chip_compact\": compact },\n className\n )}\n >\n <Avatar\n className=\"smwb-person-chip__avatar\"\n size={size}\n src={src}\n color={color ?? avatarColor(colorSeed ?? name)}\n aria-hidden=\"true\"\n >\n {initialsOf(name)}\n </Avatar>\n {compact ? null : (\n <span className=\"smwb-person-chip__text\">\n <span className=\"smwb-person-chip__name\">{name}</span>\n {meta ? <span className=\"smwb-person-chip__meta\">{meta}</span> : null}\n </span>\n )}\n </Tag>\n );\n});\n\nexport default PersonChip;\n"],"names":["initialsOf","name","words","first","word","_a","avatarColor","seed","hash","char","PersonChip","React","className","src","href","compact","size","colorSeed","color","meta","rest","ref","jsxs","cn","jsx","Avatar"],"mappings":";;;;AAKO,SAASA,EAAWC,GAAsB;AAC/C,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO,GAC/CE,IAAQ,CAACC,MAAA;;AAAsC,WAAAA,MAAQC,IAAA,MAAM,KAAKD,CAAI,EAAE,CAAC,MAAlB,OAAAC,IAA6B;AAAA;AAC1F,UAAQF,EAAMD,EAAM,CAAC,CAAC,KAAKA,EAAM,SAAS,IAAIC,EAAMD,EAAMA,EAAM,SAAS,CAAC,CAAC,IAAI,KAAK,YAAA;AACtF;AAMO,SAASI,EAAYC,GAAsB;;AAChD,MAAIC,IAAO;AACX,aAAWC,KAAQF,EAAM,CAAAC,IAAQA,IAAO,OAAMH,IAAAI,EAAK,YAAY,CAAC,MAAlB,OAAAJ,IAAuB,OAAQ;AAC7E,SAAO,OAAOG,IAAO,GAAG;AAC1B;AAuBO,MAAME,IAAaC,EAAM,WAAyC,SACvE,EAAE,WAAAC,GAAW,MAAAX,GAAM,KAAAY,GAAK,MAAAC,GAAM,SAAAC,GAAS,MAAAC,IAAO,IAAI,WAAAC,GAAW,OAAAC,GAAO,MAAAC,GAAM,GAAGC,EAAA,GAC7EC,GACA;AAEA,SACE,gBAAAC;AAAA,IAFWR,IAAO,MAAM;AAAA,IAEvB;AAAA,MACE,GAAGM;AAAA,MACJ,KAAAC;AAAA,MACC,GAAIP,IAAO,EAAE,MAAAA,EAAA,IAAS,CAAA;AAAA,MACvB,OAAOC,IAAUd,IAAO;AAAA,MACxB,MAAMc,KAAW,CAACD,IAAO,QAAQ;AAAA,MACjC,cAAYC,IAAUd,IAAO;AAAA,MAC7B,eAAY;AAAA,MACZ,WAAWsB;AAAA,QACT;AAAA,QACA,EAAE,yBAAyB,CAAC,CAACT,GAAM,4BAA4BC,EAAA;AAAA,QAC/DH;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAY;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAAT;AAAA,YACA,KAAAH;AAAA,YACA,OAAOK,KAAA,OAAAA,IAASZ,EAAYW,KAAA,OAAAA,IAAahB,CAAI;AAAA,YAC7C,eAAY;AAAA,YAEX,YAAWA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,QAEjBc,IAAU,OACT,gBAAAO,EAAC,QAAA,EAAK,WAAU,0BACd,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAAvB,GAAK;AAAA,UAC9CkB,IAAO,gBAAAK,EAAC,QAAA,EAAK,WAAU,0BAA0B,aAAK,IAAU;AAAA,QAAA,EAAA,CACnE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|