@studiocubics/components 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/Cards/Card/Card.js +1 -44
- package/dist/Cards/Card/Card.js.map +1 -1
- package/dist/Cards/Card/Card.module.css.js +1 -3
- package/dist/Cards/Card/Card.module.css.js.map +1 -1
- package/dist/Cards/CollectionItemCard/CollectionItemCard.js +1 -47
- package/dist/Cards/CollectionItemCard/CollectionItemCard.js.map +1 -1
- package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js +1 -3
- package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js.map +1 -1
- package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js +1 -33
- package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js.map +1 -1
- package/dist/Cards/GlassCard/GlassCard.js +1 -51
- package/dist/Cards/GlassCard/GlassCard.js.map +1 -1
- package/dist/Cards/GlassCard/GlassCard.module.css.js +1 -3
- package/dist/Cards/GlassCard/GlassCard.module.css.js.map +1 -1
- package/dist/Display/Accordion/Accordion.js +1 -27
- package/dist/Display/Accordion/Accordion.js.map +1 -1
- package/dist/Display/Accordion/Accordion.module.css.js +1 -3
- package/dist/Display/Accordion/Accordion.module.css.js.map +1 -1
- package/dist/Display/Accordion/AccordionItem.js +1 -55
- package/dist/Display/Accordion/AccordionItem.js.map +1 -1
- package/dist/Display/Chip/Chip.js +1 -42
- package/dist/Display/Chip/Chip.js.map +1 -1
- package/dist/Display/Chip/Chip.module.css.js +1 -3
- package/dist/Display/Chip/Chip.module.css.js.map +1 -1
- package/dist/Display/IdentityDisplay/IdentityDisplay.js +1 -35
- package/dist/Display/IdentityDisplay/IdentityDisplay.js.map +1 -1
- package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js +1 -3
- package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js.map +1 -1
- package/dist/Display/InputErrors/InputErrors.js +1 -24
- package/dist/Display/InputErrors/InputErrors.js.map +1 -1
- package/dist/Display/InputErrors/InputErrors.module.css.js +1 -3
- package/dist/Display/InputErrors/InputErrors.module.css.js.map +1 -1
- package/dist/Display/Kbd/Kbd.js +1 -18
- package/dist/Display/Kbd/Kbd.js.map +1 -1
- package/dist/Display/Kbd/Kbd.module.css.js +1 -3
- package/dist/Display/Kbd/Kbd.module.css.js.map +1 -1
- package/dist/Display/Kbd/buttonList.js +1 -197
- package/dist/Display/Kbd/buttonList.js.map +1 -1
- package/dist/Display/LabeledValue/LabeledValue.js +1 -10
- package/dist/Display/LabeledValue/LabeledValue.js.map +1 -1
- package/dist/Display/LabeledValue/LabeledValue.module.css.js +1 -3
- package/dist/Display/LabeledValue/LabeledValue.module.css.js.map +1 -1
- package/dist/Display/List/List.js +1 -95
- package/dist/Display/List/List.js.map +1 -1
- package/dist/Display/List/List.module.css.js +1 -3
- package/dist/Display/List/List.module.css.js.map +1 -1
- package/dist/Display/PasswordStrength/PasswordStrength.js +1 -16
- package/dist/Display/PasswordStrength/PasswordStrength.js.map +1 -1
- package/dist/Display/PasswordStrength/PasswordStrength.module.css.js +1 -3
- package/dist/Display/PasswordStrength/PasswordStrength.module.css.js.map +1 -1
- package/dist/Display/PasswordStrength/usePasswordStrength.js +1 -48
- package/dist/Display/PasswordStrength/usePasswordStrength.js.map +1 -1
- package/dist/Display/Skeleton/Skeleton.js +1 -10
- package/dist/Display/Skeleton/Skeleton.js.map +1 -1
- package/dist/Display/Skeleton/Skeleton.module.css.js +1 -3
- package/dist/Display/Skeleton/Skeleton.module.css.js.map +1 -1
- package/dist/Display/Toast/Toaster.js +1 -44
- package/dist/Display/Toast/Toaster.js.map +1 -1
- package/dist/Display/Toast/toast.js +1 -31
- package/dist/Display/Toast/toast.js.map +1 -1
- package/dist/Display/Tooltip/Tooltip.js +1 -44
- package/dist/Display/Tooltip/Tooltip.js.map +1 -1
- package/dist/Display/Tooltip/Tooltip.module.css.js +1 -3
- package/dist/Display/Tooltip/Tooltip.module.css.js.map +1 -1
- package/dist/Display/Tooltip/getArrowDirection.js +1 -47
- package/dist/Display/Tooltip/getArrowDirection.js.map +1 -1
- package/dist/Display/Tooltip/useTooltip.js +1 -47
- package/dist/Display/Tooltip/useTooltip.js.map +1 -1
- package/dist/Display/WIP/WIP.d.ts +5 -0
- package/dist/Forms/ConfirmationForm/ConfirmationForm.js +1 -11
- package/dist/Forms/ConfirmationForm/ConfirmationForm.js.map +1 -1
- package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js +1 -3
- package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js.map +1 -1
- package/dist/Inputs/Button/Button.js +1 -55
- package/dist/Inputs/Button/Button.js.map +1 -1
- package/dist/Inputs/Button/Button.module.css.js +1 -3
- package/dist/Inputs/Button/Button.module.css.js.map +1 -1
- package/dist/Inputs/Checkbox/Checkbox.js +1 -54
- package/dist/Inputs/Checkbox/Checkbox.js.map +1 -1
- package/dist/Inputs/Checkbox/Checkbox.module.css.js +1 -3
- package/dist/Inputs/Checkbox/Checkbox.module.css.js.map +1 -1
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js +1 -34
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js.map +1 -1
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js +1 -3
- package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js.map +1 -1
- package/dist/Inputs/Checkbox/CheckboxSelectAll.js +1 -18
- package/dist/Inputs/Checkbox/CheckboxSelectAll.js.map +1 -1
- package/dist/Inputs/PasswordInput/PasswordInput.js +1 -44
- package/dist/Inputs/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/Inputs/PasswordInput/PasswordInput.module.css.js +1 -3
- package/dist/Inputs/PasswordInput/PasswordInput.module.css.js.map +1 -1
- package/dist/Inputs/Select/Select.js +1 -25
- package/dist/Inputs/Select/Select.js.map +1 -1
- package/dist/Inputs/Select/Select.module.css.js +1 -3
- package/dist/Inputs/Select/Select.module.css.js.map +1 -1
- package/dist/Inputs/Switch/Switch.js +1 -80
- package/dist/Inputs/Switch/Switch.js.map +1 -1
- package/dist/Inputs/Switch/Switch.module.css.js +1 -3
- package/dist/Inputs/Switch/Switch.module.css.js.map +1 -1
- package/dist/Inputs/TextAreaInput/TextAreaInput.js +1 -29
- package/dist/Inputs/TextAreaInput/TextAreaInput.js.map +1 -1
- package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js +1 -3
- package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js.map +1 -1
- package/dist/Inputs/TextInput/TextInput.js +1 -22
- package/dist/Inputs/TextInput/TextInput.js.map +1 -1
- package/dist/Inputs/TextInput/TextInput.module.css.js +1 -3
- package/dist/Inputs/TextInput/TextInput.module.css.js.map +1 -1
- package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js +1 -30
- package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js.map +1 -1
- package/dist/Layout/Dialog/Dialog.js +1 -74
- package/dist/Layout/Dialog/Dialog.js.map +1 -1
- package/dist/Layout/Dialog/Dialog.module.css.js +1 -3
- package/dist/Layout/Dialog/Dialog.module.css.js.map +1 -1
- package/dist/Layout/Drawer/Drawer.d.ts +1 -1
- package/dist/Layout/Drawer/Drawer.js +1 -38
- package/dist/Layout/Drawer/Drawer.js.map +1 -1
- package/dist/Layout/Drawer/Drawer.module.css.js +1 -3
- package/dist/Layout/Drawer/Drawer.module.css.js.map +1 -1
- package/dist/Layout/PageLayout/PageLayout.js +1 -24
- package/dist/Layout/PageLayout/PageLayout.js.map +1 -1
- package/dist/Layout/PageLayout/PageLayout.module.css.js +1 -3
- package/dist/Layout/PageLayout/PageLayout.module.css.js.map +1 -1
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js +1 -12
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js.map +1 -1
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js +1 -3
- package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js.map +1 -1
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js +1 -21
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js.map +1 -1
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js +1 -3
- package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js.map +1 -1
- package/dist/Layout/Popover/Popover.js +1 -102
- package/dist/Layout/Popover/Popover.js.map +1 -1
- package/dist/Layout/Popover/Popover.module.css.js +1 -3
- package/dist/Layout/Popover/Popover.module.css.js.map +1 -1
- package/dist/Layout/SectionWrapper/SectionWrapper.js +1 -10
- package/dist/Layout/SectionWrapper/SectionWrapper.js.map +1 -1
- package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js +1 -3
- package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js.map +1 -1
- package/dist/Layout/Sidebar/Sidebar.js +1 -24
- package/dist/Layout/Sidebar/Sidebar.js.map +1 -1
- package/dist/Layout/Sidebar/Sidebar.module.css.js +1 -3
- package/dist/Layout/Sidebar/Sidebar.module.css.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js +1 -13
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js +1 -3
- package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js +1 -13
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js +1 -3
- package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js +1 -13
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js +1 -3
- package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js +1 -11
- package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js +1 -10
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js.map +1 -1
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js +1 -3
- package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js.map +1 -1
- package/dist/Layout/Table/Table.js +1 -130
- package/dist/Layout/Table/Table.js.map +1 -1
- package/dist/Layout/Table/Table.module.css.js +1 -3
- package/dist/Layout/Table/Table.module.css.js.map +1 -1
- package/dist/Layout/Table/TableFooter.js +1 -8
- package/dist/Layout/Table/TableFooter.js.map +1 -1
- package/dist/Layout/Table/TableHeader.js +1 -8
- package/dist/Layout/Table/TableHeader.js.map +1 -1
- package/dist/Layout/Table/tableUtils.js +1 -123
- package/dist/Layout/Table/tableUtils.js.map +1 -1
- package/dist/Misc/Cursor/Cursor.js +1 -58
- package/dist/Misc/Cursor/Cursor.js.map +1 -1
- package/dist/Misc/Cursor/Cursor.module.css.js +1 -3
- package/dist/Misc/Cursor/Cursor.module.css.js.map +1 -1
- package/dist/Misc/Logos.js +1 -28
- package/dist/Misc/Logos.js.map +1 -1
- package/dist/Misc/PoweredByBanner/PoweredByBanner.js +1 -11
- package/dist/Misc/PoweredByBanner/PoweredByBanner.js.map +1 -1
- package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js +1 -3
- package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js.map +1 -1
- package/dist/Misc/Ripple/Ripple.js +1 -61
- package/dist/Misc/Ripple/Ripple.js.map +1 -1
- package/dist/Misc/Ripple/Ripple.module.css.js +1 -3
- package/dist/Misc/Ripple/Ripple.module.css.js.map +1 -1
- package/dist/Misc/Spinner/Spinner.js +1 -11
- package/dist/Misc/Spinner/Spinner.js.map +1 -1
- package/dist/Misc/Spinner/Spinner.module.css.js +1 -3
- package/dist/Misc/Spinner/Spinner.module.css.js.map +1 -1
- package/dist/Misc/TransitionAnimation/TransitionAnimation.js +1 -86
- package/dist/Misc/TransitionAnimation/TransitionAnimation.js.map +1 -1
- package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js +1 -3
- package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js.map +1 -1
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.js +1 -35
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js +1 -3
- package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js.map +1 -1
- package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js +1 -14
- package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js.map +1 -1
- package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js +1 -43
- package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js.map +1 -1
- package/dist/Navigation/Pagination/Pagination.js +1 -60
- package/dist/Navigation/Pagination/Pagination.js.map +1 -1
- package/dist/Navigation/Pagination/Pagination.module.css.js +1 -3
- package/dist/Navigation/Pagination/Pagination.module.css.js.map +1 -1
- package/dist/Navigation/Pagination/PaginationItem.js +1 -13
- package/dist/Navigation/Pagination/PaginationItem.js.map +1 -1
- package/dist/Navigation/Pagination/usePagination.js +1 -37
- package/dist/Navigation/Pagination/usePagination.js.map +1 -1
- package/dist/Navigation/Tabs/Tab/Tab.js +1 -69
- package/dist/Navigation/Tabs/Tab/Tab.js.map +1 -1
- package/dist/Navigation/Tabs/Tab/Tab.module.css.js +1 -3
- package/dist/Navigation/Tabs/Tab/Tab.module.css.js.map +1 -1
- package/dist/Navigation/Tabs/Tabs.js +1 -21
- package/dist/Navigation/Tabs/Tabs.js.map +1 -1
- package/dist/Navigation/Tabs/TabsBar/TabsBar.d.ts +5 -2
- package/dist/Navigation/Tabs/TabsBar/TabsBar.js +1 -43
- package/dist/Navigation/Tabs/TabsBar/TabsBar.js.map +1 -1
- package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js +1 -3
- package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js.map +1 -1
- package/dist/Typography/ClampedText/ClampedText.js +1 -43
- package/dist/Typography/ClampedText/ClampedText.js.map +1 -1
- package/dist/Typography/ClampedText/ClampedText.module.css.js +1 -3
- package/dist/Typography/ClampedText/ClampedText.module.css.js.map +1 -1
- package/dist/Typography/CopyableText/CopyableText.js +1 -38
- package/dist/Typography/CopyableText/CopyableText.js.map +1 -1
- package/dist/Typography/CopyableText/CopyableText.module.css.js +1 -3
- package/dist/Typography/CopyableText/CopyableText.module.css.js.map +1 -1
- package/dist/Typography/PageTitle/PageTitle.js +1 -9
- package/dist/Typography/PageTitle/PageTitle.js.map +1 -1
- package/dist/Typography/PageTitle/PageTitle.module.css.js +1 -3
- package/dist/Typography/PageTitle/PageTitle.module.css.js.map +1 -1
- package/dist/index.css +1 -2398
- package/dist/index.js +1 -64
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
- package/rollup.config.js +0 -34
|
@@ -1,36 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
import { useState, Fragment } from 'react';
|
|
4
|
-
import { useBreadcrumbs } from './useBreadcrumbs.js';
|
|
5
|
-
import { BreadcrumbsItem } from './BreadcrumbsItem.js';
|
|
6
|
-
import { cn } from '@studiocubics/utils';
|
|
7
|
-
import styles from './Breadcrumbs.module.css.js';
|
|
8
|
-
|
|
9
|
-
const ChevronRightIcon = (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-chevron-right-icon lucide-chevron-right", children: jsx("path", { d: "m9 18 6-6-6-6" }) }));
|
|
10
|
-
const EllipsisIcon = (jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-ellipsis-icon lucide-ellipsis", children: [jsx("circle", { cx: "12", cy: "12", r: "1" }), jsx("circle", { cx: "19", cy: "12", r: "1" }), jsx("circle", { cx: "5", cy: "12", r: "1" })] }));
|
|
11
|
-
function Breadcrumbs(props) {
|
|
12
|
-
const { onChange, boundaryCount = 1, siblingCount = 0, children, defaultActive = 0, separator = ChevronRightIcon, ellipsis = EllipsisIcon, renderItem = (props, key) => jsx(BreadcrumbsItem, { ...props }, key), } = props;
|
|
13
|
-
const [activeCrumb, setActiveCrumb] = useState(defaultActive);
|
|
14
|
-
const breadcrumbRange = useBreadcrumbs({
|
|
15
|
-
activeCrumb,
|
|
16
|
-
crumbs: children,
|
|
17
|
-
boundaryCount,
|
|
18
|
-
siblingCount,
|
|
19
|
-
});
|
|
20
|
-
function handleClick(i) {
|
|
21
|
-
setActiveCrumb(i);
|
|
22
|
-
if (onChange)
|
|
23
|
-
onChange(i);
|
|
24
|
-
}
|
|
25
|
-
return (jsx("span", { className: styles.root, children: breadcrumbRange.map((item, idx) => (jsxs(Fragment, { children: [renderItem({
|
|
26
|
-
className: cn(styles.item, activeCrumb === idx ? styles.activeItem : "", item == "ellipsis" ? styles.ellipsis : ""),
|
|
27
|
-
onClick: () => handleClick(idx),
|
|
28
|
-
children: item == "ellipsis" ? ellipsis : item,
|
|
29
|
-
}), idx !== breadcrumbRange.length - 1 &&
|
|
30
|
-
item !== "ellipsis" &&
|
|
31
|
-
breadcrumbRange[idx + 1] != "ellipsis" &&
|
|
32
|
-
separator] }, idx))) }));
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export { Breadcrumbs, ChevronRightIcon, EllipsisIcon };
|
|
1
|
+
"use client";import{jsx as e,jsxs as i}from"react/jsx-runtime";import{useState as r,Fragment as s}from"react";import{useBreadcrumbs as o}from"./useBreadcrumbs.js";import{BreadcrumbsItem as t}from"./BreadcrumbsItem.js";import{cn as c}from"@studiocubics/utils";import l from"./Breadcrumbs.module.css.js";const n=e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"lucide lucide-chevron-right-icon lucide-chevron-right",children:e("path",{d:"m9 18 6-6-6-6"})}),u=i("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"lucide lucide-ellipsis-icon lucide-ellipsis",children:[e("circle",{cx:"12",cy:"12",r:"1"}),e("circle",{cx:"19",cy:"12",r:"1"}),e("circle",{cx:"5",cy:"12",r:"1"})]});function d(d){const{onChange:m,boundaryCount:a=1,siblingCount:h=0,children:p,defaultActive:g=0,separator:v=n,ellipsis:w=u,renderItem:b=(i,r)=>e(t,{...i},r)}=d,[f,k]=r(g),x=o({activeCrumb:f,crumbs:p,boundaryCount:a,siblingCount:h});return e("span",{className:l.root,children:x.map((e,r)=>i(s,{children:[b({className:c(l.item,f===r?l.activeItem:"","ellipsis"==e?l.ellipsis:""),onClick:()=>{return k(e=r),void(m&&m(e));var e},children:"ellipsis"==e?w:e}),r!==x.length-1&&"ellipsis"!==e&&"ellipsis"!=x[r+1]&&v]},r))})}export{d as Breadcrumbs,n as ChevronRightIcon,u as EllipsisIcon};
|
|
36
2
|
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.js","sources":["../../../src/Navigation/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fragment, type ReactElement, type ReactNode, useState } from \"react\";\nimport { useBreadcrumbs } from \"./useBreadcrumbs\";\nimport { BreadcrumbsItem, type BreadcrumbsItemProps } from \"./BreadcrumbsItem\";\nimport { cn } from \"@studiocubics/utils\";\nimport styles from \"./Breadcrumbs.module.css\";\n\nexport interface BreadCrumbsProps {\n children: ReactElement[];\n /**\n * For controlled Breadcrumbs pass the onChange function\n */\n onChange?: (pageNumber: number) => void;\n /**\n * How many siblings of the active item should be shown\n * @default 1\n */\n siblingCount?: number;\n /**\n * How many of the boundary items should be shown\n * @default 0\n */\n boundaryCount?: number;\n /**\n * Crumb that will be selected by default\n * @default 1\n */\n defaultActive?: number;\n /**\n * Node to use as separator\n */\n separator?: ReactNode;\n /**\n * Node to use as ellipsis\n */\n ellipsis?: ReactNode;\n /**\n * Function that can be used to modify the rendered BreadcrumbsItem component\n */\n renderItem?: (\n props: BreadcrumbsItemProps,\n key?: string | number,\n ) => ReactElement;\n}\n\nexport const ChevronRightIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-right-icon lucide-chevron-right\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\nexport const EllipsisIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-ellipsis-icon lucide-ellipsis\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n);\nexport function Breadcrumbs(props: BreadCrumbsProps) {\n const {\n onChange,\n boundaryCount = 1,\n siblingCount = 0,\n children,\n defaultActive = 0,\n separator = ChevronRightIcon,\n ellipsis = EllipsisIcon,\n renderItem = (props, key?) => <BreadcrumbsItem key={key} {...props} />,\n } = props;\n const [activeCrumb, setActiveCrumb] = useState<number>(defaultActive);\n\n const breadcrumbRange = useBreadcrumbs({\n activeCrumb,\n crumbs: children,\n boundaryCount,\n siblingCount,\n });\n\n function handleClick(i: number) {\n setActiveCrumb(i);\n if (onChange) onChange(i);\n }\n\n return (\n <span className={styles.root}>\n {breadcrumbRange.map((item, idx) => (\n <Fragment key={idx}>\n {renderItem({\n className: cn(\n styles.item,\n activeCrumb === idx ? styles.activeItem : \"\",\n item == \"ellipsis\" ? styles.ellipsis : \"\",\n ),\n onClick: () => handleClick(idx),\n children: item == \"ellipsis\" ? ellipsis : item,\n })}\n {idx !== breadcrumbRange.length - 1 &&\n item !== \"ellipsis\" &&\n breadcrumbRange[idx + 1] != \"ellipsis\" &&\n separator}\n </Fragment>\n ))}\n </span>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","sources":["../../../src/Navigation/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Fragment, type ReactElement, type ReactNode, useState } from \"react\";\nimport { useBreadcrumbs } from \"./useBreadcrumbs\";\nimport { BreadcrumbsItem, type BreadcrumbsItemProps } from \"./BreadcrumbsItem\";\nimport { cn } from \"@studiocubics/utils\";\nimport styles from \"./Breadcrumbs.module.css\";\n\nexport interface BreadCrumbsProps {\n children: ReactElement[];\n /**\n * For controlled Breadcrumbs pass the onChange function\n */\n onChange?: (pageNumber: number) => void;\n /**\n * How many siblings of the active item should be shown\n * @default 1\n */\n siblingCount?: number;\n /**\n * How many of the boundary items should be shown\n * @default 0\n */\n boundaryCount?: number;\n /**\n * Crumb that will be selected by default\n * @default 1\n */\n defaultActive?: number;\n /**\n * Node to use as separator\n */\n separator?: ReactNode;\n /**\n * Node to use as ellipsis\n */\n ellipsis?: ReactNode;\n /**\n * Function that can be used to modify the rendered BreadcrumbsItem component\n */\n renderItem?: (\n props: BreadcrumbsItemProps,\n key?: string | number,\n ) => ReactElement;\n}\n\nexport const ChevronRightIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-right-icon lucide-chevron-right\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\nexport const EllipsisIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-ellipsis-icon lucide-ellipsis\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n);\nexport function Breadcrumbs(props: BreadCrumbsProps) {\n const {\n onChange,\n boundaryCount = 1,\n siblingCount = 0,\n children,\n defaultActive = 0,\n separator = ChevronRightIcon,\n ellipsis = EllipsisIcon,\n renderItem = (props, key?) => <BreadcrumbsItem key={key} {...props} />,\n } = props;\n const [activeCrumb, setActiveCrumb] = useState<number>(defaultActive);\n\n const breadcrumbRange = useBreadcrumbs({\n activeCrumb,\n crumbs: children,\n boundaryCount,\n siblingCount,\n });\n\n function handleClick(i: number) {\n setActiveCrumb(i);\n if (onChange) onChange(i);\n }\n\n return (\n <span className={styles.root}>\n {breadcrumbRange.map((item, idx) => (\n <Fragment key={idx}>\n {renderItem({\n className: cn(\n styles.item,\n activeCrumb === idx ? styles.activeItem : \"\",\n item == \"ellipsis\" ? styles.ellipsis : \"\",\n ),\n onClick: () => handleClick(idx),\n children: item == \"ellipsis\" ? ellipsis : item,\n })}\n {idx !== breadcrumbRange.length - 1 &&\n item !== \"ellipsis\" &&\n breadcrumbRange[idx + 1] != \"ellipsis\" &&\n separator}\n </Fragment>\n ))}\n </span>\n );\n}\n"],"names":["ChevronRightIcon","_jsx","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","className","children","d","EllipsisIcon","_jsxs","cx","cy","r","Breadcrumbs","props","onChange","boundaryCount","siblingCount","defaultActive","separator","ellipsis","renderItem","key","BreadcrumbsItem","activeCrumb","setActiveCrumb","useState","breadcrumbRange","useBreadcrumbs","crumbs","styles","root","map","item","idx","Fragment","cn","activeItem","onClick","handleClick","i","length"],"mappings":"8SA8CO,MAAMA,EACXC,SACEC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,IACZC,cAAc,QACdC,eAAe,QACfC,UAAU,wDAAuDC,SAEjEX,EAAA,OAAA,CAAMY,EAAE,oBAGCC,EACXC,EAAA,MAAA,CACEb,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,IACZC,cAAc,QACdC,eAAe,QACfC,UAAU,8CAA6CC,SAAA,CAEvDX,YAAQe,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BjB,EAAA,SAAA,CAAQe,GAAG,KAAKC,GAAG,KAAKC,EAAE,MAC1BjB,EAAA,SAAA,CAAQe,GAAG,IAAIC,GAAG,KAAKC,EAAE,SAGvB,SAAUC,EAAYC,GAC1B,MAAMC,SACJA,EAAQC,cACRA,EAAgB,EAACC,aACjBA,EAAe,EAACX,SAChBA,EAAQY,cACRA,EAAgB,EAACC,UACjBA,EAAYzB,EAAgB0B,SAC5BA,EAAWZ,EAAYa,WACvBA,EAAa,CAACP,EAAOQ,IAAS3B,EAAC4B,EAAe,IAAeT,GAATQ,IAClDR,GACGU,EAAaC,GAAkBC,EAAiBR,GAEjDS,EAAkBC,EAAe,CACrCJ,cACAK,OAAQvB,EACRU,gBACAC,iBAQF,OACEtB,EAAA,OAAA,CAAMU,UAAWyB,EAAOC,KAAIzB,SACzBqB,EAAgBK,IAAI,CAACC,EAAMC,IAC1BzB,EAAC0B,EAAQ,CAAA7B,SAAA,CACNe,EAAW,CACVhB,UAAW+B,EACTN,EAAOG,KACPT,IAAgBU,EAAMJ,EAAOO,WAAa,GAClC,YAARJ,EAAqBH,EAAOV,SAAW,IAEzCkB,QAAS,KAAMC,OAdvBd,EADmBe,EAegBN,QAb/BnB,GAAUA,EAASyB,IAFzB,IAAqBA,GAgBXlC,SAAkB,YAAR2B,EAAqBb,EAAWa,IAE3CC,IAAQP,EAAgBc,OAAS,GACvB,aAATR,GAC4B,YAA5BN,EAAgBO,EAAM,IACtBf,IAbWe,KAkBvB"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
export { styles as default };
|
|
1
|
+
var e={root:"Breadcrumbs-module_root__KmBxB",item:"Breadcrumbs-module_item__G3HWH",activeItem:"Breadcrumbs-module_activeItem__-C8yn"};export{e as default};
|
|
4
2
|
//# sourceMappingURL=Breadcrumbs.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import 'react';
|
|
4
|
-
|
|
5
|
-
const defaultElement = "span";
|
|
6
|
-
const BreadcrumbsItemBase = (props) => {
|
|
7
|
-
const { as, children, ...rest } = props;
|
|
8
|
-
const Component = (as || defaultElement);
|
|
9
|
-
return jsx(Component, { ...rest, children: children });
|
|
10
|
-
};
|
|
11
|
-
BreadcrumbsItemBase.displayName = "BreadcrumbsItem";
|
|
12
|
-
const BreadcrumbsItem = BreadcrumbsItemBase;
|
|
13
|
-
|
|
14
|
-
export { BreadcrumbsItem };
|
|
1
|
+
"use client";import{jsx as r}from"react/jsx-runtime";import"react";const e=e=>{const{as:t,children:c,...n}=e;return r(t||"span",{...n,children:c})};e.displayName="BreadcrumbsItem";const t=e;export{t as BreadcrumbsItem};
|
|
15
2
|
//# sourceMappingURL=BreadcrumbsItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbsItem.js","sources":["../../../src/Navigation/Breadcrumbs/BreadcrumbsItem.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { type ElementType } from \"react\";\n\ninterface BreadcrumbsItemBaseProps {\n href?: \"string\";\n}\n\nconst defaultElement = \"span\";\ntype DefaultElement = typeof defaultElement;\n\nexport type BreadcrumbsItemProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, BreadcrumbsItemBaseProps>;\n\nconst BreadcrumbsItemBase = <C extends ElementType = DefaultElement>(\n props: BreadcrumbsItemProps<C>\n) => {\n const { as, children, ...rest } = props;\n const Component = (as || defaultElement) as ElementType;\n return <Component {...rest}>{children}</Component>;\n};\n\nBreadcrumbsItemBase.displayName = \"BreadcrumbsItem\";\nexport const BreadcrumbsItem = BreadcrumbsItemBase as PolymorphicComponentType<\n BreadcrumbsItemBaseProps,\n DefaultElement\n>;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"BreadcrumbsItem.js","sources":["../../../src/Navigation/Breadcrumbs/BreadcrumbsItem.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { type ElementType } from \"react\";\n\ninterface BreadcrumbsItemBaseProps {\n href?: \"string\";\n}\n\nconst defaultElement = \"span\";\ntype DefaultElement = typeof defaultElement;\n\nexport type BreadcrumbsItemProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, BreadcrumbsItemBaseProps>;\n\nconst BreadcrumbsItemBase = <C extends ElementType = DefaultElement>(\n props: BreadcrumbsItemProps<C>\n) => {\n const { as, children, ...rest } = props;\n const Component = (as || defaultElement) as ElementType;\n return <Component {...rest}>{children}</Component>;\n};\n\nBreadcrumbsItemBase.displayName = \"BreadcrumbsItem\";\nexport const BreadcrumbsItem = BreadcrumbsItemBase as PolymorphicComponentType<\n BreadcrumbsItemBaseProps,\n DefaultElement\n>;\n"],"names":["BreadcrumbsItemBase","props","as","children","rest","_jsx","displayName","BreadcrumbsItem"],"mappings":"mEAYA,MAMMA,EACJC,IAEA,MAAMC,GAAEA,EAAEC,SAAEA,KAAaC,GAASH,EAElC,OAAOI,EADYH,GAVE,OAWJ,IAAKE,EAAID,SAAGA,KAG/BH,EAAoBM,YAAc,kBAC3B,MAAMC,EAAkBP"}
|
|
@@ -1,44 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
const crumbsClone = Array.from(crumbs);
|
|
3
|
-
const count = crumbs.length;
|
|
4
|
-
if (count <= boundaryCount * 2 + siblingCount * 2 + 2) {
|
|
5
|
-
// If total items fit without ellipsis, just return all crumbs
|
|
6
|
-
return crumbsClone;
|
|
7
|
-
}
|
|
8
|
-
const resolvedBoundaryCount = Math.min(boundaryCount, count);
|
|
9
|
-
console.log("crumbs", crumbsClone);
|
|
10
|
-
const startPages = crumbsClone.slice(0, resolvedBoundaryCount + 1);
|
|
11
|
-
const endPages = crumbsClone.slice(count - 1 - resolvedBoundaryCount, crumbsClone.length);
|
|
12
|
-
const siblingsStart = Math.max(Math.min(activeCrumb - siblingCount, count - boundaryCount - siblingCount * 2 - 1), boundaryCount + 2);
|
|
13
|
-
const siblingsEnd = Math.min(Math.max(activeCrumb + siblingCount, boundaryCount + siblingCount * 2 + 2), endPages.length > 0 ? count - 1 - endPages.length : count - 1);
|
|
14
|
-
console.log("siblingsStart", siblingsStart);
|
|
15
|
-
console.log("siblingsEnd", siblingsEnd);
|
|
16
|
-
const itemList = [];
|
|
17
|
-
// Start pages
|
|
18
|
-
itemList.push(...startPages);
|
|
19
|
-
// Ellipsis after start pages
|
|
20
|
-
if (siblingsStart > boundaryCount + 2) {
|
|
21
|
-
itemList.push("ellipsis");
|
|
22
|
-
}
|
|
23
|
-
else if (boundaryCount + 1 < count - boundaryCount) {
|
|
24
|
-
itemList.push(crumbs[boundaryCount + 1]);
|
|
25
|
-
}
|
|
26
|
-
// Middle pages
|
|
27
|
-
for (let i = siblingsStart; i <= siblingsEnd; i++) {
|
|
28
|
-
itemList.push(crumbs[i]);
|
|
29
|
-
}
|
|
30
|
-
// Ellipsis before end pages
|
|
31
|
-
if (siblingsEnd < count - 1 - boundaryCount) {
|
|
32
|
-
itemList.push("ellipsis");
|
|
33
|
-
}
|
|
34
|
-
else if (count - boundaryCount > boundaryCount) {
|
|
35
|
-
itemList.push(crumbs[count - boundaryCount]);
|
|
36
|
-
}
|
|
37
|
-
const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));
|
|
38
|
-
console.log("endPagesFiltered", endPagesFiltered);
|
|
39
|
-
itemList.push(...endPagesFiltered);
|
|
40
|
-
return itemList;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export { useBreadcrumbs };
|
|
1
|
+
function s({activeCrumb:s,crumbs:n,siblingCount:t=0,boundaryCount:l=1}){const o=Array.from(n),e=n.length;if(e<=2*l+2*t+2)return o;const i=Math.min(l,e);console.log("crumbs",o);const u=o.slice(0,i+1),c=o.slice(e-1-i,o.length),h=Math.max(Math.min(s-t,e-l-2*t-1),l+2),r=Math.min(Math.max(s+t,l+2*t+2),c.length>0?e-1-c.length:e-1);console.log("siblingsStart",h),console.log("siblingsEnd",r);const a=[];a.push(...u),h>l+2?a.push("ellipsis"):l+1<e-l&&a.push(n[l+1]);for(let s=h;s<=r;s++)a.push(n[s]);r<e-1-l?a.push("ellipsis"):e-l>l&&a.push(n[e-l]);const g=c.filter(s=>!a.includes(s));return console.log("endPagesFiltered",g),a.push(...g),a}export{s as useBreadcrumbs};
|
|
44
2
|
//# sourceMappingURL=useBreadcrumbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBreadcrumbs.js","sources":["../../../src/Navigation/Breadcrumbs/useBreadcrumbs.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nexport function useBreadcrumbs({\n activeCrumb,\n crumbs,\n siblingCount = 0,\n boundaryCount = 1,\n}: {\n activeCrumb: number;\n crumbs: ReactElement[];\n siblingCount?: number;\n boundaryCount?: number;\n}) {\n const crumbsClone = Array.from(crumbs);\n const count = crumbs.length;\n if (count <= boundaryCount * 2 + siblingCount * 2 + 2) {\n // If total items fit without ellipsis, just return all crumbs\n return crumbsClone;\n }\n const resolvedBoundaryCount = Math.min(boundaryCount, count);\n\n console.log(\"crumbs\", crumbsClone);\n\n const startPages = crumbsClone.slice(0, resolvedBoundaryCount + 1);\n const endPages = crumbsClone.slice(\n count - 1 - resolvedBoundaryCount,\n crumbsClone.length,\n );\n\n const siblingsStart = Math.max(\n Math.min(\n activeCrumb - siblingCount,\n count - boundaryCount - siblingCount * 2 - 1,\n ),\n boundaryCount + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(activeCrumb + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? count - 1 - endPages.length : count - 1,\n );\n\n console.log(\"siblingsStart\", siblingsStart);\n console.log(\"siblingsEnd\", siblingsEnd);\n\n const itemList: (ReactElement | \"ellipsis\")[] = [];\n\n // Start pages\n itemList.push(...startPages);\n\n // Ellipsis after start pages\n if (siblingsStart > boundaryCount + 2) {\n itemList.push(\"ellipsis\");\n } else if (boundaryCount + 1 < count - boundaryCount) {\n itemList.push(crumbs[boundaryCount + 1]);\n }\n // Middle pages\n for (let i = siblingsStart; i <= siblingsEnd; i++) {\n itemList.push(crumbs[i]);\n }\n\n // Ellipsis before end pages\n if (siblingsEnd < count - 1 - boundaryCount) {\n itemList.push(\"ellipsis\");\n } else if (count - boundaryCount > boundaryCount) {\n itemList.push(crumbs[count - boundaryCount]);\n }\n\n const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));\n console.log(\"endPagesFiltered\", endPagesFiltered);\n\n itemList.push(...endPagesFiltered);\n\n return itemList;\n}\n"],"names":[
|
|
1
|
+
{"version":3,"file":"useBreadcrumbs.js","sources":["../../../src/Navigation/Breadcrumbs/useBreadcrumbs.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nexport function useBreadcrumbs({\n activeCrumb,\n crumbs,\n siblingCount = 0,\n boundaryCount = 1,\n}: {\n activeCrumb: number;\n crumbs: ReactElement[];\n siblingCount?: number;\n boundaryCount?: number;\n}) {\n const crumbsClone = Array.from(crumbs);\n const count = crumbs.length;\n if (count <= boundaryCount * 2 + siblingCount * 2 + 2) {\n // If total items fit without ellipsis, just return all crumbs\n return crumbsClone;\n }\n const resolvedBoundaryCount = Math.min(boundaryCount, count);\n\n console.log(\"crumbs\", crumbsClone);\n\n const startPages = crumbsClone.slice(0, resolvedBoundaryCount + 1);\n const endPages = crumbsClone.slice(\n count - 1 - resolvedBoundaryCount,\n crumbsClone.length,\n );\n\n const siblingsStart = Math.max(\n Math.min(\n activeCrumb - siblingCount,\n count - boundaryCount - siblingCount * 2 - 1,\n ),\n boundaryCount + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(activeCrumb + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? count - 1 - endPages.length : count - 1,\n );\n\n console.log(\"siblingsStart\", siblingsStart);\n console.log(\"siblingsEnd\", siblingsEnd);\n\n const itemList: (ReactElement | \"ellipsis\")[] = [];\n\n // Start pages\n itemList.push(...startPages);\n\n // Ellipsis after start pages\n if (siblingsStart > boundaryCount + 2) {\n itemList.push(\"ellipsis\");\n } else if (boundaryCount + 1 < count - boundaryCount) {\n itemList.push(crumbs[boundaryCount + 1]);\n }\n // Middle pages\n for (let i = siblingsStart; i <= siblingsEnd; i++) {\n itemList.push(crumbs[i]);\n }\n\n // Ellipsis before end pages\n if (siblingsEnd < count - 1 - boundaryCount) {\n itemList.push(\"ellipsis\");\n } else if (count - boundaryCount > boundaryCount) {\n itemList.push(crumbs[count - boundaryCount]);\n }\n\n const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));\n console.log(\"endPagesFiltered\", endPagesFiltered);\n\n itemList.push(...endPagesFiltered);\n\n return itemList;\n}\n"],"names":["useBreadcrumbs","activeCrumb","crumbs","siblingCount","boundaryCount","crumbsClone","Array","from","count","length","resolvedBoundaryCount","Math","min","console","log","startPages","slice","endPages","siblingsStart","max","siblingsEnd","itemList","push","i","endPagesFiltered","filter","p","includes"],"mappings":"AAEM,SAAUA,GAAeC,YAC7BA,EAAWC,OACXA,EAAMC,aACNA,EAAe,EAACC,cAChBA,EAAgB,IAOhB,MAAMC,EAAcC,MAAMC,KAAKL,GACzBM,EAAQN,EAAOO,OACrB,GAAID,GAAyB,EAAhBJ,EAAmC,EAAfD,EAAmB,EAElD,OAAOE,EAET,MAAMK,EAAwBC,KAAKC,IAAIR,EAAeI,GAEtDK,QAAQC,IAAI,SAAUT,GAEtB,MAAMU,EAAaV,EAAYW,MAAM,EAAGN,EAAwB,GAC1DO,EAAWZ,EAAYW,MAC3BR,EAAQ,EAAIE,EACZL,EAAYI,QAGRS,EAAgBP,KAAKQ,IACzBR,KAAKC,IACHX,EAAcE,EACdK,EAAQJ,EAA+B,EAAfD,EAAmB,GAE7CC,EAAgB,GAEZgB,EAAcT,KAAKC,IACvBD,KAAKQ,IAAIlB,EAAcE,EAAcC,EAA+B,EAAfD,EAAmB,GACxEc,EAASR,OAAS,EAAID,EAAQ,EAAIS,EAASR,OAASD,EAAQ,GAG9DK,QAAQC,IAAI,gBAAiBI,GAC7BL,QAAQC,IAAI,cAAeM,GAE3B,MAAMC,EAA0C,GAGhDA,EAASC,QAAQP,GAGbG,EAAgBd,EAAgB,EAClCiB,EAASC,KAAK,YACLlB,EAAgB,EAAII,EAAQJ,GACrCiB,EAASC,KAAKpB,EAAOE,EAAgB,IAGvC,IAAK,IAAImB,EAAIL,EAAeK,GAAKH,EAAaG,IAC5CF,EAASC,KAAKpB,EAAOqB,IAInBH,EAAcZ,EAAQ,EAAIJ,EAC5BiB,EAASC,KAAK,YACLd,EAAQJ,EAAgBA,GACjCiB,EAASC,KAAKpB,EAAOM,EAAQJ,IAG/B,MAAMoB,EAAmBP,EAASQ,OAAQC,IAAOL,EAASM,SAASD,IAKnE,OAJAb,QAAQC,IAAI,mBAAoBU,GAEhCH,EAASC,QAAQE,GAEVH,CACT"}
|
|
@@ -1,61 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useState } from 'react';
|
|
4
|
-
import styles from './Pagination.module.css.js';
|
|
5
|
-
import { usePagination } from './usePagination.js';
|
|
6
|
-
import { PaginationItem } from './PaginationItem.js';
|
|
7
|
-
import { cn } from '@studiocubics/utils';
|
|
8
|
-
|
|
9
|
-
const arrowLeftIcon = (jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-left-icon lucide-arrow-left", children: [jsx("path", { d: "m12 19-7-7 7-7" }), jsx("path", { d: "M19 12H5" })] }));
|
|
10
|
-
const ArrowLeftToLineIcon = (jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-arrow-left-to-line-icon lucide-arrow-left-to-line", children: [jsx("path", { d: "M3 19V5" }), jsx("path", { d: "m13 6-6 6 6 6" }), jsx("path", { d: "M7 12h14" })] }));
|
|
11
|
-
function Pagination(props) {
|
|
12
|
-
const { count, page: pageProp, onChange, defaultPage = 1, boundaryCount = 1, siblingCount = 1, showFirstButton = true, showLastButton = true, firstLastButtonIcon = ArrowLeftToLineIcon, prevNextButtonIcon = arrowLeftIcon, renderItem = (props, key) => jsx(PaginationItem, { ...props }, key), } = props;
|
|
13
|
-
const [page, setPage] = useState(defaultPage);
|
|
14
|
-
const activePage = pageProp ?? page;
|
|
15
|
-
const paginationRange = usePagination({
|
|
16
|
-
count,
|
|
17
|
-
page: activePage,
|
|
18
|
-
siblingCount,
|
|
19
|
-
boundaryCount,
|
|
20
|
-
});
|
|
21
|
-
function renderIconButton({ disabled, onClick, icon, }) {
|
|
22
|
-
return renderItem({
|
|
23
|
-
className: cn(styles.item, styles.icon, disabled ? styles.disabled : ""),
|
|
24
|
-
onClick: !disabled ? onClick : undefined,
|
|
25
|
-
children: icon,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function handleClick(i) {
|
|
29
|
-
if (i < 1 || i > count)
|
|
30
|
-
return;
|
|
31
|
-
setPage(i);
|
|
32
|
-
if (onChange)
|
|
33
|
-
onChange(i);
|
|
34
|
-
}
|
|
35
|
-
return (jsxs("ul", { className: styles.root, children: [showFirstButton &&
|
|
36
|
-
renderIconButton({
|
|
37
|
-
disabled: activePage === 1,
|
|
38
|
-
onClick: () => handleClick(1),
|
|
39
|
-
icon: firstLastButtonIcon,
|
|
40
|
-
}), renderIconButton({
|
|
41
|
-
disabled: activePage === 1,
|
|
42
|
-
onClick: () => handleClick(activePage - 1),
|
|
43
|
-
icon: prevNextButtonIcon,
|
|
44
|
-
}), paginationRange.map((item, idx) => item === "ellipses" ? (jsx("li", { children: "\u2026" }, `dots-${idx}`)) : (renderItem({
|
|
45
|
-
className: cn(styles.item, activePage === item ? styles.activeItem : ""),
|
|
46
|
-
onClick: () => handleClick(item),
|
|
47
|
-
children: item,
|
|
48
|
-
}, item))), renderIconButton({
|
|
49
|
-
disabled: activePage === count,
|
|
50
|
-
onClick: () => handleClick(activePage + 1),
|
|
51
|
-
icon: prevNextButtonIcon,
|
|
52
|
-
}), showLastButton &&
|
|
53
|
-
renderIconButton({
|
|
54
|
-
disabled: activePage === count,
|
|
55
|
-
onClick: () => handleClick(count),
|
|
56
|
-
icon: firstLastButtonIcon,
|
|
57
|
-
})] }));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export { Pagination };
|
|
1
|
+
"use client";import{jsxs as o,jsx as i}from"react/jsx-runtime";import{useState as t}from"react";import n from"./Pagination.module.css.js";import{usePagination as e}from"./usePagination.js";import{PaginationItem as r}from"./PaginationItem.js";import{cn as l}from"@studiocubics/utils";const s=o("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"lucide lucide-arrow-left-icon lucide-arrow-left",children:[i("path",{d:"m12 19-7-7 7-7"}),i("path",{d:"M19 12H5"})]}),c=o("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"lucide lucide-arrow-left-to-line-icon lucide-arrow-left-to-line",children:[i("path",{d:"M3 19V5"}),i("path",{d:"m13 6-6 6 6 6"}),i("path",{d:"M7 12h14"})]});function a(a){const{count:d,page:u,onChange:m,defaultPage:h=1,boundaryCount:p=1,siblingCount:w=1,showFirstButton:f=!0,showLastButton:g=!0,firstLastButtonIcon:k=c,prevNextButtonIcon:C=s,renderItem:b=(o,t)=>i(r,{...o},t)}=a,[v,x]=t(h),j=u??v,B=e({count:d,page:j,siblingCount:w,boundaryCount:p});function L({disabled:o,onClick:i,icon:t}){return b({className:l(n.item,n.icon,o?n.disabled:""),onClick:o?void 0:i,children:t})}function N(o){o<1||o>d||(x(o),m&&m(o))}return o("ul",{className:n.root,children:[f&&L({disabled:1===j,onClick:()=>N(1),icon:k}),L({disabled:1===j,onClick:()=>N(j-1),icon:C}),B.map((o,t)=>"ellipses"===o?i("li",{children:"…"},`dots-${t}`):b({className:l(n.item,j===o?n.activeItem:""),onClick:()=>N(o),children:o},o)),L({disabled:j===d,onClick:()=>N(j+1),icon:C}),g&&L({disabled:j===d,onClick:()=>N(d),icon:k})]})}export{a as Pagination};
|
|
61
2
|
//# sourceMappingURL=Pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sources":["../../../src/Navigation/Pagination/Pagination.tsx"],"sourcesContent":["\"use client\";\nimport { useState, type ReactElement, type ReactNode } from \"react\";\nimport styles from \"./Pagination.module.css\";\nimport { usePagination } from \"./usePagination\";\nimport { type PaginationItemProps, PaginationItem } from \"./PaginationItem\";\nimport { cn } from \"@studiocubics/utils\";\n\nexport interface PaginationProps {\n /**\n * Total number of pages\n */\n count: number;\n /**\n * For controlled Pagination pass the state\n */\n page?: number;\n /**\n * For controlled Pagination pass the onChange function\n */\n onChange?: (pageNumber: number) => void;\n /**\n * Page that will be selected by default\n * @default 1\n */\n defaultPage?: number;\n /**\n * How many siblings of the active item should be shown\n * @default 1\n */\n siblingCount?: number;\n /**\n * How many of the boundary items should be shown\n * @default 1\n */\n boundaryCount?: number;\n /**\n * Function that can be used to modify the rendered PaginationItem component\n */\n renderItem?: (\n props: PaginationItemProps,\n key?: string | number\n ) => ReactElement;\n /**\n * Shows the skip to first button\n */\n showFirstButton?: boolean;\n /**\n * Shows the skip to last button\n */\n showLastButton?: boolean;\n /**\n * Icon for first button and the last button icon which will be 180deg\n */\n firstLastButtonIcon?: ReactNode;\n /**\n * Icon for prev button and the next button icon which will be 180deg\n */\n prevNextButtonIcon?: ReactNode;\n}\nconst arrowLeftIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-arrow-left-icon lucide-arrow-left\"\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n);\nconst ArrowLeftToLineIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-arrow-left-to-line-icon lucide-arrow-left-to-line\"\n >\n <path d=\"M3 19V5\" />\n <path d=\"m13 6-6 6 6 6\" />\n <path d=\"M7 12h14\" />\n </svg>\n);\nexport function Pagination(props: PaginationProps) {\n const {\n count,\n page: pageProp,\n onChange,\n defaultPage = 1,\n boundaryCount = 1,\n siblingCount = 1,\n showFirstButton = true,\n showLastButton = true,\n firstLastButtonIcon = ArrowLeftToLineIcon,\n prevNextButtonIcon = arrowLeftIcon,\n renderItem = (props, key?) => <PaginationItem key={key} {...props} />,\n } = props;\n\n const [page, setPage] = useState(defaultPage);\n const activePage = pageProp ?? page;\n\n const paginationRange = usePagination({\n count,\n page: activePage,\n siblingCount,\n boundaryCount,\n });\n\n function renderIconButton({\n disabled,\n onClick,\n icon,\n }: {\n disabled: boolean;\n onClick: () => void;\n icon: React.ReactNode;\n }) {\n return renderItem({\n className: cn(styles.item, styles.icon, disabled ? styles.disabled : \"\"),\n onClick: !disabled ? onClick : undefined,\n children: icon,\n });\n }\n\n function handleClick(i: number) {\n if (i < 1 || i > count) return;\n setPage(i);\n if (onChange) onChange(i);\n }\n\n return (\n <ul className={styles.root}>\n {showFirstButton &&\n renderIconButton({\n disabled: activePage === 1,\n onClick: () => handleClick(1),\n icon: firstLastButtonIcon,\n })}\n {renderIconButton({\n disabled: activePage === 1,\n onClick: () => handleClick(activePage - 1),\n icon: prevNextButtonIcon,\n })}\n\n {paginationRange.map((item, idx) =>\n item === \"ellipses\" ? (\n <li key={`dots-${idx}`}>…</li>\n ) : (\n renderItem(\n {\n className: cn(\n styles.item,\n activePage === item ? styles.activeItem : \"\"\n ),\n onClick: () => handleClick(item),\n children: item,\n },\n item\n )\n )\n )}\n {renderIconButton({\n disabled: activePage === count,\n onClick: () => handleClick(activePage + 1),\n icon: prevNextButtonIcon,\n })}\n\n {showLastButton &&\n renderIconButton({\n disabled: activePage === count,\n onClick: () => handleClick(count),\n icon: firstLastButtonIcon,\n })}\n </ul>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Pagination.js","sources":["../../../src/Navigation/Pagination/Pagination.tsx"],"sourcesContent":["\"use client\";\nimport { useState, type ReactElement, type ReactNode } from \"react\";\nimport styles from \"./Pagination.module.css\";\nimport { usePagination } from \"./usePagination\";\nimport { type PaginationItemProps, PaginationItem } from \"./PaginationItem\";\nimport { cn } from \"@studiocubics/utils\";\n\nexport interface PaginationProps {\n /**\n * Total number of pages\n */\n count: number;\n /**\n * For controlled Pagination pass the state\n */\n page?: number;\n /**\n * For controlled Pagination pass the onChange function\n */\n onChange?: (pageNumber: number) => void;\n /**\n * Page that will be selected by default\n * @default 1\n */\n defaultPage?: number;\n /**\n * How many siblings of the active item should be shown\n * @default 1\n */\n siblingCount?: number;\n /**\n * How many of the boundary items should be shown\n * @default 1\n */\n boundaryCount?: number;\n /**\n * Function that can be used to modify the rendered PaginationItem component\n */\n renderItem?: (\n props: PaginationItemProps,\n key?: string | number\n ) => ReactElement;\n /**\n * Shows the skip to first button\n */\n showFirstButton?: boolean;\n /**\n * Shows the skip to last button\n */\n showLastButton?: boolean;\n /**\n * Icon for first button and the last button icon which will be 180deg\n */\n firstLastButtonIcon?: ReactNode;\n /**\n * Icon for prev button and the next button icon which will be 180deg\n */\n prevNextButtonIcon?: ReactNode;\n}\nconst arrowLeftIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-arrow-left-icon lucide-arrow-left\"\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n);\nconst ArrowLeftToLineIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-arrow-left-to-line-icon lucide-arrow-left-to-line\"\n >\n <path d=\"M3 19V5\" />\n <path d=\"m13 6-6 6 6 6\" />\n <path d=\"M7 12h14\" />\n </svg>\n);\nexport function Pagination(props: PaginationProps) {\n const {\n count,\n page: pageProp,\n onChange,\n defaultPage = 1,\n boundaryCount = 1,\n siblingCount = 1,\n showFirstButton = true,\n showLastButton = true,\n firstLastButtonIcon = ArrowLeftToLineIcon,\n prevNextButtonIcon = arrowLeftIcon,\n renderItem = (props, key?) => <PaginationItem key={key} {...props} />,\n } = props;\n\n const [page, setPage] = useState(defaultPage);\n const activePage = pageProp ?? page;\n\n const paginationRange = usePagination({\n count,\n page: activePage,\n siblingCount,\n boundaryCount,\n });\n\n function renderIconButton({\n disabled,\n onClick,\n icon,\n }: {\n disabled: boolean;\n onClick: () => void;\n icon: React.ReactNode;\n }) {\n return renderItem({\n className: cn(styles.item, styles.icon, disabled ? styles.disabled : \"\"),\n onClick: !disabled ? onClick : undefined,\n children: icon,\n });\n }\n\n function handleClick(i: number) {\n if (i < 1 || i > count) return;\n setPage(i);\n if (onChange) onChange(i);\n }\n\n return (\n <ul className={styles.root}>\n {showFirstButton &&\n renderIconButton({\n disabled: activePage === 1,\n onClick: () => handleClick(1),\n icon: firstLastButtonIcon,\n })}\n {renderIconButton({\n disabled: activePage === 1,\n onClick: () => handleClick(activePage - 1),\n icon: prevNextButtonIcon,\n })}\n\n {paginationRange.map((item, idx) =>\n item === \"ellipses\" ? (\n <li key={`dots-${idx}`}>…</li>\n ) : (\n renderItem(\n {\n className: cn(\n styles.item,\n activePage === item ? styles.activeItem : \"\"\n ),\n onClick: () => handleClick(item),\n children: item,\n },\n item\n )\n )\n )}\n {renderIconButton({\n disabled: activePage === count,\n onClick: () => handleClick(activePage + 1),\n icon: prevNextButtonIcon,\n })}\n\n {showLastButton &&\n renderIconButton({\n disabled: activePage === count,\n onClick: () => handleClick(count),\n icon: firstLastButtonIcon,\n })}\n </ul>\n );\n}\n"],"names":["arrowLeftIcon","_jsxs","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","className","children","_jsx","d","ArrowLeftToLineIcon","Pagination","props","count","page","pageProp","onChange","defaultPage","boundaryCount","siblingCount","showFirstButton","showLastButton","firstLastButtonIcon","prevNextButtonIcon","renderItem","key","PaginationItem","setPage","useState","activePage","paginationRange","usePagination","renderIconButton","disabled","onClick","icon","cn","styles","item","undefined","handleClick","i","root","map","idx","activeItem"],"mappings":"2RA2DA,MAAMA,EACJC,EAAA,MAAA,CACEC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,IACZC,cAAc,QACdC,eAAe,QACfC,UAAU,kDAAiDC,SAAA,CAE3DC,EAAA,OAAA,CAAMC,EAAE,mBACRD,EAAA,OAAA,CAAMC,EAAE,gBAGNC,EACJd,EAAA,MAAA,CACEC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,IACZC,cAAc,QACdC,eAAe,QACfC,UAAU,kEAAiEC,SAAA,CAE3EC,EAAA,OAAA,CAAMC,EAAE,YACRD,EAAA,OAAA,CAAMC,EAAE,kBACRD,EAAA,OAAA,CAAMC,EAAE,gBAGN,SAAUE,EAAWC,GACzB,MAAMC,MACJA,EACAC,KAAMC,EAAQC,SACdA,EAAQC,YACRA,EAAc,EAACC,cACfA,EAAgB,EAACC,aACjBA,EAAe,EAACC,gBAChBA,GAAkB,EAAIC,eACtBA,GAAiB,EAAIC,oBACrBA,EAAsBZ,EAAmBa,mBACzCA,EAAqB5B,EAAa6B,WAClCA,EAAa,CAACZ,EAAOa,IAASjB,EAACkB,EAAc,IAAed,GAATa,IACjDb,GAEGE,EAAMa,GAAWC,EAASX,GAC3BY,EAAad,GAAYD,EAEzBgB,EAAkBC,EAAc,CACpClB,QACAC,KAAMe,EACNV,eACAD,kBAGF,SAASc,GAAiBC,SACxBA,EAAQC,QACRA,EAAOC,KACPA,IAMA,OAAOX,EAAW,CAChBlB,UAAW8B,EAAGC,EAAOC,KAAMD,EAAOF,KAAMF,EAAWI,EAAOJ,SAAW,IACrEC,QAAUD,OAAqBM,EAAVL,EACrB3B,SAAU4B,GAEd,CAEA,SAASK,EAAYC,GACfA,EAAI,GAAKA,EAAI5B,IACjBc,EAAQc,GACJzB,GAAUA,EAASyB,GACzB,CAEA,OACE7C,QAAIU,UAAW+B,EAAOK,eACnBtB,GACCY,EAAiB,CACfC,SAAyB,IAAfJ,EACVK,QAAS,IAAMM,EAAY,GAC3BL,KAAMb,IAETU,EAAiB,CAChBC,SAAyB,IAAfJ,EACVK,QAAS,IAAMM,EAAYX,EAAa,GACxCM,KAAMZ,IAGPO,EAAgBa,IAAI,CAACL,EAAMM,IACjB,aAATN,EACE9B,EAAA,KAAA,CAAAD,SAAA,KAAS,QAAQqC,KAEjBpB,EACE,CACElB,UAAW8B,EACTC,EAAOC,KACPT,IAAeS,EAAOD,EAAOQ,WAAa,IAE5CX,QAAS,IAAMM,EAAYF,GAC3B/B,SAAU+B,GAEZA,IAILN,EAAiB,CAChBC,SAAUJ,IAAehB,EACzBqB,QAAS,IAAMM,EAAYX,EAAa,GACxCM,KAAMZ,IAGPF,GACCW,EAAiB,CACfC,SAAUJ,IAAehB,EACzBqB,QAAS,IAAMM,EAAY3B,GAC3BsB,KAAMb,MAIhB"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
export { styles as default };
|
|
1
|
+
var a={root:"Pagination-module_root__at76F",item:"Pagination-module_item__2GFks",disabled:"Pagination-module_disabled__KG8Cb",activeItem:"Pagination-module_activeItem__BVg0A",icon:"Pagination-module_icon__OcxQW"};export{a as default};
|
|
4
2
|
//# sourceMappingURL=Pagination.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Pagination.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import 'react';
|
|
4
|
-
|
|
5
|
-
const PaginationItemBase = (props) => {
|
|
6
|
-
const { to, as, children, ...rest } = props;
|
|
7
|
-
const Component = (as || to ? "a" : "li");
|
|
8
|
-
return jsx(Component, { ...rest, children: children });
|
|
9
|
-
};
|
|
10
|
-
PaginationItemBase.displayName = "PaginationItem";
|
|
11
|
-
const PaginationItem = PaginationItemBase;
|
|
12
|
-
|
|
13
|
-
export { PaginationItem };
|
|
1
|
+
"use client";import{jsx as t}from"react/jsx-runtime";import"react";const e=e=>{const{to:r,as:i,children:n,...o}=e;return t(i||r?"a":"li",{...o,children:n})};e.displayName="PaginationItem";const r=e;export{r as PaginationItem};
|
|
14
2
|
//# sourceMappingURL=PaginationItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaginationItem.js","sources":["../../../src/Navigation/Pagination/PaginationItem.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { type ElementType } from \"react\";\n\ninterface PaginationItemBaseProps {\n to?: \"string\";\n}\n\nexport type PaginationItemProps<C extends ElementType = \"li\"> =\n PolymorphicComponentProps<C, PaginationItemBaseProps>;\n\nconst PaginationItemBase = <C extends ElementType = \"button\">(\n props: PaginationItemProps<C>\n) => {\n const { to, as, children, ...rest } = props;\n const Component = (as || to ? \"a\" : \"li\") as ElementType;\n return <Component {...rest}>{children}</Component>;\n};\n\nPaginationItemBase.displayName = \"PaginationItem\";\nexport const PaginationItem = PaginationItemBase as PolymorphicComponentType<\n PaginationItemBaseProps,\n \"li\"\n>;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"PaginationItem.js","sources":["../../../src/Navigation/Pagination/PaginationItem.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { type ElementType } from \"react\";\n\ninterface PaginationItemBaseProps {\n to?: \"string\";\n}\n\nexport type PaginationItemProps<C extends ElementType = \"li\"> =\n PolymorphicComponentProps<C, PaginationItemBaseProps>;\n\nconst PaginationItemBase = <C extends ElementType = \"button\">(\n props: PaginationItemProps<C>\n) => {\n const { to, as, children, ...rest } = props;\n const Component = (as || to ? \"a\" : \"li\") as ElementType;\n return <Component {...rest}>{children}</Component>;\n};\n\nPaginationItemBase.displayName = \"PaginationItem\";\nexport const PaginationItem = PaginationItemBase as PolymorphicComponentType<\n PaginationItemBaseProps,\n \"li\"\n>;\n"],"names":["PaginationItemBase","props","to","as","children","rest","_jsx","displayName","PaginationItem"],"mappings":"mEAeA,MAAMA,EACJC,IAEA,MAAMC,GAAEA,EAAEC,GAAEA,EAAEC,SAAEA,KAAaC,GAASJ,EAEtC,OAAOK,EADYH,GAAMD,EAAK,IAAM,KACnB,IAAKG,EAAID,SAAGA,KAG/BJ,EAAmBO,YAAc,iBAC1B,MAAMC,EAAiBR"}
|
|
@@ -1,38 +1,2 @@
|
|
|
1
|
-
function
|
|
2
|
-
const startPages = Array.from({ length: Math.min(boundaryCount, count) }, (_, i) => i + 1);
|
|
3
|
-
const endPages = Array.from({ length: Math.min(boundaryCount, count) }, (_, i) => count - i).reverse();
|
|
4
|
-
// siblingsStart determines the first page number in the sibling range:
|
|
5
|
-
// - Math.min ensures we don't go beyond the range where siblings would overlap with end pages.
|
|
6
|
-
// - Math.max ensures we don't go below the first possible sibling after the boundary pages.
|
|
7
|
-
const siblingsStart = Math.max(Math.min(page - siblingCount, count - boundaryCount - siblingCount * 2 - 1), boundaryCount + 2);
|
|
8
|
-
// The upper bound ensures siblings do not overlap with end pages; if endPages exist, use the first end page minus 2, otherwise use count - 1.
|
|
9
|
-
const siblingsEnd = Math.min(Math.max(page + siblingCount, boundaryCount + siblingCount * 2 + 2), endPages.length > 0 ? endPages[0] - 2 : count - 1);
|
|
10
|
-
const itemList = [];
|
|
11
|
-
// Start pages
|
|
12
|
-
itemList.push(...startPages);
|
|
13
|
-
// Ellipses after start pages
|
|
14
|
-
if (siblingsStart > boundaryCount + 2) {
|
|
15
|
-
itemList.push("ellipses");
|
|
16
|
-
}
|
|
17
|
-
else if (boundaryCount + 1 < count - boundaryCount) {
|
|
18
|
-
itemList.push(boundaryCount + 1);
|
|
19
|
-
}
|
|
20
|
-
// Middle pages
|
|
21
|
-
for (let i = siblingsStart; i <= siblingsEnd; i++) {
|
|
22
|
-
itemList.push(i);
|
|
23
|
-
}
|
|
24
|
-
// Ellipses before end pages
|
|
25
|
-
if (siblingsEnd < count - boundaryCount - 1) {
|
|
26
|
-
itemList.push("ellipses");
|
|
27
|
-
}
|
|
28
|
-
else if (count - boundaryCount > boundaryCount) {
|
|
29
|
-
itemList.push(count - boundaryCount);
|
|
30
|
-
}
|
|
31
|
-
// End pages
|
|
32
|
-
const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));
|
|
33
|
-
itemList.push(...endPagesFiltered);
|
|
34
|
-
return itemList;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export { usePagination };
|
|
1
|
+
function t({count:t,page:n,siblingCount:e=1,boundaryCount:h=1}){const s=Array.from({length:Math.min(h,t)},(t,n)=>n+1),r=Array.from({length:Math.min(h,t)},(n,e)=>t-e).reverse(),u=Math.max(Math.min(n-e,t-h-2*e-1),h+2),a=Math.min(Math.max(n+e,h+2*e+2),r.length>0?r[0]-2:t-1),i=[];i.push(...s),u>h+2?i.push("ellipses"):h+1<t-h&&i.push(h+1);for(let t=u;t<=a;t++)i.push(t);a<t-h-1?i.push("ellipses"):t-h>h&&i.push(t-h);const l=r.filter(t=>!i.includes(t));return i.push(...l),i}export{t as usePagination};
|
|
38
2
|
//# sourceMappingURL=usePagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePagination.js","sources":["../../../src/Navigation/Pagination/usePagination.tsx"],"sourcesContent":["export function usePagination({\n count,\n page,\n siblingCount = 1,\n boundaryCount = 1,\n}: {\n count: number;\n page: number;\n siblingCount?: number;\n boundaryCount?: number;\n}) {\n const startPages = Array.from(\n { length: Math.min(boundaryCount, count) },\n (_, i) => i + 1\n );\n\n const endPages = Array.from(\n { length: Math.min(boundaryCount, count) },\n (_, i) => count - i\n ).reverse();\n\n // siblingsStart determines the first page number in the sibling range:\n // - Math.min ensures we don't go beyond the range where siblings would overlap with end pages.\n // - Math.max ensures we don't go below the first possible sibling after the boundary pages.\n const siblingsStart = Math.max(\n Math.min(page - siblingCount, count - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2\n );\n\n // The upper bound ensures siblings do not overlap with end pages; if endPages exist, use the first end page minus 2, otherwise use count - 1.\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 const itemList: (number | \"ellipses\")[] = [];\n\n // Start pages\n itemList.push(...startPages);\n\n // Ellipses after start pages\n if (siblingsStart > boundaryCount + 2) {\n itemList.push(\"ellipses\");\n } else if (boundaryCount + 1 < count - boundaryCount) {\n itemList.push(boundaryCount + 1);\n }\n\n // Middle pages\n for (let i = siblingsStart; i <= siblingsEnd; i++) {\n itemList.push(i);\n }\n\n // Ellipses before end pages\n if (siblingsEnd < count - boundaryCount - 1) {\n itemList.push(\"ellipses\");\n } else if (count - boundaryCount > boundaryCount) {\n itemList.push(count - boundaryCount);\n }\n\n // End pages\n const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));\n itemList.push(...endPagesFiltered);\n\n return itemList;\n}\n"],"names":[
|
|
1
|
+
{"version":3,"file":"usePagination.js","sources":["../../../src/Navigation/Pagination/usePagination.tsx"],"sourcesContent":["export function usePagination({\n count,\n page,\n siblingCount = 1,\n boundaryCount = 1,\n}: {\n count: number;\n page: number;\n siblingCount?: number;\n boundaryCount?: number;\n}) {\n const startPages = Array.from(\n { length: Math.min(boundaryCount, count) },\n (_, i) => i + 1\n );\n\n const endPages = Array.from(\n { length: Math.min(boundaryCount, count) },\n (_, i) => count - i\n ).reverse();\n\n // siblingsStart determines the first page number in the sibling range:\n // - Math.min ensures we don't go beyond the range where siblings would overlap with end pages.\n // - Math.max ensures we don't go below the first possible sibling after the boundary pages.\n const siblingsStart = Math.max(\n Math.min(page - siblingCount, count - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2\n );\n\n // The upper bound ensures siblings do not overlap with end pages; if endPages exist, use the first end page minus 2, otherwise use count - 1.\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 const itemList: (number | \"ellipses\")[] = [];\n\n // Start pages\n itemList.push(...startPages);\n\n // Ellipses after start pages\n if (siblingsStart > boundaryCount + 2) {\n itemList.push(\"ellipses\");\n } else if (boundaryCount + 1 < count - boundaryCount) {\n itemList.push(boundaryCount + 1);\n }\n\n // Middle pages\n for (let i = siblingsStart; i <= siblingsEnd; i++) {\n itemList.push(i);\n }\n\n // Ellipses before end pages\n if (siblingsEnd < count - boundaryCount - 1) {\n itemList.push(\"ellipses\");\n } else if (count - boundaryCount > boundaryCount) {\n itemList.push(count - boundaryCount);\n }\n\n // End pages\n const endPagesFiltered = endPages.filter((p) => !itemList.includes(p));\n itemList.push(...endPagesFiltered);\n\n return itemList;\n}\n"],"names":["usePagination","count","page","siblingCount","boundaryCount","startPages","Array","from","length","Math","min","_","i","endPages","reverse","siblingsStart","max","siblingsEnd","itemList","push","endPagesFiltered","filter","p","includes"],"mappings":"AAAM,SAAUA,GAAcC,MAC5BA,EAAKC,KACLA,EAAIC,aACJA,EAAe,EAACC,cAChBA,EAAgB,IAOhB,MAAMC,EAAaC,MAAMC,KACvB,CAAEC,OAAQC,KAAKC,IAAIN,EAAeH,IAClC,CAACU,EAAGC,IAAMA,EAAI,GAGVC,EAAWP,MAAMC,KACrB,CAAEC,OAAQC,KAAKC,IAAIN,EAAeH,IAClC,CAACU,EAAGC,IAAMX,EAAQW,GAClBE,UAKIC,EAAgBN,KAAKO,IACzBP,KAAKC,IAAIR,EAAOC,EAAcF,EAAQG,EAA+B,EAAfD,EAAmB,GACzEC,EAAgB,GAIZa,EAAcR,KAAKC,IACvBD,KAAKO,IAAId,EAAOC,EAAcC,EAA+B,EAAfD,EAAmB,GACjEU,EAASL,OAAS,EAAIK,EAAS,GAAK,EAAIZ,EAAQ,GAG5CiB,EAAoC,GAG1CA,EAASC,QAAQd,GAGbU,EAAgBX,EAAgB,EAClCc,EAASC,KAAK,YACLf,EAAgB,EAAIH,EAAQG,GACrCc,EAASC,KAAKf,EAAgB,GAIhC,IAAK,IAAIQ,EAAIG,EAAeH,GAAKK,EAAaL,IAC5CM,EAASC,KAAKP,GAIZK,EAAchB,EAAQG,EAAgB,EACxCc,EAASC,KAAK,YACLlB,EAAQG,EAAgBA,GACjCc,EAASC,KAAKlB,EAAQG,GAIxB,MAAMgB,EAAmBP,EAASQ,OAAQC,IAAOJ,EAASK,SAASD,IAGnE,OAFAJ,EAASC,QAAQC,GAEVF,CACT"}
|
|
@@ -1,70 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useRef, useEffect } from 'react';
|
|
4
|
-
import styles from './Tab.module.css.js';
|
|
5
|
-
import { useTabs } from '../Tabs.js';
|
|
6
|
-
import { mergeRefs, cn } from '@studiocubics/utils';
|
|
7
|
-
|
|
8
|
-
const defaultElement = "button";
|
|
9
|
-
/**
|
|
10
|
-
* Base implementation for the Tab component.
|
|
11
|
-
*
|
|
12
|
-
* This is a polymorphic component that defaults to rendering a `<Tab>`.
|
|
13
|
-
* Use the `as` prop to change the underlying element.
|
|
14
|
-
*
|
|
15
|
-
* @typeParam C - The intrinsic or custom element type to render.
|
|
16
|
-
*
|
|
17
|
-
* @group Tab
|
|
18
|
-
* @category inputs
|
|
19
|
-
*/
|
|
20
|
-
function TabBase(props) {
|
|
21
|
-
const { as, className, selected: _selected, startIcon, endIcon, disabled, href, onClick, onTouchStart, children, slotProps = {}, ref, ...restProps } = props;
|
|
22
|
-
const { activeTab, setActiveTab } = useTabs();
|
|
23
|
-
const tabRef = useRef(null);
|
|
24
|
-
const clickable = !disabled && (!!href || !!onClick);
|
|
25
|
-
const selected = tabRef.current != null ? activeTab == tabRef.current : false;
|
|
26
|
-
const Component = (as || defaultElement);
|
|
27
|
-
function handleClick(e) {
|
|
28
|
-
if (disabled)
|
|
29
|
-
return;
|
|
30
|
-
if (tabRef.current)
|
|
31
|
-
tabRef.current.scrollIntoView({
|
|
32
|
-
block: "nearest",
|
|
33
|
-
inline: "center",
|
|
34
|
-
behavior: "smooth",
|
|
35
|
-
});
|
|
36
|
-
setActiveTab(tabRef.current);
|
|
37
|
-
if (onClick)
|
|
38
|
-
onClick(e);
|
|
39
|
-
}
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
if (_selected)
|
|
42
|
-
setActiveTab(tabRef.current);
|
|
43
|
-
}, [_selected]);
|
|
44
|
-
const componentProps = {
|
|
45
|
-
className: cn(className, styles.root, selected ? styles.selected : undefined, clickable ? styles.clickable : undefined, disabled ? styles.disabled : undefined),
|
|
46
|
-
onClick: handleClick,
|
|
47
|
-
disabled,
|
|
48
|
-
href: disabled ? "" : href,
|
|
49
|
-
ref: mergeRefs(ref, tabRef),
|
|
50
|
-
...restProps,
|
|
51
|
-
};
|
|
52
|
-
return (jsxs(Component, { ...componentProps, children: [startIcon && (jsx("span", { ...slotProps.startIcon, className: cn(styles.iconContainer, slotProps.startIcon?.className), children: startIcon })), children, endIcon && (jsx("span", { ...slotProps.endIcon, className: cn(styles.iconContainer, slotProps.endIcon?.className), children: endIcon }))] }));
|
|
53
|
-
}
|
|
54
|
-
TabBase.displayName = "Tab";
|
|
55
|
-
/**
|
|
56
|
-
* A polymorphic Tab component.
|
|
57
|
-
*
|
|
58
|
-
* By default it renders a `<Tab>`, but any element can be used via the `as` prop:
|
|
59
|
-
*
|
|
60
|
-
* ```tsx
|
|
61
|
-
* <Tab as="a" href="/docs">Read docs</Tab>
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @group Tab
|
|
65
|
-
* @category inputs
|
|
66
|
-
*/
|
|
67
|
-
const Tab = TabBase;
|
|
68
|
-
|
|
69
|
-
export { Tab };
|
|
1
|
+
"use client";import{jsxs as e,jsx as n}from"react/jsx-runtime";import{useRef as r,useEffect as c}from"react";import t from"./Tab.module.css.js";import{useTabs as o}from"../Tabs.js";import{mergeRefs as s,cn as a}from"@studiocubics/utils";function i(i){const{as:l,className:d,selected:m,startIcon:u,endIcon:b,disabled:f,href:p,onClick:h,onTouchStart:I,children:N,slotProps:v={},ref:T,...k}=i,{activeTab:C,setActiveTab:j}=o(),x=r(null),w=!(f||!p&&!h),y=null!=x.current&&C==x.current,A=l||"button";c(()=>{m&&j(x.current)},[m]);const P={className:a(d,t.root,y?t.selected:void 0,w?t.clickable:void 0,f?t.disabled:void 0),onClick:function(e){f||(x.current&&x.current.scrollIntoView({block:"nearest",inline:"center",behavior:"smooth"}),j(x.current),h&&h(e))},disabled:f,href:f?"":p,ref:s(T,x),...k};return e(A,{...P,children:[u&&n("span",{...v.startIcon,className:a(t.iconContainer,v.startIcon?.className),children:u}),N,b&&n("span",{...v.endIcon,className:a(t.iconContainer,v.endIcon?.className),children:b})]})}i.displayName="Tab";const l=i;export{l as Tab};
|
|
70
2
|
//# sourceMappingURL=Tab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sources":["../../../../src/Navigation/Tabs/Tab/Tab.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type ComponentProps,\n type ElementType,\n type ReactNode,\n useEffect,\n useRef,\n type MouseEvent,\n} from \"react\";\nimport styles from \"./Tab.module.css\";\nimport { useTabs } from \"../Tabs\";\nimport { cn, mergeRefs } from \"@studiocubics/utils\";\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\n\n/**\n * Props specific to the Tab component.\n *\n * These extend the intrinsic element props of whatever element is passed via `as`.\n * @group Tab\n * @category inputs\n */\nexport interface TabBaseProps {\n selected?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n disabled?: boolean;\n href?: ComponentProps<\"a\">[\"href\"];\n slotProps?: {\n startIcon?: ComponentProps<\"span\">;\n endIcon?: ComponentProps<\"span\">;\n };\n}\nconst defaultElement = \"button\";\ntype DefaultElement = typeof defaultElement;\n/**\n * Polymorphic props for the Tab component.\n *\n * `C` defines the element type rendered by the component (e.g. `\"Tab\"`, `\"a\"`, `\"div\"`).\n * All intrinsic props for `C` are supported unless overridden by `TabBaseProps`.\n *\n * @group Tab\n * @category inputs\n */\nexport type TabProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, TabBaseProps>;\n\n/**\n * Base implementation for the Tab component.\n *\n * This is a polymorphic component that defaults to rendering a `<Tab>`.\n * Use the `as` prop to change the underlying element.\n *\n * @typeParam C - The intrinsic or custom element type to render.\n *\n * @group Tab\n * @category inputs\n */\nfunction TabBase<C extends ElementType = DefaultElement>(props: TabProps<C>) {\n const {\n as,\n className,\n selected: _selected,\n startIcon,\n endIcon,\n disabled,\n href,\n onClick,\n onTouchStart,\n children,\n slotProps = {},\n ref,\n ...restProps\n } = props;\n const { activeTab, setActiveTab } = useTabs();\n const tabRef = useRef<HTMLButtonElement>(null);\n\n const clickable = !disabled && (!!href || !!onClick);\n const selected = tabRef.current != null ? activeTab == tabRef.current : false;\n const Component = (as || defaultElement) as ElementType;\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (disabled) return;\n if (tabRef.current)\n tabRef.current.scrollIntoView({\n block: \"nearest\",\n inline: \"center\",\n behavior: \"smooth\",\n });\n setActiveTab(tabRef.current);\n if (onClick) onClick(e);\n }\n\n useEffect(() => {\n if (_selected) setActiveTab(tabRef.current);\n }, [_selected]);\n\n const componentProps = {\n className: cn(\n className,\n styles.root,\n selected ? styles.selected : undefined,\n clickable ? styles.clickable : undefined,\n disabled ? styles.disabled : undefined,\n ),\n onClick: handleClick,\n disabled,\n href: disabled ? \"\" : href,\n ref: mergeRefs(ref, tabRef),\n ...restProps,\n };\n\n return (\n <Component {...componentProps}>\n {startIcon && (\n <span\n {...slotProps.startIcon}\n className={cn(styles.iconContainer, slotProps.startIcon?.className)}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n {...slotProps.endIcon}\n className={cn(styles.iconContainer, slotProps.endIcon?.className)}\n >\n {endIcon}\n </span>\n )}\n </Component>\n );\n}\nTabBase.displayName = \"Tab\";\n\n/**\n * A polymorphic Tab component.\n *\n * By default it renders a `<Tab>`, but any element can be used via the `as` prop:\n *\n * ```tsx\n * <Tab as=\"a\" href=\"/docs\">Read docs</Tab>\n * ```\n *\n * @group Tab\n * @category inputs\n */\nexport const Tab = TabBase as PolymorphicComponentType<\n TabBaseProps,\n DefaultElement\n>;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tab.js","sources":["../../../../src/Navigation/Tabs/Tab/Tab.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type ComponentProps,\n type ElementType,\n type ReactNode,\n useEffect,\n useRef,\n type MouseEvent,\n} from \"react\";\nimport styles from \"./Tab.module.css\";\nimport { useTabs } from \"../Tabs\";\nimport { cn, mergeRefs } from \"@studiocubics/utils\";\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\n\n/**\n * Props specific to the Tab component.\n *\n * These extend the intrinsic element props of whatever element is passed via `as`.\n * @group Tab\n * @category inputs\n */\nexport interface TabBaseProps {\n selected?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n disabled?: boolean;\n href?: ComponentProps<\"a\">[\"href\"];\n slotProps?: {\n startIcon?: ComponentProps<\"span\">;\n endIcon?: ComponentProps<\"span\">;\n };\n}\nconst defaultElement = \"button\";\ntype DefaultElement = typeof defaultElement;\n/**\n * Polymorphic props for the Tab component.\n *\n * `C` defines the element type rendered by the component (e.g. `\"Tab\"`, `\"a\"`, `\"div\"`).\n * All intrinsic props for `C` are supported unless overridden by `TabBaseProps`.\n *\n * @group Tab\n * @category inputs\n */\nexport type TabProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, TabBaseProps>;\n\n/**\n * Base implementation for the Tab component.\n *\n * This is a polymorphic component that defaults to rendering a `<Tab>`.\n * Use the `as` prop to change the underlying element.\n *\n * @typeParam C - The intrinsic or custom element type to render.\n *\n * @group Tab\n * @category inputs\n */\nfunction TabBase<C extends ElementType = DefaultElement>(props: TabProps<C>) {\n const {\n as,\n className,\n selected: _selected,\n startIcon,\n endIcon,\n disabled,\n href,\n onClick,\n onTouchStart,\n children,\n slotProps = {},\n ref,\n ...restProps\n } = props;\n const { activeTab, setActiveTab } = useTabs();\n const tabRef = useRef<HTMLButtonElement>(null);\n\n const clickable = !disabled && (!!href || !!onClick);\n const selected = tabRef.current != null ? activeTab == tabRef.current : false;\n const Component = (as || defaultElement) as ElementType;\n\n function handleClick(e: MouseEvent<HTMLButtonElement>) {\n if (disabled) return;\n if (tabRef.current)\n tabRef.current.scrollIntoView({\n block: \"nearest\",\n inline: \"center\",\n behavior: \"smooth\",\n });\n setActiveTab(tabRef.current);\n if (onClick) onClick(e);\n }\n\n useEffect(() => {\n if (_selected) setActiveTab(tabRef.current);\n }, [_selected]);\n\n const componentProps = {\n className: cn(\n className,\n styles.root,\n selected ? styles.selected : undefined,\n clickable ? styles.clickable : undefined,\n disabled ? styles.disabled : undefined,\n ),\n onClick: handleClick,\n disabled,\n href: disabled ? \"\" : href,\n ref: mergeRefs(ref, tabRef),\n ...restProps,\n };\n\n return (\n <Component {...componentProps}>\n {startIcon && (\n <span\n {...slotProps.startIcon}\n className={cn(styles.iconContainer, slotProps.startIcon?.className)}\n >\n {startIcon}\n </span>\n )}\n {children}\n {endIcon && (\n <span\n {...slotProps.endIcon}\n className={cn(styles.iconContainer, slotProps.endIcon?.className)}\n >\n {endIcon}\n </span>\n )}\n </Component>\n );\n}\nTabBase.displayName = \"Tab\";\n\n/**\n * A polymorphic Tab component.\n *\n * By default it renders a `<Tab>`, but any element can be used via the `as` prop:\n *\n * ```tsx\n * <Tab as=\"a\" href=\"/docs\">Read docs</Tab>\n * ```\n *\n * @group Tab\n * @category inputs\n */\nexport const Tab = TabBase as PolymorphicComponentType<\n TabBaseProps,\n DefaultElement\n>;\n"],"names":["TabBase","props","as","className","selected","_selected","startIcon","endIcon","disabled","href","onClick","onTouchStart","children","slotProps","ref","restProps","activeTab","setActiveTab","useTabs","tabRef","useRef","clickable","current","Component","useEffect","componentProps","cn","styles","root","undefined","e","scrollIntoView","block","inline","behavior","mergeRefs","_jsxs","_jsx","iconContainer","displayName","Tab"],"mappings":"6OA6DA,SAASA,EAAgDC,GACvD,MAAMC,GACJA,EAAEC,UACFA,EACAC,SAAUC,EAASC,UACnBA,EAASC,QACTA,EAAOC,SACPA,EAAQC,KACRA,EAAIC,QACJA,EAAOC,aACPA,EAAYC,SACZA,EAAQC,UACRA,EAAY,CAAA,EAAEC,IACdA,KACGC,GACDd,GACEe,UAAEA,EAASC,aAAEA,GAAiBC,IAC9BC,EAASC,EAA0B,MAEnCC,IAAab,IAAeC,IAAUC,GACtCN,EAA6B,MAAlBe,EAAOG,SAAkBN,GAAaG,EAAOG,QACxDC,EAAarB,GA9CE,SA4DrBsB,EAAU,KACJnB,GAAWY,EAAaE,EAAOG,UAClC,CAACjB,IAEJ,MAAMoB,EAAiB,CACrBtB,UAAWuB,EACTvB,EACAwB,EAAOC,KACPxB,EAAWuB,EAAOvB,cAAWyB,EAC7BR,EAAYM,EAAON,eAAYQ,EAC/BrB,EAAWmB,EAAOnB,cAAWqB,GAE/BnB,QAxBF,SAAqBoB,GACftB,IACAW,EAAOG,SACTH,EAAOG,QAAQS,eAAe,CAC5BC,MAAO,UACPC,OAAQ,SACRC,SAAU,WAEdjB,EAAaE,EAAOG,SAChBZ,GAASA,EAAQoB,GACvB,EAeEtB,WACAC,KAAMD,EAAW,GAAKC,EACtBK,IAAKqB,EAAUrB,EAAKK,MACjBJ,GAGL,OACEqB,EAACb,EAAS,IAAKE,EAAcb,SAAA,CAC1BN,GACC+B,EAAA,OAAA,IACMxB,EAAUP,UACdH,UAAWuB,EAAGC,EAAOW,cAAezB,EAAUP,WAAWH,oBAExDG,IAGJM,EACAL,GACC8B,EAAA,OAAA,IACMxB,EAAUN,QACdJ,UAAWuB,EAAGC,EAAOW,cAAezB,EAAUN,SAASJ,WAAUS,SAEhEL,MAKX,CACAP,EAAQuC,YAAc,MAcf,MAAMC,EAAMxC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
export { styles as default };
|
|
1
|
+
var e={root:"Tab-module_root__ySv89",clickable:"Tab-module_clickable__d8Iy-",selected:"Tab-module_selected__vToav",disabled:"Tab-module_disabled__Leret",iconContainer:"Tab-module_iconContainer__-SQ6s"};export{e as default};
|
|
4
2
|
//# sourceMappingURL=Tab.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tab.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|