@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.
Files changed (95) hide show
  1. package/README.md +18 -10
  2. package/dist/components/data-table/DataTable.d.ts +8 -0
  3. package/dist/components/data-table/DataTable.d.ts.map +1 -0
  4. package/dist/components/data-table/DataTable.types.d.ts +176 -0
  5. package/dist/components/data-table/DataTable.types.d.ts.map +1 -0
  6. package/dist/components/data-table/DataTableActions.d.ts +42 -0
  7. package/dist/components/data-table/DataTableActions.d.ts.map +1 -0
  8. package/dist/components/data-table/DataTableAlignment.d.ts +9 -0
  9. package/dist/components/data-table/DataTableAlignment.d.ts.map +1 -0
  10. package/dist/components/data-table/DataTableColumnHeader.d.ts +11 -0
  11. package/dist/components/data-table/DataTableColumnHeader.d.ts.map +1 -0
  12. package/dist/components/data-table/DataTableColumnMenu.d.ts +9 -0
  13. package/dist/components/data-table/DataTableColumnMenu.d.ts.map +1 -0
  14. package/dist/components/data-table/DataTableContent.d.ts +7 -0
  15. package/dist/components/data-table/DataTableContent.d.ts.map +1 -0
  16. package/dist/components/data-table/DataTableContext.d.ts +37 -0
  17. package/dist/components/data-table/DataTableContext.d.ts.map +1 -0
  18. package/dist/components/data-table/DataTableHeader.d.ts +22 -0
  19. package/dist/components/data-table/DataTableHeader.d.ts.map +1 -0
  20. package/dist/components/data-table/DataTablePagination.d.ts +8 -0
  21. package/dist/components/data-table/DataTablePagination.d.ts.map +1 -0
  22. package/dist/components/data-table/DataTableRowView.d.ts +40 -0
  23. package/dist/components/data-table/DataTableRowView.d.ts.map +1 -0
  24. package/dist/components/data-table/dataTableColumnDrag.d.ts +13 -0
  25. package/dist/components/data-table/dataTableColumnDrag.d.ts.map +1 -0
  26. package/dist/components/data-table/dataTableEditing.d.ts +11 -0
  27. package/dist/components/data-table/dataTableEditing.d.ts.map +1 -0
  28. package/dist/components/data-table/dataTableFeatures.d.ts +25 -0
  29. package/dist/components/data-table/dataTableFeatures.d.ts.map +1 -0
  30. package/dist/components/data-table/dataTableModel.d.ts +23 -0
  31. package/dist/components/data-table/dataTableModel.d.ts.map +1 -0
  32. package/dist/components/data-table/dataTablePrint.d.ts +3 -0
  33. package/dist/components/data-table/dataTablePrint.d.ts.map +1 -0
  34. package/dist/components/data-table/dataTableStyles.d.ts +2 -0
  35. package/dist/components/data-table/dataTableStyles.d.ts.map +1 -0
  36. package/dist/components/data-table/useDataTableApi.d.ts +34 -0
  37. package/dist/components/data-table/useDataTableApi.d.ts.map +1 -0
  38. package/dist/components/data-table/useDataTableColumnDrag.d.ts +16 -0
  39. package/dist/components/data-table/useDataTableColumnDrag.d.ts.map +1 -0
  40. package/dist/components/data-table/useDataTableInstance.d.ts +96 -0
  41. package/dist/components/data-table/useDataTableInstance.d.ts.map +1 -0
  42. package/dist/components/data-table/useDataTableMotion.d.ts +4 -0
  43. package/dist/components/data-table/useDataTableMotion.d.ts.map +1 -0
  44. package/dist/components/resource-scheduler/ResourceScheduler.d.ts +96 -0
  45. package/dist/components/resource-scheduler/ResourceScheduler.d.ts.map +1 -0
  46. package/dist/datatable.es.js +40 -0
  47. package/dist/datatable.es.js.map +1 -0
  48. package/dist/datatableactions.es.js +193 -0
  49. package/dist/datatableactions.es.js.map +1 -0
  50. package/dist/datatablealignment.es.js +11 -0
  51. package/dist/datatablealignment.es.js.map +1 -0
  52. package/dist/datatablecolumndrag.es.js +34 -0
  53. package/dist/datatablecolumndrag.es.js.map +1 -0
  54. package/dist/datatablecolumnheader.es.js +81 -0
  55. package/dist/datatablecolumnheader.es.js.map +1 -0
  56. package/dist/datatablecolumnmenu.es.js +191 -0
  57. package/dist/datatablecolumnmenu.es.js.map +1 -0
  58. package/dist/datatablecontent.es.js +376 -0
  59. package/dist/datatablecontent.es.js.map +1 -0
  60. package/dist/datatablecontext.es.js +14 -0
  61. package/dist/datatablecontext.es.js.map +1 -0
  62. package/dist/datatablefeatures.es.js +24 -0
  63. package/dist/datatablefeatures.es.js.map +1 -0
  64. package/dist/datatableheader.es.js +126 -0
  65. package/dist/datatableheader.es.js.map +1 -0
  66. package/dist/datatablemodel.es.js +126 -0
  67. package/dist/datatablemodel.es.js.map +1 -0
  68. package/dist/datatablepagination.es.js +43 -0
  69. package/dist/datatablepagination.es.js.map +1 -0
  70. package/dist/datatableprint.es.js +65 -0
  71. package/dist/datatableprint.es.js.map +1 -0
  72. package/dist/datatablerowview.es.js +201 -0
  73. package/dist/datatablerowview.es.js.map +1 -0
  74. package/dist/datatablestyles.es.js +5 -0
  75. package/dist/datatablestyles.es.js.map +1 -0
  76. package/dist/ganttchart.es.js +2 -2
  77. package/dist/ganttchart.es.js.map +1 -1
  78. package/dist/index.d.ts +6 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.es.js +173 -154
  81. package/dist/index.es.js.map +1 -1
  82. package/dist/resourcescheduler.es.js +450 -0
  83. package/dist/resourcescheduler.es.js.map +1 -0
  84. package/dist/styles.css +1 -1
  85. package/dist/tabs.es.js +15 -15
  86. package/dist/tabs.es.js.map +1 -1
  87. package/dist/usedatatableapi.es.js +117 -0
  88. package/dist/usedatatableapi.es.js.map +1 -0
  89. package/dist/usedatatablecolumndrag.es.js +40 -0
  90. package/dist/usedatatablecolumndrag.es.js.map +1 -0
  91. package/dist/usedatatableinstance.es.js +178 -0
  92. package/dist/usedatatableinstance.es.js.map +1 -0
  93. package/dist/usedatatablemotion.es.js +99 -0
  94. package/dist/usedatatablemotion.es.js.map +1 -0
  95. 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":"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"}
@@ -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;"}