@smwb/ui-solid 0.4.0 → 0.4.1
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/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/components/layout/appLayout/appLayout.js +43 -43
- package/dist/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/components/navigation/bottomBar/bottomBar.js +31 -30
- package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/components/navigation/sidebar/sidebar.js +48 -47
- package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/components/layout/appLayout/appLayout.js +43 -43
- package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/headless/components/navigation/bottomBar/bottomBar.js +31 -30
- package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
- package/dist/headless/components/navigation/sidebar/sidebar.js +48 -47
- package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/headless/source/components/base/animateHeight/animateHeight.jsx +1 -1
- package/dist/headless/source/components/base/icon/icon.jsx +1 -1
- package/dist/headless/source/components/base/ripple/ripple.jsx +1 -1
- package/dist/headless/source/components/clickAwayListener/clickAwayListener.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/accordion/accordion.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/badge/badge.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/card/card.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/carousel/carousel.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chat.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatAttachmentImage.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatAttachments.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatComposer.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatHeader.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatIconButton.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatLayout.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageAvatar.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageBubble.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageIncoming.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageItem.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageOutgoing.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageSkeleton.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageStatus.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessageSystem.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatMessages.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatOverlayLayout.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chat/chatShell.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/chip/chip.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/imagesList/imagesList.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/list/list.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/list/listItem.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/table.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableBody.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableCell.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableHead.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tablePagination/tablePagination.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/table/tableRow.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +1 -1
- package/dist/headless/source/components/dataDisplay/typography/typography.jsx +1 -1
- package/dist/headless/source/components/feedBack/message/message.jsx +1 -1
- package/dist/headless/source/components/feedBack/modal/modal.jsx +1 -1
- package/dist/headless/source/components/feedBack/progressIndicator/progressIndicator.jsx +1 -1
- package/dist/headless/source/components/feedBack/skeleton/skeleton.jsx +1 -1
- package/dist/headless/source/components/feedBack/snackbar/snackbar.jsx +1 -1
- package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx +1 -1
- package/dist/headless/source/components/inputs/button/button.jsx +1 -1
- package/dist/headless/source/components/inputs/buttonGroups/buttonGroup.jsx +1 -1
- package/dist/headless/source/components/inputs/checkbox/checkbox.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/dataPickerDays.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/dataPickerHeader.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/dataPickerInput.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePicker.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerActionLabel.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerDay.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerIconButton.jsx +1 -1
- package/dist/headless/source/components/inputs/datePicker/datePickerList.jsx +1 -1
- package/dist/headless/source/components/inputs/dateTimePicker/dateTimePicker.jsx +1 -1
- package/dist/headless/source/components/inputs/dateTimePicker/dateTimePickerInput.jsx +1 -1
- package/dist/headless/source/components/inputs/fileDrop/countPreview.jsx +1 -1
- package/dist/headless/source/components/inputs/fileDrop/fileDrop.jsx +1 -1
- package/dist/headless/source/components/inputs/fileDrop/preview.jsx +1 -1
- package/dist/headless/source/components/inputs/fileDrop/previewWrapper.jsx +1 -1
- package/dist/headless/source/components/inputs/fileInput/fileInput.jsx +1 -1
- package/dist/headless/source/components/inputs/floatingButton/floatingButton.jsx +1 -1
- package/dist/headless/source/components/inputs/radioButton/radioButton.jsx +1 -1
- package/dist/headless/source/components/inputs/rating/rating.jsx +1 -1
- package/dist/headless/source/components/inputs/selectField/dropdownMenu.jsx +1 -1
- package/dist/headless/source/components/inputs/selectField/selectField.jsx +1 -1
- package/dist/headless/source/components/inputs/slider/slider.jsx +1 -1
- package/dist/headless/source/components/inputs/textField/textField.jsx +1 -1
- package/dist/headless/source/components/inputs/textField/textFieldAdornment.jsx +1 -1
- package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx +1 -1
- package/dist/headless/source/components/inputs/timePicker/timePicker.jsx +1 -1
- package/dist/headless/source/components/inputs/timePicker/timePickerColumns.jsx +1 -1
- package/dist/headless/source/components/inputs/timePicker/timePickerInput.jsx +1 -1
- package/dist/headless/source/components/inputs/timePicker/timePickerList.jsx +1 -1
- package/dist/headless/source/components/inputs/toggle/toggle.jsx +1 -1
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx +11 -8
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/headless/source/components/layout/divider/divider.jsx +1 -1
- package/dist/headless/source/components/layout/grid/grid.jsx +1 -1
- package/dist/headless/source/components/layout/page/page.jsx +1 -1
- package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx +1 -1
- package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx +1 -1
- package/dist/headless/source/components/layout/sheet/sheet.jsx +1 -1
- package/dist/headless/source/components/layout/stack/stack.jsx +1 -1
- package/dist/headless/source/components/navigation/appBar/appBar.jsx +1 -1
- package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx +5 -4
- package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menu.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuComponent.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuDivider.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuFloating.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuItem.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuItemIcon.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuItemText.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuList.jsx +1 -1
- package/dist/headless/source/components/navigation/menu/menuSubmenu.jsx +1 -1
- package/dist/headless/source/components/navigation/pagination/pagination.jsx +1 -1
- package/dist/headless/source/components/navigation/sidebar/sidebar.jsx +5 -4
- package/dist/headless/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/stepper/stepper.jsx +1 -1
- package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +1 -1
- package/dist/headless/source/components/navigation/tabs/tabs.jsx +1 -1
- package/dist/source/components/base/animateHeight/animateHeight.jsx +1 -1
- package/dist/source/components/base/icon/icon.jsx +2 -2
- package/dist/source/components/base/icon/icon.jsx.map +1 -1
- package/dist/source/components/base/ripple/ripple.jsx +2 -2
- package/dist/source/components/base/ripple/ripple.jsx.map +1 -1
- package/dist/source/components/clickAwayListener/clickAwayListener.jsx +1 -1
- package/dist/source/components/dataDisplay/accordion/accordion.jsx +2 -2
- package/dist/source/components/dataDisplay/accordion/accordion.jsx.map +1 -1
- package/dist/source/components/dataDisplay/avatar/avatar.jsx +2 -2
- package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
- package/dist/source/components/dataDisplay/badge/badge.jsx +2 -2
- package/dist/source/components/dataDisplay/badge/badge.jsx.map +1 -1
- package/dist/source/components/dataDisplay/card/card.jsx +2 -2
- package/dist/source/components/dataDisplay/card/card.jsx.map +1 -1
- package/dist/source/components/dataDisplay/carousel/carousel.jsx +2 -2
- package/dist/source/components/dataDisplay/carousel/carousel.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chat.jsx +2 -2
- package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chat/chatAttachmentImage.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatAttachments.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatComposer.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatHeader.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatIconButton.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatLayout.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageAvatar.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageBubble.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageIncoming.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageItem.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageOutgoing.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageSkeleton.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageStatus.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessageSystem.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatMessages.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatOverlayLayout.jsx +1 -1
- package/dist/source/components/dataDisplay/chat/chatShell.jsx +1 -1
- package/dist/source/components/dataDisplay/chip/chip.jsx +2 -2
- package/dist/source/components/dataDisplay/chip/chip.jsx.map +1 -1
- package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +2 -2
- package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx.map +1 -1
- package/dist/source/components/dataDisplay/imagesList/imagesList.jsx +2 -2
- package/dist/source/components/dataDisplay/imagesList/imagesList.jsx.map +1 -1
- package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +2 -2
- package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx.map +1 -1
- package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.jsx +1 -1
- package/dist/source/components/dataDisplay/list/list.jsx +2 -2
- package/dist/source/components/dataDisplay/list/list.jsx.map +1 -1
- package/dist/source/components/dataDisplay/list/listItem.jsx +1 -1
- package/dist/source/components/dataDisplay/table/table.jsx +2 -2
- package/dist/source/components/dataDisplay/table/table.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableBody.jsx +1 -1
- package/dist/source/components/dataDisplay/table/tableCell.jsx +1 -1
- package/dist/source/components/dataDisplay/table/tableHead.jsx +1 -1
- package/dist/source/components/dataDisplay/table/tableHeadCell.jsx +1 -1
- package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx +2 -2
- package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx.map +1 -1
- package/dist/source/components/dataDisplay/table/tableRow.jsx +1 -1
- package/dist/source/components/dataDisplay/treeView/treeView.jsx +2 -2
- package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/source/components/dataDisplay/typography/typography.jsx +2 -2
- package/dist/source/components/dataDisplay/typography/typography.jsx.map +1 -1
- package/dist/source/components/feedBack/message/message.jsx +2 -2
- package/dist/source/components/feedBack/message/message.jsx.map +1 -1
- package/dist/source/components/feedBack/modal/modal.jsx +2 -2
- package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
- package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx +2 -2
- package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx.map +1 -1
- package/dist/source/components/feedBack/skeleton/skeleton.jsx +2 -2
- package/dist/source/components/feedBack/skeleton/skeleton.jsx.map +1 -1
- package/dist/source/components/feedBack/snackbar/snackbar.jsx +2 -2
- package/dist/source/components/feedBack/snackbar/snackbar.jsx.map +1 -1
- package/dist/source/components/feedBack/tooltip/tooltip.jsx +2 -2
- package/dist/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
- package/dist/source/components/inputs/button/button.jsx +2 -2
- package/dist/source/components/inputs/button/button.jsx.map +1 -1
- package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx +2 -2
- package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx.map +1 -1
- package/dist/source/components/inputs/checkbox/checkbox.jsx +2 -2
- package/dist/source/components/inputs/checkbox/checkbox.jsx.map +1 -1
- package/dist/source/components/inputs/datePicker/dataPickerDays.jsx +1 -1
- package/dist/source/components/inputs/datePicker/dataPickerHeader.jsx +1 -1
- package/dist/source/components/inputs/datePicker/dataPickerInput.jsx +1 -1
- package/dist/source/components/inputs/datePicker/datePicker.jsx +2 -2
- package/dist/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
- package/dist/source/components/inputs/datePicker/datePickerActionLabel.jsx +1 -1
- package/dist/source/components/inputs/datePicker/datePickerDay.jsx +1 -1
- package/dist/source/components/inputs/datePicker/datePickerIconButton.jsx +1 -1
- package/dist/source/components/inputs/datePicker/datePickerList.jsx +1 -1
- package/dist/source/components/inputs/dateTimePicker/dateTimePicker.jsx +1 -1
- package/dist/source/components/inputs/dateTimePicker/dateTimePickerInput.jsx +1 -1
- package/dist/source/components/inputs/fileDrop/countPreview.jsx +1 -1
- package/dist/source/components/inputs/fileDrop/fileDrop.jsx +2 -2
- package/dist/source/components/inputs/fileDrop/fileDrop.jsx.map +1 -1
- package/dist/source/components/inputs/fileDrop/preview.jsx +1 -1
- package/dist/source/components/inputs/fileDrop/previewWrapper.jsx +1 -1
- package/dist/source/components/inputs/fileInput/fileInput.jsx +2 -2
- package/dist/source/components/inputs/fileInput/fileInput.jsx.map +1 -1
- package/dist/source/components/inputs/floatingButton/floatingButton.jsx +2 -2
- package/dist/source/components/inputs/floatingButton/floatingButton.jsx.map +1 -1
- package/dist/source/components/inputs/radioButton/radioButton.jsx +2 -2
- package/dist/source/components/inputs/radioButton/radioButton.jsx.map +1 -1
- package/dist/source/components/inputs/rating/rating.jsx +2 -2
- package/dist/source/components/inputs/rating/rating.jsx.map +1 -1
- package/dist/source/components/inputs/selectField/dropdownMenu.jsx +1 -1
- package/dist/source/components/inputs/selectField/selectField.jsx +2 -2
- package/dist/source/components/inputs/selectField/selectField.jsx.map +1 -1
- package/dist/source/components/inputs/slider/slider.jsx +2 -2
- package/dist/source/components/inputs/slider/slider.jsx.map +1 -1
- package/dist/source/components/inputs/textField/textField.jsx +2 -2
- package/dist/source/components/inputs/textField/textField.jsx.map +1 -1
- package/dist/source/components/inputs/textField/textFieldAdornment.jsx +1 -1
- package/dist/source/components/inputs/textField/textFieldWrapper.jsx +1 -1
- package/dist/source/components/inputs/timePicker/timePicker.jsx +2 -2
- package/dist/source/components/inputs/timePicker/timePicker.jsx.map +1 -1
- package/dist/source/components/inputs/timePicker/timePickerColumns.jsx +1 -1
- package/dist/source/components/inputs/timePicker/timePickerInput.jsx +1 -1
- package/dist/source/components/inputs/timePicker/timePickerList.jsx +1 -1
- package/dist/source/components/inputs/toggle/toggle.jsx +2 -2
- package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
- package/dist/source/components/layout/appLayout/appLayout.jsx +12 -9
- package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/source/components/layout/divider/divider.jsx +2 -2
- package/dist/source/components/layout/divider/divider.jsx.map +1 -1
- package/dist/source/components/layout/grid/grid.jsx +2 -2
- package/dist/source/components/layout/grid/grid.jsx.map +1 -1
- package/dist/source/components/layout/page/page.jsx +2 -2
- package/dist/source/components/layout/page/page.jsx.map +1 -1
- package/dist/source/components/layout/pageHeader/pageHeader.jsx +2 -2
- package/dist/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
- package/dist/source/components/layout/screenDivider/screenDivider.jsx +2 -2
- package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
- package/dist/source/components/layout/sheet/sheet.jsx +2 -2
- package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
- package/dist/source/components/layout/stack/stack.jsx +2 -2
- package/dist/source/components/layout/stack/stack.jsx.map +1 -1
- package/dist/source/components/navigation/appBar/appBar.jsx +2 -2
- package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
- package/dist/source/components/navigation/bottomBar/bottomBar.jsx +6 -5
- package/dist/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +2 -2
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menu.jsx +2 -2
- package/dist/source/components/navigation/menu/menu.jsx.map +1 -1
- package/dist/source/components/navigation/menu/menuComponent.jsx +1 -1
- package/dist/source/components/navigation/menu/menuDivider.jsx +1 -1
- package/dist/source/components/navigation/menu/menuFloating.jsx +1 -1
- package/dist/source/components/navigation/menu/menuItem.jsx +1 -1
- package/dist/source/components/navigation/menu/menuItemIcon.jsx +1 -1
- package/dist/source/components/navigation/menu/menuItemText.jsx +1 -1
- package/dist/source/components/navigation/menu/menuList.jsx +1 -1
- package/dist/source/components/navigation/menu/menuSubmenu.jsx +1 -1
- package/dist/source/components/navigation/pagination/pagination.jsx +2 -2
- package/dist/source/components/navigation/pagination/pagination.jsx.map +1 -1
- package/dist/source/components/navigation/sidebar/sidebar.jsx +6 -5
- package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
- package/dist/source/components/navigation/stepper/stepper.jsx +2 -2
- package/dist/source/components/navigation/stepper/stepper.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tab/tab.jsx +2 -2
- package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tabs.jsx +2 -2
- package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
- package/package.json +5 -3
- package/dist/headless/source/ssr-published.ssr-spec.jsx +0 -35
- package/dist/headless/source/ssr-published.ssr-spec.jsx.map +0 -1
- package/dist/headless/source/ssr.ssr-spec.jsx +0 -113
- package/dist/headless/source/ssr.ssr-spec.jsx.map +0 -1
- package/dist/source/ssr-published.ssr-spec.jsx +0 -35
- package/dist/source/ssr-published.ssr-spec.jsx.map +0 -1
- package/dist/source/ssr.ssr-spec.jsx +0 -113
- package/dist/source/ssr.ssr-spec.jsx.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/bottomBar/bottomBar.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/bottomBar/bottomBar.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/bottomBar/bottomBar.entry.less\";\nimport { type JSX, For, Show, children, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Menu, MenuItem, MenuItemIcon, MenuItemText } from \"../menu\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport type { SidebarMenuItemProps } from \"../sidebar/sidebar\";\n\nexport type BottomBarMenuItemProps = SidebarMenuItemProps;\n\nexport interface BottomBarProps extends JSX.HTMLAttributes<HTMLElement> {\n menuItems?: SidebarMenuItemProps[];\n visibleCount?: number;\n activeItem?: number | null;\n defaultActiveItem?: number | null;\n onActiveItemChange?: (index: number) => void;\n overflowMenuAriaLabel?: string;\n ref?: Ref<HTMLElement>;\n}\n\ninterface BarItemProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: JSX.Element;\n title?: string;\n isActive?: boolean;\n as?: string | undefined;\n href?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nfunction BarItem(props: BarItemProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"isActive\", \"icon\", \"title\", \"as\", \"href\", \"ref\"]);\n let rippleActions: RippleActionsRef | undefined;\n // Resolve the icon in this item's context so a pre-created element passed via\n // menuItems hydrates (see the same fix in Sidebar/AppLayout).\n const icon = children(() => local.icon);\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n return (\n <Dynamic\n component={local.as ?? \"div\"}\n ref={mergeRefs(local.ref)}\n href={local.href}\n role=\"menuitem\"\n class={cn(\"smwb-bottom-bar__item\", { \"smwb-bottom-bar__item_active\": local.isActive })}\n onPointerDown={onPointerDown}\n {...rest}\n >\n <Show when={icon()}>\n <span class=\"smwb-bottom-bar__item-icon\">{icon()}</span>\n </Show>\n <Show when={local.title}>\n <span class=\"smwb-bottom-bar__item-title\">{local.title}</span>\n </Show>\n <Ripple actionRef={(actions) => (rippleActions = actions)} />\n </Dynamic>\n );\n}\n\nexport function BottomBar(props: BottomBarProps): JSX.Element {\n const merged = mergeProps(\n {\n menuItems: [] as SidebarMenuItemProps[],\n visibleCount: 4,\n defaultActiveItem: null as number | null,\n overflowMenuAriaLabel: \"More navigation\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"menuItems\",\n \"visibleCount\",\n \"activeItem\",\n \"defaultActiveItem\",\n \"onActiveItemChange\",\n \"overflowMenuAriaLabel\",\n \"ref\",\n ]);\n\n const [activeItem, setActiveItem] = createControllableState<number | null>({\n value: () => local.activeItem,\n defaultValue: local.defaultActiveItem,\n onChange: (next) => {\n if (next !== null) local.onActiveItemChange?.(next);\n },\n });\n const [overflowOpen, setOverflowOpen] = createSignal(false);\n const [overflowAnchor, setOverflowAnchor] = createSignal<HTMLElement | null>(null);\n\n const safeVisibleCount = (): number => Math.max(0, local.visibleCount);\n const visibleItems = (): SidebarMenuItemProps[] => local.menuItems.slice(0, safeVisibleCount());\n const overflowItems = (): SidebarMenuItemProps[] => local.menuItems.slice(safeVisibleCount());\n const hasOverflow = (): boolean => overflowItems().length > 0;\n const overflowActive = (): boolean =>\n hasOverflow() && activeItem() !== null && (activeItem() as number) >= safeVisibleCount();\n\n return (\n <nav {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-bottom-bar\", local.class)} role=\"navigation\">\n <div class=\"smwb-bottom-bar__nav\" role=\"menubar\">\n <For each={visibleItems()}>\n {(item, idx) => (\n <BarItem\n as={item.as}\n isActive={activeItem() === idx()}\n onClick={(event) => {\n setActiveItem(idx());\n callHandler(item.onClick, event);\n }}\n icon={item.icon}\n title={item.title}\n href={item.href}\n />\n )}\n </For>\n <Show when={hasOverflow()}>\n <BarItem\n ref={(el) => setOverflowAnchor(el as HTMLElement)}\n isActive={overflowActive()}\n onClick={() => setOverflowOpen((prev) => !prev)}\n icon={<Icon name=\"menu\" size={24} />}\n aria-label={local.overflowMenuAriaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={overflowOpen()}\n />\n </Show>\n </div>\n <Show when={hasOverflow()}>\n <Menu\n isOpen={overflowOpen()}\n onClose={() => setOverflowOpen(false)}\n anchorElement={overflowAnchor()}\n placement=\"top\"\n dense\n >\n <For each={overflowItems()}>\n {(item, idx) => {\n const itemIndex = (): number => safeVisibleCount() + idx();\n return (\n <MenuItem\n selected={activeItem() === itemIndex()}\n href={item.href}\n onClick={(event) => {\n setActiveItem(itemIndex());\n callHandler(\n item.onClick,\n event as unknown as MouseEvent & { currentTarget: HTMLDivElement; target: Element }\n );\n setOverflowOpen(false);\n }}\n >\n <Show when={item.icon}>\n <MenuItemIcon>{item.icon}</MenuItemIcon>\n </Show>\n <MenuItemText inset={!item.icon}>{item.title}</MenuItemText>\n </MenuItem>\n );\n }}\n </For>\n </Menu>\n </Show>\n </nav>\n );\n}\n\nexport default BottomBar;\n"],"mappings":"AAAA,OAAO;AACP,SAAmB,KAAK,MAAM,UAAU,cAAc,YAAY,kBAAkB;AACpF,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,cAAqC;AAC9C,SAAS,MAAM,UAAU,cAAc,oBAAoB;AAC3D,SAAS,+BAA+B;AACxC,SAAS,iBAA2B;AACpC,SAAS,mBAAmB;AAwB5B,SAAS,QAAQ,OAAkC;AACjD,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,YAAY,QAAQ,SAAS,MAAM,QAAQ,KAAK,CAAC;AAC1F,MAAI;AAGJ,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,gBAAgB,CAAC,UAA8B;AACnD,mBAAe,SAAS,KAAK;AAAA,EAC/B;AACA,SACE,CAAC;AAAA,IACC,WAAW,MAAM,MAAM;AAAA,IACvB,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,MAAM,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,OAAO,GAAG,yBAAyB,EAAE,gCAAgC,MAAM,SAAS,CAAC;AAAA,IACrF,eAAe;AAAA,QACX;AAAA,GACL;AAAA,MACC,CAAC,KAAK,MAAM,KAAK,GAAG;AAAA,QAClB,CAAC,KAAK,MAAM,8BAA8B,KAAK,EAAE,EAAhD,KAAuD;AAAA,MAC1D,EAFC,KAEM;AAAA,MACP,CAAC,KAAK,MAAM,MAAM,OAAO;AAAA,QACvB,CAAC,KAAK,MAAM,+BAA+B,MAAM,MAAM,EAAtD,KAA6D;AAAA,MAChE,EAFC,KAEM;AAAA,MACP,CAAC,OAAO,WAAW,CAAC,YAAa,gBAAgB,SAAU,EAAE;AAAA,IAC/D,EAhBC;AAkBL;AAEO,SAAS,UAAU,OAAoC;AAC5D,QAAM,SAAS;AAAA,IACb;AAAA,MACE,WAAW,CAAC;AAAA,MACZ,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,CAAC,YAAY,aAAa,IAAI,wBAAuC;AAAA,IACzE,OAAO,MAAM,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IACpB,UAAU,CAAC,SAAS;AAClB,UAAI,SAAS,KAAM,OAAM,qBAAqB,IAAI;AAAA,IACpD;AAAA,EACF,CAAC;AACD,QAAM,CAAC,cAAc,eAAe,IAAI,aAAa,KAAK;AAC1D,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,aAAiC,IAAI;AAEjF,QAAM,mBAAmB,MAAc,KAAK,IAAI,GAAG,MAAM,YAAY;AACrE,QAAM,eAAe,MAA8B,MAAM,UAAU,MAAM,GAAG,iBAAiB,CAAC;AAC9F,QAAM,gBAAgB,MAA8B,MAAM,UAAU,MAAM,iBAAiB,CAAC;AAC5F,QAAM,cAAc,MAAe,cAAc,EAAE,SAAS;AAC5D,QAAM,iBAAiB,MACrB,YAAY,KAAK,WAAW,MAAM,QAAS,WAAW,KAAgB,iBAAiB;AAEzF,SACE,CAAC,QAAQ,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,OAAO,GAAG,mBAAmB,MAAM,KAAK,GAAG,KAAK,aAAa;AAAA,MACrG,CAAC,IAAI,MAAM,uBAAuB,KAAK,UAAU;AAAA,QAC/C,CAAC,IAAI,MAAM,aAAa,GAAG;AAAA,WACxB,CAAC,MAAM,QACN,CAAC;AAAA,IACC,IAAI,KAAK;AAAA,IACT,UAAU,WAAW,MAAM,IAAI;AAAA,IAC/B,SAAS,CAAC,UAAU;AAClB,oBAAc,IAAI,CAAC;AACnB,kBAAY,KAAK,SAAS,KAAK;AAAA,IACjC;AAAA,IACA,MAAM,KAAK;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,EACb,GACA;AAAA,QACJ,EAdC,IAcK;AAAA,QACN,CAAC,KAAK,MAAM,YAAY,GAAG;AAAA,UACzB,CAAC;AAAA,IACC,KAAK,CAAC,OAAO,kBAAkB,EAAiB;AAAA,IAChD,UAAU,eAAe;AAAA,IACzB,SAAS,MAAM,gBAAgB,CAAC,SAAS,CAAC,IAAI;AAAA,IAC9C,MAAM,CAAC,KAAK,KAAK,OAAO,MAAM,IAAI;AAAA,IAClC,YAAY,MAAM;AAAA,IAClB,cAAc;AAAA,IACd,eAAe,aAAa;AAAA,EAC9B,EAAE;AAAA,QACJ,EAVC,KAUM;AAAA,MACT,EA3BC,IA2BK;AAAA,MACN,CAAC,KAAK,MAAM,YAAY,GAAG;AAAA,QACzB,CAAC;AAAA,IACC,QAAQ,aAAa;AAAA,IACrB,SAAS,MAAM,gBAAgB,KAAK;AAAA,IACpC,eAAe,eAAe;AAAA,IAC9B,UAAU;AAAA,IACV;AAAA,GACD;AAAA,UACC,CAAC,IAAI,MAAM,cAAc,GAAG;AAAA,aACzB,CAAC,MAAM,QAAQ;AACd,UAAM,YAAY,MAAc,iBAAiB,IAAI,IAAI;AACzD,WACE,CAAC;AAAA,MACC,UAAU,WAAW,MAAM,UAAU;AAAA,MACrC,MAAM,KAAK;AAAA,MACX,SAAS,CAAC,UAAU;AAClB,sBAAc,UAAU,CAAC;AACzB;AAAA,UACE,KAAK;AAAA,UACL;AAAA,QACF;AACA,wBAAgB,KAAK;AAAA,MACvB;AAAA,KACD;AAAA,kBACC,CAAC,KAAK,MAAM,KAAK,MAAM;AAAA,oBACrB,CAAC,cAAc,KAAK,KAAK,EAAxB,aAAuC;AAAA,kBAC1C,EAFC,KAEM;AAAA,kBACP,CAAC,aAAa,OAAO,CAAC,KAAK,OAAO,KAAK,MAAM,EAA5C,aAA2D;AAAA,gBAC9D,EAhBC;AAAA,EAkBL,EAAE;AAAA,UACJ,EAvBC,IAuBK;AAAA,QACR,EA/BC,KA+BM;AAAA,MACT,EAjCC,KAiCM;AAAA,IACT,EA/DC;AAiEL;AAEA,IAAO,oBAAQ;","names":[],"file":"bottomBar.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/breadcrumbs/breadcrumbs.entry.less";
|
|
2
2
|
import { For, Show, children as resolveChildren, mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import cn from "clsx";
|
|
4
4
|
import { createControllableState } from "../../../primitives/createControllableState";
|
|
@@ -60,4 +60,4 @@ export {
|
|
|
60
60
|
Breadcrumbs,
|
|
61
61
|
breadcrumbs_default as default
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=breadcrumbs.
|
|
63
|
+
//# sourceMappingURL=breadcrumbs.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/breadcrumbs/breadcrumbs.entry.less\";\nimport { type JSX, type ParentProps, For, Show, children as resolveChildren, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface BreadcrumbsProps extends JSX.HTMLAttributes<HTMLElement> {\n /** Node placed between every crumb. */\n separator?: JSX.Element;\n /** Collapse the middle of the trail when there are more than `maxItems` crumbs. */\n maxItems?: number;\n /** How many leading crumbs to keep when collapsed. */\n itemsBeforeCollapse?: number;\n /** How many trailing crumbs to keep when collapsed. */\n itemsAfterCollapse?: number;\n /** Controlled expanded state. */\n expanded?: boolean;\n /** Fired when the user activates the expand control. */\n onExpand?: () => void;\n /** Accessible label for the expand button. */\n expandLabel?: string;\n ref?: Ref<HTMLElement>;\n}\n\nexport function Breadcrumbs(props: ParentProps<BreadcrumbsProps>): JSX.Element {\n const merged = mergeProps(\n { separator: \"/\" as JSX.Element, maxItems: 8, itemsBeforeCollapse: 1, itemsAfterCollapse: 1, expandLabel: \"Show path\" },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"separator\",\n \"maxItems\",\n \"itemsBeforeCollapse\",\n \"itemsAfterCollapse\",\n \"expanded\",\n \"onExpand\",\n \"expandLabel\",\n \"children\",\n \"ref\",\n ]);\n\n const [expanded, setExpanded] = createControllableState<boolean>({\n value: () => local.expanded,\n defaultValue: false,\n onChange: () => local.onExpand?.(),\n });\n\n const resolved = resolveChildren(() => local.children);\n const crumbs = (): unknown[] => resolved.toArray();\n\n const collapsed = (): boolean =>\n !expanded() &&\n crumbs().length > local.maxItems &&\n local.itemsBeforeCollapse + local.itemsAfterCollapse < crumbs().length;\n\n const handleExpand = (): void => setExpanded(true);\n\n const rendered = (): unknown[] => {\n const all = crumbs();\n if (!collapsed()) return all;\n return [\n ...all.slice(0, local.itemsBeforeCollapse),\n (\n <button type=\"button\" class=\"smwb-breadcrumbs__expand\" aria-label={local.expandLabel} onClick={handleExpand}>\n …\n </button>\n ),\n ...all.slice(all.length - local.itemsAfterCollapse),\n ];\n };\n\n return (\n <nav {...rest} ref={mergeRefs(local.ref)} data-testid=\"breadcrumbs\" aria-label=\"breadcrumb\" class={cn(\"smwb-breadcrumbs\", local.class)}>\n <ol class=\"smwb-breadcrumbs__list\">\n <For each={rendered()}>\n {(crumb, index) => (\n <>\n <li class=\"smwb-breadcrumbs__item\">{crumb as JSX.Element}</li>\n <Show when={index() < rendered().length - 1}>\n <li class=\"smwb-breadcrumbs__separator\" aria-hidden=\"true\">\n {local.separator}\n </li>\n </Show>\n </>\n )}\n </For>\n </ol>\n </nav>\n );\n}\n\nexport default Breadcrumbs;\n"],"mappings":"AAAA,OAAO;AACP,SAAqC,KAAK,MAAM,YAAY,iBAAiB,YAAY,kBAAkB;AAC3G,OAAO,QAAQ;AACf,SAAS,+BAA+B;AACxC,SAAS,iBAA2B;AAoB7B,SAAS,YAAY,OAAmD;AAC7E,QAAM,SAAS;AAAA,IACb,EAAE,WAAW,KAAoB,UAAU,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,aAAa,YAAY;AAAA,IACtH;AAAA,EACF;AACA,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,CAAC,UAAU,WAAW,IAAI,wBAAiC;AAAA,IAC/D,OAAO,MAAM,MAAM;AAAA,IACnB,cAAc;AAAA,IACd,UAAU,MAAM,MAAM,WAAW;AAAA,EACnC,CAAC;AAED,QAAM,WAAW,gBAAgB,MAAM,MAAM,QAAQ;AACrD,QAAM,SAAS,MAAiB,SAAS,QAAQ;AAEjD,QAAM,YAAY,MAChB,CAAC,SAAS,KACV,OAAO,EAAE,SAAS,MAAM,YACxB,MAAM,sBAAsB,MAAM,qBAAqB,OAAO,EAAE;AAElE,QAAM,eAAe,MAAY,YAAY,IAAI;AAEjD,QAAM,WAAW,MAAiB;AAChC,UAAM,MAAM,OAAO;AACnB,QAAI,CAAC,UAAU,EAAG,QAAO;AACzB,WAAO;AAAA,MACL,GAAG,IAAI,MAAM,GAAG,MAAM,mBAAmB;AAAA,MAEvC,CAAC,OAAO,KAAK,SAAS,MAAM,2BAA2B,YAAY,MAAM,aAAa,SAAS,cAAc;AAAA;AAAA,QAE7G,EAFC;AAAA,MAIH,GAAG,IAAI,MAAM,IAAI,SAAS,MAAM,kBAAkB;AAAA,IACpD;AAAA,EACF;AAEA,SACE,CAAC,QAAQ,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,YAAY,cAAc,WAAW,aAAa,OAAO,GAAG,oBAAoB,MAAM,KAAK,GAAG;AAAA,MACtI,CAAC,GAAG,MAAM,yBAAyB;AAAA,QACjC,CAAC,IAAI,MAAM,SAAS,GAAG;AAAA,WACpB,CAAC,OAAO,UACP,EAAE;AAAA,cACA,CAAC,GAAG,MAAM,0BAA0B,MAAqB,EAAxD,GAA6D;AAAA,cAC9D,CAAC,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,SAAS,GAAG;AAAA,gBAC3C,CAAC,GAAG,MAAM,8BAA8B,YAAY,OAAO;AAAA,mBACxD,MAAM,UAAU;AAAA,gBACnB,EAFC,GAEI;AAAA,cACP,EAJC,KAIM;AAAA,YACT,IACA;AAAA,QACJ,EAXC,IAWK;AAAA,MACR,EAbC,GAaI;AAAA,IACP,EAfC;AAiBL;AAEA,IAAO,sBAAQ;","names":[],"file":"breadcrumbs.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/menu/menu.entry.less";
|
|
2
2
|
import { mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import { MenuContext } from "./menuContext";
|
|
4
4
|
import { MenuComponent } from "./menuComponent";
|
|
@@ -25,4 +25,4 @@ export {
|
|
|
25
25
|
Menu,
|
|
26
26
|
menu_default as default
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=menu.
|
|
28
|
+
//# sourceMappingURL=menu.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/menu/menu.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/menu/menu.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/menu/menu.entry.less\";\nimport { type JSX, type ParentProps, mergeProps, splitProps } from \"solid-js\";\nimport { MenuContext } from \"./menuContext\";\nimport { MenuComponent } from \"./menuComponent\";\nimport type { MenuFloatingProps } from \"./menuFloating\";\n\nexport type MenuProps = MenuFloatingProps & {\n variant?: \"static\" | \"floating\";\n dense?: boolean;\n};\n\nexport function Menu(props: ParentProps<MenuProps>): JSX.Element {\n const merged = mergeProps({ dense: false, variant: \"floating\" as const }, props);\n const [local, rest] = splitProps(merged, [\"dense\", \"variant\", \"children\", \"ref\"]);\n\n const value = {\n get dense() {\n return local.dense;\n },\n get variant() {\n return local.variant;\n },\n onClose: () => rest.onClose?.(),\n };\n\n return (\n <MenuContext.Provider value={value}>\n <MenuComponent ref={local.ref} {...rest}>\n {local.children}\n </MenuComponent>\n </MenuContext.Provider>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAO;AACP,SAAqC,YAAY,kBAAkB;AACnE,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAQvB,SAAS,KAAK,OAA4C;AAC/D,QAAM,SAAS,WAAW,EAAE,OAAO,OAAO,SAAS,WAAoB,GAAG,KAAK;AAC/E,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,SAAS,WAAW,YAAY,KAAK,CAAC;AAEhF,QAAM,QAAQ;AAAA,IACZ,IAAI,QAAQ;AACV,aAAO,MAAM;AAAA,IACf;AAAA,IACA,IAAI,UAAU;AACZ,aAAO,MAAM;AAAA,IACf;AAAA,IACA,SAAS,MAAM,KAAK,UAAU;AAAA,EAChC;AAEA,SACE,CAAC,YAAY,SAAS,OAAO,OAAO;AAAA,MAClC,CAAC,cAAc,KAAK,MAAM,SAAS,MAAM;AAAA,SACtC,MAAM,SAAS;AAAA,MAClB,EAFC,cAEe;AAAA,IAClB,EAJC,YAAY;AAMjB;AAEA,IAAO,eAAQ;","names":[],"file":"menu.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/pagination/pagination.entry.less";
|
|
2
2
|
import { For, Show, mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import cn from "clsx";
|
|
4
4
|
import { Icon } from "../../base/icon";
|
|
@@ -140,4 +140,4 @@ export {
|
|
|
140
140
|
Pagination,
|
|
141
141
|
pagination_default as default
|
|
142
142
|
};
|
|
143
|
-
//# sourceMappingURL=pagination.
|
|
143
|
+
//# sourceMappingURL=pagination.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/pagination/pagination.tsx"],"sourcesContent":["import \"/sourcecraft/workspace/packages/styles/less/components/pagination/pagination.entry.less\";\nimport { type JSX, For, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type PaginationColor = \"default\" | \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface PaginationProps extends Omit<JSX.HTMLAttributes<HTMLElement>, \"onChange\"> {\n /** Total number of pages. */\n count: number;\n /** Current page (1-based). */\n page: number;\n /** Pages shown on each side of the current page. */\n siblingCount?: number;\n /** Pages always shown at the start and end. */\n boundaryCount?: number;\n size?: \"small\" | \"medium\";\n /** Item style. */\n variant?: \"filled\" | \"outlined\";\n /** Item shape. */\n shape?: \"rounded\" | \"circular\";\n color?: PaginationColor;\n disabled?: boolean;\n showFirstButton?: boolean;\n showLastButton?: boolean;\n hidePrevButton?: boolean;\n hideNextButton?: boolean;\n onChange?: (page: number) => void;\n ref?: Ref<HTMLElement>;\n}\n\ntype PaginationItem = number | \"start-ellipsis\" | \"end-ellipsis\";\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: Math.max(end - start + 1, 0) }, (_, i) => start + i);\n\nconst buildItems = (count: number, page: number, siblingCount: number, boundaryCount: number): PaginationItem[] => {\n const startPages = range(1, Math.min(boundaryCount, count));\n const endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count);\n\n const siblingsStart = Math.max(\n Math.min(page - siblingCount, count - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2\n );\n const siblingsEnd = Math.min(\n Math.max(page + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? endPages[0]! - 2 : count - 1\n );\n\n return [\n ...startPages,\n ...(siblingsStart > boundaryCount + 2\n ? ([\"start-ellipsis\"] as PaginationItem[])\n : boundaryCount + 1 < count - boundaryCount\n ? [boundaryCount + 1]\n : []),\n ...range(siblingsStart, siblingsEnd),\n ...(siblingsEnd < count - boundaryCount - 1\n ? ([\"end-ellipsis\"] as PaginationItem[])\n : count - boundaryCount > boundaryCount\n ? [count - boundaryCount]\n : []),\n ...endPages,\n ];\n};\n\nexport function Pagination(props: PaginationProps): JSX.Element {\n const merged = mergeProps(\n {\n siblingCount: 1,\n boundaryCount: 1,\n size: \"medium\" as const,\n variant: \"filled\" as const,\n shape: \"circular\" as const,\n color: \"default\" as PaginationColor,\n disabled: false,\n showFirstButton: false,\n showLastButton: false,\n hidePrevButton: false,\n hideNextButton: false,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"count\",\n \"page\",\n \"siblingCount\",\n \"boundaryCount\",\n \"size\",\n \"variant\",\n \"shape\",\n \"color\",\n \"disabled\",\n \"showFirstButton\",\n \"showLastButton\",\n \"hidePrevButton\",\n \"hideNextButton\",\n \"onChange\",\n \"ref\",\n ]);\n\n let navEl: HTMLElement | undefined;\n\n const go = (target: number): void => {\n if (local.disabled || target === local.page || target < 1 || target > local.count) return;\n local.onChange?.(target);\n };\n\n const onKeyDown: JSX.EventHandler<HTMLUListElement, KeyboardEvent> = (event) => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(\n navEl?.querySelectorAll<HTMLButtonElement>(\"button.smwb-pagination__item:not(:disabled)\") ?? []\n );\n if (buttons.length === 0) return;\n const current = buttons.indexOf(document.activeElement as HTMLButtonElement);\n let next = current;\n if (event.key === \"ArrowRight\") next = Math.min(current + 1, buttons.length - 1);\n else if (event.key === \"ArrowLeft\") next = Math.max(current - 1, 0);\n else if (event.key === \"Home\") next = 0;\n else if (event.key === \"End\") next = buttons.length - 1;\n event.preventDefault();\n buttons[next]?.focus();\n };\n\n const items = (): PaginationItem[] => buildItems(local.count, local.page, local.siblingCount, local.boundaryCount);\n\n const navButton = (label: string, target: number, iconName: string, hidden?: boolean): JSX.Element => (\n <Show when={!hidden}>\n <li>\n <button\n type=\"button\"\n class=\"smwb-pagination__item smwb-pagination__nav\"\n aria-label={label}\n disabled={local.disabled || target < 1 || target > local.count}\n onClick={() => go(target)}\n >\n <Icon name={iconName} size={local.size === \"small\" ? 16 : 18} />\n </button>\n </li>\n </Show>\n );\n\n return (\n <nav\n {...rest}\n ref={mergeRefs(local.ref, (el) => (navEl = el))}\n data-testid=\"pagination\"\n aria-label=\"pagination\"\n class={cn(\n \"smwb-pagination\",\n `smwb-pagination_${local.size}`,\n `smwb-pagination_${local.variant}`,\n `smwb-pagination_shape-${local.shape}`,\n local.color !== \"default\" && `smwb-pagination_color-${local.color}`,\n { \"smwb-pagination_disabled\": local.disabled },\n local.class\n )}\n >\n <ul class=\"smwb-pagination__list\" onKeyDown={onKeyDown}>\n {navButton(\"First page\", 1, \"first_page\", !local.showFirstButton)}\n {navButton(\"Previous page\", local.page - 1, \"chevron_left\", local.hidePrevButton)}\n <For each={items()}>\n {(item) => (\n <Show\n when={typeof item === \"number\"}\n fallback={\n <li class=\"smwb-pagination__ellipsis\" aria-hidden=\"true\">\n …\n </li>\n }\n >\n <li>\n <button\n type=\"button\"\n class={cn(\"smwb-pagination__item\", { \"smwb-pagination__item_selected\": item === local.page })}\n aria-current={item === local.page ? \"page\" : undefined}\n disabled={local.disabled}\n onClick={() => go(item as number)}\n >\n {item}\n </button>\n </li>\n </Show>\n )}\n </For>\n {navButton(\"Next page\", local.page + 1, \"chevron_right\", local.hideNextButton)}\n {navButton(\"Last page\", local.count, \"last_page\", !local.showLastButton)}\n </ul>\n </nav>\n );\n}\n\nexport default Pagination;\n"],"mappings":"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","names":[],"file":"pagination.jsx"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/pagination/pagination.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/pagination/pagination.entry.less\";\nimport { type JSX, For, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type PaginationColor = \"default\" | \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface PaginationProps extends Omit<JSX.HTMLAttributes<HTMLElement>, \"onChange\"> {\n /** Total number of pages. */\n count: number;\n /** Current page (1-based). */\n page: number;\n /** Pages shown on each side of the current page. */\n siblingCount?: number;\n /** Pages always shown at the start and end. */\n boundaryCount?: number;\n size?: \"small\" | \"medium\";\n /** Item style. */\n variant?: \"filled\" | \"outlined\";\n /** Item shape. */\n shape?: \"rounded\" | \"circular\";\n color?: PaginationColor;\n disabled?: boolean;\n showFirstButton?: boolean;\n showLastButton?: boolean;\n hidePrevButton?: boolean;\n hideNextButton?: boolean;\n onChange?: (page: number) => void;\n ref?: Ref<HTMLElement>;\n}\n\ntype PaginationItem = number | \"start-ellipsis\" | \"end-ellipsis\";\n\nconst range = (start: number, end: number): number[] =>\n Array.from({ length: Math.max(end - start + 1, 0) }, (_, i) => start + i);\n\nconst buildItems = (count: number, page: number, siblingCount: number, boundaryCount: number): PaginationItem[] => {\n const startPages = range(1, Math.min(boundaryCount, count));\n const endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count);\n\n const siblingsStart = Math.max(\n Math.min(page - siblingCount, count - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2\n );\n const siblingsEnd = Math.min(\n Math.max(page + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? endPages[0]! - 2 : count - 1\n );\n\n return [\n ...startPages,\n ...(siblingsStart > boundaryCount + 2\n ? ([\"start-ellipsis\"] as PaginationItem[])\n : boundaryCount + 1 < count - boundaryCount\n ? [boundaryCount + 1]\n : []),\n ...range(siblingsStart, siblingsEnd),\n ...(siblingsEnd < count - boundaryCount - 1\n ? ([\"end-ellipsis\"] as PaginationItem[])\n : count - boundaryCount > boundaryCount\n ? [count - boundaryCount]\n : []),\n ...endPages,\n ];\n};\n\nexport function Pagination(props: PaginationProps): JSX.Element {\n const merged = mergeProps(\n {\n siblingCount: 1,\n boundaryCount: 1,\n size: \"medium\" as const,\n variant: \"filled\" as const,\n shape: \"circular\" as const,\n color: \"default\" as PaginationColor,\n disabled: false,\n showFirstButton: false,\n showLastButton: false,\n hidePrevButton: false,\n hideNextButton: false,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"count\",\n \"page\",\n \"siblingCount\",\n \"boundaryCount\",\n \"size\",\n \"variant\",\n \"shape\",\n \"color\",\n \"disabled\",\n \"showFirstButton\",\n \"showLastButton\",\n \"hidePrevButton\",\n \"hideNextButton\",\n \"onChange\",\n \"ref\",\n ]);\n\n let navEl: HTMLElement | undefined;\n\n const go = (target: number): void => {\n if (local.disabled || target === local.page || target < 1 || target > local.count) return;\n local.onChange?.(target);\n };\n\n const onKeyDown: JSX.EventHandler<HTMLUListElement, KeyboardEvent> = (event) => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(\n navEl?.querySelectorAll<HTMLButtonElement>(\"button.smwb-pagination__item:not(:disabled)\") ?? []\n );\n if (buttons.length === 0) return;\n const current = buttons.indexOf(document.activeElement as HTMLButtonElement);\n let next = current;\n if (event.key === \"ArrowRight\") next = Math.min(current + 1, buttons.length - 1);\n else if (event.key === \"ArrowLeft\") next = Math.max(current - 1, 0);\n else if (event.key === \"Home\") next = 0;\n else if (event.key === \"End\") next = buttons.length - 1;\n event.preventDefault();\n buttons[next]?.focus();\n };\n\n const items = (): PaginationItem[] => buildItems(local.count, local.page, local.siblingCount, local.boundaryCount);\n\n const navButton = (label: string, target: number, iconName: string, hidden?: boolean): JSX.Element => (\n <Show when={!hidden}>\n <li>\n <button\n type=\"button\"\n class=\"smwb-pagination__item smwb-pagination__nav\"\n aria-label={label}\n disabled={local.disabled || target < 1 || target > local.count}\n onClick={() => go(target)}\n >\n <Icon name={iconName} size={local.size === \"small\" ? 16 : 18} />\n </button>\n </li>\n </Show>\n );\n\n return (\n <nav\n {...rest}\n ref={mergeRefs(local.ref, (el) => (navEl = el))}\n data-testid=\"pagination\"\n aria-label=\"pagination\"\n class={cn(\n \"smwb-pagination\",\n `smwb-pagination_${local.size}`,\n `smwb-pagination_${local.variant}`,\n `smwb-pagination_shape-${local.shape}`,\n local.color !== \"default\" && `smwb-pagination_color-${local.color}`,\n { \"smwb-pagination_disabled\": local.disabled },\n local.class\n )}\n >\n <ul class=\"smwb-pagination__list\" onKeyDown={onKeyDown}>\n {navButton(\"First page\", 1, \"first_page\", !local.showFirstButton)}\n {navButton(\"Previous page\", local.page - 1, \"chevron_left\", local.hidePrevButton)}\n <For each={items()}>\n {(item) => (\n <Show\n when={typeof item === \"number\"}\n fallback={\n <li class=\"smwb-pagination__ellipsis\" aria-hidden=\"true\">\n …\n </li>\n }\n >\n <li>\n <button\n type=\"button\"\n class={cn(\"smwb-pagination__item\", { \"smwb-pagination__item_selected\": item === local.page })}\n aria-current={item === local.page ? \"page\" : undefined}\n disabled={local.disabled}\n onClick={() => go(item as number)}\n >\n {item}\n </button>\n </li>\n </Show>\n )}\n </For>\n {navButton(\"Next page\", local.page + 1, \"chevron_right\", local.hideNextButton)}\n {navButton(\"Last page\", local.count, \"last_page\", !local.showLastButton)}\n </ul>\n </nav>\n );\n}\n\nexport default Pagination;\n"],"mappings":"AAAA,OAAO;AACP,SAAmB,KAAK,MAAM,YAAY,kBAAkB;AAC5D,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,iBAA2B;AA8BpC,MAAM,QAAQ,CAAC,OAAe,QAC5B,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC;AAE1E,MAAM,aAAa,CAAC,OAAe,MAAc,cAAsB,kBAA4C;AACjH,QAAM,aAAa,MAAM,GAAG,KAAK,IAAI,eAAe,KAAK,CAAC;AAC1D,QAAM,WAAW,MAAM,KAAK,IAAI,QAAQ,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,KAAK;AAEpF,QAAM,gBAAgB,KAAK;AAAA,IACzB,KAAK,IAAI,OAAO,cAAc,QAAQ,gBAAgB,eAAe,IAAI,CAAC;AAAA,IAC1E,gBAAgB;AAAA,EAClB;AACA,QAAM,cAAc,KAAK;AAAA,IACvB,KAAK,IAAI,OAAO,cAAc,gBAAgB,eAAe,IAAI,CAAC;AAAA,IAClE,SAAS,SAAS,IAAI,SAAS,CAAC,IAAK,IAAI,QAAQ;AAAA,EACnD;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,gBAAgB,gBAAgB,IAC/B,CAAC,gBAAgB,IAClB,gBAAgB,IAAI,QAAQ,gBAC1B,CAAC,gBAAgB,CAAC,IAClB,CAAC;AAAA,IACP,GAAG,MAAM,eAAe,WAAW;AAAA,IACnC,GAAI,cAAc,QAAQ,gBAAgB,IACrC,CAAC,cAAc,IAChB,QAAQ,gBAAgB,gBACtB,CAAC,QAAQ,aAAa,IACtB,CAAC;AAAA,IACP,GAAG;AAAA,EACL;AACF;AAEO,SAAS,WAAW,OAAqC;AAC9D,QAAM,SAAS;AAAA,IACb;AAAA,MACE,cAAc;AAAA,MACd,eAAe;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAClB;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI;AAEJ,QAAM,KAAK,CAAC,WAAyB;AACnC,QAAI,MAAM,YAAY,WAAW,MAAM,QAAQ,SAAS,KAAK,SAAS,MAAM,MAAO;AACnF,UAAM,WAAW,MAAM;AAAA,EACzB;AAEA,QAAM,YAA+D,CAAC,UAAU;AAC9E,QAAI,CAAC,CAAC,aAAa,cAAc,QAAQ,KAAK,EAAE,SAAS,MAAM,GAAG,EAAG;AACrE,UAAM,UAAU,MAAM;AAAA,MACpB,OAAO,iBAAoC,6CAA6C,KAAK,CAAC;AAAA,IAChG;AACA,QAAI,QAAQ,WAAW,EAAG;AAC1B,UAAM,UAAU,QAAQ,QAAQ,SAAS,aAAkC;AAC3E,QAAI,OAAO;AACX,QAAI,MAAM,QAAQ,aAAc,QAAO,KAAK,IAAI,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,aACtE,MAAM,QAAQ,YAAa,QAAO,KAAK,IAAI,UAAU,GAAG,CAAC;AAAA,aACzD,MAAM,QAAQ,OAAQ,QAAO;AAAA,aAC7B,MAAM,QAAQ,MAAO,QAAO,QAAQ,SAAS;AACtD,UAAM,eAAe;AACrB,YAAQ,IAAI,GAAG,MAAM;AAAA,EACvB;AAEA,QAAM,QAAQ,MAAwB,WAAW,MAAM,OAAO,MAAM,MAAM,MAAM,cAAc,MAAM,aAAa;AAEjH,QAAM,YAAY,CAAC,OAAe,QAAgB,UAAkB,WAClE,CAAC,KAAK,MAAM,CAAC,QAAQ;AAAA,MACnB,CAAC,GAAG;AAAA,QACF,CAAC;AAAA,IACC,KAAK;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,UAAU,MAAM,YAAY,SAAS,KAAK,SAAS,MAAM;AAAA,IACzD,SAAS,MAAM,GAAG,MAAM;AAAA,GACzB;AAAA,UACC,CAAC,KAAK,MAAM,UAAU,MAAM,MAAM,SAAS,UAAU,KAAK,IAAI,EAAE;AAAA,QAClE,EARC,OAQQ;AAAA,MACX,EAVC,GAUI;AAAA,IACP,EAZC;AAeH,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,KAAK,CAAC,OAAQ,QAAQ,EAAG;AAAA,IAC9C,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA,mBAAmB,MAAM,IAAI;AAAA,MAC7B,mBAAmB,MAAM,OAAO;AAAA,MAChC,yBAAyB,MAAM,KAAK;AAAA,MACpC,MAAM,UAAU,aAAa,yBAAyB,MAAM,KAAK;AAAA,MACjE,EAAE,4BAA4B,MAAM,SAAS;AAAA,MAC7C,MAAM;AAAA,IACR;AAAA,GACD;AAAA,MACC,CAAC,GAAG,MAAM,wBAAwB,WAAW,WAAW;AAAA,SACrD,UAAU,cAAc,GAAG,cAAc,CAAC,MAAM,eAAe,EAAE;AAAA,SACjE,UAAU,iBAAiB,MAAM,OAAO,GAAG,gBAAgB,MAAM,cAAc,EAAE;AAAA,QAClF,CAAC,IAAI,MAAM,MAAM,GAAG;AAAA,WACjB,CAAC,SACA,CAAC;AAAA,IACC,MAAM,OAAO,SAAS;AAAA,IACtB,UACE,CAAC,GAAG,MAAM,4BAA4B,YAAY,OAAO;AAAA;AAAA,gBAEzD,EAFC;AAAA,GAIJ;AAAA,cACC,CAAC,GAAG;AAAA,gBACF,CAAC;AAAA,IACC,KAAK;AAAA,IACL,OAAO,GAAG,yBAAyB,EAAE,kCAAkC,SAAS,MAAM,KAAK,CAAC;AAAA,IAC5F,cAAc,SAAS,MAAM,OAAO,SAAS;AAAA,IAC7C,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM,GAAG,IAAc;AAAA,GACjC;AAAA,mBACE,KAAK;AAAA,gBACR,EARC,OAQQ;AAAA,cACX,EAVC,GAUI;AAAA,YACP,EAnBC,MAoBD;AAAA,QACJ,EAvBC,IAuBK;AAAA,SACL,UAAU,aAAa,MAAM,OAAO,GAAG,iBAAiB,MAAM,cAAc,EAAE;AAAA,SAC9E,UAAU,aAAa,MAAM,OAAO,aAAa,CAAC,MAAM,cAAc,EAAE;AAAA,MAC3E,EA7BC,GA6BI;AAAA,IACP,EA7CC;AA+CL;AAEA,IAAO,qBAAQ;","names":[],"file":"pagination.jsx"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "/
|
|
2
|
-
import { For, Show, mergeProps, splitProps } from "solid-js";
|
|
1
|
+
import "@smwb/ui-styles/less/components/sidebar/sidebar.entry.less";
|
|
2
|
+
import { For, Show, children, mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import { Dynamic } from "solid-js/web";
|
|
4
4
|
import cn from "clsx";
|
|
5
5
|
import { Ripple } from "../../base/ripple";
|
|
@@ -9,6 +9,7 @@ import { mergeRefs } from "../../../primitives/mergeRefs";
|
|
|
9
9
|
function NavItem(props) {
|
|
10
10
|
const [local, rest] = splitProps(props, ["isActive", "icon", "title", "as", "href", "variant"]);
|
|
11
11
|
let rippleActions;
|
|
12
|
+
const icon = children(() => local.icon);
|
|
12
13
|
const onPointerDown = (event) => {
|
|
13
14
|
rippleActions?.onRipple(event);
|
|
14
15
|
};
|
|
@@ -20,8 +21,8 @@ function NavItem(props) {
|
|
|
20
21
|
onPointerDown={onPointerDown}
|
|
21
22
|
{...rest}
|
|
22
23
|
>
|
|
23
|
-
<Show when={
|
|
24
|
-
<span class="smwb-nav-item__icon">{
|
|
24
|
+
<Show when={icon()}>
|
|
25
|
+
<span class="smwb-nav-item__icon">{icon()}</span>
|
|
25
26
|
</Show>
|
|
26
27
|
<Show when={local.title}>
|
|
27
28
|
<span class="smwb-nav-item__title">{local.title}</span>
|
|
@@ -112,4 +113,4 @@ export {
|
|
|
112
113
|
Sidebar,
|
|
113
114
|
sidebar_default as default
|
|
114
115
|
};
|
|
115
|
-
//# sourceMappingURL=sidebar.
|
|
116
|
+
//# sourceMappingURL=sidebar.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/sidebar/sidebar.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/sidebar/sidebar.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/sidebar/sidebar.entry.less\";\nimport { type JSX, For, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type SidebarVariant = \"compact\" | \"default\" | \"compactMini\";\n\nexport interface SidebarMenuItemProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: JSX.Element;\n title: string;\n isActive?: boolean;\n onClick?: JSX.EventHandlerUnion<HTMLDivElement, MouseEvent>;\n as?: string | undefined;\n href?: string | undefined;\n variant?: SidebarVariant | undefined;\n}\n\nexport interface SidebarProps extends JSX.HTMLAttributes<HTMLElement> {\n variant?: SidebarVariant;\n menuItems?: SidebarMenuItemProps[];\n /** Controlled index of the active menu item. */\n activeItem?: number | null;\n /** Default active index (uncontrolled). */\n defaultActiveItem?: number | null;\n /** Called with the index of the activated item. */\n onActiveItemChange?: (index: number) => void;\n /** Render a built-in toggle that collapses the rail to an icon-only mini rail. */\n collapsible?: boolean;\n /** Controlled collapsed state. */\n collapsed?: boolean;\n /** Initial collapsed state (uncontrolled). */\n defaultCollapsed?: boolean;\n /** Called whenever the collapsed state changes. */\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Accessible label for the built-in collapse toggle. */\n collapseToggleAriaLabel?: string;\n ref?: Ref<HTMLElement>;\n}\n\nfunction NavItem(props: SidebarMenuItemProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"isActive\", \"icon\", \"title\", \"as\", \"href\", \"variant\"]);\n let rippleActions: RippleActionsRef | undefined;\n\n // Resolve the icon in THIS item's context. A pre-created element passed via\n // menuItems is keyed at the consumer's position but rendered here, so under\n // SSR the hydration walk can't find it; children() realigns the key sequence.\n const icon = children(() => local.icon);\n\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n\n return (\n <Dynamic\n component={local.as ?? \"div\"}\n href={local.href}\n role=\"menuitem\"\n class={cn(\"sidebar__nav__item\", \"smwb-nav-item\", local.variant, { active: local.isActive })}\n onPointerDown={onPointerDown}\n {...rest}\n >\n <Show when={icon()}>\n <span class=\"smwb-nav-item__icon\">{icon()}</span>\n </Show>\n <Show when={local.title}>\n <span class=\"smwb-nav-item__title\">{local.title}</span>\n </Show>\n <Ripple actionRef={(actions) => (rippleActions = actions)} />\n </Dynamic>\n );\n}\n\nexport function Sidebar(props: SidebarProps): JSX.Element {\n const merged = mergeProps(\n {\n variant: \"default\" as SidebarVariant,\n defaultActiveItem: null as number | null,\n collapsible: false,\n defaultCollapsed: false,\n collapseToggleAriaLabel: \"Toggle navigation\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"variant\",\n \"menuItems\",\n \"activeItem\",\n \"defaultActiveItem\",\n \"onActiveItemChange\",\n \"collapsible\",\n \"collapsed\",\n \"defaultCollapsed\",\n \"onCollapsedChange\",\n \"collapseToggleAriaLabel\",\n \"ref\",\n ]);\n\n const [activeItem, setActiveItem] = createControllableState<number | null>({\n value: () => local.activeItem,\n defaultValue: local.defaultActiveItem,\n onChange: (next) => {\n if (next !== null) local.onActiveItemChange?.(next);\n },\n });\n\n const [collapsed, setCollapsed] = createControllableState<boolean>({\n value: () => local.collapsed,\n defaultValue: local.defaultCollapsed,\n onChange: (next) => local.onCollapsedChange?.(next),\n });\n\n // When collapsed the rail always shows the icon-only mini variant.\n const effectiveVariant = (): SidebarVariant => (local.collapsible && collapsed() ? \"compactMini\" : local.variant);\n\n return (\n <aside\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-sidebar\", local.class, `smwb-${effectiveVariant()}`, {\n \"smwb-sidebar_collapsible\": local.collapsible,\n \"smwb-sidebar_collapsed\": local.collapsible && collapsed(),\n })}\n role=\"menubar\"\n >\n <Show when={local.collapsible}>\n <div class=\"smwb-sidebar__collapse\">\n <button\n type=\"button\"\n class=\"smwb-sidebar__collapse-btn\"\n aria-label={local.collapseToggleAriaLabel}\n aria-expanded={!collapsed()}\n onClick={() => setCollapsed(!collapsed())}\n >\n <Icon name={collapsed() ? \"chevron_right\" : \"chevron_left\"} size={20} />\n </button>\n </div>\n </Show>\n <nav class=\"smwb-sidebar__nav\">\n <For each={local.menuItems ?? []}>\n {(item, idx) => (\n <NavItem\n as={item.as}\n isActive={activeItem() === idx()}\n onClick={(event) => {\n setActiveItem(idx());\n if (typeof item.onClick === \"function\") item.onClick(event);\n }}\n icon={item.icon}\n title={item.title}\n href={item.href}\n variant={effectiveVariant()}\n />\n )}\n </For>\n </nav>\n </aside>\n );\n}\n\nexport default Sidebar;\n"],"mappings":"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","names":[],"file":"sidebar.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/stepper/stepper.entry.less";
|
|
2
2
|
import { For, Show, mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import cn from "clsx";
|
|
4
4
|
import { Icon } from "../../base/icon";
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
Stepper,
|
|
81
81
|
stepper_default as default
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=stepper.
|
|
83
|
+
//# sourceMappingURL=stepper.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/stepper/stepper.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/stepper/stepper.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/stepper/stepper.entry.less\";\nimport { type JSX, For, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface StepItem {\n label: JSX.Element;\n description?: JSX.Element;\n optional?: JSX.Element;\n /** Marks the step as errored. */\n error?: boolean;\n /** Disables interaction with the step. */\n disabled?: boolean;\n /** Custom icon overriding the default number/check. */\n icon?: JSX.Element;\n}\n\nexport interface StepperProps extends JSX.HTMLAttributes<HTMLDivElement> {\n steps: StepItem[];\n /** Index of the active (current) step. */\n activeStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n /** Place the label under the icon (horizontal only). */\n alternativeLabel?: boolean;\n /** Makes steps clickable; receives the clicked step index. */\n onStepClick?: (index: number) => void;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function Stepper(props: StepperProps): JSX.Element {\n const merged = mergeProps({ orientation: \"horizontal\" as const, alternativeLabel: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"steps\",\n \"activeStep\",\n \"orientation\",\n \"alternativeLabel\",\n \"onStepClick\",\n \"ref\",\n ]);\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"stepper\"\n class={cn(\n \"smwb-stepper\",\n `smwb-stepper_${local.orientation}`,\n { \"smwb-stepper_alt-label\": local.alternativeLabel && local.orientation === \"horizontal\" },\n local.class\n )}\n >\n <For each={local.steps}>\n {(step, index) => {\n const completed = (): boolean => index() < local.activeStep;\n const active = (): boolean => index() === local.activeStep;\n const isLast = (): boolean => index() === local.steps.length - 1;\n const clickable = (): boolean => Boolean(local.onStepClick) && !step.disabled;\n\n return (\n <>\n <div\n class={cn(\"smwb-stepper__step\", {\n \"smwb-stepper__step_active\": active(),\n \"smwb-stepper__step_completed\": completed(),\n \"smwb-stepper__step_error\": step.error,\n \"smwb-stepper__step_disabled\": step.disabled,\n \"smwb-stepper__step_clickable\": clickable(),\n })}\n aria-current={active() ? \"step\" : undefined}\n aria-disabled={step.disabled || undefined}\n role={clickable() ? \"button\" : undefined}\n tabindex={clickable() ? 0 : undefined}\n onClick={clickable() ? () => local.onStepClick?.(index()) : undefined}\n onKeyDown={\n clickable()\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n local.onStepClick?.(index());\n }\n }\n : undefined\n }\n >\n <div class=\"smwb-stepper__icon\" aria-hidden=\"true\">\n <Show when={step.icon} fallback={completed() ? <Icon name=\"check\" size={16} /> : <span>{index() + 1}</span>}>\n {step.icon}\n </Show>\n </div>\n <div class=\"smwb-stepper__text\">\n <span class=\"smwb-stepper__label\">{step.label}</span>\n <Show when={step.optional}>\n <span class=\"smwb-stepper__optional\">{step.optional}</span>\n </Show>\n <Show when={step.description && local.orientation === \"vertical\"}>\n <span class=\"smwb-stepper__description\">{step.description}</span>\n </Show>\n </div>\n </div>\n <Show when={!isLast()}>\n <div class=\"smwb-stepper__connector\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n }}\n </For>\n </div>\n );\n}\n\nexport default Stepper;\n"],"mappings":"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","names":[],"file":"stepper.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/tabs/tab/tab.entry.less";
|
|
2
2
|
import { Show, mergeProps, splitProps } from "solid-js";
|
|
3
3
|
import { Dynamic } from "solid-js/web";
|
|
4
4
|
import cn from "clsx";
|
|
@@ -73,4 +73,4 @@ export {
|
|
|
73
73
|
Tab,
|
|
74
74
|
tab_default as default
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=tab.
|
|
76
|
+
//# sourceMappingURL=tab.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import \"/
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/tabs/tab/tab.entry.less\";\nimport { type JSX, type ParentProps, Show, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../../base/ripple\";\nimport { useTabsContext } from \"../tabsContext\";\nimport { mergeRefs, type Ref } from \"../../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../../primitives/callHandler\";\n\nexport interface TabProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: JSX.Element;\n isActive?: boolean;\n contentRef?: Ref<HTMLSpanElement>;\n icon?: JSX.Element;\n stacked?: boolean;\n tag?: string;\n disabled?: boolean;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nexport function Tab(props: ParentProps<TabProps>): JSX.Element {\n const ctx = useTabsContext();\n const index = ctx ? ctx.registerTab() : -1;\n const merged = mergeProps({ isActive: false, stacked: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"label\",\n \"isActive\",\n \"contentRef\",\n \"icon\",\n \"stacked\",\n \"tag\",\n \"disabled\",\n \"onClick\",\n \"ref\",\n ]);\n\n let rippleActions: RippleActionsRef | undefined;\n\n const active = (): boolean => (ctx ? ctx.value() === index : local.isActive);\n\n const onClick: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n if (ctx) {\n ctx.onChange(event, index);\n } else {\n callHandler(local.onClick, event);\n }\n };\n\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n\n const tag = (): string => local.tag ?? \"button\";\n\n return (\n <Dynamic\n component={tag()}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-tab\", local.class, {\n \"smwb-tab--active\": active(),\n \"smwb-tab--stacked\": local.stacked,\n \"smwb-tab--disabled\": local.disabled,\n })}\n onClick={onClick}\n onPointerDown={onPointerDown}\n role=\"tab\"\n aria-selected={active()}\n aria-disabled={local.disabled || undefined}\n tabindex={active() ? 0 : -1}\n disabled={tag() === \"button\" ? local.disabled : undefined}\n >\n <span\n class=\"smwb-tab__content\"\n ref={mergeRefs(local.contentRef, (el) => {\n if (ctx?.indicatorContent) ctx.setContentRef(index, el as HTMLSpanElement);\n })}\n >\n <Show when={local.icon}>\n <span class=\"smwb-tab__icon\">{local.icon}</span>\n </Show>\n <Show when={local.label}>\n <span class=\"smwb-tab__text-label\">{local.label}</span>\n </Show>\n </span>\n <Ripple actionRef={(actions) => (rippleActions = actions)} classes={{ child: \"tab__ripple-child\" }} />\n </Dynamic>\n );\n}\n\nexport default Tab;\n"],"mappings":"AAAA,OAAO;AACP,SAAqC,MAAM,YAAY,kBAAkB;AACzE,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,cAAqC;AAC9C,SAAS,sBAAsB;AAC/B,SAAS,iBAA2B;AACpC,SAAS,mBAAmB;AAarB,SAAS,IAAI,OAA2C;AAC7D,QAAM,MAAM,eAAe;AAC3B,QAAM,QAAQ,MAAM,IAAI,YAAY,IAAI;AACxC,QAAM,SAAS,WAAW,EAAE,UAAU,OAAO,SAAS,MAAM,GAAG,KAAK;AACpE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI;AAEJ,QAAM,SAAS,MAAgB,MAAM,IAAI,MAAM,MAAM,QAAQ,MAAM;AAEnE,QAAM,UAA+E,CAAC,UAAU;AAC9F,QAAI,KAAK;AACP,UAAI,SAAS,OAAO,KAAK;AAAA,IAC3B,OAAO;AACL,kBAAY,MAAM,SAAS,KAAK;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,UAA8B;AACnD,mBAAe,SAAS,KAAK;AAAA,EAC/B;AAEA,QAAM,MAAM,MAAc,MAAM,OAAO;AAEvC,SACE,CAAC;AAAA,IACC,WAAW,IAAI;AAAA,QACX;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,YAAY,MAAM,OAAO;AAAA,MACjC,oBAAoB,OAAO;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AAAA,IACD,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,eAAe,MAAM,YAAY;AAAA,IACjC,UAAU,OAAO,IAAI,IAAI;AAAA,IACzB,UAAU,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,GACjD;AAAA,MACC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,KAAK,UAAU,MAAM,YAAY,CAAC,OAAO;AACvC,UAAI,KAAK,iBAAkB,KAAI,cAAc,OAAO,EAAqB;AAAA,IAC3E,CAAC;AAAA,GACF;AAAA,QACC,CAAC,KAAK,MAAM,MAAM,MAAM;AAAA,UACtB,CAAC,KAAK,MAAM,kBAAkB,MAAM,KAAK,EAAxC,KAA+C;AAAA,QAClD,EAFC,KAEM;AAAA,QACP,CAAC,KAAK,MAAM,MAAM,OAAO;AAAA,UACvB,CAAC,KAAK,MAAM,wBAAwB,MAAM,MAAM,EAA/C,KAAsD;AAAA,QACzD,EAFC,KAEM;AAAA,MACT,EAZC,KAYM;AAAA,MACP,CAAC,OAAO,WAAW,CAAC,YAAa,gBAAgB,SAAU,SAAS,EAAE,OAAO,oBAAoB,GAAG,EAAE;AAAA,IACxG,EA/BC;AAiCL;AAEA,IAAO,cAAQ;","names":[],"file":"tab.jsx"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "/
|
|
1
|
+
import "@smwb/ui-styles/less/components/tabs/tabs.entry.less";
|
|
2
2
|
import { Show, createEffect, createSignal, mergeProps, on, onCleanup, onMount, splitProps } from "solid-js";
|
|
3
3
|
import cn from "clsx";
|
|
4
4
|
import { debounce } from "../../../utils/debounce";
|
|
@@ -139,4 +139,4 @@ export {
|
|
|
139
139
|
Tabs,
|
|
140
140
|
tabs_default as default
|
|
141
141
|
};
|
|
142
|
-
//# sourceMappingURL=tabs.
|
|
142
|
+
//# sourceMappingURL=tabs.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import \"/sourcecraft/workspace/packages/styles/less/components/tabs/tabs.entry.less\";\nimport { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { animate } from \"../../../utils/animate\";\nimport { TabsContext, type TabsContextValue } from \"./tabsContext\";\nimport { Tab } from \"./tab/tab\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TabsProps {\n value: number;\n onChange: (event: MouseEvent & { currentTarget: HTMLElement; target: Element }, index: number) => void;\n indicatorContent?: boolean;\n scrollable?: boolean;\n class?: string;\n children?: JSX.Element;\n \"aria-label\"?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface IndicatorStyle {\n root: { left?: number; width?: number };\n content?: { width: number };\n}\n\nconst VIEW_NEXT_TAB_PX = 40;\n\nexport function Tabs(props: ParentProps<TabsProps>): JSX.Element {\n const merged = mergeProps({ indicatorContent: false, scrollable: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"onChange\",\n \"value\",\n \"indicatorContent\",\n \"scrollable\",\n \"aria-label\",\n \"ref\",\n ]);\n\n const [mounted, setMounted] = createSignal(false);\n const [indicatorStyle, setIndicatorStyle] = createSignal<IndicatorStyle>({ root: {} });\n\n let tabsEl: HTMLDivElement | undefined;\n let tabListEl: HTMLDivElement | undefined;\n let tabCounter = 0;\n const contentRefs: HTMLSpanElement[] = [];\n\n const getTabsMeta = () => {\n let tabsMeta: { clientWidth: number; scrollLeft: number; left: number; right: number } | undefined;\n if (tabsEl) {\n const rect = tabsEl.getBoundingClientRect();\n tabsMeta = { clientWidth: tabsEl.clientWidth, scrollLeft: tabsEl.scrollLeft, left: rect.left, right: rect.right };\n }\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n if (tabsEl && tabListEl && tabListEl.children.length > 0) {\n const tab = tabListEl.children[local.value];\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (local.indicatorContent) {\n tabContentMeta = contentRefs[local.value]?.getBoundingClientRect() ?? null;\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = (): void => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft;\n }\n const next: IndicatorStyle = { root: { left: startValue, width: tabMeta ? tabMeta.width : 0 } };\n if (local.indicatorContent && tabContentMeta) {\n next.content = { width: tabContentMeta.width };\n }\n const prev = indicatorStyle();\n if (prev.root.left === undefined || prev.root.width === undefined) {\n setIndicatorStyle(next);\n return;\n }\n const dStart = Math.abs((prev.root.left ?? 0) - (next.root.left ?? 0));\n const dSize = Math.abs((prev.root.width ?? 0) - (next.root.width ?? 0));\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(next);\n }\n };\n\n const scroll = (scrollValue: number): void => {\n if (!tabsEl) return;\n animate(tabsEl, \"scrollLeft\", scrollValue, { duration: 300 });\n };\n\n const scrollSelectedIntoView = (): void => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n if (!tabMeta || !tabsMeta) return;\n if (tabMeta.left < tabsMeta.left) {\n scroll(tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left) - VIEW_NEXT_TAB_PX);\n } else if (tabMeta.right > tabsMeta.right) {\n scroll(tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right) + VIEW_NEXT_TAB_PX);\n }\n };\n\n onMount(() => setMounted(true));\n\n // Re-measure when the active value changes (and on mount).\n createEffect(on(() => local.value, () => updateIndicatorState()));\n\n // Keep the indicator in sync with resize.\n onMount(() => {\n const onResize = debounce(() => updateIndicatorState(), 166);\n const view = tabsEl?.ownerDocument.defaultView;\n view?.addEventListener(\"resize\", onResize);\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\" && tabListEl) {\n resizeObserver = new ResizeObserver(onResize);\n Array.from(tabListEl.children).forEach((child) => resizeObserver?.observe(child));\n }\n onCleanup(() => {\n onResize.cancel();\n view?.removeEventListener(\"resize\", onResize);\n resizeObserver?.disconnect();\n });\n });\n\n // Scroll the selected tab into view when the indicator moves.\n createEffect(() => {\n indicatorStyle();\n scrollSelectedIntoView();\n });\n\n const contextValue: TabsContextValue = {\n value: () => local.value,\n onChange: local.onChange,\n indicatorContent: local.indicatorContent,\n registerTab: () => tabCounter++,\n setContentRef: (index, el) => {\n contentRefs[index] = el;\n },\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div {...rest} class={cn(\"smwb-tabs\", local.class)} role=\"tabpanel\" ref={mergeRefs(local.ref)}>\n <div\n class={cn(\"smwb-tabs__scroller\", { \"smwb-tabs__scroller--scrollable\": local.scrollable })}\n ref={(el) => (tabsEl = el)}\n >\n <div class=\"smwb-tabs__scroll-area\" ref={(el) => (tabListEl = el)} role=\"tablist\" aria-label={local[\"aria-label\"]}>\n {local.children}\n </div>\n <Show when={mounted()}>\n <span\n class=\"smwb-tabs__indicator\"\n style={{\n left: `${indicatorStyle().root.left ?? 0}px`,\n width: `${indicatorStyle().root.width ?? 0}px`,\n }}\n >\n <span\n class=\"smwb-tabs__indicator-content\"\n style={indicatorStyle().content ? { width: `${indicatorStyle().content?.width ?? 0}px` } : {}}\n />\n </span>\n </Show>\n </div>\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport { Tab };\nexport type { TabProps } from \"./tab/tab\";\nexport default Tabs;\n"],"mappings":"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","names":[],"file":"tabs.jsx"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/tabs/tabs.entry.less\";\nimport { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { animate } from \"../../../utils/animate\";\nimport { TabsContext, type TabsContextValue } from \"./tabsContext\";\nimport { Tab } from \"./tab/tab\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TabsProps {\n value: number;\n onChange: (event: MouseEvent & { currentTarget: HTMLElement; target: Element }, index: number) => void;\n indicatorContent?: boolean;\n scrollable?: boolean;\n class?: string;\n children?: JSX.Element;\n \"aria-label\"?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface IndicatorStyle {\n root: { left?: number; width?: number };\n content?: { width: number };\n}\n\nconst VIEW_NEXT_TAB_PX = 40;\n\nexport function Tabs(props: ParentProps<TabsProps>): JSX.Element {\n const merged = mergeProps({ indicatorContent: false, scrollable: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"onChange\",\n \"value\",\n \"indicatorContent\",\n \"scrollable\",\n \"aria-label\",\n \"ref\",\n ]);\n\n const [mounted, setMounted] = createSignal(false);\n const [indicatorStyle, setIndicatorStyle] = createSignal<IndicatorStyle>({ root: {} });\n\n let tabsEl: HTMLDivElement | undefined;\n let tabListEl: HTMLDivElement | undefined;\n let tabCounter = 0;\n const contentRefs: HTMLSpanElement[] = [];\n\n const getTabsMeta = () => {\n let tabsMeta: { clientWidth: number; scrollLeft: number; left: number; right: number } | undefined;\n if (tabsEl) {\n const rect = tabsEl.getBoundingClientRect();\n tabsMeta = { clientWidth: tabsEl.clientWidth, scrollLeft: tabsEl.scrollLeft, left: rect.left, right: rect.right };\n }\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n if (tabsEl && tabListEl && tabListEl.children.length > 0) {\n const tab = tabListEl.children[local.value];\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (local.indicatorContent) {\n tabContentMeta = contentRefs[local.value]?.getBoundingClientRect() ?? null;\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = (): void => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft;\n }\n const next: IndicatorStyle = { root: { left: startValue, width: tabMeta ? tabMeta.width : 0 } };\n if (local.indicatorContent && tabContentMeta) {\n next.content = { width: tabContentMeta.width };\n }\n const prev = indicatorStyle();\n if (prev.root.left === undefined || prev.root.width === undefined) {\n setIndicatorStyle(next);\n return;\n }\n const dStart = Math.abs((prev.root.left ?? 0) - (next.root.left ?? 0));\n const dSize = Math.abs((prev.root.width ?? 0) - (next.root.width ?? 0));\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(next);\n }\n };\n\n const scroll = (scrollValue: number): void => {\n if (!tabsEl) return;\n animate(tabsEl, \"scrollLeft\", scrollValue, { duration: 300 });\n };\n\n const scrollSelectedIntoView = (): void => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n if (!tabMeta || !tabsMeta) return;\n if (tabMeta.left < tabsMeta.left) {\n scroll(tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left) - VIEW_NEXT_TAB_PX);\n } else if (tabMeta.right > tabsMeta.right) {\n scroll(tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right) + VIEW_NEXT_TAB_PX);\n }\n };\n\n onMount(() => setMounted(true));\n\n // Re-measure when the active value changes (and on mount).\n createEffect(on(() => local.value, () => updateIndicatorState()));\n\n // Keep the indicator in sync with resize.\n onMount(() => {\n const onResize = debounce(() => updateIndicatorState(), 166);\n const view = tabsEl?.ownerDocument.defaultView;\n view?.addEventListener(\"resize\", onResize);\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\" && tabListEl) {\n resizeObserver = new ResizeObserver(onResize);\n Array.from(tabListEl.children).forEach((child) => resizeObserver?.observe(child));\n }\n onCleanup(() => {\n onResize.cancel();\n view?.removeEventListener(\"resize\", onResize);\n resizeObserver?.disconnect();\n });\n });\n\n // Scroll the selected tab into view when the indicator moves.\n createEffect(() => {\n indicatorStyle();\n scrollSelectedIntoView();\n });\n\n const contextValue: TabsContextValue = {\n value: () => local.value,\n onChange: local.onChange,\n indicatorContent: local.indicatorContent,\n registerTab: () => tabCounter++,\n setContentRef: (index, el) => {\n contentRefs[index] = el;\n },\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div {...rest} class={cn(\"smwb-tabs\", local.class)} role=\"tabpanel\" ref={mergeRefs(local.ref)}>\n <div\n class={cn(\"smwb-tabs__scroller\", { \"smwb-tabs__scroller--scrollable\": local.scrollable })}\n ref={(el) => (tabsEl = el)}\n >\n <div class=\"smwb-tabs__scroll-area\" ref={(el) => (tabListEl = el)} role=\"tablist\" aria-label={local[\"aria-label\"]}>\n {local.children}\n </div>\n <Show when={mounted()}>\n <span\n class=\"smwb-tabs__indicator\"\n style={{\n left: `${indicatorStyle().root.left ?? 0}px`,\n width: `${indicatorStyle().root.width ?? 0}px`,\n }}\n >\n <span\n class=\"smwb-tabs__indicator-content\"\n style={indicatorStyle().content ? { width: `${indicatorStyle().content?.width ?? 0}px` } : {}}\n />\n </span>\n </Show>\n </div>\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport { Tab };\nexport type { TabProps } from \"./tab/tab\";\nexport default Tabs;\n"],"mappings":"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","names":[],"file":"tabs.jsx"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smwb/ui-solid",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "SolidJS port of summer-ui: strict, tree-shakeable Material-style component library sharing the @smwb/ui-styles design system.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -37,9 +37,10 @@
|
|
|
37
37
|
"build:source:headless": "node scripts/build-source.mjs --headless",
|
|
38
38
|
"build:types": "tsc -p configs/ts/tsconfig.prod.json --emitDeclarationOnly --declaration --outDir dist",
|
|
39
39
|
"typecheck": "tsc -p configs/ts/tsconfig.full.json --noEmit",
|
|
40
|
-
"test": "npm run lint && npm run jest && npm run test:ssr",
|
|
40
|
+
"test": "npm run lint && npm run jest && npm run test:ssr && npm run test:hydration",
|
|
41
41
|
"jest": "vitest run",
|
|
42
42
|
"test:ssr": "npm run build:esm && npm run build:source && vitest run --config vitest.ssr.config.ts",
|
|
43
|
+
"test:hydration": "vitest run --config vitest.hydration.config.ts",
|
|
43
44
|
"test:watch": "vitest",
|
|
44
45
|
"test:storybook": "test-storybook --url http://127.0.0.1:6006",
|
|
45
46
|
"lint": "eslint . --max-warnings=0",
|
|
@@ -50,6 +51,7 @@
|
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
53
|
"@floating-ui/dom": "^1.7.0",
|
|
54
|
+
"@smwb/ui-styles": "^1.0.4",
|
|
53
55
|
"clsx": "^2.1.1",
|
|
54
56
|
"zod": "^4.4.3"
|
|
55
57
|
},
|
|
@@ -58,7 +60,7 @@
|
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|
|
60
62
|
"@eslint/js": "^9.39.0",
|
|
61
|
-
"@smwb/ui-styles": "^1.0.
|
|
63
|
+
"@smwb/ui-styles": "^1.0.4",
|
|
62
64
|
"@storybook/addon-docs": "^10.4.0",
|
|
63
65
|
"@storybook/addon-links": "^10.4.0",
|
|
64
66
|
"@storybook/test-runner": "^0.24.4",
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { isServer, renderToString } from "solid-js/web";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
import { createRequire } from "node:module";
|
|
5
|
-
import * as path from "node:path";
|
|
6
|
-
const require2 = createRequire(import.meta.url);
|
|
7
|
-
const pkg = JSON.parse(
|
|
8
|
-
readFileSync(require2.resolve("@smwb/ui-solid/package.json"), "utf8")
|
|
9
|
-
);
|
|
10
|
-
describe("ui-solid published exports", () => {
|
|
11
|
-
it("exposes a solid condition for the main entry", () => {
|
|
12
|
-
expect(pkg.exports["."].solid).toBe("./dist/source/index.js");
|
|
13
|
-
expect(pkg.exports["./headless"].solid).toBe("./dist/headless/source/index.js");
|
|
14
|
-
});
|
|
15
|
-
it("imports the DOM bundle animateHeight module on the server and throws", async () => {
|
|
16
|
-
const root = path.dirname(require2.resolve("@smwb/ui-solid/package.json"));
|
|
17
|
-
const domEntry = path.join(root, pkg.exports["."].import.replace(/^\.\//, ""));
|
|
18
|
-
const domAnimateHeight = path.join(
|
|
19
|
-
root,
|
|
20
|
-
"dist/components/base/animateHeight/animateHeight.jsx"
|
|
21
|
-
);
|
|
22
|
-
expect(() => readFileSync(domEntry, "utf8")).not.toThrow();
|
|
23
|
-
const domCode = readFileSync(domAnimateHeight, "utf8");
|
|
24
|
-
expect(domCode).not.toMatch(/return\s*</);
|
|
25
|
-
await expect(import(domAnimateHeight)).rejects.toThrow(/Client-only API called on the server side/);
|
|
26
|
-
});
|
|
27
|
-
it("renders AnimateHeight from the solid source entry on the server", async () => {
|
|
28
|
-
expect(isServer).toBe(true);
|
|
29
|
-
const { AnimateHeight } = await import("@smwb/ui-solid");
|
|
30
|
-
expect(
|
|
31
|
-
() => renderToString(() => <AnimateHeight height="auto">grow</AnimateHeight>)
|
|
32
|
-
).not.toThrow();
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=ssr-published.ssr-spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ssr-published.ssr-spec.tsx"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { isServer, renderToString } from \"solid-js/web\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = JSON.parse(\n readFileSync(require.resolve(\"@smwb/ui-solid/package.json\"), \"utf8\"),\n) as {\n exports: {\n \".\": { solid: string; import: string };\n \"./headless\": { solid: string; import: string };\n };\n};\n\ndescribe(\"ui-solid published exports\", () => {\n it(\"exposes a solid condition for the main entry\", () => {\n expect(pkg.exports[\".\"].solid).toBe(\"./dist/source/index.js\");\n expect(pkg.exports[\"./headless\"].solid).toBe(\"./dist/headless/source/index.js\");\n });\n\n it(\"imports the DOM bundle animateHeight module on the server and throws\", async () => {\n const root = path.dirname(require.resolve(\"@smwb/ui-solid/package.json\"));\n const domEntry = path.join(root, pkg.exports[\".\"].import.replace(/^\\.\\//, \"\"));\n const domAnimateHeight = path.join(\n root,\n \"dist/components/base/animateHeight/animateHeight.js\",\n );\n expect(() => readFileSync(domEntry, \"utf8\")).not.toThrow();\n const domCode = readFileSync(domAnimateHeight, \"utf8\");\n expect(domCode).not.toMatch(/return\\s*</);\n await expect(import(domAnimateHeight)).rejects.toThrow(/Client-only API called on the server side/);\n });\n\n it(\"renders AnimateHeight from the solid source entry on the server\", async () => {\n expect(isServer).toBe(true);\n const { AnimateHeight } = await import(\"@smwb/ui-solid\");\n expect(() =>\n renderToString(() => <AnimateHeight height=\"auto\">grow</AnimateHeight>),\n ).not.toThrow();\n });\n});\n"],"mappings":"AAAA,SAAS,UAAU,QAAQ,UAAU;AACrC,SAAS,UAAU,sBAAsB;AACzC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,YAAY,UAAU;AAEtB,MAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,MAAM,MAAM,KAAK;AAAA,EACf,aAAaA,SAAQ,QAAQ,6BAA6B,GAAG,MAAM;AACrE;AAOA,SAAS,8BAA8B,MAAM;AAC3C,KAAG,gDAAgD,MAAM;AACvD,WAAO,IAAI,QAAQ,GAAG,EAAE,KAAK,EAAE,KAAK,wBAAwB;AAC5D,WAAO,IAAI,QAAQ,YAAY,EAAE,KAAK,EAAE,KAAK,iCAAiC;AAAA,EAChF,CAAC;AAED,KAAG,wEAAwE,YAAY;AACrF,UAAM,OAAO,KAAK,QAAQA,SAAQ,QAAQ,6BAA6B,CAAC;AACxE,UAAM,WAAW,KAAK,KAAK,MAAM,IAAI,QAAQ,GAAG,EAAE,OAAO,QAAQ,SAAS,EAAE,CAAC;AAC7E,UAAM,mBAAmB,KAAK;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,aAAa,UAAU,MAAM,CAAC,EAAE,IAAI,QAAQ;AACzD,UAAM,UAAU,aAAa,kBAAkB,MAAM;AACrD,WAAO,OAAO,EAAE,IAAI,QAAQ,YAAY;AACxC,UAAM,OAAO,OAAO,iBAAiB,EAAE,QAAQ,QAAQ,2CAA2C;AAAA,EACpG,CAAC;AAED,KAAG,mEAAmE,YAAY;AAChF,WAAO,QAAQ,EAAE,KAAK,IAAI;AAC1B,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,gBAAgB;AACvD;AAAA,MAAO,MACL,eAAe,MAAM,CAAC,cAAc,OAAO,OAAO,IAAI,EAAhC,cAAgD;AAAA,IACxE,EAAE,IAAI,QAAQ;AAAA,EAChB,CAAC;AACH,CAAC;","names":["require"],"file":"ssr-published.ssr-spec.jsx"}
|