@avenue-ticketing/ui 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button.js.map +1 -1
- package/dist/react/calendar.js.map +1 -1
- package/dist/react/card.js.map +1 -1
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/datetime-picker.js +73 -52
- package/dist/react/datetime-picker.js.map +1 -1
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown.js +36 -26
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/input.js.map +1 -1
- package/dist/react/pagination.js.map +1 -1
- package/dist/react/popover.js +72 -51
- package/dist/react/popover.js.map +1 -1
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.js.map +1 -1
- package/dist/react/select.js +32 -24
- package/dist/react/select.js.map +1 -1
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/switch.js.map +1 -1
- package/dist/react/table-pagination.js +32 -24
- package/dist/react/table-pagination.js.map +1 -1
- package/dist/react/table-view/column-menu.js +32 -24
- package/dist/react/table-view/column-menu.js.map +1 -1
- package/dist/react/table-view/index.js +32 -24
- package/dist/react/table-view/index.js.map +1 -1
- package/dist/react/table.js.map +1 -1
- package/dist/react/tabs.js.map +1 -1
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/time-picker.js.map +1 -1
- package/dist/react/tooltip.js.map +1 -1
- package/package.json +2 -1
package/dist/react/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/table.tsx"],"names":["TableColumnDragHandle"],"mappings":"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","file":"table.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { ArrowDown, ArrowUp, GripVertical } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport type TableColumnDragState = {\n /** column id you are currently dragging, or `null` */\n draggingId: string | null;\n /** id of the th under the cursor, or `null` */\n dropTargetId: string | null;\n};\n\nexport type TableConfigValue = {\n sortableColumnIds: ReadonlySet<string>;\n enableColumnSort: boolean;\n enableColumnReorder: boolean;\n enableColumnResize: boolean;\n /**\n * when set (usually from host table state), `TableHead` / `TableCell` with\n * matching `columnId` get consistent column-drag visuals\n */\n columnDragState: TableColumnDragState | null;\n};\n\nconst defaultTableConfig: TableConfigValue = {\n sortableColumnIds: new Set(),\n enableColumnSort: true,\n enableColumnReorder: false,\n enableColumnResize: false,\n columnDragState: null,\n};\n\nconst TableConfigContext = React.createContext<TableConfigValue | null>(null);\nTableConfigContext.displayName = \"TableConfigContext\";\n\n/**\n * a compact card under the cursor so a column grab feels like moving the column, not\n * a tiny icon. call from `onDragStart` of {@link TableColumnDragHandle} or your handle.\n */\nexport function setColumnDragPreview(\n e: React.DragEvent,\n options: { title: string; width?: number; height?: number; hotspotX?: number; hotspotY?: number },\n) {\n if (!e.dataTransfer) return;\n e.dataTransfer.effectAllowed = \"move\";\n const width = options.width ?? 80;\n const height = options.height ?? 100;\n const el = document.createElement(\"div\");\n el.setAttribute(\"data-table-drag-preview\", \"\");\n const dark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n const bg = dark ? \"rgba(24,24,26,0.95)\" : \"rgba(255,255,255,0.96)\";\n const fg = dark ? \"rgba(250,250,250,0.95)\" : \"rgba(10,10,10,0.92)\";\n const border = dark\n ? \"1px solid rgba(255,255,255,0.12)\"\n : \"1px solid rgba(0,0,0,0.1)\";\n const shadow = \"0 12px 32px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.04)\";\n el.style.cssText = [\n \"position:fixed\",\n \"left:0\",\n \"top:0\",\n \"z-index:100000\",\n \"pointer-events:none\",\n \"box-sizing:border-box\",\n `width:${width}px`,\n `min-height:${height}px`,\n \"display:flex\",\n \"flex-direction:column\",\n \"align-items:center\",\n \"justify-content:flex-start\",\n \"gap:8px\",\n `padding:10px 8px 12px`,\n `color:${fg}`,\n `background:${bg}`,\n `border:${border}`,\n \"border-radius:8px\",\n `box-shadow:${shadow}`,\n ].join(\";\");\n const bar = document.createElement(\"div\");\n bar.style.cssText = `width:3px;flex:1;min-height:32px;border-radius:2px;background:${\n dark ? \"rgba(80,200,150,0.4)\" : \"rgba(20,80,200,0.2)\"\n };align-self:stretch;`;\n const t = document.createElement(\"div\");\n t.textContent = options.title;\n t.style.cssText =\n \"font:600 11px/1.2 system-ui,-apple-system,sans-serif;text-align:center;word-break:break-word;max-width:100%;\";\n el.appendChild(t);\n el.appendChild(bar);\n el.style.minHeight = `${height}px`;\n document.body.appendChild(el);\n void el.offsetWidth;\n e.dataTransfer.setDragImage(\n el,\n options.hotspotX ?? width / 2,\n options.hotspotY ?? 28,\n );\n requestAnimationFrame(() => {\n if (el.parentNode) el.parentNode.removeChild(el);\n });\n}\n\n/** source column (being dragged) and drop target use the same strip treatment */\nconst COLUMN_DRAG_TH_STRIP =\n \"relative z-20 box-border overflow-hidden rounded-t-lg border border-primary/20 bg-primary/8 opacity-70 shadow-sm\";\nconst COLUMN_DRAG_TD_STRIP =\n \"overflow-hidden border-x border-primary/15 bg-primary/5 opacity-70\";\n\nconst columnDragThClasses = (config: TableConfigValue, columnId: string) => {\n if (!config.enableColumnReorder || !config.columnDragState) return undefined;\n const d = config.columnDragState;\n const isSource = d.draggingId === columnId;\n const isDrop =\n d.dropTargetId === columnId &&\n d.draggingId != null &&\n d.draggingId !== columnId;\n if (isSource || isDrop) {\n return COLUMN_DRAG_TH_STRIP;\n }\n return undefined;\n};\n\nconst columnDragTdClasses = (config: TableConfigValue, columnId: string) => {\n if (!config.enableColumnReorder || !config.columnDragState) return undefined;\n const d = config.columnDragState;\n const isSource = d.draggingId === columnId;\n const isDrop =\n d.dropTargetId === columnId &&\n d.draggingId != null &&\n d.draggingId !== columnId;\n if (isSource || isDrop) {\n return COLUMN_DRAG_TD_STRIP;\n }\n return undefined;\n};\n\nexport type TableLayoutProps = {\n containerClassName?: string;\n sortableColumns?: readonly string[];\n enableColumnSort?: boolean;\n enableColumnReorder?: boolean;\n enableColumnResize?: boolean;\n /** pass `columnDragState` from the host (e.g. which column is being reordered) */\n columnDragState?: TableColumnDragState | null;\n};\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.ComponentProps<\"table\"> & TableLayoutProps\n>(\n (\n {\n className,\n containerClassName,\n sortableColumns,\n enableColumnSort: enableColumnSortFromProps,\n enableColumnReorder: enableColumnReorderFromProps,\n enableColumnResize: enableColumnResizeFromProps,\n columnDragState: columnDragStateFromProps,\n ...props\n },\n ref,\n ) => {\n const config = React.useMemo<TableConfigValue>(() => {\n const sortableColumnIds = new Set(sortableColumns ?? []);\n return {\n sortableColumnIds,\n enableColumnSort: enableColumnSortFromProps ?? true,\n enableColumnReorder: enableColumnReorderFromProps ?? false,\n enableColumnResize: enableColumnResizeFromProps ?? false,\n columnDragState: columnDragStateFromProps ?? null,\n };\n }, [\n sortableColumns,\n enableColumnSortFromProps,\n enableColumnReorderFromProps,\n enableColumnResizeFromProps,\n columnDragStateFromProps,\n ]);\n\n return (\n <div\n data-slot=\"table-container\"\n data-table-sort={config.enableColumnSort ? \"on\" : \"off\"}\n data-table-reorder={config.enableColumnReorder ? \"on\" : \"off\"}\n data-table-resize={config.enableColumnResize ? \"on\" : \"off\"}\n className={cn(\"relative w-full overflow-x-auto\", containerClassName)}\n >\n <TableConfigContext.Provider value={config}>\n <table\n ref={ref}\n data-slot=\"table\"\n className={cn(\n \"min-w-full w-max caption-bottom text-sm\",\n className,\n )}\n {...props}\n />\n </TableConfigContext.Provider>\n </div>\n );\n },\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"thead\">\n>(({ className, ...props }, ref) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const hasSortableColumns =\n config.enableColumnSort && config.sortableColumnIds.size > 0;\n\n return (\n <thead\n ref={ref}\n data-slot=\"table-header\"\n className={cn(\n hasSortableColumns && \"[&_tr:hover]:bg-transparent!\",\n className,\n )}\n {...props}\n />\n );\n});\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"tbody\">\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n data-slot=\"table-body\"\n className={cn(\n \"[&>tr:last-child>td:not([data-table-column-drag-strip])]:border-b-0\",\n className,\n )}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"tfoot\">\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n data-slot=\"table-footer\"\n className={cn(\n \"border-t border-primary/10 bg-primary/5 font-medium\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.ComponentProps<\"tr\">\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n data-slot=\"table-row\"\n className={cn(\n \"transition-colors duration-0 hover:bg-primary/3 data-[state=selected]:bg-primary/10\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\n/** same idea as sort chevrons: icon only, slightly larger than the 3.5 sort arrows */\nconst columnDragHandleIconClass = cn(\n \"text-primary/55 hover:text-primary/80\",\n \"cursor-grab active:cursor-grabbing touch-none\",\n \"shrink-0\",\n);\n\nexport type TableColumnDragHandleProps = Omit<\n React.ComponentProps<\"span\">,\n \"onDragStart\" | \"onDragEnd\"\n> & {\n /** must match the column & `dataTransfer` / tanstack `columnId` */\n columnId: string;\n onDragStart?: (e: React.DragEvent<HTMLSpanElement>) => void;\n onDragEnd?: (e: React.DragEvent<HTMLSpanElement>) => void;\n /**\n * label on the custom drag “card” under the cursor; omit for a default “Column”\n * placeholder (still more readable than the default browser ghost)\n */\n previewLabel?: string;\n};\n\nconst TableColumnDragHandle = React.forwardRef<\n HTMLSpanElement,\n TableColumnDragHandleProps\n>(function TableColumnDragHandle(\n { columnId, previewLabel, className, onDragStart, onDragEnd, title, ...rest },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex select-none items-center justify-center\",\n columnDragHandleIconClass,\n className,\n )}\n title={title ?? \"Drag to reorder this column\"}\n tabIndex={-1}\n aria-label=\"Drag to reorder this column\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(\"text/plain\", columnId);\n setColumnDragPreview(e, { title: previewLabel ?? \"Column\" });\n onDragStart?.(e);\n }}\n onDragEnd={onDragEnd}\n onClick={(ev) => ev.stopPropagation()}\n onKeyDown={(ev) => {\n if (ev.key === \" \" || ev.key === \"Enter\") {\n ev.preventDefault();\n }\n ev.stopPropagation();\n }}\n data-slot=\"table-column-drag-handle\"\n {...rest}\n >\n <GripVertical\n className=\"size-4 pointer-events-none\"\n strokeWidth={2.25}\n aria-hidden\n />\n </span>\n );\n});\nTableColumnDragHandle.displayName = \"TableColumnDragHandle\";\n\nexport type TableHeaderSortControlProps = {\n activeSort?: \"asc\" | \"desc\" | null;\n onRequest?: (e: React.MouseEvent) => void;\n className?: string;\n};\n\n/** chevron / sort control — place in the same row as the title (e.g. inside a narrow `inline-flex` with `gap-1`) */\nexport function TableHeaderSortControl({\n activeSort,\n onRequest,\n className,\n}: TableHeaderSortControlProps) {\n const isActiveSort = activeSort === \"asc\" || activeSort === \"desc\";\n return (\n <span\n className={cn(\"inline-flex shrink-0 items-stretch pl-0\", className)}\n >\n {onRequest ? (\n <span className=\"flex shrink-0 items-stretch\">\n <button\n type=\"button\"\n className=\"text-primary/90 hover:text-primary/95 inline-flex min-h-10 w-8 min-w-8 touch-manipulation items-center justify-center self-center rounded p-0 md:min-h-12\"\n onClick={(e) => {\n e.stopPropagation();\n onRequest(e);\n }}\n title=\"Change sort\"\n aria-label=\"Change sort order\"\n >\n {isActiveSort ? (\n activeSort === \"desc\" ? (\n <ArrowDown\n className=\"size-3.5 shrink-0\"\n strokeWidth={2.25}\n aria-hidden\n />\n ) : (\n <ArrowUp\n className=\"size-3.5 shrink-0\"\n strokeWidth={2.25}\n aria-hidden\n />\n )\n ) : (\n <ArrowUp\n className=\"text-primary/85 size-3.5 shrink-0 opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100\"\n strokeWidth={2.25}\n aria-hidden\n />\n )}\n </button>\n </span>\n ) : isActiveSort ? (\n <span className=\"inline-flex shrink-0 items-center\">\n {activeSort === \"desc\" ? (\n <ArrowDown\n className=\"size-3.5 shrink-0 self-center text-primary/90\"\n strokeWidth={2.25}\n aria-hidden\n />\n ) : (\n <ArrowUp\n className=\"size-3.5 shrink-0 self-center text-primary/90\"\n strokeWidth={2.25}\n aria-hidden\n />\n )}\n </span>\n ) : (\n <span className=\"inline-flex shrink-0 items-center\">\n <ArrowUp\n className=\"text-primary/85 size-3.5 shrink-0 self-center opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100\"\n strokeWidth={2.25}\n aria-hidden\n />\n </span>\n )}\n </span>\n );\n}\n\nexport type TableHeadProps = React.ComponentProps<\"th\"> & {\n columnId?: string;\n activeSort?: \"asc\" | \"desc\" | null;\n onColumnResizeStart?: (\n e: React.MouseEvent | React.TouchEvent | HTMLDivElement,\n ) => void;\n isColumnResizing?: boolean;\n /**\n * rendered at the far right of the head (e.g. column menu), after the label\n * and sort chevrons\n */\n headerEnd?: React.ReactNode;\n};\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n (\n {\n className,\n columnId,\n children,\n activeSort,\n onColumnResizeStart,\n isColumnResizing,\n style,\n headerEnd,\n ...props\n },\n ref,\n ) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const showSortUI =\n config.enableColumnSort &&\n columnId !== undefined &&\n config.sortableColumnIds.has(columnId);\n const isActiveSort =\n showSortUI && (activeSort === \"asc\" || activeSort === \"desc\");\n const hasHeaderEnd = headerEnd != null && headerEnd !== false;\n const showResizer =\n config.enableColumnResize && typeof onColumnResizeStart === \"function\";\n const drag = columnId ? columnDragThClasses(config, columnId) : undefined;\n\n return (\n <th\n ref={ref}\n data-resizing={isColumnResizing ? 1 : undefined}\n data-slot=\"table-head\"\n data-column-id={columnId}\n data-sortable={showSortUI ? \"true\" : undefined}\n data-sorted={isActiveSort ? (activeSort ?? undefined) : undefined}\n aria-sort={\n isActiveSort && activeSort\n ? activeSort === \"desc\"\n ? \"descending\"\n : \"ascending\"\n : showSortUI\n ? \"none\"\n : undefined\n }\n className={cn(\n \"h-10 min-w-0 px-3 text-left align-middle text-sm font-bold text-primary transition-colors duration-0 md:h-12 md:px-4 [&:has([role=checkbox])]:pr-0\",\n !drag && \"border-b border-primary/10\",\n showResizer && \"relative\",\n // th cursor-pointer is often overridden by child button default cursor\n (showSortUI || hasHeaderEnd) &&\n \"group hover:bg-primary/5 [&_button]:cursor-pointer\",\n drag,\n isColumnResizing && \"opacity-100\",\n className,\n )}\n style={style}\n {...props}\n >\n {showSortUI ? (\n <span className=\"inline-flex h-full w-full min-h-0 min-w-0 max-w-full items-center justify-start gap-0.5\">\n <span className=\"min-h-0 min-w-0 flex-1 text-left [&_[data-slot=table-column-drag-handle]]:cursor-grab [&_[data-slot=table-column-drag-handle]]:active:cursor-grabbing\">\n {children}\n </span>\n {hasHeaderEnd ? (\n <span className=\"inline-flex min-h-0 min-w-0 shrink-0 items-center\">\n {headerEnd}\n </span>\n ) : null}\n </span>\n ) : hasHeaderEnd ? (\n <span className=\"inline-flex h-full w-full min-h-0 min-w-0 max-w-full items-center justify-start gap-0.5\">\n <span className=\"min-h-0 min-w-0 flex-1 text-left [&_[data-slot=table-column-drag-handle]]:cursor-grab [&_[data-slot=table-column-drag-handle]]:active:cursor-grabbing\">\n {children}\n </span>\n <span className=\"inline-flex min-h-0 min-w-0 shrink-0 items-center\">\n {headerEnd}\n </span>\n </span>\n ) : (\n children\n )}\n {showResizer && (\n <div\n role=\"separator\"\n title=\"Drag to resize\"\n onMouseDown={onColumnResizeStart as React.MouseEventHandler}\n onTouchStart={onColumnResizeStart as React.TouchEventHandler}\n className={cn(\n // keep handle inside this th — negative right overlapped the next cell (bad with sticky/pinned columns)\n \"absolute top-0 right-0 z-1 h-full w-2.5 min-w-2.5 max-w-2.5 touch-none\",\n \"cursor-col-resize select-none\",\n isColumnResizing\n ? \"bg-primary/35\"\n : \"bg-primary/0 hover:bg-primary/25\",\n )}\n data-slot=\"table-column-resize-handle\"\n aria-hidden\n />\n )}\n </th>\n );\n },\n);\nTableHead.displayName = \"TableHead\";\n\nexport type TableCellProps = React.ComponentProps<\"td\"> & {\n /**\n * same `columnId` as `TableHead` in that column so body cells pick up\n * {@link TableConfigValue.columnDragState} styling\n */\n columnId?: string;\n};\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, style, columnId, ...props }, ref) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const drag = columnId ? columnDragTdClasses(config, columnId) : undefined;\n const columnDragStrip = Boolean(drag);\n\n return (\n <td\n ref={ref}\n data-slot=\"table-cell\"\n data-table-column-drag-strip={columnDragStrip ? \"\" : undefined}\n className={cn(\n \"min-w-0 border-b border-primary/10 p-3 align-middle text-sm text-primary/90 md:p-4 [&:has([role=checkbox])]:pr-0\",\n drag,\n className,\n )}\n style={style}\n data-column-id={columnId}\n {...props}\n />\n );\n },\n);\nTableCell.displayName = \"TableCell\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableRow,\n TableColumnDragHandle,\n TableHead,\n TableCell,\n};\n\nexport type { TableLayoutProps as TableProps };"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/table.tsx"],"names":["TableColumnDragHandle"],"mappings":"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","file":"table.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { ArrowDown, ArrowUp, GripVertical } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nexport type TableColumnDragState = {\n /** column id you are currently dragging, or `null` */\n draggingId: string | null;\n /** id of the th under the cursor, or `null` */\n dropTargetId: string | null;\n};\n\nexport type TableConfigValue = {\n sortableColumnIds: ReadonlySet<string>;\n enableColumnSort: boolean;\n enableColumnReorder: boolean;\n enableColumnResize: boolean;\n /**\n * when set (usually from host table state), `TableHead` / `TableCell` with\n * matching `columnId` get consistent column-drag visuals\n */\n columnDragState: TableColumnDragState | null;\n};\n\nconst defaultTableConfig: TableConfigValue = {\n sortableColumnIds: new Set(),\n enableColumnSort: true,\n enableColumnReorder: false,\n enableColumnResize: false,\n columnDragState: null,\n};\n\nconst TableConfigContext = React.createContext<TableConfigValue | null>(null);\nTableConfigContext.displayName = \"TableConfigContext\";\n\n/**\n * a compact card under the cursor so a column grab feels like moving the column, not\n * a tiny icon. call from `onDragStart` of {@link TableColumnDragHandle} or your handle.\n */\nexport function setColumnDragPreview(\n e: React.DragEvent,\n options: { title: string; width?: number; height?: number; hotspotX?: number; hotspotY?: number },\n) {\n if (!e.dataTransfer) return;\n e.dataTransfer.effectAllowed = \"move\";\n const width = options.width ?? 80;\n const height = options.height ?? 100;\n const el = document.createElement(\"div\");\n el.setAttribute(\"data-table-drag-preview\", \"\");\n const dark =\n typeof window !== \"undefined\" &&\n window.matchMedia &&\n window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n const bg = dark ? \"rgba(24,24,26,0.95)\" : \"rgba(255,255,255,0.96)\";\n const fg = dark ? \"rgba(250,250,250,0.95)\" : \"rgba(10,10,10,0.92)\";\n const border = dark\n ? \"1px solid rgba(255,255,255,0.12)\"\n : \"1px solid rgba(0,0,0,0.1)\";\n const shadow = \"0 12px 32px rgba(0,0,0,0.2),0 0 0 1px rgba(0,0,0,0.04)\";\n el.style.cssText = [\n \"position:fixed\",\n \"left:0\",\n \"top:0\",\n \"z-index:100000\",\n \"pointer-events:none\",\n \"box-sizing:border-box\",\n `width:${width}px`,\n `min-height:${height}px`,\n \"display:flex\",\n \"flex-direction:column\",\n \"align-items:center\",\n \"justify-content:flex-start\",\n \"gap:8px\",\n `padding:10px 8px 12px`,\n `color:${fg}`,\n `background:${bg}`,\n `border:${border}`,\n \"border-radius:8px\",\n `box-shadow:${shadow}`,\n ].join(\";\");\n const bar = document.createElement(\"div\");\n bar.style.cssText = `width:3px;flex:1;min-height:32px;border-radius:2px;background:${\n dark ? \"rgba(80,200,150,0.4)\" : \"rgba(20,80,200,0.2)\"\n };align-self:stretch;`;\n const t = document.createElement(\"div\");\n t.textContent = options.title;\n t.style.cssText =\n \"font:600 11px/1.2 system-ui,-apple-system,sans-serif;text-align:center;word-break:break-word;max-width:100%;\";\n el.appendChild(t);\n el.appendChild(bar);\n el.style.minHeight = `${height}px`;\n document.body.appendChild(el);\n void el.offsetWidth;\n e.dataTransfer.setDragImage(\n el,\n options.hotspotX ?? width / 2,\n options.hotspotY ?? 28,\n );\n requestAnimationFrame(() => {\n if (el.parentNode) el.parentNode.removeChild(el);\n });\n}\n\n/** source column (being dragged) and drop target use the same strip treatment */\nconst COLUMN_DRAG_TH_STRIP =\n \"relative z-20 box-border overflow-hidden rounded-t-lg border border-primary/20 bg-primary/8 opacity-70 shadow-sm\";\nconst COLUMN_DRAG_TD_STRIP =\n \"overflow-hidden border-x border-primary/15 bg-primary/5 opacity-70\";\n\nconst columnDragThClasses = (config: TableConfigValue, columnId: string) => {\n if (!config.enableColumnReorder || !config.columnDragState) return undefined;\n const d = config.columnDragState;\n const isSource = d.draggingId === columnId;\n const isDrop =\n d.dropTargetId === columnId &&\n d.draggingId != null &&\n d.draggingId !== columnId;\n if (isSource || isDrop) {\n return COLUMN_DRAG_TH_STRIP;\n }\n return undefined;\n};\n\nconst columnDragTdClasses = (config: TableConfigValue, columnId: string) => {\n if (!config.enableColumnReorder || !config.columnDragState) return undefined;\n const d = config.columnDragState;\n const isSource = d.draggingId === columnId;\n const isDrop =\n d.dropTargetId === columnId &&\n d.draggingId != null &&\n d.draggingId !== columnId;\n if (isSource || isDrop) {\n return COLUMN_DRAG_TD_STRIP;\n }\n return undefined;\n};\n\nexport type TableLayoutProps = {\n containerClassName?: string;\n sortableColumns?: readonly string[];\n enableColumnSort?: boolean;\n enableColumnReorder?: boolean;\n enableColumnResize?: boolean;\n /** pass `columnDragState` from the host (e.g. which column is being reordered) */\n columnDragState?: TableColumnDragState | null;\n};\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.ComponentProps<\"table\"> & TableLayoutProps\n>(\n (\n {\n className,\n containerClassName,\n sortableColumns,\n enableColumnSort: enableColumnSortFromProps,\n enableColumnReorder: enableColumnReorderFromProps,\n enableColumnResize: enableColumnResizeFromProps,\n columnDragState: columnDragStateFromProps,\n ...props\n },\n ref,\n ) => {\n const config = React.useMemo<TableConfigValue>(() => {\n const sortableColumnIds = new Set(sortableColumns ?? []);\n return {\n sortableColumnIds,\n enableColumnSort: enableColumnSortFromProps ?? true,\n enableColumnReorder: enableColumnReorderFromProps ?? false,\n enableColumnResize: enableColumnResizeFromProps ?? false,\n columnDragState: columnDragStateFromProps ?? null,\n };\n }, [\n sortableColumns,\n enableColumnSortFromProps,\n enableColumnReorderFromProps,\n enableColumnResizeFromProps,\n columnDragStateFromProps,\n ]);\n\n return (\n <div\n data-slot=\"table-container\"\n data-table-sort={config.enableColumnSort ? \"on\" : \"off\"}\n data-table-reorder={config.enableColumnReorder ? \"on\" : \"off\"}\n data-table-resize={config.enableColumnResize ? \"on\" : \"off\"}\n className={cn(\"relative w-full overflow-x-auto\", containerClassName)}\n >\n <TableConfigContext.Provider value={config}>\n <table\n ref={ref}\n data-slot=\"table\"\n className={cn(\n \"min-w-full w-max caption-bottom text-sm\",\n className,\n )}\n {...props}\n />\n </TableConfigContext.Provider>\n </div>\n );\n },\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"thead\">\n>(({ className, ...props }, ref) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const hasSortableColumns =\n config.enableColumnSort && config.sortableColumnIds.size > 0;\n\n return (\n <thead\n ref={ref}\n data-slot=\"table-header\"\n className={cn(\n hasSortableColumns && \"[&_tr:hover]:bg-transparent!\",\n className,\n )}\n {...props}\n />\n );\n});\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"tbody\">\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n data-slot=\"table-body\"\n className={cn(\n \"[&>tr:last-child>td:not([data-table-column-drag-strip])]:border-b-0\",\n className,\n )}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.ComponentProps<\"tfoot\">\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n data-slot=\"table-footer\"\n className={cn(\n \"border-t border-primary/10 bg-primary/5 font-medium\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.ComponentProps<\"tr\">\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n data-slot=\"table-row\"\n className={cn(\n \"transition-colors duration-0 hover:bg-primary/3 data-[state=selected]:bg-primary/10\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\n/** same idea as sort chevrons: icon only, slightly larger than the 3.5 sort arrows */\nconst columnDragHandleIconClass = cn(\n \"text-primary/55 hover:text-primary/80\",\n \"cursor-grab active:cursor-grabbing touch-none\",\n \"shrink-0\",\n);\n\nexport type TableColumnDragHandleProps = Omit<\n React.ComponentProps<\"span\">,\n \"onDragStart\" | \"onDragEnd\"\n> & {\n /** must match the column & `dataTransfer` / tanstack `columnId` */\n columnId: string;\n onDragStart?: (e: React.DragEvent<HTMLSpanElement>) => void;\n onDragEnd?: (e: React.DragEvent<HTMLSpanElement>) => void;\n /**\n * label on the custom drag “card” under the cursor; omit for a default “Column”\n * placeholder (still more readable than the default browser ghost)\n */\n previewLabel?: string;\n};\n\nconst TableColumnDragHandle = React.forwardRef<\n HTMLSpanElement,\n TableColumnDragHandleProps\n>(function TableColumnDragHandle(\n { columnId, previewLabel, className, onDragStart, onDragEnd, title, ...rest },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(\n \"inline-flex select-none items-center justify-center\",\n columnDragHandleIconClass,\n className,\n )}\n title={title ?? \"Drag to reorder this column\"}\n tabIndex={-1}\n aria-label=\"Drag to reorder this column\"\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(\"text/plain\", columnId);\n setColumnDragPreview(e, { title: previewLabel ?? \"Column\" });\n onDragStart?.(e);\n }}\n onDragEnd={onDragEnd}\n onClick={(ev) => ev.stopPropagation()}\n onKeyDown={(ev) => {\n if (ev.key === \" \" || ev.key === \"Enter\") {\n ev.preventDefault();\n }\n ev.stopPropagation();\n }}\n data-slot=\"table-column-drag-handle\"\n {...rest}\n >\n <GripVertical\n className=\"size-4 pointer-events-none\"\n strokeWidth={2.25}\n aria-hidden\n />\n </span>\n );\n});\nTableColumnDragHandle.displayName = \"TableColumnDragHandle\";\n\nexport type TableHeaderSortControlProps = {\n activeSort?: \"asc\" | \"desc\" | null;\n onRequest?: (e: React.MouseEvent) => void;\n className?: string;\n};\n\n/** chevron / sort control — place in the same row as the title (e.g. inside a narrow `inline-flex` with `gap-1`) */\nexport function TableHeaderSortControl({\n activeSort,\n onRequest,\n className,\n}: TableHeaderSortControlProps) {\n const isActiveSort = activeSort === \"asc\" || activeSort === \"desc\";\n return (\n <span\n className={cn(\"inline-flex shrink-0 items-stretch pl-0\", className)}\n >\n {onRequest ? (\n <span className=\"flex shrink-0 items-stretch\">\n <button\n type=\"button\"\n className=\"text-primary/90 hover:text-primary/95 inline-flex min-h-10 w-8 min-w-8 touch-manipulation items-center justify-center self-center rounded p-0 md:min-h-12\"\n onClick={(e) => {\n e.stopPropagation();\n onRequest(e);\n }}\n title=\"Change sort\"\n aria-label=\"Change sort order\"\n >\n {isActiveSort ? (\n activeSort === \"desc\" ? (\n <ArrowDown\n className=\"size-3.5 shrink-0\"\n strokeWidth={2.25}\n aria-hidden\n />\n ) : (\n <ArrowUp\n className=\"size-3.5 shrink-0\"\n strokeWidth={2.25}\n aria-hidden\n />\n )\n ) : (\n <ArrowUp\n className=\"text-primary/85 size-3.5 shrink-0 opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100\"\n strokeWidth={2.25}\n aria-hidden\n />\n )}\n </button>\n </span>\n ) : isActiveSort ? (\n <span className=\"inline-flex shrink-0 items-center\">\n {activeSort === \"desc\" ? (\n <ArrowDown\n className=\"size-3.5 shrink-0 self-center text-primary/90\"\n strokeWidth={2.25}\n aria-hidden\n />\n ) : (\n <ArrowUp\n className=\"size-3.5 shrink-0 self-center text-primary/90\"\n strokeWidth={2.25}\n aria-hidden\n />\n )}\n </span>\n ) : (\n <span className=\"inline-flex shrink-0 items-center\">\n <ArrowUp\n className=\"text-primary/85 size-3.5 shrink-0 self-center opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100\"\n strokeWidth={2.25}\n aria-hidden\n />\n </span>\n )}\n </span>\n );\n}\n\nexport type TableHeadProps = React.ComponentProps<\"th\"> & {\n columnId?: string;\n activeSort?: \"asc\" | \"desc\" | null;\n onColumnResizeStart?: (\n e: React.MouseEvent | React.TouchEvent | HTMLDivElement,\n ) => void;\n isColumnResizing?: boolean;\n /**\n * rendered at the far right of the head (e.g. column menu), after the label\n * and sort chevrons\n */\n headerEnd?: React.ReactNode;\n};\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n (\n {\n className,\n columnId,\n children,\n activeSort,\n onColumnResizeStart,\n isColumnResizing,\n style,\n headerEnd,\n ...props\n },\n ref,\n ) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const showSortUI =\n config.enableColumnSort &&\n columnId !== undefined &&\n config.sortableColumnIds.has(columnId);\n const isActiveSort =\n showSortUI && (activeSort === \"asc\" || activeSort === \"desc\");\n const hasHeaderEnd = headerEnd != null && headerEnd !== false;\n const showResizer =\n config.enableColumnResize && typeof onColumnResizeStart === \"function\";\n const drag = columnId ? columnDragThClasses(config, columnId) : undefined;\n\n return (\n <th\n ref={ref}\n data-resizing={isColumnResizing ? 1 : undefined}\n data-slot=\"table-head\"\n data-column-id={columnId}\n data-sortable={showSortUI ? \"true\" : undefined}\n data-sorted={isActiveSort ? (activeSort ?? undefined) : undefined}\n aria-sort={\n isActiveSort && activeSort\n ? activeSort === \"desc\"\n ? \"descending\"\n : \"ascending\"\n : showSortUI\n ? \"none\"\n : undefined\n }\n className={cn(\n \"h-10 min-w-0 px-3 text-left align-middle text-sm font-bold text-primary transition-colors duration-0 md:h-12 md:px-4 [&:has([role=checkbox])]:pr-0\",\n !drag && \"border-b border-primary/10\",\n showResizer && \"relative\",\n // th cursor-pointer is often overridden by child button default cursor\n (showSortUI || hasHeaderEnd) &&\n \"group hover:bg-primary/5 [&_button]:cursor-pointer\",\n drag,\n isColumnResizing && \"opacity-100\",\n className,\n )}\n style={style}\n {...props}\n >\n {showSortUI ? (\n <span className=\"inline-flex h-full w-full min-h-0 min-w-0 max-w-full items-center justify-start gap-0.5\">\n <span className=\"min-h-0 min-w-0 flex-1 text-left [&_[data-slot=table-column-drag-handle]]:cursor-grab [&_[data-slot=table-column-drag-handle]]:active:cursor-grabbing\">\n {children}\n </span>\n {hasHeaderEnd ? (\n <span className=\"inline-flex min-h-0 min-w-0 shrink-0 items-center\">\n {headerEnd}\n </span>\n ) : null}\n </span>\n ) : hasHeaderEnd ? (\n <span className=\"inline-flex h-full w-full min-h-0 min-w-0 max-w-full items-center justify-start gap-0.5\">\n <span className=\"min-h-0 min-w-0 flex-1 text-left [&_[data-slot=table-column-drag-handle]]:cursor-grab [&_[data-slot=table-column-drag-handle]]:active:cursor-grabbing\">\n {children}\n </span>\n <span className=\"inline-flex min-h-0 min-w-0 shrink-0 items-center\">\n {headerEnd}\n </span>\n </span>\n ) : (\n children\n )}\n {showResizer && (\n <div\n role=\"separator\"\n title=\"Drag to resize\"\n onMouseDown={onColumnResizeStart as React.MouseEventHandler}\n onTouchStart={onColumnResizeStart as React.TouchEventHandler}\n className={cn(\n // keep handle inside this th — negative right overlapped the next cell (bad with sticky/pinned columns)\n \"absolute top-0 right-0 z-1 h-full w-2.5 min-w-2.5 max-w-2.5 touch-none\",\n \"cursor-col-resize select-none\",\n isColumnResizing\n ? \"bg-primary/35\"\n : \"bg-primary/0 hover:bg-primary/25\",\n )}\n data-slot=\"table-column-resize-handle\"\n aria-hidden\n />\n )}\n </th>\n );\n },\n);\nTableHead.displayName = \"TableHead\";\n\nexport type TableCellProps = React.ComponentProps<\"td\"> & {\n /**\n * same `columnId` as `TableHead` in that column so body cells pick up\n * {@link TableConfigValue.columnDragState} styling\n */\n columnId?: string;\n};\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, style, columnId, ...props }, ref) => {\n const config = React.useContext(TableConfigContext) ?? defaultTableConfig;\n const drag = columnId ? columnDragTdClasses(config, columnId) : undefined;\n const columnDragStrip = Boolean(drag);\n\n return (\n <td\n ref={ref}\n data-slot=\"table-cell\"\n data-table-column-drag-strip={columnDragStrip ? \"\" : undefined}\n className={cn(\n \"min-w-0 border-b border-primary/10 p-3 align-middle text-sm text-primary/90 md:p-4 [&:has([role=checkbox])]:pr-0\",\n drag,\n className,\n )}\n style={style}\n data-column-id={columnId}\n {...props}\n />\n );\n },\n);\nTableCell.displayName = \"TableCell\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableRow,\n TableColumnDragHandle,\n TableHead,\n TableCell,\n};\n\nexport type { TableLayoutProps as TableProps };"]}
|
package/dist/react/tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/tabs.tsx"],"names":["masks"],"mappings":"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","file":"tabs.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst MD_UP = \"(min-width: 768px)\";\n\n//////////////////////////////////////////////// CONTEXT\n\nexport type TabsVariant = \"pill\" | \"underline\" | \"box\";\nexport type TabsAlignment = \"horizontal\" | \"vertical\";\nexport type TabsTriggerLayout = \"row\" | \"stacked\";\n\ninterface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n /** `pill` — compact pill track (default). `box` — larger padding, `rounded-xl` sliding fill. `underline` — border row + clip-path bar. */\n variant?: TabsVariant;\n /** Tab list layout: row (default) or stacked sidebar with panel beside it from `md` up; below `md`, vertical is shown as horizontal. */\n alignment?: TabsAlignment;\n children: React.ReactNode;\n}\n\nconst TabsContext = React.createContext<{\n value?: string;\n onValueChange: (value: string) => void;\n variant: TabsVariant;\n alignment: TabsAlignment;\n} | null>(null);\n\nfunction useTabs() {\n const context = React.useContext(TabsContext);\n if (!context) {\n throw new Error(\"Tabs components must be used within a <Tabs />\");\n }\n return context;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n defaultValue,\n value: controlledValue,\n onValueChange,\n children,\n className,\n variant = \"pill\",\n alignment = \"horizontal\",\n ...props\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [isMdUp, setIsMdUp] = React.useState(false);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n React.useEffect(() => {\n const mq = window.matchMedia(MD_UP);\n const sync = () => setIsMdUp(mq.matches);\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n\n const effectiveAlignment: TabsAlignment =\n alignment === \"vertical\" && isMdUp ? \"vertical\" : \"horizontal\";\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n return (\n <TabsContext.Provider\n value={{\n value,\n onValueChange: handleValueChange,\n variant,\n alignment: effectiveAlignment,\n }}\n >\n <div\n className={cn(\n \"flex gap-4\",\n effectiveAlignment === \"vertical\"\n ? \"flex-col md:flex-row md:items-stretch\"\n : \"flex-col\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n};\n\ninterface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\ntype ScrollFadeX = \"none\" | \"right\" | \"left\" | \"both\";\ntype ScrollFadeY = \"none\" | \"down\" | \"up\" | \"both\";\n\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className,\n ...props\n}) => {\n const { value: activeValue, onValueChange, variant, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n const rowRef = React.useRef<HTMLDivElement>(null);\n const scrollRef = React.useRef<HTMLDivElement>(null);\n const [scrollEdgesX, setScrollEdgesX] = React.useState<ScrollFadeX>(\"none\");\n const [scrollEdgesY, setScrollEdgesY] = React.useState<ScrollFadeY>(\"none\");\n\n const updateScrollEdges = React.useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n if (isVertical) {\n const scrollRange = el.scrollHeight - el.clientHeight;\n if (scrollRange < 8) {\n setScrollEdgesY((prev) => (prev === \"none\" ? prev : \"none\"));\n return;\n }\n const canUp = el.scrollTop > 1;\n const canDown = el.scrollTop < scrollRange - 1;\n const next: ScrollFadeY =\n canUp && canDown\n ? \"both\"\n : canUp\n ? \"up\"\n : canDown\n ? \"down\"\n : \"none\";\n setScrollEdgesY((prev) => (prev === next ? prev : next));\n } else {\n const scrollRange = el.scrollWidth - el.clientWidth;\n if (scrollRange < 8) {\n setScrollEdgesX((prev) => (prev === \"none\" ? prev : \"none\"));\n return;\n }\n const canLeft = el.scrollLeft > 1;\n const canRight = el.scrollLeft < scrollRange - 1;\n const next: ScrollFadeX =\n canLeft && canRight\n ? \"both\"\n : canLeft\n ? \"left\"\n : canRight\n ? \"right\"\n : \"none\";\n setScrollEdgesX((prev) => (prev === next ? prev : next));\n }\n }, [isVertical]);\n\n React.useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n updateScrollEdges();\n el.addEventListener(\"scroll\", updateScrollEdges, { passive: true });\n window.addEventListener(\"resize\", updateScrollEdges, { passive: true });\n return () => {\n el.removeEventListener(\"scroll\", updateScrollEdges);\n window.removeEventListener(\"resize\", updateScrollEdges);\n };\n }, [updateScrollEdges, children, isVertical]);\n\n const updateIndicatorClip = React.useCallback(() => {\n const row = rowRef.current;\n if (!row || (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\"))\n return;\n\n const tab = row.querySelector<HTMLElement>(\n '[role=\"tab\"][aria-selected=\"true\"]:not(:disabled)',\n );\n if (!tab) {\n row.style.setProperty(\"--tab-indicator-start\", \"0px\");\n row.style.setProperty(\"--tab-indicator-end\", \"0px\");\n return;\n }\n\n if (isVertical) {\n const start = tab.offsetTop;\n const end = tab.offsetTop + tab.offsetHeight;\n row.style.setProperty(\"--tab-indicator-start\", `${start}px`);\n row.style.setProperty(\"--tab-indicator-end\", `${end}px`);\n } else {\n const start = tab.offsetLeft;\n const end = tab.offsetLeft + tab.offsetWidth;\n row.style.setProperty(\"--tab-indicator-start\", `${start}px`);\n row.style.setProperty(\"--tab-indicator-end\", `${end}px`);\n }\n }, [variant, isVertical]);\n\n React.useLayoutEffect(() => {\n if (variant === \"pill\" || variant === \"underline\" || variant === \"box\")\n updateIndicatorClip();\n }, [activeValue, children, updateIndicatorClip, variant]);\n\n React.useEffect(() => {\n if (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\") return;\n const onResize = () => updateIndicatorClip();\n window.addEventListener(\"resize\", onResize, { passive: true });\n return () => window.removeEventListener(\"resize\", onResize);\n }, [updateIndicatorClip, activeValue, variant]);\n\n React.useEffect(() => {\n if (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\") return;\n const el = rowRef.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => updateIndicatorClip());\n ro.observe(el);\n return () => ro.disconnect();\n }, [updateIndicatorClip, variant]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const dir = isVertical\n ? e.key === \"ArrowDown\"\n ? 1\n : e.key === \"ArrowUp\"\n ? -1\n : 0\n : e.key === \"ArrowRight\"\n ? 1\n : e.key === \"ArrowLeft\"\n ? -1\n : 0;\n if (!dir) return;\n const row = rowRef.current;\n if (!row) return;\n const tabs = Array.from(\n row.querySelectorAll<HTMLButtonElement>('[role=\"tab\"][data-tab-value]'),\n ).filter((t) => !t.disabled);\n if (tabs.length === 0) return;\n const values = tabs.map((t) => t.dataset.tabValue!);\n let idx = activeValue ? values.indexOf(activeValue) : 0;\n if (idx < 0) idx = 0;\n const next = (idx + dir + values.length) % values.length;\n const nextValue = values[next];\n if (nextValue) {\n e.preventDefault();\n onValueChange(nextValue);\n tabs[next]?.focus();\n }\n },\n [activeValue, onValueChange, isVertical],\n );\n\n const maskStyle = React.useMemo<React.CSSProperties | undefined>(() => {\n const fade = \"24px\";\n if (isVertical) {\n if (scrollEdgesY === \"none\") return undefined;\n const masks: Record<ScrollFadeY, string> = {\n down: `linear-gradient(to bottom, black calc(100% - ${fade}), transparent)`,\n up: `linear-gradient(to top, black calc(100% - ${fade}), transparent)`,\n both: `linear-gradient(to bottom, transparent, black ${fade}, black calc(100% - ${fade}), transparent)`,\n none: \"\",\n };\n return {\n WebkitMaskImage: masks[scrollEdgesY],\n maskImage: masks[scrollEdgesY],\n };\n }\n if (scrollEdgesX === \"none\") return undefined;\n const masks: Record<ScrollFadeX, string> = {\n right: `linear-gradient(to right, black calc(100% - ${fade}), transparent)`,\n left: `linear-gradient(to left, black calc(100% - ${fade}), transparent)`,\n both: `linear-gradient(to right, transparent, black ${fade}, black calc(100% - ${fade}), transparent)`,\n none: \"\",\n };\n return {\n WebkitMaskImage: masks[scrollEdgesX],\n maskImage: masks[scrollEdgesX],\n };\n }, [scrollEdgesX, scrollEdgesY, isVertical]);\n\n const pillClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px) round 9999px)\";\n const pillClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0 round 9999px)\";\n const boxClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px) round 12px)\";\n const boxClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0 round 12px)\";\n const underlineClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px))\";\n const underlineClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0)\";\n\n return (\n <div\n ref={scrollRef}\n onKeyDown={handleKeyDown}\n className={cn(\n isVertical\n ? \"max-h-72 min-h-0 w-full max-w-52 shrink-0 overflow-x-hidden overflow-y-auto md:max-h-none md:max-w-56\"\n : \"max-w-full overflow-x-auto\",\n \"[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\",\n variant === \"pill\" && !isVertical && \"pb-1\",\n variant === \"box\" && !isVertical && \"pb-1\",\n variant === \"underline\" && !isVertical && \"pb-0\",\n variant === \"underline\" && isVertical && \"pr-0\",\n className,\n )}\n style={maskStyle}\n {...props}\n >\n <div\n ref={rowRef}\n role=\"tablist\"\n aria-orientation={isVertical ? \"vertical\" : \"horizontal\"}\n className={cn(\n \"flex\",\n isVertical\n ? \"w-full flex-col items-stretch\"\n : cn(\n \"inline-flex w-max min-w-full\",\n variant === \"box\" ? \"items-stretch\" : \"items-center\",\n ),\n (variant === \"pill\" || variant === \"underline\" || variant === \"box\") &&\n \"relative\",\n variant === \"pill\" && \"gap-1\",\n variant === \"box\" && \"gap-2\",\n variant === \"pill\" && isVertical && \"px-1 py-1\",\n variant === \"box\" && isVertical && \"px-1 py-1\",\n variant === \"underline\" &&\n (isVertical\n ? \"gap-0 rounded-none border-l border-border bg-transparent py-0 pl-0\"\n : \"gap-2 rounded-none border-b border-border bg-transparent py-0\"),\n )}\n >\n {variant === \"pill\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-indicator\"\n style={{\n clipPath: isVertical ? pillClipVertical : pillClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n isVertical\n ? \"inset-y-0 left-0 right-0\"\n : \"inset-x-0 top-0 h-9 rounded-full\",\n )}\n />\n )}\n {variant === \"box\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-box-indicator\"\n style={{\n clipPath: isVertical ? boxClipVertical : boxClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-0 right-0 z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n )}\n />\n )}\n {variant === \"underline\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-underline-indicator\"\n style={{\n clipPath: isVertical\n ? underlineClipVertical\n : underlineClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n isVertical\n ? \"inset-y-0 left-0 w-0.5\"\n : \"inset-x-0 bottom-0 h-0.5\",\n )}\n />\n )}\n {children}\n </div>\n </div>\n );\n};\n\ninterface TabsTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\"\n> {\n value?: string;\n icon?: React.ReactNode;\n iconPosition?: \"left\" | \"right\";\n /** `stacked` — icon above label (needs `icon`). `row` — default inline row. */\n layout?: TabsTriggerLayout;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n icon,\n iconPosition = \"left\",\n layout = \"row\",\n onClick,\n className,\n disabled,\n ...props\n}) => {\n const { value: activeValue, onValueChange, variant, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n const isActive = value ? activeValue === value : false;\n const showSelected = isActive && !disabled;\n const isStacked = layout === \"stacked\" && Boolean(icon);\n const iconWrapClass =\n \"inline-flex shrink-0 items-center justify-center [&_svg]:shrink-0\";\n const labelWrapClass = \"block min-w-0 w-full text-left leading-snug\";\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n tabIndex={\n value !== undefined ? (isActive && !disabled ? 0 : -1) : undefined\n }\n disabled={disabled}\n data-tab-value={value}\n onClick={(e) => {\n if (disabled) return;\n if (value) onValueChange(value);\n onClick?.(e);\n }}\n className={cn(\n \"relative z-1 inline-flex shrink-0 select-none touch-manipulation [-webkit-tap-highlight-color:transparent]\",\n \"cursor-pointer disabled:cursor-not-allowed\",\n isStacked\n ? \"flex-col items-start justify-start gap-1.5 whitespace-normal\"\n : \"items-center justify-center gap-2 whitespace-nowrap\",\n isVertical && \"w-full justify-start\",\n variant === \"pill\" && [\n \"h-9 rounded-full px-4 font-semibold leading-5 text-[13px] md:text-[15px]\",\n \"[transition:background-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),border-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),scale_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),color_var(--duration-short-m,0.2s)_var(--ease-in-out,cubic-bezier(.85,0,.15,1))]\",\n !isVertical && \"enabled:active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? [\n \"text-background\",\n \"**:data-[slot=badge]:border-none **:data-[slot=badge]:bg-background/20 **:data-[slot=badge]:text-background\",\n ]\n : \"bg-primary/4 text-primary/50 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:bg-primary/10 enabled:active:bg-primary/10\",\n ],\n variant === \"box\" && [\n \"min-h-11 rounded-xl px-4 pt-1.5 pb-2 font-semibold leading-5 text-[13px] md:text-[15px]\",\n isVertical\n ? \"justify-start text-left\"\n : \"justify-center text-center\",\n \"[transition:background-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),color_var(--duration-short-m,0.2s)_var(--ease-in-out,cubic-bezier(.85,0,.15,1))]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? [\n \"text-background\",\n \"**:data-[slot=badge]:border-none **:data-[slot=badge]:bg-background/20 **:data-[slot=badge]:text-background\",\n ]\n : \"bg-transparent text-primary/55 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:bg-primary/[0.07] enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:text-primary/75\",\n ],\n variant === \"underline\" && [\n \"h-auto rounded-none border-0 bg-transparent py-2 text-sm font-medium shadow-none\",\n isVertical\n ? isStacked\n ? \"pl-6 pr-2\"\n : \"pl-5 pr-2\"\n : \"px-2\",\n \"transition-[color,transform] duration-200 ease-in-out\",\n \"motion-reduce:transition-colors motion-reduce:enabled:active:scale-100\",\n \"enabled:active:scale-[0.98]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? \"text-primary\"\n : \"text-primary/50 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:text-primary/70\",\n ],\n \"disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n {isStacked && icon && iconPosition === \"left\" && (\n <>\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n <span className={labelWrapClass}>{children}</span>\n </>\n )}\n {isStacked && icon && iconPosition === \"right\" && (\n <>\n <span className={labelWrapClass}>{children}</span>\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n </>\n )}\n {!isStacked && icon && iconPosition === \"left\" && (\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n )}\n {!isStacked && children}\n {!isStacked && icon && iconPosition === \"right\" && (\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n )}\n </button>\n );\n};\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className,\n ...props\n}) => {\n const { value: activeValue, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n\n if (activeValue !== value) return null;\n\n return (\n <div\n role=\"tabpanel\"\n className={cn(\n \"animate-in fade-in-0 duration-200\",\n isVertical ? \"slide-in-from-left-1\" : \"slide-in-from-top-1\",\n \"ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n isVertical && \"min-w-0 flex-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/tabs.tsx"],"names":["masks"],"mappings":"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","file":"tabs.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst MD_UP = \"(min-width: 768px)\";\n\n//////////////////////////////////////////////// CONTEXT\n\nexport type TabsVariant = \"pill\" | \"underline\" | \"box\";\nexport type TabsAlignment = \"horizontal\" | \"vertical\";\nexport type TabsTriggerLayout = \"row\" | \"stacked\";\n\ninterface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n defaultValue?: string;\n value?: string;\n onValueChange?: (value: string) => void;\n /** `pill` — compact pill track (default). `box` — larger padding, `rounded-xl` sliding fill. `underline` — border row + clip-path bar. */\n variant?: TabsVariant;\n /** Tab list layout: row (default) or stacked sidebar with panel beside it from `md` up; below `md`, vertical is shown as horizontal. */\n alignment?: TabsAlignment;\n children: React.ReactNode;\n}\n\nconst TabsContext = React.createContext<{\n value?: string;\n onValueChange: (value: string) => void;\n variant: TabsVariant;\n alignment: TabsAlignment;\n} | null>(null);\n\nfunction useTabs() {\n const context = React.useContext(TabsContext);\n if (!context) {\n throw new Error(\"Tabs components must be used within a <Tabs />\");\n }\n return context;\n}\n\nexport const Tabs: React.FC<TabsProps> = ({\n defaultValue,\n value: controlledValue,\n onValueChange,\n children,\n className,\n variant = \"pill\",\n alignment = \"horizontal\",\n ...props\n}) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [isMdUp, setIsMdUp] = React.useState(false);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n React.useEffect(() => {\n const mq = window.matchMedia(MD_UP);\n const sync = () => setIsMdUp(mq.matches);\n sync();\n mq.addEventListener(\"change\", sync);\n return () => mq.removeEventListener(\"change\", sync);\n }, []);\n\n const effectiveAlignment: TabsAlignment =\n alignment === \"vertical\" && isMdUp ? \"vertical\" : \"horizontal\";\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange],\n );\n\n return (\n <TabsContext.Provider\n value={{\n value,\n onValueChange: handleValueChange,\n variant,\n alignment: effectiveAlignment,\n }}\n >\n <div\n className={cn(\n \"flex gap-4\",\n effectiveAlignment === \"vertical\"\n ? \"flex-col md:flex-row md:items-stretch\"\n : \"flex-col\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n};\n\ninterface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\ntype ScrollFadeX = \"none\" | \"right\" | \"left\" | \"both\";\ntype ScrollFadeY = \"none\" | \"down\" | \"up\" | \"both\";\n\nexport const TabsList: React.FC<TabsListProps> = ({\n children,\n className,\n ...props\n}) => {\n const { value: activeValue, onValueChange, variant, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n const rowRef = React.useRef<HTMLDivElement>(null);\n const scrollRef = React.useRef<HTMLDivElement>(null);\n const [scrollEdgesX, setScrollEdgesX] = React.useState<ScrollFadeX>(\"none\");\n const [scrollEdgesY, setScrollEdgesY] = React.useState<ScrollFadeY>(\"none\");\n\n const updateScrollEdges = React.useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n if (isVertical) {\n const scrollRange = el.scrollHeight - el.clientHeight;\n if (scrollRange < 8) {\n setScrollEdgesY((prev) => (prev === \"none\" ? prev : \"none\"));\n return;\n }\n const canUp = el.scrollTop > 1;\n const canDown = el.scrollTop < scrollRange - 1;\n const next: ScrollFadeY =\n canUp && canDown\n ? \"both\"\n : canUp\n ? \"up\"\n : canDown\n ? \"down\"\n : \"none\";\n setScrollEdgesY((prev) => (prev === next ? prev : next));\n } else {\n const scrollRange = el.scrollWidth - el.clientWidth;\n if (scrollRange < 8) {\n setScrollEdgesX((prev) => (prev === \"none\" ? prev : \"none\"));\n return;\n }\n const canLeft = el.scrollLeft > 1;\n const canRight = el.scrollLeft < scrollRange - 1;\n const next: ScrollFadeX =\n canLeft && canRight\n ? \"both\"\n : canLeft\n ? \"left\"\n : canRight\n ? \"right\"\n : \"none\";\n setScrollEdgesX((prev) => (prev === next ? prev : next));\n }\n }, [isVertical]);\n\n React.useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n updateScrollEdges();\n el.addEventListener(\"scroll\", updateScrollEdges, { passive: true });\n window.addEventListener(\"resize\", updateScrollEdges, { passive: true });\n return () => {\n el.removeEventListener(\"scroll\", updateScrollEdges);\n window.removeEventListener(\"resize\", updateScrollEdges);\n };\n }, [updateScrollEdges, children, isVertical]);\n\n const updateIndicatorClip = React.useCallback(() => {\n const row = rowRef.current;\n if (!row || (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\"))\n return;\n\n const tab = row.querySelector<HTMLElement>(\n '[role=\"tab\"][aria-selected=\"true\"]:not(:disabled)',\n );\n if (!tab) {\n row.style.setProperty(\"--tab-indicator-start\", \"0px\");\n row.style.setProperty(\"--tab-indicator-end\", \"0px\");\n return;\n }\n\n if (isVertical) {\n const start = tab.offsetTop;\n const end = tab.offsetTop + tab.offsetHeight;\n row.style.setProperty(\"--tab-indicator-start\", `${start}px`);\n row.style.setProperty(\"--tab-indicator-end\", `${end}px`);\n } else {\n const start = tab.offsetLeft;\n const end = tab.offsetLeft + tab.offsetWidth;\n row.style.setProperty(\"--tab-indicator-start\", `${start}px`);\n row.style.setProperty(\"--tab-indicator-end\", `${end}px`);\n }\n }, [variant, isVertical]);\n\n React.useLayoutEffect(() => {\n if (variant === \"pill\" || variant === \"underline\" || variant === \"box\")\n updateIndicatorClip();\n }, [activeValue, children, updateIndicatorClip, variant]);\n\n React.useEffect(() => {\n if (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\") return;\n const onResize = () => updateIndicatorClip();\n window.addEventListener(\"resize\", onResize, { passive: true });\n return () => window.removeEventListener(\"resize\", onResize);\n }, [updateIndicatorClip, activeValue, variant]);\n\n React.useEffect(() => {\n if (variant !== \"pill\" && variant !== \"underline\" && variant !== \"box\") return;\n const el = rowRef.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => updateIndicatorClip());\n ro.observe(el);\n return () => ro.disconnect();\n }, [updateIndicatorClip, variant]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const dir = isVertical\n ? e.key === \"ArrowDown\"\n ? 1\n : e.key === \"ArrowUp\"\n ? -1\n : 0\n : e.key === \"ArrowRight\"\n ? 1\n : e.key === \"ArrowLeft\"\n ? -1\n : 0;\n if (!dir) return;\n const row = rowRef.current;\n if (!row) return;\n const tabs = Array.from(\n row.querySelectorAll<HTMLButtonElement>('[role=\"tab\"][data-tab-value]'),\n ).filter((t) => !t.disabled);\n if (tabs.length === 0) return;\n const values = tabs.map((t) => t.dataset.tabValue!);\n let idx = activeValue ? values.indexOf(activeValue) : 0;\n if (idx < 0) idx = 0;\n const next = (idx + dir + values.length) % values.length;\n const nextValue = values[next];\n if (nextValue) {\n e.preventDefault();\n onValueChange(nextValue);\n tabs[next]?.focus();\n }\n },\n [activeValue, onValueChange, isVertical],\n );\n\n const maskStyle = React.useMemo<React.CSSProperties | undefined>(() => {\n const fade = \"24px\";\n if (isVertical) {\n if (scrollEdgesY === \"none\") return undefined;\n const masks: Record<ScrollFadeY, string> = {\n down: `linear-gradient(to bottom, black calc(100% - ${fade}), transparent)`,\n up: `linear-gradient(to top, black calc(100% - ${fade}), transparent)`,\n both: `linear-gradient(to bottom, transparent, black ${fade}, black calc(100% - ${fade}), transparent)`,\n none: \"\",\n };\n return {\n WebkitMaskImage: masks[scrollEdgesY],\n maskImage: masks[scrollEdgesY],\n };\n }\n if (scrollEdgesX === \"none\") return undefined;\n const masks: Record<ScrollFadeX, string> = {\n right: `linear-gradient(to right, black calc(100% - ${fade}), transparent)`,\n left: `linear-gradient(to left, black calc(100% - ${fade}), transparent)`,\n both: `linear-gradient(to right, transparent, black ${fade}, black calc(100% - ${fade}), transparent)`,\n none: \"\",\n };\n return {\n WebkitMaskImage: masks[scrollEdgesX],\n maskImage: masks[scrollEdgesX],\n };\n }, [scrollEdgesX, scrollEdgesY, isVertical]);\n\n const pillClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px) round 9999px)\";\n const pillClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0 round 9999px)\";\n const boxClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px) round 12px)\";\n const boxClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0 round 12px)\";\n const underlineClipHorizontal =\n \"inset(0 calc(100% - var(--tab-indicator-end, 0px)) 0 var(--tab-indicator-start, 0px))\";\n const underlineClipVertical =\n \"inset(var(--tab-indicator-start, 0px) 0 calc(100% - var(--tab-indicator-end, 0px)) 0)\";\n\n return (\n <div\n ref={scrollRef}\n onKeyDown={handleKeyDown}\n className={cn(\n isVertical\n ? \"max-h-72 min-h-0 w-full max-w-52 shrink-0 overflow-x-hidden overflow-y-auto md:max-h-none md:max-w-56\"\n : \"max-w-full overflow-x-auto\",\n \"[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\",\n variant === \"pill\" && !isVertical && \"pb-1\",\n variant === \"box\" && !isVertical && \"pb-1\",\n variant === \"underline\" && !isVertical && \"pb-0\",\n variant === \"underline\" && isVertical && \"pr-0\",\n className,\n )}\n style={maskStyle}\n {...props}\n >\n <div\n ref={rowRef}\n role=\"tablist\"\n aria-orientation={isVertical ? \"vertical\" : \"horizontal\"}\n className={cn(\n \"flex\",\n isVertical\n ? \"w-full flex-col items-stretch\"\n : cn(\n \"inline-flex w-max min-w-full\",\n variant === \"box\" ? \"items-stretch\" : \"items-center\",\n ),\n (variant === \"pill\" || variant === \"underline\" || variant === \"box\") &&\n \"relative\",\n variant === \"pill\" && \"gap-1\",\n variant === \"box\" && \"gap-2\",\n variant === \"pill\" && isVertical && \"px-1 py-1\",\n variant === \"box\" && isVertical && \"px-1 py-1\",\n variant === \"underline\" &&\n (isVertical\n ? \"gap-0 rounded-none border-l border-border bg-transparent py-0 pl-0\"\n : \"gap-2 rounded-none border-b border-border bg-transparent py-0\"),\n )}\n >\n {variant === \"pill\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-indicator\"\n style={{\n clipPath: isVertical ? pillClipVertical : pillClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n isVertical\n ? \"inset-y-0 left-0 right-0\"\n : \"inset-x-0 top-0 h-9 rounded-full\",\n )}\n />\n )}\n {variant === \"box\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-box-indicator\"\n style={{\n clipPath: isVertical ? boxClipVertical : boxClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute inset-y-0 left-0 right-0 z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n )}\n />\n )}\n {variant === \"underline\" && (\n <div\n aria-hidden=\"true\"\n data-slot=\"tabs-underline-indicator\"\n style={{\n clipPath: isVertical\n ? underlineClipVertical\n : underlineClipHorizontal,\n }}\n className={cn(\n \"pointer-events-none absolute z-0 bg-primary\",\n \"motion-reduce:transition-none\",\n \"motion-safe:transition-[clip-path] motion-safe:duration-300 motion-safe:ease-[cubic-bezier(0,0.55,0.45,1)]\",\n isVertical\n ? \"inset-y-0 left-0 w-0.5\"\n : \"inset-x-0 bottom-0 h-0.5\",\n )}\n />\n )}\n {children}\n </div>\n </div>\n );\n};\n\ninterface TabsTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"onClick\"\n> {\n value?: string;\n icon?: React.ReactNode;\n iconPosition?: \"left\" | \"right\";\n /** `stacked` — icon above label (needs `icon`). `row` — default inline row. */\n layout?: TabsTriggerLayout;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport const TabsTrigger: React.FC<TabsTriggerProps> = ({\n value,\n children,\n icon,\n iconPosition = \"left\",\n layout = \"row\",\n onClick,\n className,\n disabled,\n ...props\n}) => {\n const { value: activeValue, onValueChange, variant, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n const isActive = value ? activeValue === value : false;\n const showSelected = isActive && !disabled;\n const isStacked = layout === \"stacked\" && Boolean(icon);\n const iconWrapClass =\n \"inline-flex shrink-0 items-center justify-center [&_svg]:shrink-0\";\n const labelWrapClass = \"block min-w-0 w-full text-left leading-snug\";\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-disabled={disabled || undefined}\n tabIndex={\n value !== undefined ? (isActive && !disabled ? 0 : -1) : undefined\n }\n disabled={disabled}\n data-tab-value={value}\n onClick={(e) => {\n if (disabled) return;\n if (value) onValueChange(value);\n onClick?.(e);\n }}\n className={cn(\n \"relative z-1 inline-flex shrink-0 select-none touch-manipulation [-webkit-tap-highlight-color:transparent]\",\n \"cursor-pointer disabled:cursor-not-allowed\",\n isStacked\n ? \"flex-col items-start justify-start gap-1.5 whitespace-normal\"\n : \"items-center justify-center gap-2 whitespace-nowrap\",\n isVertical && \"w-full justify-start\",\n variant === \"pill\" && [\n \"h-9 rounded-full px-4 font-semibold leading-5 text-[13px] md:text-[15px]\",\n \"[transition:background-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),border-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),scale_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),color_var(--duration-short-m,0.2s)_var(--ease-in-out,cubic-bezier(.85,0,.15,1))]\",\n !isVertical && \"enabled:active:scale-[0.96]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? [\n \"text-background\",\n \"**:data-[slot=badge]:border-none **:data-[slot=badge]:bg-background/20 **:data-[slot=badge]:text-background\",\n ]\n : \"bg-primary/4 text-primary/50 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:bg-primary/10 enabled:active:bg-primary/10\",\n ],\n variant === \"box\" && [\n \"min-h-11 rounded-xl px-4 pt-1.5 pb-2 font-semibold leading-5 text-[13px] md:text-[15px]\",\n isVertical\n ? \"justify-start text-left\"\n : \"justify-center text-center\",\n \"[transition:background-color_var(--duration-short-s,0.1s)_var(--ease-out,cubic-bezier(0,.55,.45,1)),color_var(--duration-short-m,0.2s)_var(--ease-in-out,cubic-bezier(.85,0,.15,1))]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? [\n \"text-background\",\n \"**:data-[slot=badge]:border-none **:data-[slot=badge]:bg-background/20 **:data-[slot=badge]:text-background\",\n ]\n : \"bg-transparent text-primary/55 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:bg-primary/[0.07] enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:text-primary/75\",\n ],\n variant === \"underline\" && [\n \"h-auto rounded-none border-0 bg-transparent py-2 text-sm font-medium shadow-none\",\n isVertical\n ? isStacked\n ? \"pl-6 pr-2\"\n : \"pl-5 pr-2\"\n : \"px-2\",\n \"transition-[color,transform] duration-200 ease-in-out\",\n \"motion-reduce:transition-colors motion-reduce:enabled:active:scale-100\",\n \"enabled:active:scale-[0.98]\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n showSelected\n ? \"text-primary\"\n : \"text-primary/50 enabled:[@media(hover:hover)_and_(pointer:fine)]:hover:text-primary/70\",\n ],\n \"disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n {isStacked && icon && iconPosition === \"left\" && (\n <>\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n <span className={labelWrapClass}>{children}</span>\n </>\n )}\n {isStacked && icon && iconPosition === \"right\" && (\n <>\n <span className={labelWrapClass}>{children}</span>\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n </>\n )}\n {!isStacked && icon && iconPosition === \"left\" && (\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n )}\n {!isStacked && children}\n {!isStacked && icon && iconPosition === \"right\" && (\n <span className={iconWrapClass} aria-hidden>\n {icon}\n </span>\n )}\n </button>\n );\n};\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nexport const TabsContent: React.FC<TabsContentProps> = ({\n value,\n children,\n className,\n ...props\n}) => {\n const { value: activeValue, alignment } = useTabs();\n const isVertical = alignment === \"vertical\";\n\n if (activeValue !== value) return null;\n\n return (\n <div\n role=\"tabpanel\"\n className={cn(\n \"animate-in fade-in-0 duration-200\",\n isVertical ? \"slide-in-from-left-1\" : \"slide-in-from-top-1\",\n \"ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n isVertical && \"min-w-0 flex-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/textarea.tsx"],"names":[],"mappings":";;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,iPAAA;AAAA,UACA,iDAAA;AAAA,UACA,+EAAA;AAAA,UACA,wGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"textarea.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nimport { cn } from \"
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/textarea.tsx"],"names":[],"mappings":";;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACCA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,UAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,iPAAA;AAAA,UACA,iDAAA;AAAA,UACA,+EAAA;AAAA,UACA,wGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"textarea.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nexport type TextareaProps = React.ComponentProps<\"textarea\">;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(\n \"border-input bg-background text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex min-h-20 w-full min-w-0 rounded-md border px-3 py-2 text-sm outline-none transition-[color,box-shadow]\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"]}
|