@refraction-ui/react 0.23.0 → 0.23.2
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/{chunk-V24GDHUX.js → chunk-4ACSHPCM.js} +2 -2
- package/dist/{chunk-SDAJVXD4.js → chunk-5P56PN3J.js} +2 -2
- package/dist/chunk-75BKRTPO.js +417 -0
- package/dist/{chunk-2Q6HHFAN.js.map → chunk-75BKRTPO.js.map} +1 -1
- package/dist/{chunk-QPCKJ2YR.js → chunk-GG6MZDGV.js} +2 -2
- package/dist/{chunk-QDMLIDYN.js → chunk-GU5MI7FX.js} +2 -2
- package/dist/{chunk-Z5IHYNQD.js → chunk-JZQ5ZL46.js} +3 -3
- package/dist/{chunk-RSWOLRIC.js → chunk-KIZD73DK.js} +2 -2
- package/dist/{chunk-XMFNBOPO.js → chunk-PY2TIFCT.js} +2 -2
- package/dist/{chunk-3I3DYDHR.js → chunk-WNLYPQOS.js} +2 -2
- package/dist/{chunk-63N4PZUJ.js → chunk-X6HEKRWE.js} +2 -2
- package/dist/{chunk-WYKPPK3W.js → chunk-XAJDSVZR.js} +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/react-data-table/index.d.cts +2 -1
- package/dist/internal/react-data-table/index.d.ts +2 -1
- package/dist/internal/react-stat-grid/index.d.ts +2 -1
- package/dist/internal/shared/index.d.cts +10 -1
- package/dist/internal/shared/index.d.ts +10 -1
- package/dist/react-accordion.js +1 -1
- package/dist/react-action-list.js +1 -1
- package/dist/react-ai.js +1 -1
- package/dist/react-analytics.js +1 -1
- package/dist/react-animated-text.js +1 -1
- package/dist/react-app-shell.js +1 -1
- package/dist/react-audience-feature-card.js +1 -1
- package/dist/react-audio-room.js +1 -1
- package/dist/react-auth.js +1 -1
- package/dist/react-avatar-group.js +1 -1
- package/dist/react-avatar.js +1 -1
- package/dist/react-badge.js +1 -1
- package/dist/react-bottom-nav.js +1 -1
- package/dist/react-brand-network-cell.js +1 -1
- package/dist/react-breadcrumbs.js +1 -1
- package/dist/react-browser-chrome-mock.js +1 -1
- package/dist/react-button.js +3 -3
- package/dist/react-calendar.js +1 -1
- package/dist/react-call-controls.js +1 -1
- package/dist/react-callout.js +1 -1
- package/dist/react-card-grid.js +1 -1
- package/dist/react-card.js +1 -1
- package/dist/react-carousel.js +1 -1
- package/dist/react-charts.js +1 -1
- package/dist/react-checkbox.js +1 -1
- package/dist/react-checklist.js +1 -1
- package/dist/react-code-block.js +1 -1
- package/dist/react-code-editor.js +1 -1
- package/dist/react-collapsible.js +1 -1
- package/dist/react-combobox.js +1 -1
- package/dist/react-command-input.js +1 -1
- package/dist/react-command.js +1 -1
- package/dist/react-composer.js +3 -3
- package/dist/react-content-protection.js +1 -1
- package/dist/react-conversation.js +5 -5
- package/dist/react-cookie-consent.js +1 -1
- package/dist/react-data-table.js +1 -1
- package/dist/react-data-table.js.map +2 -2
- package/dist/react-date-picker.js +1 -1
- package/dist/react-device-frame.js +1 -1
- package/dist/react-dialog.js +2 -2
- package/dist/react-diff-viewer.js +1 -1
- package/dist/react-dropdown-menu.js +1 -1
- package/dist/react-editor-status-bar.js +1 -1
- package/dist/react-editor-tabs.js +1 -1
- package/dist/react-emoji-picker.js +2 -2
- package/dist/react-empty-state.js +1 -1
- package/dist/react-feedback-dialog.js +2 -2
- package/dist/react-file-tree.js +1 -1
- package/dist/react-file-upload.js +1 -1
- package/dist/react-floating-reactions.js +1 -1
- package/dist/react-flow-editor.js +2 -2
- package/dist/react-footer.js +1 -1
- package/dist/react-funnel-chart.js +1 -1
- package/dist/react-graph-view.js +2 -2
- package/dist/react-infinite-canvas.js +2 -2
- package/dist/react-inline-editor.js +1 -1
- package/dist/react-input-group.js +1 -1
- package/dist/react-input.js +2 -2
- package/dist/react-install-prompt.js +1 -1
- package/dist/react-kanban-board.js +1 -1
- package/dist/react-keyboard-shortcut.js +2 -2
- package/dist/react-language-selector.js +1 -1
- package/dist/react-line-chart.js +1 -1
- package/dist/react-link-card.js +1 -1
- package/dist/react-live-captions.js +1 -1
- package/dist/react-live-cursors.js +1 -1
- package/dist/react-live-transcript.js +1 -1
- package/dist/react-location-selector.js +1 -1
- package/dist/react-logger.js +1 -1
- package/dist/react-markdown-renderer.js +2 -2
- package/dist/react-marquee-strip.js +1 -1
- package/dist/react-mascot.js +1 -1
- package/dist/react-mastery-bar.js +1 -1
- package/dist/react-mini-map.js +1 -1
- package/dist/react-mobile-nav.js +1 -1
- package/dist/react-native-select.js +1 -1
- package/dist/react-navbar.js +1 -1
- package/dist/react-numbered-steps.js +1 -1
- package/dist/react-otp-input.js +1 -1
- package/dist/react-page-header.js +1 -1
- package/dist/react-pagination.js +1 -1
- package/dist/react-password-input.js +2 -2
- package/dist/react-payment.js +1 -1
- package/dist/react-popover.js +1 -1
- package/dist/react-pre-call-lobby.js +1 -1
- package/dist/react-presence-indicator.js +1 -1
- package/dist/react-pricing-card.js +1 -1
- package/dist/react-progress-display.js +1 -1
- package/dist/react-radial-gauge.js +1 -1
- package/dist/react-radio.js +1 -1
- package/dist/react-rating-scale.js +1 -1
- package/dist/react-reaction-bar.js +1 -1
- package/dist/react-resizable-layout.js +1 -1
- package/dist/react-search-bar.js +1 -1
- package/dist/react-section-head.js +1 -1
- package/dist/react-segmented-control.js +1 -1
- package/dist/react-select.js +1 -1
- package/dist/react-separator.js +1 -1
- package/dist/react-sheet.js +1 -1
- package/dist/react-sidebar.js +1 -1
- package/dist/react-skeleton.js +1 -1
- package/dist/react-skip-to-content.js +1 -1
- package/dist/react-slide-viewer.js +1 -1
- package/dist/react-slider.js +1 -1
- package/dist/react-slot-picker.js +1 -1
- package/dist/react-social-auth-button.js +3 -3
- package/dist/react-sortable-list.js +1 -1
- package/dist/react-stat-grid.js +1 -1
- package/dist/react-stat-grid.js.map +1 -1
- package/dist/react-status-indicator.js +1 -1
- package/dist/react-steps.js +1 -1
- package/dist/react-sticky-note.js +1 -1
- package/dist/react-switch.js +1 -1
- package/dist/react-table-of-contents.js +1 -1
- package/dist/react-table.js +1 -1
- package/dist/react-tabs.js +1 -1
- package/dist/react-terminal.js +1 -1
- package/dist/react-test-results.js +1 -1
- package/dist/react-textarea.js +1 -1
- package/dist/react-thread-view.js +2 -2
- package/dist/react-timeline.js +1 -1
- package/dist/react-toast.js +1 -1
- package/dist/react-tooltip.js +1 -1
- package/dist/react-version-selector.js +1 -1
- package/dist/react-video-grid.js +2 -2
- package/dist/react-video-player.js +1 -1
- package/dist/react-video-tile.js +2 -2
- package/dist/react-voice-pill.js +1 -1
- package/dist/react-waveform.js +1 -1
- package/dist/react-wizard.js +1 -1
- package/dist/shared.js +53 -0
- package/dist/shared.js.map +7 -0
- package/package.json +1 -1
- package/dist/chunk-2Q6HHFAN.js +0 -164
- /package/dist/{chunk-V24GDHUX.js.map → chunk-4ACSHPCM.js.map} +0 -0
- /package/dist/{chunk-SDAJVXD4.js.map → chunk-5P56PN3J.js.map} +0 -0
- /package/dist/{chunk-QPCKJ2YR.js.map → chunk-GG6MZDGV.js.map} +0 -0
- /package/dist/{chunk-QDMLIDYN.js.map → chunk-GU5MI7FX.js.map} +0 -0
- /package/dist/{chunk-Z5IHYNQD.js.map → chunk-JZQ5ZL46.js.map} +0 -0
- /package/dist/{chunk-RSWOLRIC.js.map → chunk-KIZD73DK.js.map} +0 -0
- /package/dist/{chunk-XMFNBOPO.js.map → chunk-PY2TIFCT.js.map} +0 -0
- /package/dist/{chunk-3I3DYDHR.js.map → chunk-WNLYPQOS.js.map} +0 -0
- /package/dist/{chunk-63N4PZUJ.js.map → chunk-X6HEKRWE.js.map} +0 -0
- /package/dist/{chunk-WYKPPK3W.js.map → chunk-XAJDSVZR.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../data-table/src/data-table.ts", "../../data-table/src/data-table.styles.ts", "../../react-data-table/src/DataTable.tsx"],
|
|
4
|
-
"sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport interface ColumnDef<T = Record<string, unknown>> {\n /** Unique column identifier */\n id: string\n /** Column header text */\n header: string\n /**\n * Value of this column for a row. Drives sorting, filtering and — when no\n * `cell` renderer is given — the rendered text. Optional for display-only\n * columns that set `cell`.\n */\n accessor?: (row: T) => unknown\n /**\n * Custom cell renderer. Framework adapters narrow the return type (React:\n * `ReactNode`). When omitted the cell renders `String(accessor(row))`.\n */\n cell?: (row: T, index: number) => unknown\n /** Horizontal alignment of header and cells. Defaults to `start`. */\n align?: DataTableAlign\n /** Numeric column: tabular figures, no wrapping, aligned to `end` unless `align` says otherwise. */\n numeric?: boolean\n /** Extra class for this column's data cells. */\n className?: string\n /** Extra class for this column's header cell. */\n headerClassName?: string\n /** Whether this column is sortable */\n sortable?: boolean\n /** Whether this column is filterable */\n filterable?: boolean\n}\n\nexport type SortDirection = 'asc' | 'desc'\n\n/** Horizontal alignment of a column (logical, RTL-safe). */\nexport type DataTableAlign = 'start' | 'center' | 'end'\n\n/** A column's effective alignment: explicit `align`, else `end` for numeric columns. */\nexport function resolveColumnAlign(col: { align?: DataTableAlign; numeric?: boolean }): DataTableAlign {\n return col.align ?? (col.numeric ? 'end' : 'start')\n}\n\n/** The raw value of a column for a row (`undefined` without an accessor). */\nexport function getColumnValue<T>(col: { accessor?: (row: T) => unknown }, row: T): unknown {\n return col.accessor ? col.accessor(row) : undefined\n}\n\n/**\n * Stable React/DOM key for a row: `getRowKey` when given, else the row's\n * index. Prefer a `getRowKey` — index keys break row state on sort/filter.\n */\nexport function resolveRowKey<T>(\n row: T,\n index: number,\n getRowKey?: (row: T, index: number) => string | number,\n): string | number {\n return getRowKey ? getRowKey(row, index) : index\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n /** Column definitions */\n columns: ColumnDef<T>[]\n /** Data rows */\n data: T[]\n /** Current sort column */\n sortBy?: string\n /** Current sort direction */\n sortDir?: SortDirection\n /** Callback when sort changes */\n onSort?: (columnId: string, direction: SortDirection) => void\n /** Active filters: columnId -> filter value */\n filters?: Record<string, string>\n}\n\nexport interface DataTableState<T = Record<string, unknown>> {\n sortedData: T[]\n sortBy: string | null\n sortDir: SortDirection\n filters: Record<string, string>\n}\n\nexport interface DataTableAPI<T = Record<string, unknown>> {\n /** Current table state */\n state: DataTableState<T>\n /** Toggle sort for a column */\n sort(columnId: string): void\n /** Set a filter value for a column */\n setFilter(columnId: string, value: string): void\n /** Get ARIA and role props for a header cell */\n getHeaderProps(col: ColumnDef<T>): Partial<AccessibilityProps> & Record<string, unknown>\n /** Get props for a data cell */\n getCellProps(col: ColumnDef<T>, row: T): Record<string, unknown>\n /** Get props for a data row */\n getRowProps(row: T, index: number): Record<string, unknown>\n}\n\nexport function createDataTable<T = Record<string, unknown>>(\n props: DataTableProps<T>,\n): DataTableAPI<T> {\n const {\n columns,\n data,\n sortBy: initialSortBy,\n sortDir: initialSortDir = 'asc',\n onSort,\n filters: initialFilters,\n } = props\n\n let sortBy: string | null = initialSortBy ?? null\n let sortDir: SortDirection = initialSortDir\n let filters: Record<string, string> = { ...(initialFilters ?? {}) }\n\n function getFilteredData(): T[] {\n let result = [...data]\n\n for (const [columnId, filterValue] of Object.entries(filters)) {\n if (!filterValue) continue\n const col = columns.find((c) => c.id === columnId)\n if (!col?.accessor) continue\n const lowerFilter = filterValue.toLowerCase()\n result = result.filter((row) => {\n const cellValue = getColumnValue(col, row)\n return String(cellValue ?? '').toLowerCase().includes(lowerFilter)\n })\n }\n\n return result\n }\n\n function getSortedData(): T[] {\n const filtered = getFilteredData()\n\n if (!sortBy) return filtered\n\n const col = columns.find((c) => c.id === sortBy)\n if (!col?.accessor) return filtered\n\n return [...filtered].sort((a, b) => {\n const aVal = getColumnValue(col, a)\n const bVal = getColumnValue(col, b)\n const aStr = String(aVal ?? '')\n const bStr = String(bVal ?? '')\n\n const cmp = aStr.localeCompare(bStr, undefined, { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }\n\n function sort(columnId: string): void {\n const col = columns.find((c) => c.id === columnId)\n if (!col?.sortable) return\n\n if (sortBy === columnId) {\n sortDir = sortDir === 'asc' ? 'desc' : 'asc'\n } else {\n sortBy = columnId\n sortDir = 'asc'\n }\n\n onSort?.(sortBy, sortDir)\n }\n\n function setFilter(columnId: string, value: string): void {\n filters = { ...filters, [columnId]: value }\n }\n\n function getHeaderProps(\n col: ColumnDef<T>,\n ): Partial<AccessibilityProps> & Record<string, unknown> {\n const props: Partial<AccessibilityProps> & Record<string, unknown> = {\n role: 'columnheader',\n }\n\n if (col.sortable) {\n if (sortBy === col.id) {\n props['aria-sort'] = sortDir === 'asc' ? 'ascending' : 'descending'\n } else {\n props['aria-sort'] = 'none'\n }\n }\n\n return props\n }\n\n function getCellProps(\n col: ColumnDef<T>,\n _row: T,\n ): Record<string, unknown> {\n return {\n role: 'cell',\n 'data-column': col.id,\n }\n }\n\n function getRowProps(_row: T, index: number): Record<string, unknown> {\n return {\n role: 'row',\n 'data-row-index': index,\n }\n }\n\n return {\n get state(): DataTableState<T> {\n return {\n get sortedData() {\n return getSortedData()\n },\n get sortBy() {\n return sortBy\n },\n get sortDir() {\n return sortDir\n },\n get filters() {\n return { ...filters }\n },\n }\n },\n sort,\n setFilter,\n getHeaderProps,\n getCellProps,\n getRowProps,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const tableVariants = cva({\n base: 'w-full caption-bottom text-sm border-collapse',\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const headerVariants = cva({\n base: 'h-10 px-2 text-left align-middle font-medium text-muted-foreground border-b',\n variants: {\n sortable: {\n true: 'cursor-pointer select-none hover:text-foreground',\n false: '',\n },\n },\n defaultVariants: {\n sortable: 'false',\n },\n})\n\nexport const cellVariants = cva({\n base: 'p-2 align-middle border-b',\n variants: {\n size: {\n sm: 'p-1',\n md: 'p-2',\n lg: 'p-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const rowVariants = cva({\n base: 'border-b transition-colors hover:bg-muted/50',\n variants: {\n selected: {\n true: 'bg-muted',\n false: '',\n },\n },\n defaultVariants: {\n selected: 'false',\n },\n})\n\n/** Logical text alignment per column alignment. */\nexport const dataTableAlignClass = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n} as const\n\n/** Numeric cells: tabular figures, no wrapping. */\nexport const dataTableNumericClass = 'tabular-nums whitespace-nowrap'\n\n/** Button inside a sortable header: the keyboard-reachable sort control. */\nexport const dataTableSortButtonClass =\n 'inline-flex items-center gap-1 rounded-sm font-inherit text-inherit focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n\n/** Rows with a row action: pointer + keyboard focus ring. */\nexport const dataTableActionRowClass =\n 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring'\n", "import * as React from 'react'\nimport {\n createDataTable,\n tableVariants,\n headerVariants,\n cellVariants,\n rowVariants,\n resolveColumnAlign,\n getColumnValue,\n resolveRowKey,\n dataTableAlignClass,\n dataTableNumericClass,\n dataTableSortButtonClass,\n dataTableActionRowClass,\n type ColumnDef,\n type SortDirection,\n} from '@refraction-ui/data-table'\nimport { cn } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Column definition (React): header and cell may be any ReactNode\n// ---------------------------------------------------------------------------\n\nexport interface DataTableColumn<T = Record<string, unknown>>\n extends Omit<ColumnDef<T>, 'header' | 'cell'> {\n /** Header content. A string is also used for the filter input's label. */\n header: React.ReactNode\n /** Render the cell. Defaults to `String(accessor(row))`. */\n cell?: (row: T, index: number) => React.ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// DataTable\n// ---------------------------------------------------------------------------\n\nexport interface DataTableProps<T = Record<string, unknown>>\n extends Omit<React.TableHTMLAttributes<HTMLTableElement>, 'children'> {\n columns: DataTableColumn<T>[]\n data: T[]\n sortBy?: string\n sortDir?: SortDirection\n onSort?: (columnId: string, direction: SortDirection) => void\n filters?: Record<string, string>\n emptyMessage?: React.ReactNode\n /** Stable key per row. Defaults to the row index — pass one when rows can reorder. */\n getRowKey?: (row: T, index: number) => string | number\n /** Extra attributes for a row (`data-*`, `aria-*`, className, handlers). */\n getRowProps?: (row: T, index: number) => React.HTMLAttributes<HTMLTableRowElement>\n /**\n * Row action. Makes each row focusable (Tab) and activatable with click,\n * Enter or Space. Keep a real link/button in the row too when the action\n * needs an accessible name beyond the row's text.\n */\n onRowClick?: (row: T, index: number) => void\n /** Table caption (rendered as `<caption>`). */\n caption?: React.ReactNode\n /** Class for the horizontal scroll wrapper. */\n wrapperClassName?: string\n}\n\nconst ACTIVATION_KEYS = new Set(['Enter', ' '])\n\nfunction filterLabel(header: React.ReactNode, id: string): string {\n return typeof header === 'string' || typeof header === 'number' ? String(header) : id\n}\n\nexport function DataTable<T = Record<string, unknown>>({\n columns,\n data,\n sortBy: controlledSortBy,\n sortDir: controlledSortDir = 'asc',\n onSort,\n filters: controlledFilters,\n className,\n emptyMessage = 'No data available',\n getRowKey,\n getRowProps,\n onRowClick,\n caption,\n wrapperClassName,\n ...tableProps\n}: DataTableProps<T>) {\n const [sortBy, setSortBy] = React.useState<string | null>(controlledSortBy ?? null)\n const [sortDir, setSortDir] = React.useState<SortDirection>(controlledSortDir)\n const [filters, setFilters] = React.useState<Record<string, string>>(controlledFilters ?? {})\n\n const api = React.useMemo(\n () =>\n createDataTable<T>({\n // The core only reads id/accessor/sortable/filterable; header and cell\n // are rendered here.\n columns: columns as unknown as ColumnDef<T>[],\n data,\n sortBy: sortBy ?? undefined,\n sortDir,\n onSort,\n filters,\n }),\n [columns, data, sortBy, sortDir, onSort, filters],\n )\n\n const handleSort = (columnId: string) => {\n const col = columns.find((c) => c.id === columnId)\n if (!col?.sortable) return\n const newDir: SortDirection = sortBy === columnId && sortDir === 'asc' ? 'desc' : 'asc'\n setSortBy(columnId)\n setSortDir(newDir)\n onSort?.(columnId, newDir)\n }\n\n const handleFilter = (columnId: string, value: string) => {\n setFilters((prev) => ({ ...prev, [columnId]: value }))\n }\n\n const rows = api.state.sortedData\n const hasFilterable = columns.some((c) => c.filterable)\n\n const rowElementProps = (row: T, index: number): React.HTMLAttributes<HTMLTableRowElement> => {\n const extra = getRowProps?.(row, index) ?? {}\n if (!onRowClick) return extra\n return {\n tabIndex: 0,\n ...extra,\n className: cn(dataTableActionRowClass, extra.className),\n onClick: (e) => {\n extra.onClick?.(e)\n if (!e.defaultPrevented) onRowClick(row, index)\n },\n onKeyDown: (e) => {\n extra.onKeyDown?.(e)\n // Only when the row itself is focused — not a control inside it.\n if (e.defaultPrevented || e.target !== e.currentTarget || !ACTIVATION_KEYS.has(e.key)) return\n e.preventDefault()\n onRowClick(row, index)\n },\n }\n }\n\n return (\n <div className={cn('relative w-full overflow-auto', wrapperClassName)}>\n <table className={cn(tableVariants(), className)} role=\"table\" {...tableProps}>\n {caption != null && <caption className=\"mt-2 caption-bottom text-xs text-muted-foreground\">{caption}</caption>}\n <thead>\n <tr role=\"row\">\n {columns.map((col) => {\n const headerProps = api.getHeaderProps(col as unknown as ColumnDef<T>)\n const align = resolveColumnAlign(col)\n const indicator =\n col.sortable && sortBy === col.id ? (\n <span aria-hidden=\"true\">{sortDir === 'asc' ? '↑' : '↓'}</span>\n ) : null\n return (\n <th\n key={col.id}\n {...headerProps}\n className={cn(\n headerVariants({ sortable: col.sortable ? 'true' : 'false' }),\n dataTableAlignClass[align],\n col.headerClassName,\n )}\n >\n {col.sortable ? (\n <button type=\"button\" className={dataTableSortButtonClass} onClick={() => handleSort(col.id)}>\n {col.header}\n {indicator}\n </button>\n ) : (\n col.header\n )}\n </th>\n )\n })}\n </tr>\n {hasFilterable && (\n <tr role=\"row\" data-filter-row=\"true\">\n {columns.map((col) => (\n <th key={`filter-${col.id}`}>\n {col.filterable ? (\n <input\n type=\"text\"\n aria-label={`Filter ${filterLabel(col.header, col.id)}`}\n value={filters[col.id] ?? ''}\n onChange={(e) => handleFilter(col.id, e.target.value)}\n placeholder=\"Filter...\"\n />\n ) : null}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr role=\"row\">\n <td colSpan={columns.length} className=\"text-center p-4 text-muted-foreground\" role=\"cell\">\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => {\n const rowProps = rowElementProps(row, rowIndex)\n return (\n <tr\n key={resolveRowKey(row, rowIndex, getRowKey)}\n {...api.getRowProps(row, rowIndex)}\n {...rowProps}\n className={cn(rowVariants(), rowProps.className)}\n >\n {columns.map((col) => (\n <td\n key={col.id}\n {...api.getCellProps(col as unknown as ColumnDef<T>, row)}\n className={cn(\n cellVariants(),\n dataTableAlignClass[resolveColumnAlign(col)],\n col.numeric && dataTableNumericClass,\n col.className,\n )}\n >\n {col.cell ? col.cell(row, rowIndex) : String(getColumnValue(col, row) ?? '')}\n </td>\n ))}\n </tr>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n )\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import type { AccessibilityProps } from '@refraction-ui/shared'\n\nexport interface ColumnDef<T = Record<string, unknown>> {\n /** Unique column identifier */\n id: string\n /** Column header text */\n header: string\n /**\n * Value of this column for a row. Drives sorting, filtering and — when no\n * `cell` renderer is given — the rendered text. Optional for display-only\n * columns that set `cell`.\n */\n accessor?: (row: T) => unknown\n /**\n * Custom cell renderer. Framework adapters narrow the return type (React:\n * `ReactNode`). When omitted the cell renders `String(accessor(row))`.\n */\n cell?: (row: T, index: number) => unknown\n /** Horizontal alignment of header and cells. Defaults to `start`. */\n align?: DataTableAlign\n /** Numeric column: tabular figures, no wrapping, aligned to `end` unless `align` says otherwise. */\n numeric?: boolean\n /** Extra class for this column's data cells. */\n className?: string\n /** Extra class for this column's header cell. */\n headerClassName?: string\n /** Whether this column is sortable */\n sortable?: boolean\n /** Whether this column is filterable */\n filterable?: boolean\n}\n\nexport type SortDirection = 'asc' | 'desc'\n\n/** Horizontal alignment of a column (logical, RTL-safe). */\nexport type DataTableAlign = 'start' | 'center' | 'end'\n\n/** A column's effective alignment: explicit `align`, else `end` for numeric columns. */\nexport function resolveColumnAlign(col: { align?: DataTableAlign; numeric?: boolean }): DataTableAlign {\n return col.align ?? (col.numeric ? 'end' : 'start')\n}\n\n/** The raw value of a column for a row (`undefined` without an accessor). */\nexport function getColumnValue<T>(col: { accessor?: (row: T) => unknown }, row: T): unknown {\n return col.accessor ? col.accessor(row) : undefined\n}\n\n/**\n * Stable React/DOM key for a row: `getRowKey` when given, else the row's\n * index. Prefer a `getRowKey` — index keys break row state on sort/filter.\n */\nexport function resolveRowKey<T>(\n row: T,\n index: number,\n getRowKey?: (row: T, index: number) => string | number,\n): string | number {\n return getRowKey ? getRowKey(row, index) : index\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n /** Column definitions */\n columns: ColumnDef<T>[]\n /** Data rows */\n data: T[]\n /** Current sort column */\n sortBy?: string\n /** Current sort direction */\n sortDir?: SortDirection\n /** Callback when sort changes */\n onSort?: (columnId: string, direction: SortDirection) => void\n /** Active filters: columnId -> filter value */\n filters?: Record<string, string>\n}\n\nexport interface DataTableState<T = Record<string, unknown>> {\n sortedData: T[]\n sortBy: string | null\n sortDir: SortDirection\n filters: Record<string, string>\n}\n\nexport interface DataTableAPI<T = Record<string, unknown>> {\n /** Current table state */\n state: DataTableState<T>\n /** Toggle sort for a column */\n sort(columnId: string): void\n /** Set a filter value for a column */\n setFilter(columnId: string, value: string): void\n /** Get ARIA and role props for a header cell */\n getHeaderProps(col: ColumnDef<T>): Partial<AccessibilityProps> & Record<string, unknown>\n /** Get props for a data cell */\n getCellProps(col: ColumnDef<T>, row: T): Record<string, unknown>\n /** Get props for a data row */\n getRowProps(row: T, index: number): Record<string, unknown>\n}\n\nexport function createDataTable<T = Record<string, unknown>>(\n props: DataTableProps<T>,\n): DataTableAPI<T> {\n const {\n columns,\n data,\n sortBy: initialSortBy,\n sortDir: initialSortDir = 'asc',\n onSort,\n filters: initialFilters,\n } = props\n\n let sortBy: string | null = initialSortBy ?? null\n let sortDir: SortDirection = initialSortDir\n let filters: Record<string, string> = { ...(initialFilters ?? {}) }\n\n function getFilteredData(): T[] {\n let result = [...data]\n\n for (const [columnId, filterValue] of Object.entries(filters)) {\n if (!filterValue) continue\n const col = columns.find((c) => c.id === columnId)\n if (!col?.accessor) continue\n const lowerFilter = filterValue.toLowerCase()\n result = result.filter((row) => {\n const cellValue = getColumnValue(col, row)\n return String(cellValue ?? '').toLowerCase().includes(lowerFilter)\n })\n }\n\n return result\n }\n\n function getSortedData(): T[] {\n const filtered = getFilteredData()\n\n if (!sortBy) return filtered\n\n const col = columns.find((c) => c.id === sortBy)\n if (!col?.accessor) return filtered\n\n return [...filtered].sort((a, b) => {\n const aVal = getColumnValue(col, a)\n const bVal = getColumnValue(col, b)\n const aStr = String(aVal ?? '')\n const bStr = String(bVal ?? '')\n\n const cmp = aStr.localeCompare(bStr, undefined, { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }\n\n function sort(columnId: string): void {\n const col = columns.find((c) => c.id === columnId)\n if (!col?.sortable) return\n\n if (sortBy === columnId) {\n sortDir = sortDir === 'asc' ? 'desc' : 'asc'\n } else {\n sortBy = columnId\n sortDir = 'asc'\n }\n\n onSort?.(sortBy, sortDir)\n }\n\n function setFilter(columnId: string, value: string): void {\n filters = { ...filters, [columnId]: value }\n }\n\n function getHeaderProps(\n col: ColumnDef<T>,\n ): Partial<AccessibilityProps> & Record<string, unknown> {\n const props: Partial<AccessibilityProps> & Record<string, unknown> = {\n role: 'columnheader',\n }\n\n if (col.sortable) {\n if (sortBy === col.id) {\n props['aria-sort'] = sortDir === 'asc' ? 'ascending' : 'descending'\n } else {\n props['aria-sort'] = 'none'\n }\n }\n\n return props\n }\n\n function getCellProps(\n col: ColumnDef<T>,\n _row: T,\n ): Record<string, unknown> {\n return {\n role: 'cell',\n 'data-column': col.id,\n }\n }\n\n function getRowProps(_row: T, index: number): Record<string, unknown> {\n return {\n role: 'row',\n 'data-row-index': index,\n }\n }\n\n return {\n get state(): DataTableState<T> {\n return {\n get sortedData() {\n return getSortedData()\n },\n get sortBy() {\n return sortBy\n },\n get sortDir() {\n return sortDir\n },\n get filters() {\n return { ...filters }\n },\n }\n },\n sort,\n setFilter,\n getHeaderProps,\n getCellProps,\n getRowProps,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const tableVariants = cva({\n base: 'w-full caption-bottom text-sm border-collapse',\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const headerVariants = cva({\n base: 'h-10 px-2 text-left align-middle font-medium text-muted-foreground border-b',\n variants: {\n sortable: {\n true: 'cursor-pointer select-none hover:text-foreground',\n false: '',\n },\n },\n defaultVariants: {\n sortable: 'false',\n },\n})\n\nexport const cellVariants = cva({\n base: 'p-2 align-middle border-b',\n variants: {\n size: {\n sm: 'p-1',\n md: 'p-2',\n lg: 'p-3',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nexport const rowVariants = cva({\n base: 'border-b transition-colors hover:bg-muted/50',\n variants: {\n selected: {\n true: 'bg-muted',\n false: '',\n },\n },\n defaultVariants: {\n selected: 'false',\n },\n})\n\n/** Logical text alignment per column alignment. */\nexport const dataTableAlignClass = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n} as const\n\n/** Numeric cells: tabular figures, no wrapping. */\nexport const dataTableNumericClass = 'tabular-nums whitespace-nowrap'\n\n/** Button inside a sortable header: the keyboard-reachable sort control. */\nexport const dataTableSortButtonClass =\n 'inline-flex items-center gap-1 rounded-sm font-inherit text-inherit focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'\n\n/** Rows with a row action: pointer + keyboard focus ring. */\nexport const dataTableActionRowClass =\n 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring'\n", "import * as React from 'react'\nimport {\n createDataTable,\n tableVariants,\n headerVariants,\n cellVariants,\n rowVariants,\n resolveColumnAlign,\n getColumnValue,\n resolveRowKey,\n dataTableAlignClass,\n dataTableNumericClass,\n dataTableSortButtonClass,\n dataTableActionRowClass,\n type ColumnDef,\n type SortDirection,\n} from '@refraction-ui/data-table'\nimport { cn, type DataAttributes } from '@refraction-ui/shared'\n\n// ---------------------------------------------------------------------------\n// Column definition (React): header and cell may be any ReactNode\n// ---------------------------------------------------------------------------\n\nexport interface DataTableColumn<T = Record<string, unknown>>\n extends Omit<ColumnDef<T>, 'header' | 'cell'> {\n /** Header content. A string is also used for the filter input's label. */\n header: React.ReactNode\n /** Render the cell. Defaults to `String(accessor(row))`. */\n cell?: (row: T, index: number) => React.ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// DataTable\n// ---------------------------------------------------------------------------\n\nexport interface DataTableProps<T = Record<string, unknown>>\n extends Omit<React.TableHTMLAttributes<HTMLTableElement>, 'children'> {\n columns: DataTableColumn<T>[]\n data: T[]\n sortBy?: string\n sortDir?: SortDirection\n onSort?: (columnId: string, direction: SortDirection) => void\n filters?: Record<string, string>\n emptyMessage?: React.ReactNode\n /** Stable key per row. Defaults to the row index — pass one when rows can reorder. */\n getRowKey?: (row: T, index: number) => string | number\n /** Extra attributes for a row (`data-*`, `aria-*`, className, handlers). */\n getRowProps?: (row: T, index: number) => React.HTMLAttributes<HTMLTableRowElement> & DataAttributes\n /**\n * Row action. Makes each row focusable (Tab) and activatable with click,\n * Enter or Space. Keep a real link/button in the row too when the action\n * needs an accessible name beyond the row's text.\n */\n onRowClick?: (row: T, index: number) => void\n /** Table caption (rendered as `<caption>`). */\n caption?: React.ReactNode\n /** Class for the horizontal scroll wrapper. */\n wrapperClassName?: string\n}\n\nconst ACTIVATION_KEYS = new Set(['Enter', ' '])\n\nfunction filterLabel(header: React.ReactNode, id: string): string {\n return typeof header === 'string' || typeof header === 'number' ? String(header) : id\n}\n\nexport function DataTable<T = Record<string, unknown>>({\n columns,\n data,\n sortBy: controlledSortBy,\n sortDir: controlledSortDir = 'asc',\n onSort,\n filters: controlledFilters,\n className,\n emptyMessage = 'No data available',\n getRowKey,\n getRowProps,\n onRowClick,\n caption,\n wrapperClassName,\n ...tableProps\n}: DataTableProps<T>) {\n const [sortBy, setSortBy] = React.useState<string | null>(controlledSortBy ?? null)\n const [sortDir, setSortDir] = React.useState<SortDirection>(controlledSortDir)\n const [filters, setFilters] = React.useState<Record<string, string>>(controlledFilters ?? {})\n\n const api = React.useMemo(\n () =>\n createDataTable<T>({\n // The core only reads id/accessor/sortable/filterable; header and cell\n // are rendered here.\n columns: columns as unknown as ColumnDef<T>[],\n data,\n sortBy: sortBy ?? undefined,\n sortDir,\n onSort,\n filters,\n }),\n [columns, data, sortBy, sortDir, onSort, filters],\n )\n\n const handleSort = (columnId: string) => {\n const col = columns.find((c) => c.id === columnId)\n if (!col?.sortable) return\n const newDir: SortDirection = sortBy === columnId && sortDir === 'asc' ? 'desc' : 'asc'\n setSortBy(columnId)\n setSortDir(newDir)\n onSort?.(columnId, newDir)\n }\n\n const handleFilter = (columnId: string, value: string) => {\n setFilters((prev) => ({ ...prev, [columnId]: value }))\n }\n\n const rows = api.state.sortedData\n const hasFilterable = columns.some((c) => c.filterable)\n\n const rowElementProps = (\n row: T,\n index: number,\n ): React.HTMLAttributes<HTMLTableRowElement> & DataAttributes => {\n const extra = getRowProps?.(row, index) ?? {}\n if (!onRowClick) return extra\n return {\n tabIndex: 0,\n ...extra,\n className: cn(dataTableActionRowClass, extra.className),\n onClick: (e) => {\n extra.onClick?.(e)\n if (!e.defaultPrevented) onRowClick(row, index)\n },\n onKeyDown: (e) => {\n extra.onKeyDown?.(e)\n // Only when the row itself is focused — not a control inside it.\n if (e.defaultPrevented || e.target !== e.currentTarget || !ACTIVATION_KEYS.has(e.key)) return\n e.preventDefault()\n onRowClick(row, index)\n },\n }\n }\n\n return (\n <div className={cn('relative w-full overflow-auto', wrapperClassName)}>\n <table className={cn(tableVariants(), className)} role=\"table\" {...tableProps}>\n {caption != null && <caption className=\"mt-2 caption-bottom text-xs text-muted-foreground\">{caption}</caption>}\n <thead>\n <tr role=\"row\">\n {columns.map((col) => {\n const headerProps = api.getHeaderProps(col as unknown as ColumnDef<T>)\n const align = resolveColumnAlign(col)\n const indicator =\n col.sortable && sortBy === col.id ? (\n <span aria-hidden=\"true\">{sortDir === 'asc' ? '↑' : '↓'}</span>\n ) : null\n return (\n <th\n key={col.id}\n {...headerProps}\n className={cn(\n headerVariants({ sortable: col.sortable ? 'true' : 'false' }),\n dataTableAlignClass[align],\n col.headerClassName,\n )}\n >\n {col.sortable ? (\n <button type=\"button\" className={dataTableSortButtonClass} onClick={() => handleSort(col.id)}>\n {col.header}\n {indicator}\n </button>\n ) : (\n col.header\n )}\n </th>\n )\n })}\n </tr>\n {hasFilterable && (\n <tr role=\"row\" data-filter-row=\"true\">\n {columns.map((col) => (\n <th key={`filter-${col.id}`}>\n {col.filterable ? (\n <input\n type=\"text\"\n aria-label={`Filter ${filterLabel(col.header, col.id)}`}\n value={filters[col.id] ?? ''}\n onChange={(e) => handleFilter(col.id, e.target.value)}\n placeholder=\"Filter...\"\n />\n ) : null}\n </th>\n ))}\n </tr>\n )}\n </thead>\n <tbody>\n {rows.length === 0 ? (\n <tr role=\"row\">\n <td colSpan={columns.length} className=\"text-center p-4 text-muted-foreground\" role=\"cell\">\n {emptyMessage}\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => {\n const rowProps = rowElementProps(row, rowIndex)\n return (\n <tr\n key={resolveRowKey(row, rowIndex, getRowKey)}\n {...api.getRowProps(row, rowIndex)}\n {...rowProps}\n className={cn(rowVariants(), rowProps.className)}\n >\n {columns.map((col) => (\n <td\n key={col.id}\n {...api.getCellProps(col as unknown as ColumnDef<T>, row)}\n className={cn(\n cellVariants(),\n dataTableAlignClass[resolveColumnAlign(col)],\n col.numeric && dataTableNumericClass,\n col.className,\n )}\n >\n {col.cell ? col.cell(row, rowIndex) : String(getColumnValue(col, row) ?? '')}\n </td>\n ))}\n </tr>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["props"]
|
|
7
7
|
}
|
package/dist/react-dialog.js
CHANGED
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
createDialog,
|
|
3
3
|
dialogContentVariants,
|
|
4
4
|
overlayStyles
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4ACSHPCM.js";
|
|
6
6
|
import {
|
|
7
7
|
cn,
|
|
8
8
|
createKeyboardHandler,
|
|
9
9
|
devWarn
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-75BKRTPO.js";
|
|
11
11
|
|
|
12
12
|
// ../react-dialog/dist/index.js
|
|
13
13
|
import * as React from "react";
|
|
@@ -22,10 +22,10 @@ import {
|
|
|
22
22
|
searchEmojis,
|
|
23
23
|
twemojiAssetUrl,
|
|
24
24
|
twemojiFilename
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-WNLYPQOS.js";
|
|
26
26
|
import {
|
|
27
27
|
cn
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-75BKRTPO.js";
|
|
29
29
|
|
|
30
30
|
// ../react-emoji-picker/dist/index.js
|
|
31
31
|
import * as React from "react";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createDialog
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4ACSHPCM.js";
|
|
4
4
|
import {
|
|
5
5
|
cn,
|
|
6
6
|
cva,
|
|
7
7
|
generateId
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-75BKRTPO.js";
|
|
9
9
|
|
|
10
10
|
// ../react-feedback-dialog/dist/index.js
|
|
11
11
|
import * as React from "react";
|
package/dist/react-file-tree.js
CHANGED
package/dist/react-footer.js
CHANGED
package/dist/react-graph-view.js
CHANGED
package/dist/react-input.js
CHANGED
package/dist/react-line-chart.js
CHANGED
package/dist/react-link-card.js
CHANGED
package/dist/react-logger.js
CHANGED
package/dist/react-mascot.js
CHANGED
package/dist/react-mini-map.js
CHANGED
package/dist/react-mobile-nav.js
CHANGED
package/dist/react-navbar.js
CHANGED
package/dist/react-otp-input.js
CHANGED
package/dist/react-pagination.js
CHANGED
package/dist/react-payment.js
CHANGED