@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 +1 -1
- package/build/components/Combobox.d.ts +1 -3
- package/build/components/DialogTitle.d.ts +1 -1
- package/build/components/Listbox.d.ts +2 -4
- package/build/components/Menu.d.ts +1 -3
- package/build/components/data-table/DataTable.js +1 -1
- package/build/components/data-table/DataTable.js.map +1 -1
- package/build/components/data-table/internals/DataTableHeader.js +1 -1
- package/build/components/data-table/internals/DataTableHeader.js.map +1 -1
- package/build/development/createTailwindConfig.js +42 -36
- package/build/development/createTailwindConfig.js.map +2 -2
- package/build/development/createTailwindMerge.js +18 -25
- package/build/development/createTailwindMerge.js.map +2 -2
- package/build/styles.css +3 -2
- package/build/styles.css.map +2 -2
- package/package.json +12 -11
- package/source/components/data-table/DataTable.tsx +1 -1
- package/source/components/data-table/internals/DataTableHeader.tsx +1 -1
- package/source/development/createTailwindConfig.ts +46 -37
- package/source/development/createTailwindMerge.ts +18 -29
- package/source/styles.css +3 -2
package/README.md
CHANGED
|
@@ -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 =
|
|
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
|
|
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-
|
|
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": "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",
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
168
|
-
|
|
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
|
|
5
|
-
"mappings": ";
|
|
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
|
-
"
|
|
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
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
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]).
|
|
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]).
|
|
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 '
|
|
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;
|
|
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
|
-
|
|
17
|
+
font-family: var(--font-sans);
|
|
18
|
+
color: var(--color-neutral-550);
|
|
18
19
|
}
|
|
19
20
|
* {
|
|
20
|
-
scrollbar-color:
|
|
21
|
+
scrollbar-color: var(--color-neutral-200) var(--color-transparent);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
/*# sourceMappingURL=styles.css.map */
|
package/build/styles.css.map
CHANGED
|
@@ -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
|
|
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,
|
|
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
|
+
"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=
|
|
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=
|
|
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.
|
|
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": "^
|
|
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": "
|
|
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.
|
|
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": "^
|
|
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": "
|
|
96
|
+
"tailwindcss": "4.x"
|
|
96
97
|
},
|
|
97
|
-
"packageManager": "npm@
|
|
98
|
+
"packageManager": "npm@11.3.0",
|
|
98
99
|
"engines": {
|
|
99
|
-
"node": "^
|
|
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-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
186
|
-
|
|
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
|
-
'
|
|
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
|
-
'
|
|
9
|
-
'
|
|
10
|
-
'
|
|
11
|
-
'
|
|
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
|
-
|
|
19
|
+
font-family: var(--font-sans);
|
|
20
|
+
color: var(--color-neutral-550);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
* {
|
|
23
|
-
scrollbar-color:
|
|
24
|
+
scrollbar-color: var(--color-neutral-200) var(--color-transparent);
|
|
24
25
|
}
|
|
25
26
|
}
|