@jakubmazanec/ui 0.3.2-unstable.f12d7dc8 → 0.4.0-unstable.026ad272

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,7 +21,7 @@ It cannot be required from a CommonJS module.
21
21
 
22
22
  #### Prerequisites
23
23
 
24
- - Node.js 22 or later
24
+ - Node.js 24 or later
25
25
  - TypeScript 5 or later
26
26
  <!-- prerequisites -->
27
27
 
@@ -19,9 +19,7 @@ export declare const useComboboxTheme: {
19
19
  root: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
20
20
  options: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
21
21
  });
22
- declare const COMBOBOX_ELEMENT: import("react").ExoticComponent<{
23
- children?: import("react").ReactNode | undefined;
24
- }>;
22
+ declare const COMBOBOX_ELEMENT: import("react").ExoticComponent<import("react").FragmentProps>;
25
23
  export type ComboboxItem<V> = {
26
24
  value: V;
27
25
  label: string;
@@ -10,6 +10,6 @@ export type DialogTitleProps<T extends ElementType> = ComponentProps<typeof useD
10
10
  as?: T | undefined;
11
11
  className?: string;
12
12
  };
13
- export declare const DialogTitle: <T extends ElementType = "h2">({ as, className, ref, children, ...rest }: DialogTitleProps<T>) => import("react/jsx-runtime").JSX.Element;
13
+ export declare const DialogTitle: <T extends ElementType = typeof DIALOG_TITLE_ELEMENT>({ as, className, ref, children, ...rest }: DialogTitleProps<T>) => import("react/jsx-runtime").JSX.Element;
14
14
  export declare const dialogTitleTheme: ComponentTheme<typeof useDialogTitleTheme>;
15
15
  export {};
@@ -1,4 +1,4 @@
1
- import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren, type ReactNode } from 'react';
1
+ import { type ComponentPropsWithoutRef, type ElementType, type PropsWithChildren } from 'react';
2
2
  import { type ComponentProps, type ComponentTheme } from '../theme/internals.js';
3
3
  import { type ComponentRef } from './ComponentRef.js';
4
4
  export declare const useListboxTheme: {
@@ -20,9 +20,7 @@ export declare const useListboxTheme: {
20
20
  root: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
21
21
  options: (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string;
22
22
  });
23
- declare const LISTBOX_ELEMENT: import("react").ExoticComponent<{
24
- children?: ReactNode | undefined;
25
- }>;
23
+ declare const LISTBOX_ELEMENT: import("react").ExoticComponent<import("react").FragmentProps>;
26
24
  export type ListboxItem<V> = {
27
25
  value: V;
28
26
  label: string;
@@ -5,9 +5,7 @@ export declare const useMenuTheme: {
5
5
  componentThemeName: "Menu";
6
6
  themeDefinition: undefined;
7
7
  } & (() => (baseClassName?: import("../theme/internals.js").ClassName, overrideClassName?: import("../theme/internals.js").ClassName) => string);
8
- declare const MENU_ELEMENT: import("react").ExoticComponent<{
9
- children?: import("react").ReactNode | undefined;
10
- }>;
8
+ declare const MENU_ELEMENT: import("react").ExoticComponent<import("react").FragmentProps>;
11
9
  export type MenuProps<T extends ElementType> = ComponentProps<typeof useMenuTheme> & ComponentPropsWithoutRef<T> & ComponentRef<T> & PropsWithChildren & {
12
10
  as?: T | undefined;
13
11
  className?: string;
@@ -228,7 +228,7 @@ export function DataTable({
228
228
  onSearch: onSearchChange
229
229
  }
230
230
  ),
231
- /* @__PURE__ */ jsx("div", { className: "w-full overflow-y-visible overflow-x-scroll [scrollbar-width:thin]", children: /* @__PURE__ */ jsxs(
231
+ /* @__PURE__ */ jsx("div", { className: "w-full overflow-x-scroll overflow-y-visible [scrollbar-width:thin]", children: /* @__PURE__ */ jsxs(
232
232
  Table,
233
233
  {
234
234
  style: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../source/components/data-table/DataTable.tsx"],
4
- "sourcesContent": ["import {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {restrictToHorizontalAxis} from '@dnd-kit/modifiers';\nimport {arrayMove, horizontalListSortingStrategy, SortableContext} from '@dnd-kit/sortable';\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowData,\n type SortingState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {useCallback, useId, useState} from 'react';\n\nimport {Table} from '../Table.js';\nimport {TableBody} from '../TableBody.js';\nimport {TableCell} from '../TableCell.js';\nimport {TableFoot} from '../TableFoot.js';\nimport {TableHead} from '../TableHead.js';\nimport {TableHeader} from '../TableHeader.js';\nimport {TableRow} from '../TableRow.js';\nimport {type DataTableColumnOrder} from './DataTableColumnOrder.js';\nimport {type DataTableColumnPinning} from './DataTableColumnPinning.js';\nimport {type DataTableColumnVisibility} from './DataTableColumnVisibility.js';\nimport {type DataTableFaceting} from './DataTableFaceting.js';\nimport {type DataTableFilters} from './DataTableFilters.js';\nimport {type DataTablePagination} from './DataTablePagination.js';\nimport {type DataTableSearch} from './DataTableSearch.js';\nimport {type DataTableSorting} from './DataTableSorting.js';\nimport {\n DataTableHeader,\n DataTablePagination as DataTablePaginationComponent,\n DataTableSearch as DataTableSearchComponent,\n DEFAULT_PAGE_SIZE,\n fromPinningState,\n fuzzyFilter,\n getCommonPinningClasses,\n getCommonPinningStyles,\n} from './internals.js';\n\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- false positive\n interface ColumnMeta<TData extends RowData, TValue> {\n filterVariant?: 'range' | 'select' | 'text';\n }\n}\n\nexport type DataTableProps<D, C> = {\n data: D[];\n columns: C;\n clientPagination?: boolean | undefined;\n hidePagination?: boolean | undefined;\n pagination?: DataTablePagination | undefined;\n onPaginationChange?:\n | ((\n pagination: Pick<DataTablePagination, 'page'> | Pick<DataTablePagination, 'pageSize'>,\n ) => void)\n | undefined;\n columnVisibility?: DataTableColumnVisibility;\n hideColumnVisibility?: boolean | undefined;\n onColumnVisibilityChange?: ((columnVisibility: DataTableColumnVisibility) => void) | undefined;\n columnOrder?: DataTableColumnOrder;\n hideColumnOrder?: boolean | undefined;\n onColumnOrderChange?: ((columnOrder: DataTableColumnOrder) => void) | undefined;\n columnPinning?: DataTableColumnPinning;\n hideColumnPinning?: boolean | undefined;\n onColumnPinningChange?: ((columnPinning: DataTableColumnPinning) => void) | undefined;\n hideColumnResizing?: boolean | undefined;\n clientSorting?: boolean | undefined;\n sorting?: DataTableSorting | undefined;\n hideSorting?: boolean | undefined;\n onSortingChange?: ((sorting: DataTableSorting) => void) | undefined;\n clientFilters?: boolean | undefined;\n hideFilters?: boolean | undefined;\n filters?: DataTableFilters | undefined;\n onFiltersChange?: ((filters: DataTableFilters) => void) | undefined;\n clientFaceting?: boolean | undefined;\n faceting?: DataTableFaceting | undefined;\n clientSearch?: boolean | undefined;\n hideSearch?: boolean | undefined;\n search?: DataTableSearch | undefined;\n onSearchChange?: ((search: DataTableSearch) => void) | undefined;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed so the type parameters are useful\nexport function DataTable<D extends RowData, C extends Array<ColumnDef<D, any>>>({\n data,\n columns,\n clientPagination = false,\n hidePagination = false,\n pagination: controlledPagination,\n onPaginationChange,\n clientSorting = false,\n sorting: controlledSorting,\n hideSorting = false,\n onSortingChange,\n columnVisibility: controlledColumnVisibility,\n hideColumnVisibility = false,\n onColumnVisibilityChange,\n columnOrder: controlledColumnOrder,\n hideColumnOrder = false,\n onColumnOrderChange,\n columnPinning: controlledColumnPinning,\n hideColumnPinning = false,\n onColumnPinningChange,\n hideColumnResizing = false,\n clientFilters = false,\n hideFilters = false,\n filters: controlledFilters,\n onFiltersChange,\n clientFaceting = false,\n faceting,\n clientSearch = false,\n hideSearch = false,\n search: controlledSearch,\n onSearchChange,\n}: DataTableProps<D, C>) {\n let [pagination, setPagination] = useState<PaginationState>(\n controlledPagination ?\n {\n pageIndex: Math.max(0, controlledPagination.page - 1),\n pageSize: controlledPagination.pageSize,\n }\n : {\n pageIndex: 0,\n pageSize: DEFAULT_PAGE_SIZE,\n },\n );\n let [columnVisibility, setColumnVisibility] = useState(controlledColumnVisibility ?? {});\n let [columnOrder, setColumnOrder] = useState<string[]>(\n controlledColumnOrder ?\n [\n ...controlledColumnOrder,\n ...columns\n .map((column, index) => {\n if (column.id) {\n return column.id;\n }\n\n if ('accessorKey' in column) {\n return String(column.accessorKey);\n }\n\n if (typeof column.header === 'string') {\n return String(column.header);\n }\n\n return String(index);\n })\n .filter((value) => !controlledColumnOrder.includes(value)),\n ]\n : columns.map((column, index) => {\n if (column.id) {\n return column.id;\n }\n\n if ('accessorKey' in column) {\n return String(column.accessorKey);\n }\n\n if (typeof column.header === 'string') {\n return String(column.header);\n }\n\n return String(index);\n }),\n );\n let [columnPinning, setColumnPinning] = useState<ColumnPinningState>(\n controlledColumnPinning ?\n {\n left: Object.entries(controlledColumnPinning)\n .filter(([, pinning]) => pinning === 'left')\n .map(([column]) => column),\n right: Object.entries(controlledColumnPinning)\n .filter(([, pinning]) => pinning === 'right')\n .map(([column]) => column),\n }\n : {left: [], right: []},\n );\n let [sorting, setSorting] = useState<SortingState>([]);\n let [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n let [search, setSearch] = useState('');\n\n let handleColumnVisibilityChange = useCallback(\n (columnVisibilityState: Updater<VisibilityState>) => {\n setColumnVisibility(columnVisibilityState);\n\n if (typeof columnVisibilityState === 'function') {\n onColumnVisibilityChange?.(columnVisibilityState(columnVisibility));\n } else {\n onColumnVisibilityChange?.(columnVisibilityState);\n }\n },\n [columnVisibility, onColumnVisibilityChange],\n );\n let handleColumnOrderChange = useCallback(\n (columnOrderState: Updater<ColumnOrderState>) => {\n setColumnOrder(columnOrderState);\n\n if (typeof columnOrderState === 'function') {\n onColumnOrderChange?.(columnOrderState(columnOrder));\n } else {\n onColumnOrderChange?.(columnOrderState);\n }\n },\n [columnOrder, onColumnOrderChange],\n );\n let handleColumnPinningChange = useCallback(\n (columnPinningState: Updater<ColumnPinningState>) => {\n setColumnPinning(columnPinningState);\n\n if (typeof columnPinningState === 'function') {\n onColumnPinningChange?.(fromPinningState(columnPinningState(columnPinning)));\n } else {\n onColumnPinningChange?.(fromPinningState(columnPinningState));\n }\n },\n [columnPinning, onColumnPinningChange],\n );\n\n let table = useReactTable<D>({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: clientPagination ? getPaginationRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: clientFaceting ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: clientFaceting ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: clientFaceting ? getFacetedMinMaxValues() : undefined,\n state: {\n pagination: clientPagination ? pagination : undefined,\n columnVisibility,\n columnOrder,\n columnPinning,\n sorting: clientSorting ? sorting : undefined,\n columnFilters: clientFilters ? columnFilters : undefined,\n globalFilter: clientSearch ? search : undefined,\n },\n onPaginationChange: clientPagination ? setPagination : undefined,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnOrderChange: handleColumnOrderChange,\n onColumnPinningChange: handleColumnPinningChange,\n onSortingChange: clientSorting ? setSorting : undefined,\n onColumnFiltersChange: clientFilters ? setColumnFilters : undefined,\n onGlobalFilterChange: clientSearch ? setSearch : undefined,\n columnResizeMode: 'onChange',\n globalFilterFn: fuzzyFilter,\n });\n\n let handleDragEnd = useCallback(\n ({active, over}: DragEndEvent) => {\n if (over && active.id !== over.id) {\n table.setColumnOrder((previousColumnOrder) => {\n let oldIndex = previousColumnOrder.indexOf(active.id as string);\n let newIndex = previousColumnOrder.indexOf(over.id as string);\n\n return arrayMove(previousColumnOrder, oldIndex, newIndex);\n });\n }\n },\n [table],\n );\n\n let sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {}),\n );\n\n let id = useId();\n\n let page =\n clientPagination ?\n table.getState().pagination.pageIndex + 1\n : (controlledPagination?.page ?? 1);\n let pageSize =\n clientPagination ?\n table.getState().pagination.pageSize\n : (controlledPagination?.pageSize ?? DEFAULT_PAGE_SIZE);\n let pageCount = clientPagination ? table.getPageCount() : (controlledPagination?.pageCount ?? 1);\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n id={id}\n modifiers={[restrictToHorizontalAxis]}\n sensors={sensors}\n onDragEnd={handleDragEnd}\n >\n {hideSearch ? null : (\n <DataTableSearchComponent\n clientSearch={clientSearch}\n search={controlledSearch}\n table={table}\n onSearch={onSearchChange}\n />\n )}\n <div className=\"w-full overflow-y-visible overflow-x-scroll [scrollbar-width:thin]\">\n <Table\n style={{\n width: table.getCenterTotalSize(),\n tableLayout: 'fixed',\n }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext items={columnOrder} strategy={horizontalListSortingStrategy}>\n {headerGroup.headers.map((header) => (\n <DataTableHeader\n key={header.id}\n clientFaceting={clientFaceting}\n clientFilters={clientFilters}\n clientSorting={clientSorting}\n faceting={faceting}\n filters={controlledFilters}\n header={header}\n hideColumnOrder={hideColumnOrder}\n hideColumnPinning={hideColumnPinning}\n hideColumnResizing={hideColumnResizing}\n hideColumnVisibility={hideColumnVisibility}\n hideFilters={hideFilters}\n hideSorting={hideSorting}\n sorting={controlledSorting}\n table={table}\n onFiltering={onFiltersChange}\n onSorting={onSortingChange}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHead>\n <TableBody>\n {table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n let value = cell.getValue();\n\n return (\n <TableCell\n key={cell.id}\n className={getCommonPinningClasses(cell.column)}\n style={{...getCommonPinningStyles(cell.column)}}\n title={value === null || value === undefined ? undefined : String(value)}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n <TableFoot>\n {table.getFooterGroups().map((footerGroup) => (\n <TableRow key={footerGroup.id}>\n {footerGroup.headers.map((header) => (\n <TableHeader key={header.id}>\n {header.isPlaceholder ? null : (\n flexRender(header.column.columnDef.footer, header.getContext())\n )}\n </TableHeader>\n ))}\n </TableRow>\n ))}\n </TableFoot>\n </Table>\n </div>\n {hidePagination ? null : (\n <DataTablePaginationComponent\n clientPagination={clientPagination}\n page={page}\n pageCount={pageCount}\n pageSize={pageSize}\n table={table}\n onPagination={onPaginationChange}\n />\n )}\n </DndContext>\n );\n}\n"],
4
+ "sourcesContent": ["import {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {restrictToHorizontalAxis} from '@dnd-kit/modifiers';\nimport {arrayMove, horizontalListSortingStrategy, SortableContext} from '@dnd-kit/sortable';\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowData,\n type SortingState,\n type Updater,\n useReactTable,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {useCallback, useId, useState} from 'react';\n\nimport {Table} from '../Table.js';\nimport {TableBody} from '../TableBody.js';\nimport {TableCell} from '../TableCell.js';\nimport {TableFoot} from '../TableFoot.js';\nimport {TableHead} from '../TableHead.js';\nimport {TableHeader} from '../TableHeader.js';\nimport {TableRow} from '../TableRow.js';\nimport {type DataTableColumnOrder} from './DataTableColumnOrder.js';\nimport {type DataTableColumnPinning} from './DataTableColumnPinning.js';\nimport {type DataTableColumnVisibility} from './DataTableColumnVisibility.js';\nimport {type DataTableFaceting} from './DataTableFaceting.js';\nimport {type DataTableFilters} from './DataTableFilters.js';\nimport {type DataTablePagination} from './DataTablePagination.js';\nimport {type DataTableSearch} from './DataTableSearch.js';\nimport {type DataTableSorting} from './DataTableSorting.js';\nimport {\n DataTableHeader,\n DataTablePagination as DataTablePaginationComponent,\n DataTableSearch as DataTableSearchComponent,\n DEFAULT_PAGE_SIZE,\n fromPinningState,\n fuzzyFilter,\n getCommonPinningClasses,\n getCommonPinningStyles,\n} from './internals.js';\n\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- false positive\n interface ColumnMeta<TData extends RowData, TValue> {\n filterVariant?: 'range' | 'select' | 'text';\n }\n}\n\nexport type DataTableProps<D, C> = {\n data: D[];\n columns: C;\n clientPagination?: boolean | undefined;\n hidePagination?: boolean | undefined;\n pagination?: DataTablePagination | undefined;\n onPaginationChange?:\n | ((\n pagination: Pick<DataTablePagination, 'page'> | Pick<DataTablePagination, 'pageSize'>,\n ) => void)\n | undefined;\n columnVisibility?: DataTableColumnVisibility;\n hideColumnVisibility?: boolean | undefined;\n onColumnVisibilityChange?: ((columnVisibility: DataTableColumnVisibility) => void) | undefined;\n columnOrder?: DataTableColumnOrder;\n hideColumnOrder?: boolean | undefined;\n onColumnOrderChange?: ((columnOrder: DataTableColumnOrder) => void) | undefined;\n columnPinning?: DataTableColumnPinning;\n hideColumnPinning?: boolean | undefined;\n onColumnPinningChange?: ((columnPinning: DataTableColumnPinning) => void) | undefined;\n hideColumnResizing?: boolean | undefined;\n clientSorting?: boolean | undefined;\n sorting?: DataTableSorting | undefined;\n hideSorting?: boolean | undefined;\n onSortingChange?: ((sorting: DataTableSorting) => void) | undefined;\n clientFilters?: boolean | undefined;\n hideFilters?: boolean | undefined;\n filters?: DataTableFilters | undefined;\n onFiltersChange?: ((filters: DataTableFilters) => void) | undefined;\n clientFaceting?: boolean | undefined;\n faceting?: DataTableFaceting | undefined;\n clientSearch?: boolean | undefined;\n hideSearch?: boolean | undefined;\n search?: DataTableSearch | undefined;\n onSearchChange?: ((search: DataTableSearch) => void) | undefined;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed so the type parameters are useful\nexport function DataTable<D extends RowData, C extends Array<ColumnDef<D, any>>>({\n data,\n columns,\n clientPagination = false,\n hidePagination = false,\n pagination: controlledPagination,\n onPaginationChange,\n clientSorting = false,\n sorting: controlledSorting,\n hideSorting = false,\n onSortingChange,\n columnVisibility: controlledColumnVisibility,\n hideColumnVisibility = false,\n onColumnVisibilityChange,\n columnOrder: controlledColumnOrder,\n hideColumnOrder = false,\n onColumnOrderChange,\n columnPinning: controlledColumnPinning,\n hideColumnPinning = false,\n onColumnPinningChange,\n hideColumnResizing = false,\n clientFilters = false,\n hideFilters = false,\n filters: controlledFilters,\n onFiltersChange,\n clientFaceting = false,\n faceting,\n clientSearch = false,\n hideSearch = false,\n search: controlledSearch,\n onSearchChange,\n}: DataTableProps<D, C>) {\n let [pagination, setPagination] = useState<PaginationState>(\n controlledPagination ?\n {\n pageIndex: Math.max(0, controlledPagination.page - 1),\n pageSize: controlledPagination.pageSize,\n }\n : {\n pageIndex: 0,\n pageSize: DEFAULT_PAGE_SIZE,\n },\n );\n let [columnVisibility, setColumnVisibility] = useState(controlledColumnVisibility ?? {});\n let [columnOrder, setColumnOrder] = useState<string[]>(\n controlledColumnOrder ?\n [\n ...controlledColumnOrder,\n ...columns\n .map((column, index) => {\n if (column.id) {\n return column.id;\n }\n\n if ('accessorKey' in column) {\n return String(column.accessorKey);\n }\n\n if (typeof column.header === 'string') {\n return String(column.header);\n }\n\n return String(index);\n })\n .filter((value) => !controlledColumnOrder.includes(value)),\n ]\n : columns.map((column, index) => {\n if (column.id) {\n return column.id;\n }\n\n if ('accessorKey' in column) {\n return String(column.accessorKey);\n }\n\n if (typeof column.header === 'string') {\n return String(column.header);\n }\n\n return String(index);\n }),\n );\n let [columnPinning, setColumnPinning] = useState<ColumnPinningState>(\n controlledColumnPinning ?\n {\n left: Object.entries(controlledColumnPinning)\n .filter(([, pinning]) => pinning === 'left')\n .map(([column]) => column),\n right: Object.entries(controlledColumnPinning)\n .filter(([, pinning]) => pinning === 'right')\n .map(([column]) => column),\n }\n : {left: [], right: []},\n );\n let [sorting, setSorting] = useState<SortingState>([]);\n let [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n let [search, setSearch] = useState('');\n\n let handleColumnVisibilityChange = useCallback(\n (columnVisibilityState: Updater<VisibilityState>) => {\n setColumnVisibility(columnVisibilityState);\n\n if (typeof columnVisibilityState === 'function') {\n onColumnVisibilityChange?.(columnVisibilityState(columnVisibility));\n } else {\n onColumnVisibilityChange?.(columnVisibilityState);\n }\n },\n [columnVisibility, onColumnVisibilityChange],\n );\n let handleColumnOrderChange = useCallback(\n (columnOrderState: Updater<ColumnOrderState>) => {\n setColumnOrder(columnOrderState);\n\n if (typeof columnOrderState === 'function') {\n onColumnOrderChange?.(columnOrderState(columnOrder));\n } else {\n onColumnOrderChange?.(columnOrderState);\n }\n },\n [columnOrder, onColumnOrderChange],\n );\n let handleColumnPinningChange = useCallback(\n (columnPinningState: Updater<ColumnPinningState>) => {\n setColumnPinning(columnPinningState);\n\n if (typeof columnPinningState === 'function') {\n onColumnPinningChange?.(fromPinningState(columnPinningState(columnPinning)));\n } else {\n onColumnPinningChange?.(fromPinningState(columnPinningState));\n }\n },\n [columnPinning, onColumnPinningChange],\n );\n\n let table = useReactTable<D>({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getPaginationRowModel: clientPagination ? getPaginationRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: clientFaceting ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: clientFaceting ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: clientFaceting ? getFacetedMinMaxValues() : undefined,\n state: {\n pagination: clientPagination ? pagination : undefined,\n columnVisibility,\n columnOrder,\n columnPinning,\n sorting: clientSorting ? sorting : undefined,\n columnFilters: clientFilters ? columnFilters : undefined,\n globalFilter: clientSearch ? search : undefined,\n },\n onPaginationChange: clientPagination ? setPagination : undefined,\n onColumnVisibilityChange: handleColumnVisibilityChange,\n onColumnOrderChange: handleColumnOrderChange,\n onColumnPinningChange: handleColumnPinningChange,\n onSortingChange: clientSorting ? setSorting : undefined,\n onColumnFiltersChange: clientFilters ? setColumnFilters : undefined,\n onGlobalFilterChange: clientSearch ? setSearch : undefined,\n columnResizeMode: 'onChange',\n globalFilterFn: fuzzyFilter,\n });\n\n let handleDragEnd = useCallback(\n ({active, over}: DragEndEvent) => {\n if (over && active.id !== over.id) {\n table.setColumnOrder((previousColumnOrder) => {\n let oldIndex = previousColumnOrder.indexOf(active.id as string);\n let newIndex = previousColumnOrder.indexOf(over.id as string);\n\n return arrayMove(previousColumnOrder, oldIndex, newIndex);\n });\n }\n },\n [table],\n );\n\n let sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n distance: 5,\n },\n }),\n useSensor(KeyboardSensor, {}),\n );\n\n let id = useId();\n\n let page =\n clientPagination ?\n table.getState().pagination.pageIndex + 1\n : (controlledPagination?.page ?? 1);\n let pageSize =\n clientPagination ?\n table.getState().pagination.pageSize\n : (controlledPagination?.pageSize ?? DEFAULT_PAGE_SIZE);\n let pageCount = clientPagination ? table.getPageCount() : (controlledPagination?.pageCount ?? 1);\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n id={id}\n modifiers={[restrictToHorizontalAxis]}\n sensors={sensors}\n onDragEnd={handleDragEnd}\n >\n {hideSearch ? null : (\n <DataTableSearchComponent\n clientSearch={clientSearch}\n search={controlledSearch}\n table={table}\n onSearch={onSearchChange}\n />\n )}\n <div className=\"w-full overflow-x-scroll overflow-y-visible [scrollbar-width:thin]\">\n <Table\n style={{\n width: table.getCenterTotalSize(),\n tableLayout: 'fixed',\n }}\n >\n <TableHead>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext items={columnOrder} strategy={horizontalListSortingStrategy}>\n {headerGroup.headers.map((header) => (\n <DataTableHeader\n key={header.id}\n clientFaceting={clientFaceting}\n clientFilters={clientFilters}\n clientSorting={clientSorting}\n faceting={faceting}\n filters={controlledFilters}\n header={header}\n hideColumnOrder={hideColumnOrder}\n hideColumnPinning={hideColumnPinning}\n hideColumnResizing={hideColumnResizing}\n hideColumnVisibility={hideColumnVisibility}\n hideFilters={hideFilters}\n hideSorting={hideSorting}\n sorting={controlledSorting}\n table={table}\n onFiltering={onFiltersChange}\n onSorting={onSortingChange}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHead>\n <TableBody>\n {table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n let value = cell.getValue();\n\n return (\n <TableCell\n key={cell.id}\n className={getCommonPinningClasses(cell.column)}\n style={{...getCommonPinningStyles(cell.column)}}\n title={value === null || value === undefined ? undefined : String(value)}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n <TableFoot>\n {table.getFooterGroups().map((footerGroup) => (\n <TableRow key={footerGroup.id}>\n {footerGroup.headers.map((header) => (\n <TableHeader key={header.id}>\n {header.isPlaceholder ? null : (\n flexRender(header.column.columnDef.footer, header.getContext())\n )}\n </TableHeader>\n ))}\n </TableRow>\n ))}\n </TableFoot>\n </Table>\n </div>\n {hidePagination ? null : (\n <DataTablePaginationComponent\n clientPagination={clientPagination}\n page={page}\n pageCount={pageCount}\n pageSize={pageSize}\n table={table}\n onPagination={onPaginationChange}\n />\n )}\n </DndContext>\n );\n}\n"],
5
5
  "mappings": ";AA+TQ,cAQA,YARA;AA/TR;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAQ,gCAA+B;AACvC,SAAQ,WAAW,+BAA+B,uBAAsB;AACxE;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAKA;AAAA,OAEK;AACP,SAAQ,aAAa,OAAO,gBAAe;AAE3C,SAAQ,aAAY;AACpB,SAAQ,iBAAgB;AACxB,SAAQ,iBAAgB;AACxB,SAAQ,iBAAgB;AACxB,SAAQ,iBAAgB;AACxB,SAAQ,mBAAkB;AAC1B,SAAQ,gBAAe;AASvB;AAAA,EACE;AAAA,EACA,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA+CA,gBAAS,UAAiE;AAAA,EAC/E;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AAAA,EACA,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB;AAAA,EACA,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,SAAS;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA,eAAe;AAAA,EACf,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AACF,GAAyB;AACvB,MAAI,CAAC,YAAY,aAAa,IAAI;AAAA,IAChC,uBACE;AAAA,MACE,WAAW,KAAK,IAAI,GAAG,qBAAqB,OAAO,CAAC;AAAA,MACpD,UAAU,qBAAqB;AAAA,IACjC,IACA;AAAA,MACE,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EACJ;AACA,MAAI,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,8BAA8B,CAAC,CAAC;AACvF,MAAI,CAAC,aAAa,cAAc,IAAI;AAAA,IAClC,wBACE;AAAA,MACE,GAAG;AAAA,MACH,GAAG,QACA,IAAI,CAAC,QAAQ,UAAU;AACtB,YAAI,OAAO,IAAI;AACb,iBAAO,OAAO;AAAA,QAChB;AAEA,YAAI,iBAAiB,QAAQ;AAC3B,iBAAO,OAAO,OAAO,WAAW;AAAA,QAClC;AAEA,YAAI,OAAO,OAAO,WAAW,UAAU;AACrC,iBAAO,OAAO,OAAO,MAAM;AAAA,QAC7B;AAEA,eAAO,OAAO,KAAK;AAAA,MACrB,CAAC,EACA,OAAO,CAAC,UAAU,CAAC,sBAAsB,SAAS,KAAK,CAAC;AAAA,IAC7D,IACA,QAAQ,IAAI,CAAC,QAAQ,UAAU;AAC7B,UAAI,OAAO,IAAI;AACb,eAAO,OAAO;AAAA,MAChB;AAEA,UAAI,iBAAiB,QAAQ;AAC3B,eAAO,OAAO,OAAO,WAAW;AAAA,MAClC;AAEA,UAAI,OAAO,OAAO,WAAW,UAAU;AACrC,eAAO,OAAO,OAAO,MAAM;AAAA,MAC7B;AAEA,aAAO,OAAO,KAAK;AAAA,IACrB,CAAC;AAAA,EACL;AACA,MAAI,CAAC,eAAe,gBAAgB,IAAI;AAAA,IACtC,0BACE;AAAA,MACE,MAAM,OAAO,QAAQ,uBAAuB,EACzC,OAAO,CAAC,CAAC,EAAE,OAAO,MAAM,YAAY,MAAM,EAC1C,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM;AAAA,MAC3B,OAAO,OAAO,QAAQ,uBAAuB,EAC1C,OAAO,CAAC,CAAC,EAAE,OAAO,MAAM,YAAY,OAAO,EAC3C,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM;AAAA,IAC7B,IACA,EAAC,MAAM,CAAC,GAAG,OAAO,CAAC,EAAC;AAAA,EACxB;AACA,MAAI,CAAC,SAAS,UAAU,IAAI,SAAuB,CAAC,CAAC;AACrD,MAAI,CAAC,eAAe,gBAAgB,IAAI,SAA6B,CAAC,CAAC;AACvE,MAAI,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AAErC,MAAI,+BAA+B;AAAA,IACjC,CAAC,0BAAoD;AACnD,0BAAoB,qBAAqB;AAEzC,UAAI,OAAO,0BAA0B,YAAY;AAC/C,mCAA2B,sBAAsB,gBAAgB,CAAC;AAAA,MACpE,OAAO;AACL,mCAA2B,qBAAqB;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB,wBAAwB;AAAA,EAC7C;AACA,MAAI,0BAA0B;AAAA,IAC5B,CAAC,qBAAgD;AAC/C,qBAAe,gBAAgB;AAE/B,UAAI,OAAO,qBAAqB,YAAY;AAC1C,8BAAsB,iBAAiB,WAAW,CAAC;AAAA,MACrD,OAAO;AACL,8BAAsB,gBAAgB;AAAA,MACxC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,mBAAmB;AAAA,EACnC;AACA,MAAI,4BAA4B;AAAA,IAC9B,CAAC,uBAAoD;AACnD,uBAAiB,kBAAkB;AAEnC,UAAI,OAAO,uBAAuB,YAAY;AAC5C,gCAAwB,iBAAiB,mBAAmB,aAAa,CAAC,CAAC;AAAA,MAC7E,OAAO;AACL,gCAAwB,iBAAiB,kBAAkB,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,IACA,CAAC,eAAe,qBAAqB;AAAA,EACvC;AAEA,MAAI,QAAQ,cAAiB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,iBAAiB,gBAAgB;AAAA,IACjC,mBAAmB,kBAAkB;AAAA,IACrC,uBAAuB,mBAAmB,sBAAsB,IAAI;AAAA,IACpE,qBAAqB,oBAAoB;AAAA,IACzC,oBAAoB,iBAAiB,mBAAmB,IAAI;AAAA,IAC5D,wBAAwB,iBAAiB,uBAAuB,IAAI;AAAA,IACpE,wBAAwB,iBAAiB,uBAAuB,IAAI;AAAA,IACpE,OAAO;AAAA,MACL,YAAY,mBAAmB,aAAa;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,gBAAgB,UAAU;AAAA,MACnC,eAAe,gBAAgB,gBAAgB;AAAA,MAC/C,cAAc,eAAe,SAAS;AAAA,IACxC;AAAA,IACA,oBAAoB,mBAAmB,gBAAgB;AAAA,IACvD,0BAA0B;AAAA,IAC1B,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,iBAAiB,gBAAgB,aAAa;AAAA,IAC9C,uBAAuB,gBAAgB,mBAAmB;AAAA,IAC1D,sBAAsB,eAAe,YAAY;AAAA,IACjD,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAClB,CAAC;AAED,MAAI,gBAAgB;AAAA,IAClB,CAAC,EAAC,QAAQ,KAAI,MAAoB;AAChC,UAAI,QAAQ,OAAO,OAAO,KAAK,IAAI;AACjC,cAAM,eAAe,CAAC,wBAAwB;AAC5C,cAAI,WAAW,oBAAoB,QAAQ,OAAO,EAAY;AAC9D,cAAI,WAAW,oBAAoB,QAAQ,KAAK,EAAY;AAE5D,iBAAO,UAAU,qBAAqB,UAAU,QAAQ;AAAA,QAC1D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,CAAC,KAAK;AAAA,EACR;AAEA,MAAI,UAAU;AAAA,IACZ,UAAU,aAAa;AAAA,MACrB,sBAAsB;AAAA,QACpB,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,IACD,UAAU,aAAa;AAAA,MACrB,sBAAsB;AAAA,QACpB,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,IACD,UAAU,gBAAgB,CAAC,CAAC;AAAA,EAC9B;AAEA,MAAI,KAAK,MAAM;AAEf,MAAI,OACF,mBACE,MAAM,SAAS,EAAE,WAAW,YAAY,IACvC,sBAAsB,QAAQ;AACnC,MAAI,WACF,mBACE,MAAM,SAAS,EAAE,WAAW,WAC3B,sBAAsB,YAAY;AACvC,MAAI,YAAY,mBAAmB,MAAM,aAAa,IAAK,sBAAsB,aAAa;AAE9F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,oBAAoB;AAAA,MACpB;AAAA,MACA,WAAW,CAAC,wBAAwB;AAAA,MACpC;AAAA,MACA,WAAW;AAAA,MAEV;AAAA,qBAAa,OACZ;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA,UAAU;AAAA;AAAA,QACZ;AAAA,QAEF,oBAAC,SAAI,WAAU,sEACb;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO,MAAM,mBAAmB;AAAA,cAChC,aAAa;AAAA,YACf;AAAA,YAEA;AAAA,kCAAC,aACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,gBAC5B,oBAAC,YACC,8BAAC,mBAAgB,OAAO,aAAa,UAAU,+BAC5C,sBAAY,QAAQ,IAAI,CAAC,WACxB;AAAA,gBAAC;AAAA;AAAA,kBAEC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,SAAS;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,SAAS;AAAA,kBACT;AAAA,kBACA,aAAa;AAAA,kBACb,WAAW;AAAA;AAAA,gBAhBN,OAAO;AAAA,cAiBd,CACD,GACH,KAvBa,YAAY,EAwB3B,CACD,GACH;AAAA,cACA,oBAAC,aACE,gBAAM,YAAY,EAAE,KAAK,IAAI,CAAC,QAC7B,oBAAC,YACE,cAAI,gBAAgB,EAAE,IAAI,CAAC,SAAS;AACnC,oBAAI,QAAQ,KAAK,SAAS;AAE1B,uBACE;AAAA,kBAAC;AAAA;AAAA,oBAEC,WAAW,wBAAwB,KAAK,MAAM;AAAA,oBAC9C,OAAO,EAAC,GAAG,uBAAuB,KAAK,MAAM,EAAC;AAAA,oBAC9C,OAAO,UAAU,QAAQ,UAAU,SAAY,SAAY,OAAO,KAAK;AAAA,oBAEtE,qBAAW,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,CAAC;AAAA;AAAA,kBALpD,KAAK;AAAA,gBAMZ;AAAA,cAEJ,CAAC,KAdY,IAAI,EAenB,CACD,GACH;AAAA,cACA,oBAAC,aACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,gBAC5B,oBAAC,YACE,sBAAY,QAAQ,IAAI,CAAC,WACxB,oBAAC,eACE,iBAAO,gBAAgB,OACtB,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC,KAFhD,OAAO,EAIzB,CACD,KAPY,YAAY,EAQ3B,CACD,GACH;AAAA;AAAA;AAAA,QACF,GACF;AAAA,QACC,iBAAiB,OAChB;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc;AAAA;AAAA,QAChB;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -200,7 +200,7 @@ export function DataTableHeader({
200
200
  Button,
201
201
  {
202
202
  "aria-label": "Resize",
203
- className: "absolute right-1 top-1/2 -mt-2.5 cursor-col-resize",
203
+ className: "absolute top-1/2 right-1 -mt-2.5 cursor-col-resize",
204
204
  size: "small",
205
205
  variant: "invisible",
206
206
  onDoubleClick: handleWidthReset,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../source/components/data-table/internals/DataTableHeader.tsx"],
4
- "sourcesContent": ["import {useSortable} from '@dnd-kit/sortable';\nimport {CSS} from '@dnd-kit/utilities';\nimport {flexRender, type Header, type Table} from '@tanstack/react-table';\nimport {type CSSProperties, useCallback} from 'react';\n\nimport {Button} from '../../Button.js';\nimport {Container} from '../../Container.js';\nimport {Field} from '../../Field.js';\nimport {Icon} from '../../Icon.js';\nimport {Popover} from '../../Popover.js';\nimport {PopoverButton} from '../../PopoverButton.js';\nimport {PopoverPanel} from '../../PopoverPanel.js';\nimport {TableHeader} from '../../TableHeader.js';\nimport {Text} from '../../Text.js';\nimport {type DataTableProps} from '../DataTable.js';\nimport {DataTableHeaderColumnCheckbox} from './DataTableHeaderColumnCheckbox.js';\nimport {DataTableHeaderFilter} from './DataTableHeaderFilter.js';\nimport {getCommonPinningClasses} from './getCommonPinningClasses.js';\nimport {getCommonPinningStyles} from './getCommonPinningStyles.js';\nimport {normalizeSorting} from './normalizeSorting.js';\n\nexport type DataTableHeaderProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n table: Table<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n header: Header<any, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientSorting: DataTableProps<any, any>['clientSorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideSorting: DataTableProps<any, any>['hideSorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n sorting: DataTableProps<any, any>['sorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onSorting: DataTableProps<any, any>['onSortingChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFilters: DataTableProps<any, any>['clientFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideFilters: DataTableProps<any, any>['hideFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n filters: DataTableProps<any, any>['filters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onFiltering: DataTableProps<any, any>['onFiltersChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFaceting: DataTableProps<any, any>['clientFaceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n faceting: DataTableProps<any, any>['faceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnVisibility: DataTableProps<any, any>['hideColumnVisibility'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnOrder: DataTableProps<any, any>['hideColumnOrder'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnPinning: DataTableProps<any, any>['hideColumnPinning'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnResizing: DataTableProps<any, any>['hideColumnResizing'];\n};\n\nexport function DataTableHeader({\n table,\n header,\n clientSorting,\n hideSorting = false,\n sorting: controlledSorting,\n onSorting,\n clientFilters,\n hideFilters = false,\n filters: controlledFilters,\n onFiltering,\n clientFaceting,\n faceting,\n hideColumnVisibility = false,\n hideColumnOrder = false,\n hideColumnPinning = false,\n hideColumnResizing = false,\n}: DataTableHeaderProps) {\n let {attributes, isDragging, listeners, setNodeRef, transform} = useSortable({\n id: header.column.id,\n });\n\n let sorting =\n clientSorting ? normalizeSorting(header) : normalizeSorting(header, controlledSorting);\n\n let style: CSSProperties = {\n transform: CSS.Translate.toString(transform),\n transition: 'width transform 0.2s ease-in-out',\n zIndex: isDragging ? 20 : undefined,\n ...getCommonPinningStyles(header.column),\n };\n\n let contentElement = null;\n\n if (!header.isPlaceholder) {\n contentElement = flexRender(header.column.columnDef.header, header.getContext());\n }\n\n let sortElement;\n\n if (!sorting) {\n sortElement = <Icon name=\"ArrowsUpDown\" size=\"small\" variant=\"light\" />;\n } else if (sorting.direction === 'ascending') {\n sortElement = <Icon name=\"ArrowUp\" size=\"small\" />;\n } else {\n sortElement = <Icon name=\"ArrowDown\" size=\"small\" />;\n }\n\n let title: string | undefined;\n\n if (!sorting) {\n title = 'Sort ascending';\n } else if (sorting.direction === 'ascending') {\n title = 'Sort descending';\n } else {\n title = 'Clear sort';\n }\n\n let handleSortClick = useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let newSorting: DataTableProps<any, any>['sorting'];\n\n if (!sorting) {\n newSorting = {\n column: header.column.id,\n direction: 'ascending',\n };\n } else if (sorting.direction === 'ascending') {\n newSorting = {\n column: header.column.id,\n direction: 'descending',\n };\n } else {\n newSorting = null;\n }\n\n if (clientSorting) {\n if (!sorting) {\n header.column.toggleSorting(false);\n } else if (sorting.direction === 'ascending') {\n header.column.toggleSorting(true);\n } else {\n header.column.clearSorting();\n }\n }\n\n if (onSorting) {\n onSorting(newSorting);\n }\n }, [sorting, clientSorting, onSorting, header.column]);\n\n let handleWidthReset = useCallback(() => {\n header.column.resetSize();\n }, [header.column]);\n\n let handlePinLeftClick = useCallback(() => {\n header.column.pin('left');\n }, [header.column]);\n\n let handlePinRightClick = useCallback(() => {\n header.column.pin('right');\n }, [header.column]);\n\n let handleUnpinClick = useCallback(() => {\n header.column.pin(false);\n }, [header.column]);\n\n let resolvedHideFilters = hideFilters || !header.column.getCanFilter();\n let resolvedHideSorting = hideSorting || !header.column.getCanSort();\n let resolvedHideColumnPinning = hideColumnPinning || !header.column.getCanPin();\n\n return (\n <TableHeader\n ref={setNodeRef}\n className={getCommonPinningClasses(header.column)}\n colSpan={header.colSpan}\n style={style}\n >\n <span\n className={\n hideColumnResizing ?\n 'relative block overflow-hidden'\n : 'relative mr-6 block overflow-hidden'\n }\n >\n <Container align=\"center\" justify=\"end\" spacing=\"extra-small\">\n {resolvedHideSorting && hideColumnOrder ?\n contentElement\n : <Button\n className={hideColumnOrder ? 'inline-flex' : 'inline-flex cursor-move'}\n size=\"small\"\n title={title}\n variant=\"text\"\n onClick={resolvedHideSorting ? undefined : handleSortClick}\n {...(hideColumnOrder ? {} : attributes)}\n {...(hideColumnOrder ? {} : listeners)}\n >\n {resolvedHideSorting ? null : sortElement}\n {contentElement}\n </Button>\n }\n {resolvedHideColumnPinning && resolvedHideFilters && hideColumnVisibility ? null : (\n <Popover>\n <PopoverButton>\n <Button aria-label=\"Settings\" size=\"small\" variant=\"text\">\n <Icon name=\"Cog6Tooth\" size=\"small\" />\n </Button>\n </PopoverButton>\n <PopoverPanel anchor=\"right start\">\n <Container direction=\"column\" spacing=\"large\">\n {resolvedHideColumnPinning ? null : (\n <Container direction=\"row\" spacing=\"small\">\n <Text>Pin column</Text>\n\n <Field>\n <Container spacing=\"small\">\n {header.column.getIsPinned() === 'left' ? null : (\n <Button\n aria-label=\"Pin to left\"\n variant=\"outline\"\n onClick={handlePinLeftClick}\n >\n <Icon name=\"ArrowLeftEndOnRectangle\" size=\"large\" />\n </Button>\n )}\n {header.column.getIsPinned() ?\n <Button aria-label=\"Unpin\" variant=\"outline\" onClick={handleUnpinClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n : null}\n {header.column.getIsPinned() === 'right' ? null : (\n <Button\n aria-label=\"Pin to right\"\n variant=\"outline\"\n onClick={handlePinRightClick}\n >\n <Icon name=\"ArrowRightEndOnRectangle\" size=\"large\" />\n </Button>\n )}\n </Container>\n </Field>\n </Container>\n )}\n\n {resolvedHideFilters ? null : (\n <Container direction=\"column\" spacing=\"small\">\n <Text>Filter</Text>\n\n <Field>\n <DataTableHeaderFilter\n clientFaceting={clientFaceting}\n clientFilters={clientFilters}\n column={header.column}\n faceting={faceting}\n filters={controlledFilters}\n table={table}\n onFiltering={onFiltering}\n />\n </Field>\n </Container>\n )}\n\n {hideColumnVisibility ? null : (\n <Container direction=\"column\" spacing=\"small\">\n <Text>Visible columns</Text>\n\n {table.getAllLeafColumns().map((column) => (\n <DataTableHeaderColumnCheckbox\n key={column.id}\n column={column}\n table={table}\n />\n ))}\n </Container>\n )}\n </Container>\n </PopoverPanel>\n </Popover>\n )}\n </Container>\n </span>\n {hideColumnResizing ? null : (\n <Button\n aria-label=\"Resize\"\n // className=\"absolute right-1 top-2.5 cursor-col-resize\"\n className=\"absolute right-1 top-1/2 -mt-2.5 cursor-col-resize\"\n size=\"small\"\n variant=\"invisible\"\n onDoubleClick={handleWidthReset}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n >\n <Icon name=\"ArrowsRightLeft\" size=\"small\" />\n </Button>\n )}\n </TableHeader>\n );\n}\n"],
4
+ "sourcesContent": ["import {useSortable} from '@dnd-kit/sortable';\nimport {CSS} from '@dnd-kit/utilities';\nimport {flexRender, type Header, type Table} from '@tanstack/react-table';\nimport {type CSSProperties, useCallback} from 'react';\n\nimport {Button} from '../../Button.js';\nimport {Container} from '../../Container.js';\nimport {Field} from '../../Field.js';\nimport {Icon} from '../../Icon.js';\nimport {Popover} from '../../Popover.js';\nimport {PopoverButton} from '../../PopoverButton.js';\nimport {PopoverPanel} from '../../PopoverPanel.js';\nimport {TableHeader} from '../../TableHeader.js';\nimport {Text} from '../../Text.js';\nimport {type DataTableProps} from '../DataTable.js';\nimport {DataTableHeaderColumnCheckbox} from './DataTableHeaderColumnCheckbox.js';\nimport {DataTableHeaderFilter} from './DataTableHeaderFilter.js';\nimport {getCommonPinningClasses} from './getCommonPinningClasses.js';\nimport {getCommonPinningStyles} from './getCommonPinningStyles.js';\nimport {normalizeSorting} from './normalizeSorting.js';\n\nexport type DataTableHeaderProps = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n table: Table<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n header: Header<any, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientSorting: DataTableProps<any, any>['clientSorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideSorting: DataTableProps<any, any>['hideSorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n sorting: DataTableProps<any, any>['sorting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onSorting: DataTableProps<any, any>['onSortingChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFilters: DataTableProps<any, any>['clientFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideFilters: DataTableProps<any, any>['hideFilters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n filters: DataTableProps<any, any>['filters'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n onFiltering: DataTableProps<any, any>['onFiltersChange'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n clientFaceting: DataTableProps<any, any>['clientFaceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n faceting: DataTableProps<any, any>['faceting'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnVisibility: DataTableProps<any, any>['hideColumnVisibility'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnOrder: DataTableProps<any, any>['hideColumnOrder'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnPinning: DataTableProps<any, any>['hideColumnPinning'];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n hideColumnResizing: DataTableProps<any, any>['hideColumnResizing'];\n};\n\nexport function DataTableHeader({\n table,\n header,\n clientSorting,\n hideSorting = false,\n sorting: controlledSorting,\n onSorting,\n clientFilters,\n hideFilters = false,\n filters: controlledFilters,\n onFiltering,\n clientFaceting,\n faceting,\n hideColumnVisibility = false,\n hideColumnOrder = false,\n hideColumnPinning = false,\n hideColumnResizing = false,\n}: DataTableHeaderProps) {\n let {attributes, isDragging, listeners, setNodeRef, transform} = useSortable({\n id: header.column.id,\n });\n\n let sorting =\n clientSorting ? normalizeSorting(header) : normalizeSorting(header, controlledSorting);\n\n let style: CSSProperties = {\n transform: CSS.Translate.toString(transform),\n transition: 'width transform 0.2s ease-in-out',\n zIndex: isDragging ? 20 : undefined,\n ...getCommonPinningStyles(header.column),\n };\n\n let contentElement = null;\n\n if (!header.isPlaceholder) {\n contentElement = flexRender(header.column.columnDef.header, header.getContext());\n }\n\n let sortElement;\n\n if (!sorting) {\n sortElement = <Icon name=\"ArrowsUpDown\" size=\"small\" variant=\"light\" />;\n } else if (sorting.direction === 'ascending') {\n sortElement = <Icon name=\"ArrowUp\" size=\"small\" />;\n } else {\n sortElement = <Icon name=\"ArrowDown\" size=\"small\" />;\n }\n\n let title: string | undefined;\n\n if (!sorting) {\n title = 'Sort ascending';\n } else if (sorting.direction === 'ascending') {\n title = 'Sort descending';\n } else {\n title = 'Clear sort';\n }\n\n let handleSortClick = useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed\n let newSorting: DataTableProps<any, any>['sorting'];\n\n if (!sorting) {\n newSorting = {\n column: header.column.id,\n direction: 'ascending',\n };\n } else if (sorting.direction === 'ascending') {\n newSorting = {\n column: header.column.id,\n direction: 'descending',\n };\n } else {\n newSorting = null;\n }\n\n if (clientSorting) {\n if (!sorting) {\n header.column.toggleSorting(false);\n } else if (sorting.direction === 'ascending') {\n header.column.toggleSorting(true);\n } else {\n header.column.clearSorting();\n }\n }\n\n if (onSorting) {\n onSorting(newSorting);\n }\n }, [sorting, clientSorting, onSorting, header.column]);\n\n let handleWidthReset = useCallback(() => {\n header.column.resetSize();\n }, [header.column]);\n\n let handlePinLeftClick = useCallback(() => {\n header.column.pin('left');\n }, [header.column]);\n\n let handlePinRightClick = useCallback(() => {\n header.column.pin('right');\n }, [header.column]);\n\n let handleUnpinClick = useCallback(() => {\n header.column.pin(false);\n }, [header.column]);\n\n let resolvedHideFilters = hideFilters || !header.column.getCanFilter();\n let resolvedHideSorting = hideSorting || !header.column.getCanSort();\n let resolvedHideColumnPinning = hideColumnPinning || !header.column.getCanPin();\n\n return (\n <TableHeader\n ref={setNodeRef}\n className={getCommonPinningClasses(header.column)}\n colSpan={header.colSpan}\n style={style}\n >\n <span\n className={\n hideColumnResizing ?\n 'relative block overflow-hidden'\n : 'relative mr-6 block overflow-hidden'\n }\n >\n <Container align=\"center\" justify=\"end\" spacing=\"extra-small\">\n {resolvedHideSorting && hideColumnOrder ?\n contentElement\n : <Button\n className={hideColumnOrder ? 'inline-flex' : 'inline-flex cursor-move'}\n size=\"small\"\n title={title}\n variant=\"text\"\n onClick={resolvedHideSorting ? undefined : handleSortClick}\n {...(hideColumnOrder ? {} : attributes)}\n {...(hideColumnOrder ? {} : listeners)}\n >\n {resolvedHideSorting ? null : sortElement}\n {contentElement}\n </Button>\n }\n {resolvedHideColumnPinning && resolvedHideFilters && hideColumnVisibility ? null : (\n <Popover>\n <PopoverButton>\n <Button aria-label=\"Settings\" size=\"small\" variant=\"text\">\n <Icon name=\"Cog6Tooth\" size=\"small\" />\n </Button>\n </PopoverButton>\n <PopoverPanel anchor=\"right start\">\n <Container direction=\"column\" spacing=\"large\">\n {resolvedHideColumnPinning ? null : (\n <Container direction=\"row\" spacing=\"small\">\n <Text>Pin column</Text>\n\n <Field>\n <Container spacing=\"small\">\n {header.column.getIsPinned() === 'left' ? null : (\n <Button\n aria-label=\"Pin to left\"\n variant=\"outline\"\n onClick={handlePinLeftClick}\n >\n <Icon name=\"ArrowLeftEndOnRectangle\" size=\"large\" />\n </Button>\n )}\n {header.column.getIsPinned() ?\n <Button aria-label=\"Unpin\" variant=\"outline\" onClick={handleUnpinClick}>\n <Icon name=\"XMark\" size=\"large\" />\n </Button>\n : null}\n {header.column.getIsPinned() === 'right' ? null : (\n <Button\n aria-label=\"Pin to right\"\n variant=\"outline\"\n onClick={handlePinRightClick}\n >\n <Icon name=\"ArrowRightEndOnRectangle\" size=\"large\" />\n </Button>\n )}\n </Container>\n </Field>\n </Container>\n )}\n\n {resolvedHideFilters ? null : (\n <Container direction=\"column\" spacing=\"small\">\n <Text>Filter</Text>\n\n <Field>\n <DataTableHeaderFilter\n clientFaceting={clientFaceting}\n clientFilters={clientFilters}\n column={header.column}\n faceting={faceting}\n filters={controlledFilters}\n table={table}\n onFiltering={onFiltering}\n />\n </Field>\n </Container>\n )}\n\n {hideColumnVisibility ? null : (\n <Container direction=\"column\" spacing=\"small\">\n <Text>Visible columns</Text>\n\n {table.getAllLeafColumns().map((column) => (\n <DataTableHeaderColumnCheckbox\n key={column.id}\n column={column}\n table={table}\n />\n ))}\n </Container>\n )}\n </Container>\n </PopoverPanel>\n </Popover>\n )}\n </Container>\n </span>\n {hideColumnResizing ? null : (\n <Button\n aria-label=\"Resize\"\n // className=\"absolute right-1 top-2.5 cursor-col-resize\"\n className=\"absolute top-1/2 right-1 -mt-2.5 cursor-col-resize\"\n size=\"small\"\n variant=\"invisible\"\n onDoubleClick={handleWidthReset}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n >\n <Icon name=\"ArrowsRightLeft\" size=\"small\" />\n </Button>\n )}\n </TableHeader>\n );\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ import plugin from "tailwindcss/plugin";
2
3
  import { DEFAULT_STOP } from "./internals/constants.js";
3
4
  import { createPalette } from "./internals/createPalette.js";
4
5
  import { resolveModule } from "./internals/resolveModule.js";
@@ -119,9 +120,8 @@ export function createTailwindConfig({
119
120
  content: resolvedContent,
120
121
  theme: {
121
122
  colors: themeColors,
122
- borderRadius: {
123
+ radius: {
123
124
  none: "0",
124
- DEFAULT: "0.25rem",
125
125
  "0.5": "0.125rem",
126
126
  "1": "0.25rem",
127
127
  "1.5": "0.375rem",
@@ -131,42 +131,48 @@ export function createTailwindConfig({
131
131
  "4": "1rem",
132
132
  full: "9999px"
133
133
  },
134
- extend: {
135
- spacing: {
136
- 13: "3.25rem",
137
- 15: "3.75rem",
138
- 17: "4.25rem",
139
- 18: "4.5rem",
140
- 19: "4.75rem",
141
- 21: "5.25rem",
142
- 22: "5.5rem",
143
- 23: "5.75rem",
144
- 25: "6.25rem",
145
- 26: "6.5rem",
146
- 27: "6.75rem",
147
- 29: "6.25rem",
148
- 30: "7.5rem",
149
- 34: "8.5rem",
150
- 38: "9.5rem",
151
- 40: "10rem"
152
- },
153
- fontFamily: {
154
- sans: [
155
- "InterVariable",
156
- "ui-sans-serif",
157
- "system-ui",
158
- "sans-serif",
159
- '"Apple Color Emoji"',
160
- '"Segoe UI Emoji"',
161
- '"Segoe UI Symbol"',
162
- '"Noto Color Emoji"'
163
- ]
164
- }
134
+ fontFamily: {
135
+ sans: [
136
+ "InterVariable",
137
+ "ui-sans-serif",
138
+ "system-ui",
139
+ "sans-serif",
140
+ '"Apple Color Emoji"',
141
+ '"Segoe UI Emoji"',
142
+ '"Segoe UI Symbol"',
143
+ '"Noto Color Emoji"'
144
+ ]
165
145
  }
166
146
  },
167
- future: {
168
- hoverOnlyWhenSupported: true
169
- }
147
+ // TODO: find another solution; following is needed because of this: https://github.com/tailwindlabs/tailwindcss/issues/18237
148
+ plugins: [
149
+ plugin(({ addBase }) => {
150
+ let root = {
151
+ "--radius-none": "0",
152
+ "--radius-0_5": "0.125rem",
153
+ "--radius-1": "0.25rem",
154
+ "--radius-1_5": "0.375rem",
155
+ "--radius-2": "0.5rem",
156
+ "--radius-2_5": "0.625rem",
157
+ "--radius-3": "0.75rem",
158
+ "--radius-4": "1rem",
159
+ "--radius-full": "9999px",
160
+ "--font-family-sans": 'InterVariable, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"'
161
+ };
162
+ for (let [colorName, colorValue] of Object.entries(themeColors)) {
163
+ if (typeof colorValue === "string") {
164
+ root[`--color-${colorName}`] = colorValue;
165
+ } else if (typeof colorValue === "object") {
166
+ for (let [shadeName, shadeValue] of Object.entries(colorValue)) {
167
+ root[`--color-${colorName}-${shadeName}`] = shadeValue;
168
+ }
169
+ }
170
+ }
171
+ addBase({
172
+ ":root": root
173
+ });
174
+ })
175
+ ]
170
176
  };
171
177
  }
172
178
  //# sourceMappingURL=createTailwindConfig.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../source/development/createTailwindConfig.ts"],
4
- "sourcesContent": ["import {type Config as TailwindConfig} from 'tailwindcss';\n\nimport {DEFAULT_STOP, type DEFAULT_STOPS} from './internals/constants.js';\nimport {createPalette} from './internals/createPalette.js';\nimport {resolveModule} from './internals/resolveModule.js';\n\nlet defaultCreateTailwindConfigOptions = {\n content: ['./{.storybook,app,source,stories,tests}/**/*.{js,jsx,ts,tsx,mdx}', '@jakubmazanec/ui'],\n colors: {\n gray: '#6c6e79',\n neutral: '#6c6e79', // copy of \"gray\"\n red: '#d1002f',\n danger: '#d1002f', // copy of \"red\"\n orange: {\n hex: '#c33909',\n hueShift: 1,\n },\n warning: {\n hex: '#c33909',\n hueShift: 1,\n }, // copy of \"orange\"\n yellow: {\n swatches: [\n {hex: '#fffffa', stop: 10},\n {hex: '#fffef0', stop: 25},\n {hex: '#fffbdb', stop: 50},\n {hex: '#fff3b8', stop: 100},\n {hex: '#ffe06f', stop: 200},\n {hex: '#ffc72d', stop: 300},\n {hex: '#e69d00', stop: 400},\n {hex: '#9e6300', stop: 500},\n {hex: '#805701', stop: 600},\n {hex: '#614700', stop: 700},\n {hex: '#3d3000', stop: 800},\n {hex: '#1f1a00', stop: 900},\n {hex: '#0f0e00', stop: 950},\n {hex: '#0a0a00', stop: 975},\n {hex: '#050500', stop: 990},\n ],\n hex: '#9e6300',\n hueShift: 3,\n },\n green: '#0a7e22',\n teal: {\n hex: '#007c65',\n hueShift: 5,\n },\n blue: '#006dca',\n primary: '#006dca', // copy of \"blue\"\n violet: '#8649e1',\n pink: {\n hex: '#b229b9',\n hueShift: 10,\n },\n },\n} satisfies CreateTailwindConfigOptions;\n\nexport type CreateTailwindConfigOptions = {\n content?: string[] | undefined;\n colors?: Record<\n string,\n | {hex: string; hueShift?: number; saturationShift?: number}\n | {\n swatches: Array<{hex: string; stop: (typeof DEFAULT_STOPS)[number]}>;\n hueShift?: number;\n saturationShift?: number;\n }\n | string\n >;\n};\n\nexport function createTailwindConfig({\n content,\n colors,\n}: CreateTailwindConfigOptions = defaultCreateTailwindConfigOptions): TailwindConfig {\n let themeColors = {\n transparent: 'transparent',\n current: 'currentColor',\n white: '#fff',\n black: '#000',\n };\n\n for (let [name, color] of Object.entries(colors ?? {})) {\n if (typeof color === 'string') {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: [\n {\n hex: color,\n stop: DEFAULT_STOP,\n },\n ],\n hueShift: 0,\n saturationShift: 0,\n }),\n };\n } else if ('swatches' in color) {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: color.swatches,\n hueShift: color.hueShift ?? 0,\n saturationShift: color.saturationShift ?? 0,\n }),\n };\n } else if ('hex' in color) {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: [{hex: color.hex, stop: DEFAULT_STOP}],\n hueShift: color.hueShift ?? 0,\n saturationShift: color.saturationShift ?? 0,\n }),\n };\n }\n }\n\n let resolvedContent = [];\n\n for (let contentPath of content ?? []) {\n try {\n if (contentPath.startsWith('.') || contentPath.startsWith('/')) {\n resolvedContent.push(contentPath);\n } else {\n resolvedContent.push(`${resolveModule(contentPath)}/**`);\n }\n } catch {\n // no-op, because we're catching error caused by `createRequire` not being a function in a browser environment\n }\n }\n\n return {\n content: resolvedContent,\n theme: {\n colors: themeColors,\n borderRadius: {\n none: '0',\n DEFAULT: '0.25rem',\n '0.5': '0.125rem',\n '1': '0.25rem',\n '1.5': '0.375rem',\n '2': '0.5rem',\n '2.5': '0.625rem',\n '3': '0.75rem',\n '4': '1rem',\n full: '9999px',\n },\n extend: {\n spacing: {\n 13: '3.25rem',\n 15: '3.75rem',\n 17: '4.25rem',\n 18: '4.5rem',\n 19: '4.75rem',\n 21: '5.25rem',\n 22: '5.5rem',\n 23: '5.75rem',\n 25: '6.25rem',\n 26: '6.5rem',\n 27: '6.75rem',\n 29: '6.25rem',\n 30: '7.5rem',\n 34: '8.5rem',\n 38: '9.5rem',\n 40: '10rem',\n },\n fontFamily: {\n sans: [\n 'InterVariable',\n 'ui-sans-serif',\n 'system-ui',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n '\"Noto Color Emoji\"',\n ],\n },\n },\n },\n future: {\n hoverOnlyWhenSupported: true,\n },\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {type Config as TailwindConfig} from 'tailwindcss';\nimport plugin from 'tailwindcss/plugin';\n\nimport {DEFAULT_STOP, type DEFAULT_STOPS} from './internals/constants.js';\nimport {createPalette} from './internals/createPalette.js';\nimport {resolveModule} from './internals/resolveModule.js';\n\nlet defaultCreateTailwindConfigOptions = {\n content: ['./{.storybook,app,source,stories,tests}/**/*.{js,jsx,ts,tsx,mdx}', '@jakubmazanec/ui'],\n colors: {\n gray: '#6c6e79',\n neutral: '#6c6e79', // copy of \"gray\"\n red: '#d1002f',\n danger: '#d1002f', // copy of \"red\"\n orange: {\n hex: '#c33909',\n hueShift: 1,\n },\n warning: {\n hex: '#c33909',\n hueShift: 1,\n }, // copy of \"orange\"\n yellow: {\n swatches: [\n {hex: '#fffffa', stop: 10},\n {hex: '#fffef0', stop: 25},\n {hex: '#fffbdb', stop: 50},\n {hex: '#fff3b8', stop: 100},\n {hex: '#ffe06f', stop: 200},\n {hex: '#ffc72d', stop: 300},\n {hex: '#e69d00', stop: 400},\n {hex: '#9e6300', stop: 500},\n {hex: '#805701', stop: 600},\n {hex: '#614700', stop: 700},\n {hex: '#3d3000', stop: 800},\n {hex: '#1f1a00', stop: 900},\n {hex: '#0f0e00', stop: 950},\n {hex: '#0a0a00', stop: 975},\n {hex: '#050500', stop: 990},\n ],\n hex: '#9e6300',\n hueShift: 3,\n },\n green: '#0a7e22',\n teal: {\n hex: '#007c65',\n hueShift: 5,\n },\n blue: '#006dca',\n primary: '#006dca', // copy of \"blue\"\n violet: '#8649e1',\n pink: {\n hex: '#b229b9',\n hueShift: 10,\n },\n },\n} satisfies CreateTailwindConfigOptions;\n\nexport type CreateTailwindConfigOptions = {\n content?: string[] | undefined;\n colors?: Record<\n string,\n | {hex: string; hueShift?: number; saturationShift?: number}\n | {\n swatches: Array<{hex: string; stop: (typeof DEFAULT_STOPS)[number]}>;\n hueShift?: number;\n saturationShift?: number;\n }\n | string\n >;\n};\n\nexport function createTailwindConfig({\n content,\n colors,\n}: CreateTailwindConfigOptions = defaultCreateTailwindConfigOptions): TailwindConfig {\n let themeColors: Record<string, Record<string, string> | string> = {\n transparent: 'transparent',\n current: 'currentColor',\n white: '#fff',\n black: '#000',\n };\n\n for (let [name, color] of Object.entries(colors ?? {})) {\n if (typeof color === 'string') {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: [\n {\n hex: color,\n stop: DEFAULT_STOP,\n },\n ],\n hueShift: 0,\n saturationShift: 0,\n }),\n };\n } else if ('swatches' in color) {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: color.swatches,\n hueShift: color.hueShift ?? 0,\n saturationShift: color.saturationShift ?? 0,\n }),\n };\n } else if ('hex' in color) {\n themeColors = {\n ...themeColors,\n ...createPalette({\n name,\n swatches: [{hex: color.hex, stop: DEFAULT_STOP}],\n hueShift: color.hueShift ?? 0,\n saturationShift: color.saturationShift ?? 0,\n }),\n };\n }\n }\n\n let resolvedContent = [];\n\n for (let contentPath of content ?? []) {\n try {\n if (contentPath.startsWith('.') || contentPath.startsWith('/')) {\n resolvedContent.push(contentPath);\n } else {\n resolvedContent.push(`${resolveModule(contentPath)}/**`);\n }\n } catch {\n // no-op, because we're catching error caused by `createRequire` not being a function in a browser environment\n }\n }\n\n return {\n content: resolvedContent,\n theme: {\n colors: themeColors,\n radius: {\n none: '0',\n '0.5': '0.125rem',\n '1': '0.25rem',\n '1.5': '0.375rem',\n '2': '0.5rem',\n '2.5': '0.625rem',\n '3': '0.75rem',\n '4': '1rem',\n full: '9999px',\n },\n fontFamily: {\n sans: [\n 'InterVariable',\n 'ui-sans-serif',\n 'system-ui',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n '\"Noto Color Emoji\"',\n ],\n },\n },\n // TODO: find another solution; following is needed because of this: https://github.com/tailwindlabs/tailwindcss/issues/18237\n plugins: [\n plugin(({addBase}) => {\n let root: Record<string, Record<string, string> | string> = {\n '--radius-none': '0',\n '--radius-0_5': '0.125rem',\n '--radius-1': '0.25rem',\n '--radius-1_5': '0.375rem',\n '--radius-2': '0.5rem',\n '--radius-2_5': '0.625rem',\n '--radius-3': '0.75rem',\n '--radius-4': '1rem',\n '--radius-full': '9999px',\n '--font-family-sans':\n 'InterVariable, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"',\n };\n\n for (let [colorName, colorValue] of Object.entries(themeColors)) {\n if (typeof colorValue === 'string') {\n root[`--color-${colorName}`] = colorValue;\n } else if (typeof colorValue === 'object') {\n for (let [shadeName, shadeValue] of Object.entries(colorValue)) {\n root[`--color-${colorName}-${shadeName}`] = shadeValue;\n }\n }\n }\n\n addBase({\n ':root': root,\n });\n }),\n ],\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
  import { extendTailwindMerge, twMerge } from "tailwind-merge";
3
3
  const THEME_SCALES = [
4
- "colors",
4
+ "color",
5
+ "font",
6
+ "text",
7
+ "weight",
8
+ "tracking",
9
+ "leading",
10
+ "breakpoint",
11
+ "container",
5
12
  "spacing",
13
+ "radius",
14
+ "shadow",
15
+ "shadow",
16
+ "shadow",
6
17
  "blur",
7
- "brightness",
8
- "borderColor",
9
- "borderRadius",
10
- "borderSpacing",
11
- "borderWidth",
12
- "contrast",
13
- "grayscale",
14
- "hueRotate",
15
- "invert",
16
- "gap",
17
- "gradientColorStops",
18
- "gradientColorStopPositions",
19
- "inset",
20
- "margin",
21
- "opacity",
22
- "padding",
23
- "saturate",
24
- "scale",
25
- "sepia",
26
- "skew",
27
- "space",
28
- "translate"
18
+ "perspective",
19
+ "aspect",
20
+ "ease",
21
+ "animate"
29
22
  ];
30
23
  export function createTailwindMerge(tailwindConfig) {
31
24
  if (!tailwindConfig.theme) {
@@ -46,7 +39,7 @@ export function createTailwindMerge(tailwindConfig) {
46
39
  for (let key of keys) {
47
40
  if (tailwindConfigScale[key] !== void 0 && tailwindConfigScale[key] !== null && typeof tailwindConfigScale[key] === "object") {
48
41
  combinedKeys.push(
49
- ...Object.keys(tailwindConfigScale[key]).filter((value) => value !== "DEFAULT").map((value) => `${key}-${value}`)
42
+ ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`)
50
43
  );
51
44
  } else {
52
45
  combinedKeys.push(key);
@@ -60,7 +53,7 @@ export function createTailwindMerge(tailwindConfig) {
60
53
  for (let key of keys) {
61
54
  if (tailwindConfigScale[key] !== void 0 && tailwindConfigScale[key] !== null && typeof tailwindConfigScale[key] === "object") {
62
55
  combinedKeys.push(
63
- ...Object.keys(tailwindConfigScale[key]).filter((value) => value !== "DEFAULT").map((value) => `${key}-${value}`)
56
+ ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`)
64
57
  );
65
58
  } else {
66
59
  combinedKeys.push(key);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../source/development/createTailwindMerge.ts"],
4
- "sourcesContent": ["import {extendTailwindMerge, twMerge} from 'tailwind-merge';\nimport {type Config as TailwindConfig} from 'tailwindcss';\n\nconst THEME_SCALES = [\n 'colors',\n 'spacing',\n 'blur',\n 'brightness',\n 'borderColor',\n 'borderRadius',\n 'borderSpacing',\n 'borderWidth',\n 'contrast',\n 'grayscale',\n 'hueRotate',\n 'invert',\n 'gap',\n 'gradientColorStops',\n 'gradientColorStopPositions',\n 'inset',\n 'margin',\n 'opacity',\n 'padding',\n 'saturate',\n 'scale',\n 'sepia',\n 'skew',\n 'space',\n 'translate',\n];\n\nexport function createTailwindMerge(tailwindConfig: TailwindConfig) {\n if (!tailwindConfig.theme) {\n return twMerge;\n }\n\n let tailwindMergeConfig: Parameters<typeof extendTailwindMerge>[0] = {\n override: {theme: {}},\n extend: {theme: {}},\n };\n\n for (let scale of THEME_SCALES) {\n if (!tailwindMergeConfig.override?.theme || !tailwindMergeConfig.extend?.theme) {\n throw new Error('Creating Tailwind merge failed!');\n }\n\n if (tailwindConfig.theme[scale]) {\n let tailwindConfigScale = tailwindConfig.theme[scale] as Record<\n string,\n Record<string, string | unknown> | unknown\n >;\n let keys = Object.keys(tailwindConfigScale);\n let combinedKeys = [];\n\n for (let key of keys) {\n if (\n tailwindConfigScale[key] !== undefined &&\n tailwindConfigScale[key] !== null &&\n typeof tailwindConfigScale[key] === 'object'\n ) {\n combinedKeys.push(\n ...Object.keys(tailwindConfigScale[key])\n .filter((value) => value !== 'DEFAULT')\n .map((value) => `${key}-${value}`),\n );\n } else {\n combinedKeys.push(key);\n }\n }\n\n tailwindMergeConfig.override.theme[scale] = combinedKeys;\n } else if (tailwindConfig.theme.extend?.[scale]) {\n let tailwindConfigScale = tailwindConfig.theme.extend[scale] as Record<\n string,\n Record<string, string | unknown> | unknown\n >;\n let keys = Object.keys(tailwindConfigScale);\n let combinedKeys = [];\n\n for (let key of keys) {\n if (\n tailwindConfigScale[key] !== undefined &&\n tailwindConfigScale[key] !== null &&\n typeof tailwindConfigScale[key] === 'object'\n ) {\n combinedKeys.push(\n ...Object.keys(tailwindConfigScale[key])\n .filter((value) => value !== 'DEFAULT')\n .map((value) => `${key}-${value}`),\n );\n } else {\n combinedKeys.push(key);\n }\n }\n\n tailwindMergeConfig.extend.theme[scale] = combinedKeys;\n }\n }\n\n return extendTailwindMerge(tailwindMergeConfig);\n}\n"],
5
- "mappings": ";AAAA,SAAQ,qBAAqB,eAAc;AAG3C,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,gBAAS,oBAAoB,gBAAgC;AAClE,MAAI,CAAC,eAAe,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,MAAI,sBAAiE;AAAA,IACnE,UAAU,EAAC,OAAO,CAAC,EAAC;AAAA,IACpB,QAAQ,EAAC,OAAO,CAAC,EAAC;AAAA,EACpB;AAEA,WAAS,SAAS,cAAc;AAC9B,QAAI,CAAC,oBAAoB,UAAU,SAAS,CAAC,oBAAoB,QAAQ,OAAO;AAC9E,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAEA,QAAI,eAAe,MAAM,KAAK,GAAG;AAC/B,UAAI,sBAAsB,eAAe,MAAM,KAAK;AAIpD,UAAI,OAAO,OAAO,KAAK,mBAAmB;AAC1C,UAAI,eAAe,CAAC;AAEpB,eAAS,OAAO,MAAM;AACpB,YACE,oBAAoB,GAAG,MAAM,UAC7B,oBAAoB,GAAG,MAAM,QAC7B,OAAO,oBAAoB,GAAG,MAAM,UACpC;AACA,uBAAa;AAAA,YACX,GAAG,OAAO,KAAK,oBAAoB,GAAG,CAAC,EACpC,OAAO,CAAC,UAAU,UAAU,SAAS,EACrC,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,UACrC;AAAA,QACF,OAAO;AACL,uBAAa,KAAK,GAAG;AAAA,QACvB;AAAA,MACF;AAEA,0BAAoB,SAAS,MAAM,KAAK,IAAI;AAAA,IAC9C,WAAW,eAAe,MAAM,SAAS,KAAK,GAAG;AAC/C,UAAI,sBAAsB,eAAe,MAAM,OAAO,KAAK;AAI3D,UAAI,OAAO,OAAO,KAAK,mBAAmB;AAC1C,UAAI,eAAe,CAAC;AAEpB,eAAS,OAAO,MAAM;AACpB,YACE,oBAAoB,GAAG,MAAM,UAC7B,oBAAoB,GAAG,MAAM,QAC7B,OAAO,oBAAoB,GAAG,MAAM,UACpC;AACA,uBAAa;AAAA,YACX,GAAG,OAAO,KAAK,oBAAoB,GAAG,CAAC,EACpC,OAAO,CAAC,UAAU,UAAU,SAAS,EACrC,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,UACrC;AAAA,QACF,OAAO;AACL,uBAAa,KAAK,GAAG;AAAA,QACvB;AAAA,MACF;AAEA,0BAAoB,OAAO,MAAM,KAAK,IAAI;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,oBAAoB,mBAAmB;AAChD;",
4
+ "sourcesContent": ["import {extendTailwindMerge, twMerge} from 'tailwind-merge';\nimport {type Config as TailwindConfig} from 'tailwindcss';\n\nconst THEME_SCALES = [\n 'color',\n 'font',\n 'text',\n 'weight',\n 'tracking',\n 'leading',\n 'breakpoint',\n 'container',\n 'spacing',\n 'radius',\n 'shadow',\n 'shadow',\n 'shadow',\n 'blur',\n 'perspective',\n 'aspect',\n 'ease',\n 'animate',\n];\n\nexport function createTailwindMerge(tailwindConfig: TailwindConfig) {\n if (!tailwindConfig.theme) {\n return twMerge;\n }\n\n let tailwindMergeConfig: Parameters<typeof extendTailwindMerge>[0] = {\n override: {theme: {}},\n extend: {theme: {}},\n };\n\n for (let scale of THEME_SCALES) {\n if (!tailwindMergeConfig.override?.theme || !tailwindMergeConfig.extend?.theme) {\n throw new Error('Creating Tailwind merge failed!');\n }\n\n if (tailwindConfig.theme[scale]) {\n let tailwindConfigScale = tailwindConfig.theme[scale] as Record<\n string,\n Record<string, string | unknown> | unknown\n >;\n let keys = Object.keys(tailwindConfigScale);\n let combinedKeys = [];\n\n for (let key of keys) {\n if (\n tailwindConfigScale[key] !== undefined &&\n tailwindConfigScale[key] !== null &&\n typeof tailwindConfigScale[key] === 'object'\n ) {\n combinedKeys.push(\n ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`),\n );\n } else {\n combinedKeys.push(key);\n }\n }\n\n tailwindMergeConfig.override.theme[scale] = combinedKeys;\n } else if (tailwindConfig.theme.extend?.[scale]) {\n let tailwindConfigScale = tailwindConfig.theme.extend[scale] as Record<\n string,\n Record<string, string | unknown> | unknown\n >;\n let keys = Object.keys(tailwindConfigScale);\n let combinedKeys = [];\n\n for (let key of keys) {\n if (\n tailwindConfigScale[key] !== undefined &&\n tailwindConfigScale[key] !== null &&\n typeof tailwindConfigScale[key] === 'object'\n ) {\n combinedKeys.push(\n ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`),\n );\n } else {\n combinedKeys.push(key);\n }\n }\n\n tailwindMergeConfig.extend.theme[scale] = combinedKeys;\n }\n }\n\n return extendTailwindMerge(tailwindMergeConfig);\n}\n"],
5
+ "mappings": ";AAAA,SAAQ,qBAAqB,eAAc;AAG3C,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,gBAAS,oBAAoB,gBAAgC;AAClE,MAAI,CAAC,eAAe,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,MAAI,sBAAiE;AAAA,IACnE,UAAU,EAAC,OAAO,CAAC,EAAC;AAAA,IACpB,QAAQ,EAAC,OAAO,CAAC,EAAC;AAAA,EACpB;AAEA,WAAS,SAAS,cAAc;AAC9B,QAAI,CAAC,oBAAoB,UAAU,SAAS,CAAC,oBAAoB,QAAQ,OAAO;AAC9E,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAEA,QAAI,eAAe,MAAM,KAAK,GAAG;AAC/B,UAAI,sBAAsB,eAAe,MAAM,KAAK;AAIpD,UAAI,OAAO,OAAO,KAAK,mBAAmB;AAC1C,UAAI,eAAe,CAAC;AAEpB,eAAS,OAAO,MAAM;AACpB,YACE,oBAAoB,GAAG,MAAM,UAC7B,oBAAoB,GAAG,MAAM,QAC7B,OAAO,oBAAoB,GAAG,MAAM,UACpC;AACA,uBAAa;AAAA,YACX,GAAG,OAAO,KAAK,oBAAoB,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,UAC3E;AAAA,QACF,OAAO;AACL,uBAAa,KAAK,GAAG;AAAA,QACvB;AAAA,MACF;AAEA,0BAAoB,SAAS,MAAM,KAAK,IAAI;AAAA,IAC9C,WAAW,eAAe,MAAM,SAAS,KAAK,GAAG;AAC/C,UAAI,sBAAsB,eAAe,MAAM,OAAO,KAAK;AAI3D,UAAI,OAAO,OAAO,KAAK,mBAAmB;AAC1C,UAAI,eAAe,CAAC;AAEpB,eAAS,OAAO,MAAM;AACpB,YACE,oBAAoB,GAAG,MAAM,UAC7B,oBAAoB,GAAG,MAAM,QAC7B,OAAO,oBAAoB,GAAG,MAAM,UACpC;AACA,uBAAa;AAAA,YACX,GAAG,OAAO,KAAK,oBAAoB,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,UAC3E;AAAA,QACF,OAAO;AACL,uBAAa,KAAK,GAAG;AAAA,QACvB;AAAA,MACF;AAEA,0BAAoB,OAAO,MAAM,KAAK,IAAI;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,oBAAoB,mBAAmB;AAChD;",
6
6
  "names": []
7
7
  }
package/build/styles.css CHANGED
@@ -14,10 +14,11 @@
14
14
  }
15
15
  @layer base {
16
16
  html {
17
- @apply font-sans text-neutral-950;
17
+ font-family: var(--font-sans);
18
+ color: var(--color-neutral-550);
18
19
  }
19
20
  * {
20
- scrollbar-color: theme(colors.neutral.200) theme(colors.transparent);
21
+ scrollbar-color: var(--color-neutral-200) var(--color-transparent);
21
22
  }
22
23
  }
23
24
  /*# sourceMappingURL=styles.css.map */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../source/styles.css"],
4
- "sourcesContent": ["@font-face {\n font-family: InterVariable;\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url('./inter-variable.woff2') format('woff2');\n}\n\n@font-face {\n font-family: InterVariable;\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url('./inter-variable-italic.woff2') format('woff2');\n}\n\n@layer base {\n html {\n @apply font-sans text-neutral-950;\n }\n\n * {\n scrollbar-color: theme(colors.neutral.200) theme(colors.transparent);\n }\n}\n"],
5
- "mappings": "AAAA;AACE,eAAa;AACb,cAAY;AACZ,eAAa,IAAI;AACjB,gBAAc;AACd,OAAK,4BAA8B,OAAO;AAC5C;AAEA;AACE,eAAa;AACb,cAAY;AACZ,eAAa,IAAI;AACjB,gBAAc;AACd,OAAK,mCAAqC,OAAO;AACnD;AAEA;AACE;AACE,WAAO,UAAU;AACnB;AAEA;AACE,qBAAiB,MAAM,MAAM,CAAC,OAAO,MAAM,MAAM,MAAM,CAAC;AAC1D;AACF;",
4
+ "sourcesContent": ["@font-face {\n font-family: InterVariable;\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url('./inter-variable.woff2') format('woff2');\n}\n\n@font-face {\n font-family: InterVariable;\n font-style: italic;\n font-weight: 100 900;\n font-display: swap;\n src: url('./inter-variable-italic.woff2') format('woff2');\n}\n\n@layer base {\n html {\n font-family: var(--font-sans);\n color: var(--color-neutral-550);\n }\n\n * {\n scrollbar-color: var(--color-neutral-200) var(--color-transparent);\n }\n}\n"],
5
+ "mappings": "AAAA;AACE,eAAa;AACb,cAAY;AACZ,eAAa,IAAI;AACjB,gBAAc;AACd,OAAK,4BAA8B,OAAO;AAC5C;AAEA;AACE,eAAa;AACb,cAAY;AACZ,eAAa,IAAI;AACjB,gBAAc;AACd,OAAK,mCAAqC,OAAO;AACnD;AAEA;AACE;AACE,iBAAa,IAAI;AACjB,WAAO,IAAI;AACb;AAEA;AACE,qBAAiB,IAAI,qBAAqB,IAAI;AAChD;AACF;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/ui",
3
- "version": "0.3.2-unstable.f12d7dc8",
3
+ "version": "0.4.0-unstable.026ad272",
4
4
  "description": "React component library.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,9 +22,9 @@
22
22
  "source"
23
23
  ],
24
24
  "scripts": {
25
- "build": "del-cli build tsconfig.tsbuildinfo && esbuild \"source/**/*\" --platform=node --target=node22.13 --outdir=build --sourcemap --loader:.woff2=copy && tsc && storybook build",
25
+ "build": "del-cli build tsconfig.tsbuildinfo && esbuild \"source/**/*\" --platform=node --target=node24.1 --outdir=build --sourcemap --loader:.woff2=copy && tsc && storybook build",
26
26
  "clean": "del-cli coverage build *.tsbuildinfo",
27
- "develop": "concurrently \"esbuild \"source/**/*\" --platform=node --target=node22.13 --outdir=build --sourcemap --watch\" \"tsc --watch\" \"storybook dev -p 6006 --no-open\"",
27
+ "develop": "concurrently \"esbuild \"source/**/*\" --platform=node --target=node24.1 --outdir=build --sourcemap --watch\" \"tsc --watch\" \"storybook dev -p 6006 --no-open\"",
28
28
  "document": "del-cli docs && typedoc --options typedoc.config.cjs",
29
29
  "format": "prettier . --write --ignore-unknown",
30
30
  "lint": "eslint .",
@@ -41,17 +41,17 @@
41
41
  "@dnd-kit/utilities": "^3.2.2",
42
42
  "@headlessui/react": "^2.2.0",
43
43
  "@heroicons/react": "^2.2.0",
44
- "@jakubmazanec/ts-utils": "3.0.13-unstable.f12d7dc8",
44
+ "@jakubmazanec/ts-utils": "3.0.13-unstable.026ad272",
45
45
  "@tanstack/match-sorter-utils": "^8.19.4",
46
46
  "@tanstack/react-table": "^8.20.6",
47
47
  "culori": "^4.0.1",
48
48
  "lodash": "^4.17.21",
49
- "tailwind-merge": "^2.6.0",
49
+ "tailwind-merge": "^3.3.0",
50
50
  "zod": "^3.24.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@chromatic-com/storybook": "^3.2.4",
54
- "@jakubmazanec/eslint-config": "^4.1.0",
54
+ "@jakubmazanec/eslint-config": "4.1.6-unstable.026ad272",
55
55
  "@storybook/addon-controls": "^8.5.2",
56
56
  "@storybook/addon-essentials": "^8.5.2",
57
57
  "@storybook/addon-interactions": "^8.5.2",
@@ -61,11 +61,12 @@
61
61
  "@storybook/react": "^8.5.2",
62
62
  "@storybook/react-vite": "^8.5.2",
63
63
  "@storybook/test": "^8.5.2",
64
+ "@tailwindcss/vite": "^4.0.0",
64
65
  "@testing-library/jest-dom": "^6.6.3",
65
66
  "@testing-library/react": "^16.2.0",
66
67
  "@types/culori": "^2.1.1",
67
68
  "@types/lodash": "^4.17.15",
68
- "@types/node": "^22.10.7",
69
+ "@types/node": "^22.15.21",
69
70
  "@types/react": "^19.0.8",
70
71
  "@types/react-dom": "^19.0.3",
71
72
  "@vitest/coverage-v8": "^3.0.4",
@@ -82,7 +83,7 @@
82
83
  "react": "^19.0.0",
83
84
  "react-dom": "^19.0.0",
84
85
  "storybook": "^8.5.2",
85
- "tailwindcss": "^3.4.17",
86
+ "tailwindcss": "^4.1.7",
86
87
  "tsx": "^4.19.2",
87
88
  "typedoc": "^0.28.4",
88
89
  "typedoc-plugin-markdown": "^4.6.3",
@@ -92,10 +93,10 @@
92
93
  "peerDependencies": {
93
94
  "react": "19.x",
94
95
  "react-dom": "19.x",
95
- "tailwindcss": "3.x"
96
+ "tailwindcss": "4.x"
96
97
  },
97
- "packageManager": "npm@10.9.0",
98
+ "packageManager": "npm@11.3.0",
98
99
  "engines": {
99
- "node": "^22.13.0"
100
+ "node": "^24.1.0"
100
101
  }
101
102
  }
@@ -324,7 +324,7 @@ export function DataTable<D extends RowData, C extends Array<ColumnDef<D, any>>>
324
324
  onSearch={onSearchChange}
325
325
  />
326
326
  )}
327
- <div className="w-full overflow-y-visible overflow-x-scroll [scrollbar-width:thin]">
327
+ <div className="w-full overflow-x-scroll overflow-y-visible [scrollbar-width:thin]">
328
328
  <Table
329
329
  style={{
330
330
  width: table.getCenterTotalSize(),
@@ -279,7 +279,7 @@ export function DataTableHeader({
279
279
  <Button
280
280
  aria-label="Resize"
281
281
  // className="absolute right-1 top-2.5 cursor-col-resize"
282
- className="absolute right-1 top-1/2 -mt-2.5 cursor-col-resize"
282
+ className="absolute top-1/2 right-1 -mt-2.5 cursor-col-resize"
283
283
  size="small"
284
284
  variant="invisible"
285
285
  onDoubleClick={handleWidthReset}
@@ -1,4 +1,5 @@
1
1
  import {type Config as TailwindConfig} from 'tailwindcss';
2
+ import plugin from 'tailwindcss/plugin';
2
3
 
3
4
  import {DEFAULT_STOP, type DEFAULT_STOPS} from './internals/constants.js';
4
5
  import {createPalette} from './internals/createPalette.js';
@@ -73,7 +74,7 @@ export function createTailwindConfig({
73
74
  content,
74
75
  colors,
75
76
  }: CreateTailwindConfigOptions = defaultCreateTailwindConfigOptions): TailwindConfig {
76
- let themeColors = {
77
+ let themeColors: Record<string, Record<string, string> | string> = {
77
78
  transparent: 'transparent',
78
79
  current: 'currentColor',
79
80
  white: '#fff',
@@ -137,9 +138,8 @@ export function createTailwindConfig({
137
138
  content: resolvedContent,
138
139
  theme: {
139
140
  colors: themeColors,
140
- borderRadius: {
141
+ radius: {
141
142
  none: '0',
142
- DEFAULT: '0.25rem',
143
143
  '0.5': '0.125rem',
144
144
  '1': '0.25rem',
145
145
  '1.5': '0.375rem',
@@ -149,41 +149,50 @@ export function createTailwindConfig({
149
149
  '4': '1rem',
150
150
  full: '9999px',
151
151
  },
152
- extend: {
153
- spacing: {
154
- 13: '3.25rem',
155
- 15: '3.75rem',
156
- 17: '4.25rem',
157
- 18: '4.5rem',
158
- 19: '4.75rem',
159
- 21: '5.25rem',
160
- 22: '5.5rem',
161
- 23: '5.75rem',
162
- 25: '6.25rem',
163
- 26: '6.5rem',
164
- 27: '6.75rem',
165
- 29: '6.25rem',
166
- 30: '7.5rem',
167
- 34: '8.5rem',
168
- 38: '9.5rem',
169
- 40: '10rem',
170
- },
171
- fontFamily: {
172
- sans: [
173
- 'InterVariable',
174
- 'ui-sans-serif',
175
- 'system-ui',
176
- 'sans-serif',
177
- '"Apple Color Emoji"',
178
- '"Segoe UI Emoji"',
179
- '"Segoe UI Symbol"',
180
- '"Noto Color Emoji"',
181
- ],
182
- },
152
+ fontFamily: {
153
+ sans: [
154
+ 'InterVariable',
155
+ 'ui-sans-serif',
156
+ 'system-ui',
157
+ 'sans-serif',
158
+ '"Apple Color Emoji"',
159
+ '"Segoe UI Emoji"',
160
+ '"Segoe UI Symbol"',
161
+ '"Noto Color Emoji"',
162
+ ],
183
163
  },
184
164
  },
185
- future: {
186
- hoverOnlyWhenSupported: true,
187
- },
165
+ // TODO: find another solution; following is needed because of this: https://github.com/tailwindlabs/tailwindcss/issues/18237
166
+ plugins: [
167
+ plugin(({addBase}) => {
168
+ let root: Record<string, Record<string, string> | string> = {
169
+ '--radius-none': '0',
170
+ '--radius-0_5': '0.125rem',
171
+ '--radius-1': '0.25rem',
172
+ '--radius-1_5': '0.375rem',
173
+ '--radius-2': '0.5rem',
174
+ '--radius-2_5': '0.625rem',
175
+ '--radius-3': '0.75rem',
176
+ '--radius-4': '1rem',
177
+ '--radius-full': '9999px',
178
+ '--font-family-sans':
179
+ 'InterVariable, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',
180
+ };
181
+
182
+ for (let [colorName, colorValue] of Object.entries(themeColors)) {
183
+ if (typeof colorValue === 'string') {
184
+ root[`--color-${colorName}`] = colorValue;
185
+ } else if (typeof colorValue === 'object') {
186
+ for (let [shadeName, shadeValue] of Object.entries(colorValue)) {
187
+ root[`--color-${colorName}-${shadeName}`] = shadeValue;
188
+ }
189
+ }
190
+ }
191
+
192
+ addBase({
193
+ ':root': root,
194
+ });
195
+ }),
196
+ ],
188
197
  };
189
198
  }
@@ -2,31 +2,24 @@ import {extendTailwindMerge, twMerge} from 'tailwind-merge';
2
2
  import {type Config as TailwindConfig} from 'tailwindcss';
3
3
 
4
4
  const THEME_SCALES = [
5
- 'colors',
5
+ 'color',
6
+ 'font',
7
+ 'text',
8
+ 'weight',
9
+ 'tracking',
10
+ 'leading',
11
+ 'breakpoint',
12
+ 'container',
6
13
  'spacing',
14
+ 'radius',
15
+ 'shadow',
16
+ 'shadow',
17
+ 'shadow',
7
18
  'blur',
8
- 'brightness',
9
- 'borderColor',
10
- 'borderRadius',
11
- 'borderSpacing',
12
- 'borderWidth',
13
- 'contrast',
14
- 'grayscale',
15
- 'hueRotate',
16
- 'invert',
17
- 'gap',
18
- 'gradientColorStops',
19
- 'gradientColorStopPositions',
20
- 'inset',
21
- 'margin',
22
- 'opacity',
23
- 'padding',
24
- 'saturate',
25
- 'scale',
26
- 'sepia',
27
- 'skew',
28
- 'space',
29
- 'translate',
19
+ 'perspective',
20
+ 'aspect',
21
+ 'ease',
22
+ 'animate',
30
23
  ];
31
24
 
32
25
  export function createTailwindMerge(tailwindConfig: TailwindConfig) {
@@ -59,9 +52,7 @@ export function createTailwindMerge(tailwindConfig: TailwindConfig) {
59
52
  typeof tailwindConfigScale[key] === 'object'
60
53
  ) {
61
54
  combinedKeys.push(
62
- ...Object.keys(tailwindConfigScale[key])
63
- .filter((value) => value !== 'DEFAULT')
64
- .map((value) => `${key}-${value}`),
55
+ ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`),
65
56
  );
66
57
  } else {
67
58
  combinedKeys.push(key);
@@ -84,9 +75,7 @@ export function createTailwindMerge(tailwindConfig: TailwindConfig) {
84
75
  typeof tailwindConfigScale[key] === 'object'
85
76
  ) {
86
77
  combinedKeys.push(
87
- ...Object.keys(tailwindConfigScale[key])
88
- .filter((value) => value !== 'DEFAULT')
89
- .map((value) => `${key}-${value}`),
78
+ ...Object.keys(tailwindConfigScale[key]).map((value) => `${key}-${value}`),
90
79
  );
91
80
  } else {
92
81
  combinedKeys.push(key);
package/source/styles.css CHANGED
@@ -16,10 +16,11 @@
16
16
 
17
17
  @layer base {
18
18
  html {
19
- @apply font-sans text-neutral-950;
19
+ font-family: var(--font-sans);
20
+ color: var(--color-neutral-550);
20
21
  }
21
22
 
22
23
  * {
23
- scrollbar-color: theme(colors.neutral.200) theme(colors.transparent);
24
+ scrollbar-color: var(--color-neutral-200) var(--color-transparent);
24
25
  }
25
26
  }