@trsys-tech/matrix-library 1.1.5 → 1.1.7
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 +18 -10
- package/dist/components/data-table/DataTable.d.ts +8 -0
- package/dist/components/data-table/DataTable.d.ts.map +1 -0
- package/dist/components/data-table/DataTable.types.d.ts +176 -0
- package/dist/components/data-table/DataTable.types.d.ts.map +1 -0
- package/dist/components/data-table/DataTableActions.d.ts +42 -0
- package/dist/components/data-table/DataTableActions.d.ts.map +1 -0
- package/dist/components/data-table/DataTableAlignment.d.ts +9 -0
- package/dist/components/data-table/DataTableAlignment.d.ts.map +1 -0
- package/dist/components/data-table/DataTableColumnHeader.d.ts +11 -0
- package/dist/components/data-table/DataTableColumnHeader.d.ts.map +1 -0
- package/dist/components/data-table/DataTableColumnMenu.d.ts +9 -0
- package/dist/components/data-table/DataTableColumnMenu.d.ts.map +1 -0
- package/dist/components/data-table/DataTableContent.d.ts +7 -0
- package/dist/components/data-table/DataTableContent.d.ts.map +1 -0
- package/dist/components/data-table/DataTableContext.d.ts +37 -0
- package/dist/components/data-table/DataTableContext.d.ts.map +1 -0
- package/dist/components/data-table/DataTableHeader.d.ts +22 -0
- package/dist/components/data-table/DataTableHeader.d.ts.map +1 -0
- package/dist/components/data-table/DataTablePagination.d.ts +8 -0
- package/dist/components/data-table/DataTablePagination.d.ts.map +1 -0
- package/dist/components/data-table/DataTableRowView.d.ts +40 -0
- package/dist/components/data-table/DataTableRowView.d.ts.map +1 -0
- package/dist/components/data-table/dataTableColumnDrag.d.ts +13 -0
- package/dist/components/data-table/dataTableColumnDrag.d.ts.map +1 -0
- package/dist/components/data-table/dataTableEditing.d.ts +11 -0
- package/dist/components/data-table/dataTableEditing.d.ts.map +1 -0
- package/dist/components/data-table/dataTableFeatures.d.ts +25 -0
- package/dist/components/data-table/dataTableFeatures.d.ts.map +1 -0
- package/dist/components/data-table/dataTableModel.d.ts +23 -0
- package/dist/components/data-table/dataTableModel.d.ts.map +1 -0
- package/dist/components/data-table/dataTablePrint.d.ts +3 -0
- package/dist/components/data-table/dataTablePrint.d.ts.map +1 -0
- package/dist/components/data-table/dataTableStyles.d.ts +2 -0
- package/dist/components/data-table/dataTableStyles.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableApi.d.ts +34 -0
- package/dist/components/data-table/useDataTableApi.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableColumnDrag.d.ts +16 -0
- package/dist/components/data-table/useDataTableColumnDrag.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableInstance.d.ts +96 -0
- package/dist/components/data-table/useDataTableInstance.d.ts.map +1 -0
- package/dist/components/data-table/useDataTableMotion.d.ts +4 -0
- package/dist/components/data-table/useDataTableMotion.d.ts.map +1 -0
- package/dist/components/resource-scheduler/ResourceScheduler.d.ts +96 -0
- package/dist/components/resource-scheduler/ResourceScheduler.d.ts.map +1 -0
- package/dist/datatable.es.js +40 -0
- package/dist/datatable.es.js.map +1 -0
- package/dist/datatableactions.es.js +193 -0
- package/dist/datatableactions.es.js.map +1 -0
- package/dist/datatablealignment.es.js +11 -0
- package/dist/datatablealignment.es.js.map +1 -0
- package/dist/datatablecolumndrag.es.js +34 -0
- package/dist/datatablecolumndrag.es.js.map +1 -0
- package/dist/datatablecolumnheader.es.js +81 -0
- package/dist/datatablecolumnheader.es.js.map +1 -0
- package/dist/datatablecolumnmenu.es.js +191 -0
- package/dist/datatablecolumnmenu.es.js.map +1 -0
- package/dist/datatablecontent.es.js +376 -0
- package/dist/datatablecontent.es.js.map +1 -0
- package/dist/datatablecontext.es.js +14 -0
- package/dist/datatablecontext.es.js.map +1 -0
- package/dist/datatablefeatures.es.js +24 -0
- package/dist/datatablefeatures.es.js.map +1 -0
- package/dist/datatableheader.es.js +126 -0
- package/dist/datatableheader.es.js.map +1 -0
- package/dist/datatablemodel.es.js +126 -0
- package/dist/datatablemodel.es.js.map +1 -0
- package/dist/datatablepagination.es.js +43 -0
- package/dist/datatablepagination.es.js.map +1 -0
- package/dist/datatableprint.es.js +65 -0
- package/dist/datatableprint.es.js.map +1 -0
- package/dist/datatablerowview.es.js +201 -0
- package/dist/datatablerowview.es.js.map +1 -0
- package/dist/datatablestyles.es.js +5 -0
- package/dist/datatablestyles.es.js.map +1 -0
- package/dist/ganttchart.es.js +2 -2
- package/dist/ganttchart.es.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +173 -154
- package/dist/index.es.js.map +1 -1
- package/dist/resourcescheduler.es.js +450 -0
- package/dist/resourcescheduler.es.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/tabs.es.js +15 -15
- package/dist/tabs.es.js.map +1 -1
- package/dist/usedatatableapi.es.js +117 -0
- package/dist/usedatatableapi.es.js.map +1 -0
- package/dist/usedatatablecolumndrag.es.js +40 -0
- package/dist/usedatatablecolumndrag.es.js.map +1 -0
- package/dist/usedatatableinstance.es.js +178 -0
- package/dist/usedatatableinstance.es.js.map +1 -0
- package/dist/usedatatablemotion.es.js +99 -0
- package/dist/usedatatablemotion.es.js.map +1 -0
- package/package.json +33 -12
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Virtualizer } from '@tanstack/react-virtual';
|
|
2
|
+
import { DataTableApi, DataTableColumn, DataTableContentProps, DataTableInstance, DataTableRow } from './DataTable.types';
|
|
3
|
+
import { DataTableEditSession } from './dataTableEditing';
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
export type DataTableRuntime<T extends object> = {
|
|
6
|
+
table: DataTableInstance<T>;
|
|
7
|
+
definitionsById: Map<string, DataTableColumn<T>>;
|
|
8
|
+
centerRows: DataTableRow<T>[];
|
|
9
|
+
virtualizer: Virtualizer<HTMLDivElement, Element>;
|
|
10
|
+
resolveId: (data: T, index: number) => string;
|
|
11
|
+
rowIndices: Map<T, number>;
|
|
12
|
+
sourcesById: Map<string, T>;
|
|
13
|
+
useVirtualRows: boolean;
|
|
14
|
+
pagination: boolean;
|
|
15
|
+
serverPagination: boolean;
|
|
16
|
+
};
|
|
17
|
+
type EditConfig<T extends object> = Pick<DataTableContentProps<T>, "columnDefs" | "validateRow" | "readOnlyEdit" | "onEditCommit" | "onEditRequest" | "onEditCancel">;
|
|
18
|
+
type DataTableApiOptions<T extends object> = {
|
|
19
|
+
runtime: React.MutableRefObject<DataTableRuntime<T>>;
|
|
20
|
+
editRef: React.MutableRefObject<DataTableEditSession<T> | null>;
|
|
21
|
+
configRef: React.MutableRefObject<EditConfig<T>>;
|
|
22
|
+
updateEdit: (next: DataTableEditSession<T> | null) => void;
|
|
23
|
+
setPatches: React.Dispatch<React.SetStateAction<Record<string, {
|
|
24
|
+
source: T;
|
|
25
|
+
data: T;
|
|
26
|
+
}>>>;
|
|
27
|
+
contentRef: React.RefObject<HTMLDivElement>;
|
|
28
|
+
viewportRef: React.RefObject<HTMLDivElement>;
|
|
29
|
+
setPrinting: React.Dispatch<React.SetStateAction<boolean>>;
|
|
30
|
+
};
|
|
31
|
+
/** Stable public API; methods read current rows, callbacks and layout through refs. */
|
|
32
|
+
export declare function useDataTableApi<T extends object>({ runtime, editRef, configRef, updateEdit, setPatches, contentRef, viewportRef, setPrinting, }: DataTableApiOptions<T>): DataTableApi<T>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=useDataTableApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDataTableApi.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/useDataTableApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAsB,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnJ,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC/C,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AACF,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CACtC,qBAAqB,CAAC,CAAC,CAAC,EACxB,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAClG,CAAC;AACF,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC3C,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE,SAAS,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC,CAAC;IACzF,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,EAChD,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,EAAE,mBAAmB,CAAC,CAAC,CAAC,mBAuKxB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DragDropProvider } from '@dnd-kit/react';
|
|
2
|
+
import { DataTableRuntime } from './useDataTableApi';
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
type DataTableColumnDragOptions<T extends object> = {
|
|
5
|
+
runtime: React.MutableRefObject<DataTableRuntime<T>>;
|
|
6
|
+
viewportRef: React.RefObject<HTMLDivElement>;
|
|
7
|
+
contentRef: React.RefObject<HTMLDivElement>;
|
|
8
|
+
setColumnDrag: React.Dispatch<React.SetStateAction<{
|
|
9
|
+
sourceId: string;
|
|
10
|
+
targetId: string;
|
|
11
|
+
} | null>>;
|
|
12
|
+
};
|
|
13
|
+
type DataTableColumnDragHandlers = Pick<React.ComponentProps<typeof DragDropProvider>, "onDragStart" | "onDragMove" | "onDragEnd">;
|
|
14
|
+
export declare function useDataTableColumnDrag<T extends object>({ runtime, viewportRef, contentRef, setColumnDrag, }: DataTableColumnDragOptions<T>): DataTableColumnDragHandlers;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useDataTableColumnDrag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDataTableColumnDrag.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/useDataTableColumnDrag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,KAAK,0BAA0B,CAAC,CAAC,SAAS,MAAM,IAAI;IAClD,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC,CAAC;CACpG,CAAC;AAEF,KAAK,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;AAEnI,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,EACvD,OAAO,EACP,WAAW,EACX,UAAU,EACV,aAAa,GACd,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,2BAA2B,CAgD7D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ColumnDef } from '@tanstack/react-table';
|
|
2
|
+
import { DataTableAlignmentContext } from './DataTableContext';
|
|
3
|
+
import { DataTableColumn, DataTableContentProps, DataTableInstance, DataTableFilterType, DataTableFilterOption, DataTableCellParams, DataTableEditorProps } from './DataTable.types';
|
|
4
|
+
import { TableFeature, Table, RowModel, CreatedSortFn } from '@tanstack/table-core';
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
type DataTableInstanceOptions<T extends object> = Pick<DataTableContentProps<T>, "rowData" | "columnDefs" | "getRowId" | "tableOptions" | "externalFilter" | "rowSelection" | "renderSubComponent" | "getRowCanExpand" | "onQuickFilterTextChange"> & {
|
|
7
|
+
defaultColDef: Partial<DataTableColumn<T>>;
|
|
8
|
+
paginationPageSize: number;
|
|
9
|
+
pagination: boolean;
|
|
10
|
+
patches: Record<string, {
|
|
11
|
+
source: T;
|
|
12
|
+
data: T;
|
|
13
|
+
}>;
|
|
14
|
+
alignment: React.ContextType<typeof DataTableAlignmentContext>;
|
|
15
|
+
isPrinting: boolean;
|
|
16
|
+
viewportWidth: number;
|
|
17
|
+
selectionWidth: number;
|
|
18
|
+
searchText: string;
|
|
19
|
+
setSearch: (value: string) => void;
|
|
20
|
+
};
|
|
21
|
+
/** Own TanStack configuration, controlled state precedence and stable row identities. */
|
|
22
|
+
export declare function useDataTableInstance<T extends object>({ rowData, columnDefs, defaultColDef, getRowId, paginationPageSize, tableOptions, externalFilter, rowSelection, pagination, renderSubComponent, getRowCanExpand, onQuickFilterTextChange, patches, alignment, isPrinting, viewportWidth, selectionWidth, searchText, setSearch, }: DataTableInstanceOptions<T>): {
|
|
23
|
+
table: DataTableInstance<T>;
|
|
24
|
+
definitionsById: Map<string, {
|
|
25
|
+
colId?: string;
|
|
26
|
+
field?: (string & {}) | (keyof T & string) | undefined;
|
|
27
|
+
headerName?: React.ReactNode;
|
|
28
|
+
width?: number;
|
|
29
|
+
minWidth?: number;
|
|
30
|
+
maxWidth?: number;
|
|
31
|
+
flex?: number;
|
|
32
|
+
sortable?: boolean;
|
|
33
|
+
resizable?: boolean;
|
|
34
|
+
hide?: boolean;
|
|
35
|
+
pinned?: "start" | "end" | "left" | "right";
|
|
36
|
+
filter?: boolean | DataTableFilterType;
|
|
37
|
+
filterOptions?: readonly (string | DataTableFilterOption)[];
|
|
38
|
+
cellDataType?: "text" | "number" | "date" | "dateString" | "boolean";
|
|
39
|
+
editable?: boolean | ((data: T) => boolean) | undefined;
|
|
40
|
+
cellRenderer?: React.ComponentType< DataTableCellParams<T>> | undefined;
|
|
41
|
+
cellEditor?: "number" | "text" | "date" | React.ComponentType< DataTableEditorProps<T>> | undefined;
|
|
42
|
+
valueGetter?: ((params: {
|
|
43
|
+
data: T;
|
|
44
|
+
rowIndex: number;
|
|
45
|
+
}) => unknown) | undefined;
|
|
46
|
+
valueFormatter?: ((params: {
|
|
47
|
+
data: T;
|
|
48
|
+
value: unknown;
|
|
49
|
+
}) => React.ReactNode) | undefined;
|
|
50
|
+
valueParser?: ((params: {
|
|
51
|
+
data: T;
|
|
52
|
+
oldValue: unknown;
|
|
53
|
+
newValue: unknown;
|
|
54
|
+
}) => unknown) | undefined;
|
|
55
|
+
valueSetter?: ((data: T, value: unknown) => T) | undefined;
|
|
56
|
+
getQuickFilterText?: ((params: {
|
|
57
|
+
data: T;
|
|
58
|
+
value: unknown;
|
|
59
|
+
}) => string) | undefined;
|
|
60
|
+
cellClass?: string | ((params: DataTableCellParams<T>) => string) | undefined;
|
|
61
|
+
align?: "start" | "center" | "end";
|
|
62
|
+
hideInPrint?: boolean;
|
|
63
|
+
suppressRowClick?: boolean;
|
|
64
|
+
onKeyDown?: ((event: React.KeyboardEvent, params: DataTableCellParams<T>) => void) | undefined;
|
|
65
|
+
validate?: ((value: unknown, draft: T) => readonly string[] | null) | undefined;
|
|
66
|
+
tableOptions?: Partial<Omit<ColumnDef<{
|
|
67
|
+
columnFilteringFeature: TableFeature;
|
|
68
|
+
globalFilteringFeature: TableFeature;
|
|
69
|
+
columnOrderingFeature: TableFeature;
|
|
70
|
+
columnPinningFeature: TableFeature;
|
|
71
|
+
columnSizingFeature: TableFeature;
|
|
72
|
+
columnResizingFeature: TableFeature;
|
|
73
|
+
columnVisibilityFeature: TableFeature;
|
|
74
|
+
rowExpandingFeature: TableFeature;
|
|
75
|
+
rowPaginationFeature: TableFeature;
|
|
76
|
+
rowPinningFeature: TableFeature;
|
|
77
|
+
rowSelectionFeature: TableFeature;
|
|
78
|
+
rowSortingFeature: TableFeature;
|
|
79
|
+
filteredRowModel: (table: Table<any, any>) => () => RowModel<any, any>;
|
|
80
|
+
sortedRowModel: (table: Table<any, any>) => () => RowModel<any, any>;
|
|
81
|
+
expandedRowModel: (table: Table<any, any>) => () => RowModel<any, any>;
|
|
82
|
+
paginatedRowModel: (table: Table<any, any>) => () => RowModel<any, any>;
|
|
83
|
+
sortFns: {
|
|
84
|
+
alphanumeric: CreatedSortFn<any, any>;
|
|
85
|
+
datetime: CreatedSortFn<any, any>;
|
|
86
|
+
basic: CreatedSortFn<any, any>;
|
|
87
|
+
};
|
|
88
|
+
}, T, any>, "columns" | "footer" | "header" | "id" | "cell" | "accessorKey" | "accessorFn">> | undefined;
|
|
89
|
+
}>;
|
|
90
|
+
sourcesById: Map<string, T>;
|
|
91
|
+
data: T[];
|
|
92
|
+
rowIndices: Map<T, number>;
|
|
93
|
+
resolveId: (data: T, index: number) => string;
|
|
94
|
+
};
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=useDataTableInstance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDataTableInstance.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/useDataTableInstance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAGrB,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAG3B,KAAK,wBAAwB,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CACpD,qBAAqB,CAAC,CAAC,CAAC,EACtB,SAAS,GACT,YAAY,GACZ,UAAU,GACV,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,oBAAoB,GACpB,iBAAiB,GACjB,yBAAyB,CAC5B,GAAG;IACF,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAChD,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC/D,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,EACrD,OAAO,EACP,UAAU,EACV,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,GACV,EAAE,wBAAwB,CAAC,CAAC,CAAC;;;;;2BAC2E,SAAS;;;;;;;;;;;;;;;;;;;;;;oBAahD,SAAS;;;;;;;;;;;;;;;mCAc2B,aAC5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAxBC,CAAC,SAAS,MAAM;EAoL1B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/** Animate committed row/column order changes within the viewport. */
|
|
3
|
+
export declare function useDataTableMotion(viewportRef: React.RefObject<HTMLDivElement>, rowOrder: string, columnOrder: string, isPrinting: boolean): void;
|
|
4
|
+
//# sourceMappingURL=useDataTableMotion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDataTableMotion.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/useDataTableMotion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,QA2I1I"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { DateValue } from '../date-picker/dateValue';
|
|
3
|
+
type ResourceSchedulerResource = {
|
|
4
|
+
id: string | number;
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
type ResourceSchedulerItem = {
|
|
8
|
+
id: string | number;
|
|
9
|
+
resourceId: ResourceSchedulerResource["id"];
|
|
10
|
+
/** Date, YYYY-MM-DD, or ISO date-time string. Items use the local calendar day and retain their time when moved. */
|
|
11
|
+
date: DateValue;
|
|
12
|
+
/** Arbitrary card content; the calendar does not style the card itself. */
|
|
13
|
+
content: React.ReactNode;
|
|
14
|
+
/** Accessible name for moving this card. Defaults to its id. */
|
|
15
|
+
label?: string;
|
|
16
|
+
draggable?: boolean;
|
|
17
|
+
};
|
|
18
|
+
type ResourceSchedulerMove = {
|
|
19
|
+
previousItem: ResourceSchedulerItem;
|
|
20
|
+
item: ResourceSchedulerItem;
|
|
21
|
+
};
|
|
22
|
+
type ResourceSchedulerCellContext = {
|
|
23
|
+
resource: ResourceSchedulerResource;
|
|
24
|
+
/** Local calendar date in YYYY-MM-DD format. */
|
|
25
|
+
date: string;
|
|
26
|
+
items: readonly ResourceSchedulerItem[];
|
|
27
|
+
};
|
|
28
|
+
type ResourceSchedulerProps = Omit<React.ComponentPropsWithoutRef<"div">, "children" | "defaultValue"> & {
|
|
29
|
+
resources: readonly ResourceSchedulerResource[];
|
|
30
|
+
/** Inclusive local-calendar boundaries, accepting Date, YYYY-MM-DD, or ISO date-time strings. */
|
|
31
|
+
from: DateValue;
|
|
32
|
+
to: DateValue;
|
|
33
|
+
/** Controlled items; update this prop in onItemsChange to accept a move. */
|
|
34
|
+
items?: readonly ResourceSchedulerItem[];
|
|
35
|
+
defaultItems?: readonly ResourceSchedulerItem[];
|
|
36
|
+
onItemsChange?: (items: ResourceSchedulerItem[], move: ResourceSchedulerMove) => void;
|
|
37
|
+
/** Overrides automatic day moves. Choose the time and update controlled items in this callback. */
|
|
38
|
+
onItemDrop?: (move: ResourceSchedulerMove) => void;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
resourceColumnWidth?: number;
|
|
41
|
+
dayColumnWidth?: number;
|
|
42
|
+
rowMinHeight?: number;
|
|
43
|
+
cardWidth?: number;
|
|
44
|
+
/** Horizontal distance between overlapping cards in the same day cell. */
|
|
45
|
+
stackOffset?: number;
|
|
46
|
+
locale?: string;
|
|
47
|
+
/** Render a day heading. Defaults to the locale's short weekday, month and day. */
|
|
48
|
+
formatter?: (date: Date) => React.ReactNode;
|
|
49
|
+
resourceHeading?: React.ReactNode;
|
|
50
|
+
/** Custom action shown at the bottom right on cell hover or keyboard focus. Return null to omit it. */
|
|
51
|
+
renderCellButton?: (cell: ResourceSchedulerCellContext) => React.ReactNode;
|
|
52
|
+
/** Enable the custom action globally or for selected cells. Defaults to true; disabled schedulers hide it. */
|
|
53
|
+
showCellButton?: boolean | ((cell: ResourceSchedulerCellContext) => boolean);
|
|
54
|
+
slotProps?: {
|
|
55
|
+
resource?: React.ComponentPropsWithoutRef<"div">;
|
|
56
|
+
day?: React.ComponentPropsWithoutRef<"div">;
|
|
57
|
+
cell?: React.ComponentPropsWithoutRef<"div">;
|
|
58
|
+
card?: React.ComponentPropsWithoutRef<"div">;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/** Resource-by-day calendar with consumer-rendered cards and controlled or local moves. */
|
|
62
|
+
declare const ResourceScheduler: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "defaultValue" | "children"> & {
|
|
63
|
+
resources: readonly ResourceSchedulerResource[];
|
|
64
|
+
/** Inclusive local-calendar boundaries, accepting Date, YYYY-MM-DD, or ISO date-time strings. */
|
|
65
|
+
from: DateValue;
|
|
66
|
+
to: DateValue;
|
|
67
|
+
/** Controlled items; update this prop in onItemsChange to accept a move. */
|
|
68
|
+
items?: readonly ResourceSchedulerItem[];
|
|
69
|
+
defaultItems?: readonly ResourceSchedulerItem[];
|
|
70
|
+
onItemsChange?: (items: ResourceSchedulerItem[], move: ResourceSchedulerMove) => void;
|
|
71
|
+
/** Overrides automatic day moves. Choose the time and update controlled items in this callback. */
|
|
72
|
+
onItemDrop?: (move: ResourceSchedulerMove) => void;
|
|
73
|
+
disabled?: boolean;
|
|
74
|
+
resourceColumnWidth?: number;
|
|
75
|
+
dayColumnWidth?: number;
|
|
76
|
+
rowMinHeight?: number;
|
|
77
|
+
cardWidth?: number;
|
|
78
|
+
/** Horizontal distance between overlapping cards in the same day cell. */
|
|
79
|
+
stackOffset?: number;
|
|
80
|
+
locale?: string;
|
|
81
|
+
/** Render a day heading. Defaults to the locale's short weekday, month and day. */
|
|
82
|
+
formatter?: (date: Date) => React.ReactNode;
|
|
83
|
+
resourceHeading?: React.ReactNode;
|
|
84
|
+
/** Custom action shown at the bottom right on cell hover or keyboard focus. Return null to omit it. */
|
|
85
|
+
renderCellButton?: (cell: ResourceSchedulerCellContext) => React.ReactNode;
|
|
86
|
+
/** Enable the custom action globally or for selected cells. Defaults to true; disabled schedulers hide it. */
|
|
87
|
+
showCellButton?: boolean | ((cell: ResourceSchedulerCellContext) => boolean);
|
|
88
|
+
slotProps?: {
|
|
89
|
+
resource?: React.ComponentPropsWithoutRef<"div">;
|
|
90
|
+
day?: React.ComponentPropsWithoutRef<"div">;
|
|
91
|
+
cell?: React.ComponentPropsWithoutRef<"div">;
|
|
92
|
+
card?: React.ComponentPropsWithoutRef<"div">;
|
|
93
|
+
};
|
|
94
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
95
|
+
export { ResourceScheduler, type ResourceSchedulerProps, type ResourceSchedulerResource, type ResourceSchedulerItem, type ResourceSchedulerMove, type ResourceSchedulerCellContext, };
|
|
96
|
+
//# sourceMappingURL=ResourceScheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResourceScheduler.d.ts","sourceRoot":"","sources":["../../../src/components/resource-scheduler/ResourceScheduler.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkE,MAAM,OAAO,CAAC;AAIvF,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE5F,KAAK,yBAAyB,GAAG;IAC/B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,UAAU,EAAE,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAC5C,oHAAoH;IACpH,IAAI,EAAE,SAAS,CAAC;IAChB,2EAA2E;IAC3E,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,qBAAqB,CAAC;IACpC,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,QAAQ,EAAE,yBAAyB,CAAC;IACpC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzC,CAAC;AAEF,KAAK,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,GAAG;IACvG,SAAS,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAChD,iGAAiG;IACjG,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACtF,mGAAmG;IACnG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,uGAAuG;IACvG,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,KAAK,CAAC,SAAS,CAAC;IAC3E,8GAA8G;IAC9G,cAAc,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,4BAA4B,KAAK,OAAO,CAAC,CAAC;IAC7E,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACjD,GAAG,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;KAC9C,CAAC;CACH,CAAC;AAgXF,2FAA2F;AAC3F,QAAA,MAAM,iBAAiB;eAhZV,SAAS,yBAAyB,EAAE;IAC/C,iGAAiG;UAC3F,SAAS;QACX,SAAS;IACb,4EAA4E;YACpE,SAAS,qBAAqB,EAAE;mBACzB,SAAS,qBAAqB,EAAE;oBAC/B,CAAC,KAAK,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,qBAAqB,KAAK,IAAI;IACrF,mGAAmG;iBACtF,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI;eACvC,OAAO;0BACI,MAAM;qBACX,MAAM;mBACR,MAAM;gBACT,MAAM;IAClB,0EAA0E;kBAC5D,MAAM;aACX,MAAM;IACf,mFAAmF;gBACvE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,SAAS;sBACzB,KAAK,CAAC,SAAS;IACjC,uGAAuG;uBACpF,CAAC,IAAI,EAAE,4BAA4B,KAAK,KAAK,CAAC,SAAS;IAC1E,8GAA8G;qBAC7F,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,4BAA4B,KAAK,OAAO,CAAC;gBAChE;QACV,QAAQ,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACjD,GAAG,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;KAC9C;wCAgoBF,CAAC;AAIF,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,GAClC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import * as t from "react";
|
|
3
|
+
import { cn as x } from "./utils.es.js";
|
|
4
|
+
import { DataTableContext as b, useDataTable as p } from "./datatablecontext.es.js";
|
|
5
|
+
const h = t.forwardRef(({ children: e, className: a, style: r, ...l }, d) => {
|
|
6
|
+
const [s, i] = t.useState(null), [o, c] = t.useState(), [n, u] = t.useState({ selectedCount: 0, pinnedCount: 0 }), f = t.useMemo(() => ({ api: s, setApi: i, search: o, setSearch: c, ...n, setCounts: u }), [s, o, n]);
|
|
7
|
+
return /* @__PURE__ */ m(b.Provider, { value: f, children: /* @__PURE__ */ m(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
ref: d,
|
|
11
|
+
"data-data-table": "",
|
|
12
|
+
className: x(
|
|
13
|
+
"mtx-flex mtx-h-full mtx-min-h-0 mtx-flex-col mtx-rounded-lg mtx-border mtx-border-gray-200 mtx-bg-gray-0 mtx-font-sans mtx-text-xs mtx-text-text",
|
|
14
|
+
a
|
|
15
|
+
),
|
|
16
|
+
...l,
|
|
17
|
+
style: { fontFamily: "DMSans, sans-serif", ...r },
|
|
18
|
+
children: e
|
|
19
|
+
}
|
|
20
|
+
) });
|
|
21
|
+
});
|
|
22
|
+
h.displayName = "DataTable";
|
|
23
|
+
const g = t.forwardRef(({ className: e, ...a }, r) => (p(), /* @__PURE__ */ m(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
ref: r,
|
|
27
|
+
"data-print-hidden": "",
|
|
28
|
+
className: x(
|
|
29
|
+
"mtx-flex mtx-min-h-12 mtx-shrink-0 mtx-items-center mtx-gap-1 mtx-rounded-t-lg mtx-border-b mtx-border-gray-200 mtx-p-2",
|
|
30
|
+
e
|
|
31
|
+
),
|
|
32
|
+
...a
|
|
33
|
+
}
|
|
34
|
+
)));
|
|
35
|
+
g.displayName = "DataTableActionBar";
|
|
36
|
+
export {
|
|
37
|
+
h as DataTable,
|
|
38
|
+
g as DataTableActionBar
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=datatable.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatable.es.js","sources":["../src/components/data-table/DataTable.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DataTableContext, useDataTable } from \"./DataTableContext\";\nimport type { DataTableApi } from \"./DataTable.types\";\n\nexport type DataTableProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst DataTable = React.forwardRef<HTMLDivElement, DataTableProps>(({ children, className, style, ...props }, ref) => {\n const [api, setApi] = React.useState<DataTableApi<any> | null>(null);\n const [search, setSearch] = React.useState<string>();\n const [counts, setCounts] = React.useState({ selectedCount: 0, pinnedCount: 0 });\n const value = React.useMemo(() => ({ api, setApi, search, setSearch, ...counts, setCounts }), [api, search, counts]);\n return (\n <DataTableContext.Provider value={value}>\n <div\n ref={ref}\n data-data-table=\"\"\n className={cn(\n \"mtx-flex mtx-h-full mtx-min-h-0 mtx-flex-col mtx-rounded-lg mtx-border mtx-border-gray-200 mtx-bg-gray-0 mtx-font-sans mtx-text-xs mtx-text-text\",\n className,\n )}\n {...props}\n style={{ fontFamily: \"DMSans, sans-serif\", ...style }}\n >\n {children}\n </div>\n </DataTableContext.Provider>\n );\n});\nDataTable.displayName = \"DataTable\";\n\nexport type DataTableActionBarProps = React.HTMLAttributes<HTMLDivElement>;\nconst DataTableActionBar = React.forwardRef<HTMLDivElement, DataTableActionBarProps>(({ className, ...props }, ref) => {\n useDataTable();\n return (\n <div\n ref={ref}\n data-print-hidden=\"\"\n className={cn(\n \"mtx-flex mtx-min-h-12 mtx-shrink-0 mtx-items-center mtx-gap-1 mtx-rounded-t-lg mtx-border-b mtx-border-gray-200 mtx-p-2\",\n className,\n )}\n {...props}\n />\n );\n});\nDataTableActionBar.displayName = \"DataTableActionBar\";\n\nexport { DataTable, DataTableActionBar };\nexport { DataTableContent } from \"./DataTableContent\";\n"],"names":["DataTable","React","children","className","style","props","ref","api","setApi","search","setSearch","counts","setCounts","value","jsx","DataTableContext","cn","DataTableActionBar","useDataTable"],"mappings":";;;;AASA,MAAMA,IAAYC,EAAM,WAA2C,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,GAAGC,EAAA,GAASC,MAAQ;AACpH,QAAM,CAACC,GAAKC,CAAM,IAAIP,EAAM,SAAmC,IAAI,GAC7D,CAACQ,GAAQC,CAAS,IAAIT,EAAM,SAAA,GAC5B,CAACU,GAAQC,CAAS,IAAIX,EAAM,SAAS,EAAE,eAAe,GAAG,aAAa,GAAG,GACzEY,IAAQZ,EAAM,QAAQ,OAAO,EAAE,KAAAM,GAAK,QAAAC,GAAQ,QAAAC,GAAQ,WAAAC,GAAW,GAAGC,GAAQ,WAAAC,MAAc,CAACL,GAAKE,GAAQE,CAAM,CAAC;AACnH,SACE,gBAAAG,EAACC,EAAiB,UAAjB,EAA0B,OAAAF,GACzB,UAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAR;AAAA,MACA,mBAAgB;AAAA,MAChB,WAAWU;AAAA,QACT;AAAA,QACAb;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MACJ,OAAO,EAAE,YAAY,sBAAsB,GAAGD,EAAA;AAAA,MAE7C,UAAAF;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,CAAC;AACDF,EAAU,cAAc;AAGxB,MAAMiB,IAAqBhB,EAAM,WAAoD,CAAC,EAAE,WAAAE,GAAW,GAAGE,EAAA,GAASC,OAC7GY,EAAA,GAEE,gBAAAJ;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAR;AAAA,IACA,qBAAkB;AAAA,IAClB,WAAWU;AAAA,MACT;AAAA,MACAb;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AAAA,EAGT;AACDY,EAAmB,cAAc;"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { jsxs as C, jsx as t, Fragment as M } from "react/jsx-runtime";
|
|
2
|
+
import * as o from "react";
|
|
3
|
+
import { ElipsisVertical as P, Trashcan as U, Snowflake as _, Print as G, Refresh as H, CircleXmark as L, Magnifier as A } from "@trsys-tech/matrix-icons";
|
|
4
|
+
import { cn as f } from "./utils.es.js";
|
|
5
|
+
import { Button as I } from "./button.es.js";
|
|
6
|
+
import { IconButton as x } from "./iconbutton.es.js";
|
|
7
|
+
import { TextField as W } from "./textfield.es.js";
|
|
8
|
+
import { Checkbox as X } from "./checkbox.es.js";
|
|
9
|
+
import { Popover as E, PopoverTrigger as F, PopoverContent as z } from "./popover.es.js";
|
|
10
|
+
import { useDataTable as g } from "./datatablecontext.es.js";
|
|
11
|
+
function et({
|
|
12
|
+
value: r,
|
|
13
|
+
defaultValue: n = "",
|
|
14
|
+
onValueChange: i,
|
|
15
|
+
defaultOpen: c = !1,
|
|
16
|
+
defaultOpenAutoFocus: l = !0,
|
|
17
|
+
placeholder: e = "Search…",
|
|
18
|
+
label: a = "Search table",
|
|
19
|
+
className: d,
|
|
20
|
+
...m
|
|
21
|
+
}) {
|
|
22
|
+
const { api: u, search: h, setSearch: p } = g(), [N, B] = o.useState(n), [w, R] = o.useState(c), [y, k] = o.useState(!1), S = o.useRef(null), D = o.useRef(!0), b = o.useRef(null);
|
|
23
|
+
o.useEffect(
|
|
24
|
+
() => () => {
|
|
25
|
+
b.current && clearTimeout(b.current);
|
|
26
|
+
},
|
|
27
|
+
[]
|
|
28
|
+
), o.useEffect(() => {
|
|
29
|
+
w && (!D.current || l) && S.current?.focus(), D.current = !1;
|
|
30
|
+
}, [w, l]);
|
|
31
|
+
const T = (s) => {
|
|
32
|
+
if (i) {
|
|
33
|
+
r === void 0 && B(s), i(s);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
u ? u.table.setGlobalFilter(s) : p(s);
|
|
37
|
+
}, V = () => {
|
|
38
|
+
k(!0), T(""), b.current && clearTimeout(b.current), b.current = setTimeout(() => {
|
|
39
|
+
R(!1), k(!1), b.current = null;
|
|
40
|
+
}, 200);
|
|
41
|
+
}, v = (s) => /* @__PURE__ */ t("div", { className: f("mtx-max-w-60", d), ...m, children: w || y ? /* @__PURE__ */ t(
|
|
42
|
+
W,
|
|
43
|
+
{
|
|
44
|
+
ref: S,
|
|
45
|
+
size: "sm",
|
|
46
|
+
className: f("mtx-relative mtx-h-7.5", w && !y && "mtx-animate-input-open", y && "mtx-animate-input-close"),
|
|
47
|
+
value: s,
|
|
48
|
+
onChange: (j) => T(j.target.value),
|
|
49
|
+
slotProps: { inputProps: { "aria-label": a, placeholder: e } },
|
|
50
|
+
startAdornment: /* @__PURE__ */ t(
|
|
51
|
+
x,
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
variant: "toolbar",
|
|
55
|
+
"aria-label": "Close search",
|
|
56
|
+
className: "mtx-p-0.5 mtx-h-6 mtx-w-6 mtx-border-none mtx-mx-1",
|
|
57
|
+
onClick: V,
|
|
58
|
+
children: /* @__PURE__ */ t(A, { className: "mtx-w-5 mtx-h-5" })
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
endAdornment: s && /* @__PURE__ */ t(
|
|
62
|
+
x,
|
|
63
|
+
{
|
|
64
|
+
type: "button",
|
|
65
|
+
variant: "toolbar",
|
|
66
|
+
"aria-label": "Clear search",
|
|
67
|
+
className: "mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-border-none mtx-mx-1",
|
|
68
|
+
onClick: () => {
|
|
69
|
+
T(""), S.current?.focus();
|
|
70
|
+
},
|
|
71
|
+
children: /* @__PURE__ */ t(L, { className: "mtx-w-5 mtx-h-5" })
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
) : /* @__PURE__ */ t(x, { type: "button", variant: "toolbar", "aria-label": a, className: "mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-m-1", onClick: () => R(!0), children: /* @__PURE__ */ t(A, { className: "mtx-w-5 mtx-h-5" }) }) });
|
|
76
|
+
return i ? v(r ?? N) : u ? /* @__PURE__ */ t(u.table.Subscribe, { selector: (s) => s.globalFilter, children: (s) => v(String(s ?? "")) }) : v(h);
|
|
77
|
+
}
|
|
78
|
+
function at({
|
|
79
|
+
freezeText: r = "Freeze",
|
|
80
|
+
unFreezeText: n = "Unfreeze",
|
|
81
|
+
position: i = "top",
|
|
82
|
+
disabled: c,
|
|
83
|
+
onClick: l,
|
|
84
|
+
...e
|
|
85
|
+
}) {
|
|
86
|
+
const { api: a, selectedCount: d, pinnedCount: m } = g();
|
|
87
|
+
return /* @__PURE__ */ t(
|
|
88
|
+
I,
|
|
89
|
+
{
|
|
90
|
+
type: "button",
|
|
91
|
+
variant: "text",
|
|
92
|
+
startIcon: /* @__PURE__ */ t(_, { className: "mtx-h-4.5 mtx-w-4.5" }),
|
|
93
|
+
...e,
|
|
94
|
+
disabled: c || !a || !d && !m,
|
|
95
|
+
onClick: (u) => {
|
|
96
|
+
a && (m ? a.table.setRowPinning({ top: [], bottom: [] }) : (a.pinRows(a.table.getSelectedRowIds(), i), a.deselectAll())), l?.(u);
|
|
97
|
+
},
|
|
98
|
+
children: m ? n : r
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
function rt({ onClick: r, children: n, disabled: i, onPrintError: c, className: l, ...e }) {
|
|
103
|
+
const { api: a } = g(), [d, m] = o.useState(!1), [u, h] = o.useState(!1);
|
|
104
|
+
return /* @__PURE__ */ C(M, { children: [
|
|
105
|
+
/* @__PURE__ */ t(
|
|
106
|
+
x,
|
|
107
|
+
{
|
|
108
|
+
type: "button",
|
|
109
|
+
variant: "toolbar",
|
|
110
|
+
"aria-label": "Print table",
|
|
111
|
+
...e,
|
|
112
|
+
className: f("mtx-h-6 mtx-w-6 mtx-p-0.5", l),
|
|
113
|
+
disabled: i || d || !a,
|
|
114
|
+
onClick: async (p) => {
|
|
115
|
+
if (r?.(p), !(p.defaultPrevented || !a)) {
|
|
116
|
+
m(!0), h(!1);
|
|
117
|
+
try {
|
|
118
|
+
await a.print();
|
|
119
|
+
} catch (N) {
|
|
120
|
+
h(!0), c?.(N);
|
|
121
|
+
} finally {
|
|
122
|
+
m(!1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
children: n ?? /* @__PURE__ */ t(G, { className: "mtx-h-5 mtx-w-5" })
|
|
127
|
+
}
|
|
128
|
+
),
|
|
129
|
+
u && /* @__PURE__ */ t("span", { role: "alert", className: "mtx-text-danger", children: "Unable to print table" })
|
|
130
|
+
] });
|
|
131
|
+
}
|
|
132
|
+
function nt({ onRefresh: r, loading: n, children: i, disabled: c, className: l, ...e }) {
|
|
133
|
+
return /* @__PURE__ */ t(
|
|
134
|
+
x,
|
|
135
|
+
{
|
|
136
|
+
type: "button",
|
|
137
|
+
variant: "toolbar",
|
|
138
|
+
"aria-label": "Refresh table",
|
|
139
|
+
...e,
|
|
140
|
+
className: f("mtx-h-6 mtx-w-6 mtx-p-0.5", l),
|
|
141
|
+
disabled: c || n,
|
|
142
|
+
onClick: r,
|
|
143
|
+
children: i ?? /* @__PURE__ */ t(H, { className: f("mtx-h-4.5 mtx-w-4.5", n && "mtx-animate-spin") })
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
function it({ onDelete: r, ...n }) {
|
|
148
|
+
return /* @__PURE__ */ t(I, { type: "button", variant: "danger", startIcon: /* @__PURE__ */ t(U, { className: "mtx-h-4.5 mtx-w-4.5" }), ...n, onClick: r });
|
|
149
|
+
}
|
|
150
|
+
function lt({ children: r, label: n = "More actions", ...i }) {
|
|
151
|
+
return /* @__PURE__ */ C(E, { children: [
|
|
152
|
+
/* @__PURE__ */ t(F, { asChild: !0, children: /* @__PURE__ */ t(x, { type: "button", variant: "toolbar", "aria-label": n, className: "mtx-h-6 mtx-w-6 mtx-p-0.5", children: /* @__PURE__ */ t(P, { className: "mtx-h-4.5 mtx-w-4.5" }) }) }),
|
|
153
|
+
/* @__PURE__ */ t(z, { align: "end", ...i, children: r })
|
|
154
|
+
] });
|
|
155
|
+
}
|
|
156
|
+
function st({ children: r, disabled: n, className: i, ...c }) {
|
|
157
|
+
const { api: l } = g();
|
|
158
|
+
return /* @__PURE__ */ C(E, { children: [
|
|
159
|
+
/* @__PURE__ */ t(F, { asChild: !0, children: /* @__PURE__ */ t(
|
|
160
|
+
x,
|
|
161
|
+
{
|
|
162
|
+
type: "button",
|
|
163
|
+
variant: "toolbar",
|
|
164
|
+
"aria-label": "Show or hide columns",
|
|
165
|
+
...c,
|
|
166
|
+
className: f("mtx-h-6 mtx-w-6 mtx-p-0.5", i),
|
|
167
|
+
disabled: n || !l,
|
|
168
|
+
children: r ?? /* @__PURE__ */ t(P, { className: "mtx-h-4.5 mtx-w-4.5" })
|
|
169
|
+
}
|
|
170
|
+
) }),
|
|
171
|
+
/* @__PURE__ */ t(z, { align: "end", className: "mtx-w-56 mtx-space-y-2", children: l && /* @__PURE__ */ t(l.table.Subscribe, { selector: (e) => e.columnVisibility, children: () => l.table.getAllLeafColumns().filter((e) => !e.id.startsWith("__")).map((e) => /* @__PURE__ */ C("label", { className: "mtx-flex mtx-items-center mtx-gap-2 mtx-text-xs", children: [
|
|
172
|
+
/* @__PURE__ */ t(
|
|
173
|
+
X,
|
|
174
|
+
{
|
|
175
|
+
checked: e.getIsVisible(),
|
|
176
|
+
disabled: !e.getCanHide(),
|
|
177
|
+
onCheckedChange: (a) => e.toggleVisibility(a === !0)
|
|
178
|
+
}
|
|
179
|
+
),
|
|
180
|
+
typeof e.columnDef.header == "string" ? e.columnDef.header : e.id
|
|
181
|
+
] }, e.id)) }) })
|
|
182
|
+
] });
|
|
183
|
+
}
|
|
184
|
+
export {
|
|
185
|
+
st as DataTableColumnsAction,
|
|
186
|
+
it as DataTableDeleteAction,
|
|
187
|
+
lt as DataTableExtraActions,
|
|
188
|
+
at as DataTableFreezeAction,
|
|
189
|
+
rt as DataTablePrintAction,
|
|
190
|
+
nt as DataTableRefreshAction,
|
|
191
|
+
et as DataTableSearchAction
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=datatableactions.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatableactions.es.js","sources":["../src/components/data-table/DataTableActions.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { CircleXmark, ElipsisVertical, Magnifier, Print, Refresh, Snowflake, Trashcan } from \"@trsys-tech/matrix-icons\";\n\nimport { cn } from \"../../lib/utils\";\nimport { Button, type ButtonProps } from \"../button/Button\";\nimport { IconButton, type IconButtonProps } from \"../icon-botton/IconButton\";\nimport { TextField } from \"../text-field/TextField\";\nimport { Checkbox } from \"../checkbox/Checkbox\";\nimport { Popover, PopoverContent, PopoverTrigger, type PopoverContentProps } from \"../popover/Popover\";\nimport { useDataTable } from \"./DataTableContext\";\n\nexport type DataTableSearchActionProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"defaultValue\"> & {\n /** Input value for externally managed search. Use with onValueChange. */\n value?: string;\n /** Initial input value for externally managed search. */\n defaultValue?: string;\n /** Handles search externally instead of applying the table's global filter. */\n onValueChange?: (value: string) => void;\n defaultOpen?: boolean;\n defaultOpenAutoFocus?: boolean;\n placeholder?: string;\n label?: string;\n};\n\nexport function DataTableSearchAction({\n value: controlledValue,\n defaultValue = \"\",\n onValueChange,\n defaultOpen = false,\n defaultOpenAutoFocus = true,\n placeholder = \"Search…\",\n label = \"Search table\",\n className,\n ...props\n}: DataTableSearchActionProps) {\n const { api, search, setSearch } = useDataTable();\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [open, setOpen] = React.useState(defaultOpen);\n const [isClosing, setIsClosing] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const firstRender = React.useRef(true);\n const closeTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n React.useEffect(\n () => () => {\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current);\n },\n [],\n );\n\n React.useEffect(() => {\n if (open && (!firstRender.current || defaultOpenAutoFocus)) inputRef.current?.focus();\n firstRender.current = false;\n }, [open, defaultOpenAutoFocus]);\n\n const update = (value: string) => {\n if (onValueChange) {\n if (controlledValue === undefined) setInternalValue(value);\n onValueChange(value);\n return;\n }\n if (api) api.table.setGlobalFilter(value);\n else setSearch(value);\n };\n\n const handleClose = () => {\n setIsClosing(true);\n update(\"\");\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = setTimeout(() => {\n setOpen(false);\n setIsClosing(false);\n closeTimeoutRef.current = null;\n }, 200);\n };\n\n const render = (value: string) => (\n <div className={cn(\"mtx-max-w-60\", className)} {...props}>\n {open || isClosing ? (\n <TextField\n ref={inputRef}\n size=\"sm\"\n className={cn(\"mtx-relative mtx-h-7.5\", open && !isClosing && \"mtx-animate-input-open\", isClosing && \"mtx-animate-input-close\")}\n value={value}\n onChange={event => update(event.target.value)}\n slotProps={{ inputProps: { \"aria-label\": label, placeholder } }}\n startAdornment={\n <IconButton\n type=\"button\"\n variant=\"toolbar\"\n aria-label=\"Close search\"\n className=\"mtx-p-0.5 mtx-h-6 mtx-w-6 mtx-border-none mtx-mx-1\"\n onClick={handleClose}\n >\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\n </IconButton>\n }\n endAdornment={\n value && (\n <IconButton\n type=\"button\"\n variant=\"toolbar\"\n aria-label=\"Clear search\"\n className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-border-none mtx-mx-1\"\n onClick={() => {\n update(\"\");\n inputRef.current?.focus();\n }}\n >\n <CircleXmark className=\"mtx-w-5 mtx-h-5\" />\n </IconButton>\n )\n }\n />\n ) : (\n <IconButton type=\"button\" variant=\"toolbar\" aria-label={label} className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-m-1\" onClick={() => setOpen(true)}>\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\n </IconButton>\n )}\n </div>\n );\n if (onValueChange) return render(controlledValue ?? internalValue);\n\n return api ? (\n <api.table.Subscribe selector={state => state.globalFilter}>{value => render(String(value ?? \"\"))}</api.table.Subscribe>\n ) : (\n render(search)\n );\n}\n\nexport type DataTableFreezeActionProps = ButtonProps & { freezeText?: string; unFreezeText?: string; position?: \"top\" | \"bottom\" };\nexport function DataTableFreezeAction({\n freezeText = \"Freeze\",\n unFreezeText = \"Unfreeze\",\n position = \"top\",\n disabled,\n onClick,\n ...props\n}: DataTableFreezeActionProps) {\n const { api, selectedCount, pinnedCount } = useDataTable();\n return (\n <Button\n type=\"button\"\n variant=\"text\"\n startIcon={<Snowflake className=\"mtx-h-4.5 mtx-w-4.5\" />}\n {...props}\n disabled={disabled || !api || (!selectedCount && !pinnedCount)}\n onClick={event => {\n if (api) {\n if (pinnedCount) api.table.setRowPinning({ top: [], bottom: [] });\n else {\n api.pinRows(api.table.getSelectedRowIds(), position);\n api.deselectAll();\n }\n }\n onClick?.(event);\n }}\n >\n {pinnedCount ? unFreezeText : freezeText}\n </Button>\n );\n}\n\nexport type DataTablePrintActionProps = IconButtonProps & { onPrintError?: (error: unknown) => void };\nexport function DataTablePrintAction({ onClick, children, disabled, onPrintError, className, ...props }: DataTablePrintActionProps) {\n const { api } = useDataTable();\n const [busy, setBusy] = React.useState(false);\n const [error, setError] = React.useState(false);\n return (\n <>\n <IconButton\n type=\"button\"\n variant=\"toolbar\"\n aria-label=\"Print table\"\n {...props}\n className={cn(\"mtx-h-6 mtx-w-6 mtx-p-0.5\", className)}\n disabled={disabled || busy || !api}\n onClick={async event => {\n onClick?.(event);\n if (event.defaultPrevented || !api) return;\n setBusy(true);\n setError(false);\n try {\n await api.print();\n } catch (caught) {\n setError(true);\n onPrintError?.(caught);\n } finally {\n setBusy(false);\n }\n }}\n >\n {children ?? <Print className=\"mtx-h-5 mtx-w-5\" />}\n </IconButton>\n {error && (\n <span role=\"alert\" className=\"mtx-text-danger\">\n Unable to print table\n </span>\n )}\n </>\n );\n}\n\nexport type DataTableRefreshActionProps = Omit<IconButtonProps, \"onClick\"> & { onRefresh: () => void };\nexport function DataTableRefreshAction({ onRefresh, loading, children, disabled, className, ...props }: DataTableRefreshActionProps) {\n return (\n <IconButton\n type=\"button\"\n variant=\"toolbar\"\n aria-label=\"Refresh table\"\n {...props}\n className={cn(\"mtx-h-6 mtx-w-6 mtx-p-0.5\", className)}\n disabled={disabled || loading}\n onClick={onRefresh}\n >\n {children ?? <Refresh className={cn(\"mtx-h-4.5 mtx-w-4.5\", loading && \"mtx-animate-spin\")} />}\n </IconButton>\n );\n}\n\nexport type DataTableDeleteActionProps = Omit<ButtonProps, \"onClick\"> & { onDelete: () => void };\nexport function DataTableDeleteAction({ onDelete, ...props }: DataTableDeleteActionProps) {\n return <Button type=\"button\" variant=\"danger\" startIcon={<Trashcan className=\"mtx-h-4.5 mtx-w-4.5\" />} {...props} onClick={onDelete} />;\n}\n\nexport type DataTableExtraActionsProps = PopoverContentProps & { label?: string };\nexport function DataTableExtraActions({ children, label = \"More actions\", ...props }: DataTableExtraActionsProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <IconButton type=\"button\" variant=\"toolbar\" aria-label={label} className=\"mtx-h-6 mtx-w-6 mtx-p-0.5\">\n <ElipsisVertical className=\"mtx-h-4.5 mtx-w-4.5\" />\n </IconButton>\n </PopoverTrigger>\n <PopoverContent align=\"end\" {...props}>\n {children}\n </PopoverContent>\n </Popover>\n );\n}\n\nexport type DataTableColumnsActionProps = IconButtonProps;\nexport function DataTableColumnsAction({ children, disabled, className, ...props }: DataTableColumnsActionProps) {\n const { api } = useDataTable();\n return (\n <Popover>\n <PopoverTrigger asChild>\n <IconButton\n type=\"button\"\n variant=\"toolbar\"\n aria-label=\"Show or hide columns\"\n {...props}\n className={cn(\"mtx-h-6 mtx-w-6 mtx-p-0.5\", className)}\n disabled={disabled || !api}\n >\n {children ?? <ElipsisVertical className=\"mtx-h-4.5 mtx-w-4.5\" />}\n </IconButton>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"mtx-w-56 mtx-space-y-2\">\n {api && (\n <api.table.Subscribe selector={state => state.columnVisibility}>\n {() =>\n api.table\n .getAllLeafColumns()\n .filter(column => !column.id.startsWith(\"__\"))\n .map(column => (\n <label key={column.id} className=\"mtx-flex mtx-items-center mtx-gap-2 mtx-text-xs\">\n <Checkbox\n checked={column.getIsVisible()}\n disabled={!column.getCanHide()}\n onCheckedChange={value => column.toggleVisibility(value === true)}\n />\n {typeof column.columnDef.header === \"string\" ? column.columnDef.header : column.id}\n </label>\n ))\n }\n </api.table.Subscribe>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n"],"names":["DataTableSearchAction","controlledValue","defaultValue","onValueChange","defaultOpen","defaultOpenAutoFocus","placeholder","label","className","props","api","search","setSearch","useDataTable","internalValue","setInternalValue","React","open","setOpen","isClosing","setIsClosing","inputRef","firstRender","closeTimeoutRef","update","value","handleClose","render","jsx","cn","TextField","event","IconButton","Magnifier","CircleXmark","state","DataTableFreezeAction","freezeText","unFreezeText","position","disabled","onClick","selectedCount","pinnedCount","Button","Snowflake","DataTablePrintAction","children","onPrintError","busy","setBusy","error","setError","jsxs","Fragment","caught","Print","DataTableRefreshAction","onRefresh","loading","Refresh","DataTableDeleteAction","onDelete","Trashcan","DataTableExtraActions","Popover","PopoverTrigger","ElipsisVertical","PopoverContent","DataTableColumnsAction","column","Checkbox"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import * as t from "react";
|
|
3
|
+
import { DataTableAlignmentContext as i } from "./datatablecontext.es.js";
|
|
4
|
+
function f({ children: o, initialState: a = {} }) {
|
|
5
|
+
const [e, n] = t.useState(a), r = t.useRef(/* @__PURE__ */ new Set()), s = t.useMemo(() => ({ state: e, setState: n, viewports: r }), [e]);
|
|
6
|
+
return /* @__PURE__ */ m(i.Provider, { value: s, children: o });
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
f as DataTableAlignment
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=datatablealignment.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatablealignment.es.js","sources":["../src/components/data-table/DataTableAlignment.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { DataTableAlignmentContext, type AlignmentState } from \"./DataTableContext\";\n\nexport type DataTableAlignmentProps = {\n children: React.ReactNode;\n initialState?: Partial<AlignmentState>;\n};\n\n/** Tables in this provider share column layout and horizontal scroll, but retain independent data and selection. */\nexport function DataTableAlignment({ children, initialState = {} }: DataTableAlignmentProps) {\n const [state, setState] = React.useState(initialState);\n const viewports = React.useRef(new Set<HTMLDivElement>());\n const value = React.useMemo(() => ({ state, setState, viewports }), [state]);\n return <DataTableAlignmentContext.Provider value={value}>{children}</DataTableAlignmentContext.Provider>;\n}\n"],"names":["DataTableAlignment","children","initialState","state","setState","React","viewports","value","jsx","DataTableAlignmentContext"],"mappings":";;;AAYO,SAASA,EAAmB,EAAE,UAAAC,GAAU,cAAAC,IAAe,CAAA,KAA+B;AAC3F,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAM,SAASH,CAAY,GAC/CI,IAAYD,EAAM,OAAO,oBAAI,KAAqB,GAClDE,IAAQF,EAAM,QAAQ,OAAO,EAAE,OAAAF,GAAO,UAAAC,GAAU,WAAAE,EAAA,IAAc,CAACH,CAAK,CAAC;AAC3E,SAAO,gBAAAK,EAACC,EAA0B,UAA1B,EAAmC,OAAAF,GAAe,UAAAN,EAAA,CAAS;AACrE;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PointerSensor as u, KeyboardSensor as m } from "@dnd-kit/react";
|
|
2
|
+
import { PointerActivationConstraints as d } from "@dnd-kit/dom";
|
|
3
|
+
class f extends m {
|
|
4
|
+
choosingTarget = !1;
|
|
5
|
+
constructor(n) {
|
|
6
|
+
super(n, { preventActivation: (r, a) => r.target !== a.element });
|
|
7
|
+
}
|
|
8
|
+
handleMove(n, r) {
|
|
9
|
+
if (r.preventDefault(), n !== "left" && n !== "right") return;
|
|
10
|
+
const { source: a, target: h } = this.manager.dragOperation, l = h ?? a;
|
|
11
|
+
if (!a || !l?.element) return;
|
|
12
|
+
const c = l.element.getBoundingClientRect(), o = c.left + c.width / 2, s = Array.from(this.manager.registry.droppables).filter((e) => !e.disabled && e.id !== l.id && e.accepts(a) && e.element).map((e) => ({ item: e, rect: e.element.getBoundingClientRect() })).filter(
|
|
13
|
+
({ rect: e }) => e.width > 0 && (n === "left" ? e.left + e.width / 2 < o - 1 : e.left + e.width / 2 > o + 1)
|
|
14
|
+
).sort((e, g) => Math.abs(e.rect.left + e.rect.width / 2 - o) - Math.abs(g.rect.left + g.rect.width / 2 - o))[0]?.item;
|
|
15
|
+
if (!s?.element) return;
|
|
16
|
+
this.manager.collisionObserver.disable(), this.choosingTarget = !0, this.manager.actions.setDropTarget(s.id), s.element.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
17
|
+
const i = s.element.getBoundingClientRect();
|
|
18
|
+
this.manager.actions.move({ event: r, to: { x: i.left + i.width / 2, y: i.top + i.height / 2 } });
|
|
19
|
+
}
|
|
20
|
+
cleanup() {
|
|
21
|
+
this.choosingTarget && (this.manager.collisionObserver.enable(), this.choosingTarget = !1), super.cleanup();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const w = [
|
|
25
|
+
u.configure({
|
|
26
|
+
preventActivation: (t) => t.target instanceof Element && !!t.target.closest("[data-column-drag-ignore],button:not([data-column-sort]),a,input,select,textarea,[role=separator]"),
|
|
27
|
+
activationConstraints: (t) => t.pointerType === "touch" ? [new d.Delay({ value: 250, tolerance: 5 })] : [new d.Distance({ value: 5 })]
|
|
28
|
+
}),
|
|
29
|
+
f
|
|
30
|
+
];
|
|
31
|
+
export {
|
|
32
|
+
w as dataTableColumnSensors
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=datatablecolumndrag.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datatablecolumndrag.es.js","sources":["../src/components/data-table/dataTableColumnDrag.ts"],"sourcesContent":["import { KeyboardSensor, PointerSensor } from \"@dnd-kit/react\";\nimport { PointerActivationConstraints } from \"@dnd-kit/dom\";\n\n/** Move by a whole column rather than the default sensor's fixed pixel step. */\nclass DataTableColumnKeyboardSensor extends KeyboardSensor {\n private choosingTarget = false;\n\n constructor(manager: ConstructorParameters<typeof KeyboardSensor>[0]) {\n super(manager, { preventActivation: (event, source) => event.target !== source.element });\n }\n\n protected handleMove(direction: \"up\" | \"down\" | \"left\" | \"right\", event: KeyboardEvent) {\n event.preventDefault();\n if (direction !== \"left\" && direction !== \"right\") return;\n const { source, target } = this.manager.dragOperation;\n const current = target ?? source;\n if (!source || !current?.element) return;\n const bounds = current.element.getBoundingClientRect();\n const center = bounds.left + bounds.width / 2;\n const candidates = Array.from(this.manager.registry.droppables)\n .filter(item => !item.disabled && item.id !== current.id && item.accepts(source) && item.element)\n .map(item => ({ item, rect: item.element!.getBoundingClientRect() }))\n .filter(\n ({ rect }) => rect.width > 0 && (direction === \"left\" ? rect.left + rect.width / 2 < center - 1 : rect.left + rect.width / 2 > center + 1),\n )\n .sort((a, b) => Math.abs(a.rect.left + a.rect.width / 2 - center) - Math.abs(b.rect.left + b.rect.width / 2 - center));\n const next = candidates[0]?.item;\n if (!next?.element) return;\n // Keyboard targets are semantic column choices; geometry must not override them mid-animation.\n this.manager.collisionObserver.disable();\n this.choosingTarget = true;\n void this.manager.actions.setDropTarget(next.id);\n next.element.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n const rect = next.element.getBoundingClientRect();\n this.manager.actions.move({ event, to: { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 } });\n }\n\n protected cleanup() {\n if (this.choosingTarget) {\n this.manager.collisionObserver.enable();\n this.choosingTarget = false;\n }\n super.cleanup();\n }\n}\n\nexport const dataTableColumnSensors = [\n PointerSensor.configure({\n preventActivation: event =>\n event.target instanceof Element &&\n !!event.target.closest(\"[data-column-drag-ignore],button:not([data-column-sort]),a,input,select,textarea,[role=separator]\"),\n activationConstraints: event =>\n event.pointerType === \"touch\"\n ? [new PointerActivationConstraints.Delay({ value: 250, tolerance: 5 })]\n : [new PointerActivationConstraints.Distance({ value: 5 })],\n }),\n DataTableColumnKeyboardSensor,\n];\n"],"names":["DataTableColumnKeyboardSensor","KeyboardSensor","manager","event","source","direction","target","current","bounds","center","next","item","rect","a","b","dataTableColumnSensors","PointerSensor","PointerActivationConstraints"],"mappings":";;AAIA,MAAMA,UAAsCC,EAAe;AAAA,EACjD,iBAAiB;AAAA,EAEzB,YAAYC,GAA0D;AACpE,UAAMA,GAAS,EAAE,mBAAmB,CAACC,GAAOC,MAAWD,EAAM,WAAWC,EAAO,SAAS;AAAA,EAC1F;AAAA,EAEU,WAAWC,GAA6CF,GAAsB;AAEtF,QADAA,EAAM,eAAA,GACFE,MAAc,UAAUA,MAAc,QAAS;AACnD,UAAM,EAAE,QAAAD,GAAQ,QAAAE,EAAA,IAAW,KAAK,QAAQ,eAClCC,IAAUD,KAAUF;AAC1B,QAAI,CAACA,KAAU,CAACG,GAAS,QAAS;AAClC,UAAMC,IAASD,EAAQ,QAAQ,sBAAA,GACzBE,IAASD,EAAO,OAAOA,EAAO,QAAQ,GAQtCE,IAPa,MAAM,KAAK,KAAK,QAAQ,SAAS,UAAU,EAC3D,OAAO,OAAQ,CAACC,EAAK,YAAYA,EAAK,OAAOJ,EAAQ,MAAMI,EAAK,QAAQP,CAAM,KAAKO,EAAK,OAAO,EAC/F,IAAI,CAAAA,OAAS,EAAE,MAAAA,GAAM,MAAMA,EAAK,QAAS,sBAAA,EAAsB,EAAI,EACnE;AAAA,MACC,CAAC,EAAE,MAAAC,EAAAA,MAAWA,EAAK,QAAQ,MAAMP,MAAc,SAASO,EAAK,OAAOA,EAAK,QAAQ,IAAIH,IAAS,IAAIG,EAAK,OAAOA,EAAK,QAAQ,IAAIH,IAAS;AAAA,IAAA,EAEzI,KAAK,CAACI,GAAGC,MAAM,KAAK,IAAID,EAAE,KAAK,OAAOA,EAAE,KAAK,QAAQ,IAAIJ,CAAM,IAAI,KAAK,IAAIK,EAAE,KAAK,OAAOA,EAAE,KAAK,QAAQ,IAAIL,CAAM,CAAC,EAC/F,CAAC,GAAG;AAC5B,QAAI,CAACC,GAAM,QAAS;AAEpB,SAAK,QAAQ,kBAAkB,QAAA,GAC/B,KAAK,iBAAiB,IACjB,KAAK,QAAQ,QAAQ,cAAcA,EAAK,EAAE,GAC/CA,EAAK,QAAQ,eAAe,EAAE,OAAO,WAAW,QAAQ,WAAW;AACnE,UAAME,IAAOF,EAAK,QAAQ,sBAAA;AAC1B,SAAK,QAAQ,QAAQ,KAAK,EAAE,OAAAP,GAAO,IAAI,EAAE,GAAGS,EAAK,OAAOA,EAAK,QAAQ,GAAG,GAAGA,EAAK,MAAMA,EAAK,SAAS,EAAA,GAAK;AAAA,EAC3G;AAAA,EAEU,UAAU;AAClB,IAAI,KAAK,mBACP,KAAK,QAAQ,kBAAkB,OAAA,GAC/B,KAAK,iBAAiB,KAExB,MAAM,QAAA;AAAA,EACR;AACF;AAEO,MAAMG,IAAyB;AAAA,EACpCC,EAAc,UAAU;AAAA,IACtB,mBAAmB,CAAAb,MACjBA,EAAM,kBAAkB,WACxB,CAAC,CAACA,EAAM,OAAO,QAAQ,mGAAmG;AAAA,IAC5H,uBAAuB,CAAAA,MACrBA,EAAM,gBAAgB,UAClB,CAAC,IAAIc,EAA6B,MAAM,EAAE,OAAO,KAAK,WAAW,GAAG,CAAC,IACrE,CAAC,IAAIA,EAA6B,SAAS,EAAE,OAAO,GAAG,CAAC;AAAA,EAAA,CAC/D;AAAA,EACDjB;AACF;"}
|