@pattern-stack/frontend-patterns 0.2.0-alpha.0 → 0.2.0-alpha.11

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 (160) hide show
  1. package/dist/atoms/components/core/Badge/Badge.d.ts +1 -1
  2. package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts +32 -0
  3. package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts.map +1 -0
  4. package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts +32 -0
  5. package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts.map +1 -0
  6. package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -2
  7. package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -1
  8. package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts +91 -0
  9. package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts.map +1 -0
  10. package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts +271 -0
  11. package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts.map +1 -0
  12. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +155 -5
  13. package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -1
  14. package/dist/atoms/components/data/DataTable/ExpandButton.d.ts +37 -0
  15. package/dist/atoms/components/data/DataTable/ExpandButton.d.ts.map +1 -0
  16. package/dist/atoms/components/data/DataTable/FilterPill.d.ts +25 -0
  17. package/dist/atoms/components/data/DataTable/FilterPill.d.ts.map +1 -0
  18. package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts +35 -0
  19. package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts.map +1 -0
  20. package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts +10 -0
  21. package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts.map +1 -0
  22. package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts +11 -0
  23. package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts.map +1 -0
  24. package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts +10 -0
  25. package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts.map +1 -0
  26. package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts +10 -0
  27. package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts.map +1 -0
  28. package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts +10 -0
  29. package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts.map +1 -0
  30. package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts +10 -0
  31. package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts.map +1 -0
  32. package/dist/atoms/components/data/DataTable/filters/index.d.ts +14 -0
  33. package/dist/atoms/components/data/DataTable/filters/index.d.ts.map +1 -0
  34. package/dist/atoms/components/data/DataTable/index.d.ts +9 -0
  35. package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -1
  36. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts +1 -1
  37. package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -1
  38. package/dist/atoms/components/data/index.d.ts +3 -2
  39. package/dist/atoms/components/data/index.d.ts.map +1 -1
  40. package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts +16 -0
  41. package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts.map +1 -0
  42. package/dist/atoms/composed/ConnectionStatus/index.d.ts +3 -0
  43. package/dist/atoms/composed/ConnectionStatus/index.d.ts.map +1 -0
  44. package/dist/atoms/hooks/index.d.ts +9 -0
  45. package/dist/atoms/hooks/index.d.ts.map +1 -1
  46. package/dist/atoms/hooks/useAdaptiveTable.d.ts +49 -0
  47. package/dist/atoms/hooks/useAdaptiveTable.d.ts.map +1 -0
  48. package/dist/atoms/hooks/useApi.d.ts +1 -1
  49. package/dist/atoms/hooks/useApi.d.ts.map +1 -1
  50. package/dist/atoms/hooks/useColumnVisibility.d.ts +75 -0
  51. package/dist/atoms/hooks/useColumnVisibility.d.ts.map +1 -0
  52. package/dist/atoms/hooks/useEntityData.d.ts +36 -0
  53. package/dist/atoms/hooks/useEntityData.d.ts.map +1 -0
  54. package/dist/atoms/hooks/useEntityDetail.d.ts +43 -0
  55. package/dist/atoms/hooks/useEntityDetail.d.ts.map +1 -0
  56. package/dist/atoms/hooks/useExpandedRows.d.ts +66 -0
  57. package/dist/atoms/hooks/useExpandedRows.d.ts.map +1 -0
  58. package/dist/atoms/hooks/useFieldMetadata.d.ts +18 -0
  59. package/dist/atoms/hooks/useFieldMetadata.d.ts.map +1 -0
  60. package/dist/atoms/hooks/useOnlineStatus.d.ts +16 -0
  61. package/dist/atoms/hooks/useOnlineStatus.d.ts.map +1 -0
  62. package/dist/atoms/hooks/useResponsiveTable.d.ts +123 -0
  63. package/dist/atoms/hooks/useResponsiveTable.d.ts.map +1 -0
  64. package/dist/atoms/hooks/useTableFilters.d.ts +92 -0
  65. package/dist/atoms/hooks/useTableFilters.d.ts.map +1 -0
  66. package/dist/atoms/index.d.ts +1 -0
  67. package/dist/atoms/index.d.ts.map +1 -1
  68. package/dist/atoms/primitives/sheet.d.ts +23 -0
  69. package/dist/atoms/primitives/sheet.d.ts.map +1 -0
  70. package/dist/atoms/primitives/table.d.ts.map +1 -1
  71. package/dist/atoms/services/api/client.d.ts +12 -2
  72. package/dist/atoms/services/api/client.d.ts.map +1 -1
  73. package/dist/atoms/services/auth-service.d.ts +15 -0
  74. package/dist/atoms/services/auth-service.d.ts.map +1 -1
  75. package/dist/atoms/services/index.d.ts +2 -2
  76. package/dist/atoms/services/index.d.ts.map +1 -1
  77. package/dist/atoms/shared/config/table-config.d.ts +79 -0
  78. package/dist/atoms/shared/config/table-config.d.ts.map +1 -0
  79. package/dist/atoms/shared/index.d.ts +1 -0
  80. package/dist/atoms/shared/index.d.ts.map +1 -1
  81. package/dist/atoms/types/auth.d.ts +95 -2
  82. package/dist/atoms/types/auth.d.ts.map +1 -1
  83. package/dist/atoms/types/index.d.ts +1 -0
  84. package/dist/atoms/types/index.d.ts.map +1 -1
  85. package/dist/atoms/types/navigation.d.ts +1 -1
  86. package/dist/atoms/types/navigation.d.ts.map +1 -1
  87. package/dist/atoms/types/ui-config.d.ts +46 -11
  88. package/dist/atoms/types/ui-config.d.ts.map +1 -1
  89. package/dist/atoms/types/ui-metadata.d.ts +103 -0
  90. package/dist/atoms/types/ui-metadata.d.ts.map +1 -0
  91. package/dist/atoms/utils/entity-card-mapping.d.ts +105 -0
  92. package/dist/atoms/utils/entity-card-mapping.d.ts.map +1 -0
  93. package/dist/atoms/utils/field-detection.d.ts +2 -2
  94. package/dist/atoms/utils/field-detection.d.ts.map +1 -1
  95. package/dist/atoms/utils/icon-map.d.ts +48 -0
  96. package/dist/atoms/utils/icon-map.d.ts.map +1 -1
  97. package/dist/atoms/utils/index.d.ts +2 -0
  98. package/dist/atoms/utils/index.d.ts.map +1 -1
  99. package/dist/atoms/utils/ui-mapping.d.ts +9 -3
  100. package/dist/atoms/utils/ui-mapping.d.ts.map +1 -1
  101. package/dist/features/auth/components/ProtectedRoute.d.ts +3 -1
  102. package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
  103. package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
  104. package/dist/features/auth/providers/NoAuthProvider.d.ts +17 -0
  105. package/dist/features/auth/providers/NoAuthProvider.d.ts.map +1 -0
  106. package/dist/features/auth/providers/index.d.ts +1 -0
  107. package/dist/features/auth/providers/index.d.ts.map +1 -1
  108. package/dist/frontend-patterns.css +1 -4554
  109. package/dist/index.d.ts +12 -4
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.es.js +8793 -18275
  112. package/dist/index.es.js.map +1 -1
  113. package/dist/index.js +8790 -18271
  114. package/dist/index.js.map +1 -1
  115. package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
  116. package/dist/molecules/layout/BulkSelectionBar.d.ts +14 -2
  117. package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -1
  118. package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts +61 -0
  119. package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts.map +1 -0
  120. package/dist/molecules/layout/FieldGrid/index.d.ts +2 -0
  121. package/dist/molecules/layout/FieldGrid/index.d.ts.map +1 -0
  122. package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts +37 -0
  123. package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts.map +1 -0
  124. package/dist/molecules/layout/ListToolbar/index.d.ts +2 -0
  125. package/dist/molecules/layout/ListToolbar/index.d.ts.map +1 -0
  126. package/dist/molecules/layout/PageTitle/PageTitle.d.ts +17 -0
  127. package/dist/molecules/layout/PageTitle/PageTitle.d.ts.map +1 -0
  128. package/dist/molecules/layout/PageTitle/index.d.ts +2 -0
  129. package/dist/molecules/layout/PageTitle/index.d.ts.map +1 -0
  130. package/dist/molecules/layout/index.d.ts +3 -0
  131. package/dist/molecules/layout/index.d.ts.map +1 -1
  132. package/dist/molecules/layout/navigation-context.d.ts.map +1 -1
  133. package/dist/sync/EntityStoreProvider.d.ts +35 -0
  134. package/dist/sync/EntityStoreProvider.d.ts.map +1 -0
  135. package/dist/sync/createEntityHooks.d.ts +29 -0
  136. package/dist/sync/createEntityHooks.d.ts.map +1 -0
  137. package/dist/sync/createStore.d.ts +65 -0
  138. package/dist/sync/createStore.d.ts.map +1 -0
  139. package/dist/sync/index.d.ts +6 -0
  140. package/dist/sync/index.d.ts.map +1 -0
  141. package/dist/sync/types.d.ts +383 -0
  142. package/dist/sync/types.d.ts.map +1 -0
  143. package/dist/templates/ListPageTemplate.d.ts +21 -0
  144. package/dist/templates/ListPageTemplate.d.ts.map +1 -0
  145. package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
  146. package/dist/templates/factory.d.ts +11 -0
  147. package/dist/templates/factory.d.ts.map +1 -1
  148. package/dist/templates/index.d.ts +1 -0
  149. package/dist/templates/index.d.ts.map +1 -1
  150. package/package.json +11 -7
  151. package/cli/commands/generate-hooks.ts +0 -316
  152. package/cli/commands/init.ts +0 -33
  153. package/cli/commands/scaffold.ts +0 -224
  154. package/cli/index.ts +0 -122
  155. package/cli/src/codegen/openapi/client-generator.js +0 -659
  156. package/cli/src/codegen/openapi/hook-generator.js +0 -725
  157. package/cli/src/codegen/openapi/parser.js +0 -274
  158. package/cli/src/codegen/openapi/type-generator.js +0 -329
  159. package/dist/codegen/openapi/bulk-types.d.ts +0 -142
  160. package/dist/codegen/openapi/bulk-types.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: {
4
- variant?: "success" | "secondary" | "default" | "info" | "warning" | "destructive" | "outline";
4
+ variant?: "success" | "warning" | "info" | "secondary" | "default" | "destructive" | "outline";
5
5
  size?: "sm" | "lg" | "default";
6
6
  } & import("class-variance-authority/types").ClassProp) => string;
7
7
  export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ColumnFilterDropdown
3
+ *
4
+ * Dropdown component for filtering a DataTable column.
5
+ * Renders in the column header and shows the appropriate filter editor
6
+ * based on the column's filter configuration.
7
+ */
8
+ import React from "react";
9
+ import type { ColumnFilter, ColumnFilterConfig } from "./DataTable.filters";
10
+ export interface ColumnFilterDropdownProps {
11
+ /** Column key */
12
+ columnKey: string;
13
+ /** Column header for accessibility */
14
+ columnHeader: string;
15
+ /** Filter configuration */
16
+ filterConfig: ColumnFilterConfig;
17
+ /** Current filter value (if any) */
18
+ currentFilter?: ColumnFilter;
19
+ /** Callback when filter is applied */
20
+ onFilterChange: (filter: ColumnFilter | null) => void;
21
+ /** Unique values in the column (for auto-generating select options) */
22
+ columnValues?: unknown[];
23
+ /** Category theme (1-8) */
24
+ category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
25
+ /** Size variant */
26
+ size?: "sm" | "md";
27
+ /** Additional className */
28
+ className?: string;
29
+ }
30
+ export declare const ColumnFilterDropdown: React.FC<ColumnFilterDropdownProps>;
31
+ export default ColumnFilterDropdown;
32
+ //# sourceMappingURL=ColumnFilterDropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnFilterDropdown.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/ColumnFilterDropdown.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAyC,MAAM,OAAO,CAAC;AAiB9D,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,yBAAyB;IACxC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,EAAE,kBAAkB,CAAC;IACjC,oCAAoC;IACpC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sCAAsC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,mBAAmB;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAsLpE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ColumnVisibilityToggle
3
+ *
4
+ * Dropdown component for toggling column visibility in DataTable.
5
+ * Designed to be placed in the toolbar.
6
+ */
7
+ import React from "react";
8
+ export interface ColumnInfo {
9
+ key: string;
10
+ header: string | React.ReactNode;
11
+ }
12
+ export interface ColumnVisibilityToggleProps {
13
+ /** All available columns */
14
+ columns: ColumnInfo[];
15
+ /** Currently visible column keys */
16
+ visibleColumns: Set<string>;
17
+ /** Callback when visibility changes */
18
+ onVisibilityChange: (columns: Set<string>) => void;
19
+ /** Columns that cannot be hidden */
20
+ lockedColumns?: string[];
21
+ /** Category theme (1-8) */
22
+ category?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
23
+ /** Trigger button content */
24
+ trigger?: React.ReactNode;
25
+ /** Additional className */
26
+ className?: string;
27
+ /** Dropdown alignment */
28
+ align?: "start" | "center" | "end";
29
+ }
30
+ export declare const ColumnVisibilityToggle: React.FC<ColumnVisibilityToggleProps>;
31
+ export default ColumnVisibilityToggle;
32
+ //# sourceMappingURL=ColumnVisibilityToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnVisibilityToggle.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/ColumnVisibilityToggle.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,oCAAoC;IACpC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,uCAAuC;IACvC,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACnD,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA6IxE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import type { IListLoadable } from "../../../types";
2
2
  import type { DataTableProps } from "./DataTable.types";
3
- export type { Column, ResponsiveColumn, DataTableProps, } from "./DataTable.types";
4
- export declare function DataTable<T extends Record<string, unknown>>({ data, columns, searchPlaceholder, pageSize, showPagination, showSearch, onRowClick, emptyMessage, className, hover, isLoading, loadingItemCount, responsive, renderMobileCard, ui, }: DataTableProps<T> & IListLoadable): import("react/jsx-runtime").JSX.Element;
3
+ export type { Column, ResponsiveColumn, DataTableProps, DataTableColumn, QueryWithMeta, SelectionConfig, } from "./DataTable.types";
4
+ export type { ExpansionConfig, ChildRow } from "./DataTable.expansion";
5
+ export { ExpandButton } from "./ExpandButton";
6
+ export type { ExpandButtonProps } from "./ExpandButton";
7
+ export declare function DataTable<T extends Record<string, unknown>>({ data: dataProp, columns: columnsProp, query, searchPlaceholder, pageSize, showPagination, showSearch, onRowClick, emptyMessage, className, hover, isLoading: isLoadingProp, loadingItemCount, responsive, renderMobileCard, ui, error: errorProp, errorTitle, errorRetry, expansion, selection, selectable, selectedIds: selectedIdsProp, onSelectionChange: onSelectionChangeProp, getRowId: getRowIdProp, selectAllMode: selectAllModeProp, }: DataTableProps<T> & IListLoadable): import("react/jsx-runtime").JSX.Element;
5
8
  //# sourceMappingURL=DataTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/DataTable.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASpD,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAK3B,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAI3B,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3D,IAAI,EACJ,OAAO,EACP,iBAA+B,EAC/B,QAAa,EACb,cAAqB,EACrB,UAAiB,EACjB,UAAU,EACV,YAAkC,EAClC,SAAc,EACd,KAAa,EACb,SAAiB,EACjB,gBAAoB,EACpB,UAAiB,EACjB,gBAAgB,EAChB,EAAE,GACH,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,2CA0XnC"}
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/DataTable.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASpD,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAQ3B,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA4BxD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3D,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,WAAW,EACpB,KAAK,EACL,iBAA+B,EAC/B,QAAa,EACb,cAAqB,EACrB,UAAiB,EACjB,UAAU,EACV,YAAkC,EAClC,SAAc,EACd,KAAa,EACb,SAAS,EAAE,aAAqB,EAChC,gBAAoB,EACpB,UAAiB,EACjB,gBAAgB,EAChB,EAAE,EACF,KAAK,EAAE,SAAgB,EACvB,UAAU,EACV,UAAU,EAEV,SAAS,EAET,SAAS,EAET,UAAkB,EAClB,WAAW,EAAE,eAAe,EAC5B,iBAAiB,EAAE,qBAAqB,EACxC,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,iBAA0B,GAC1C,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,2CAmqBnC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * DataTable Expansion Types
3
+ *
4
+ * Grouped configuration for row expansion feature.
5
+ * Follows the Ant Design pattern of grouped config objects.
6
+ *
7
+ * These types are used by:
8
+ * - DataTable component (expansion prop)
9
+ * - useExpandedRows hook (state management)
10
+ * - Consumer applications (type-safe expansion definitions)
11
+ */
12
+ import type { ReactNode } from "react";
13
+ /**
14
+ * A child row rendered as an actual <tr> element with the same columns as the parent.
15
+ * This allows child rows to perfectly align with parent table columns.
16
+ */
17
+ export interface ChildRow {
18
+ /** Unique identifier for the child row */
19
+ id: string;
20
+ /**
21
+ * Cell content keyed by column key.
22
+ * Each key should match a column key from the parent table.
23
+ * Missing keys will render empty cells.
24
+ */
25
+ cells: Record<string, ReactNode>;
26
+ /** Optional click handler for the child row */
27
+ onClick?: () => void;
28
+ /** Optional additional CSS class for the child row */
29
+ className?: string;
30
+ }
31
+ /**
32
+ * Configuration for row expansion behavior.
33
+ * Follows the grouped API pattern like SelectionConfig.
34
+ */
35
+ export interface ExpansionConfig<T> {
36
+ /** Currently expanded row IDs (controlled) */
37
+ expandedIds: Set<string>;
38
+ /** Called when expansion state changes */
39
+ onChange: (ids: Set<string>) => void;
40
+ /**
41
+ * Render expanded content for a row (freeform content in colSpan cell).
42
+ * Use this for complex layouts that don't follow table structure.
43
+ * @deprecated Prefer renderChildRows for tabular child data
44
+ */
45
+ renderContent?: (row: T) => ReactNode;
46
+ /**
47
+ * Render child rows as actual <tr> elements with the same columns.
48
+ * Each child row's cells align perfectly with parent table columns.
49
+ * Preferred over renderContent for hierarchical tabular data.
50
+ */
51
+ renderChildRows?: (row: T) => ChildRow[];
52
+ /** Determine if a row can be expanded (default: () => true) */
53
+ canExpand?: (row: T) => boolean;
54
+ /** Extract row ID (default: row.id) */
55
+ getRowId?: (row: T) => string;
56
+ /**
57
+ * Left indentation for expanded content (only used with renderContent).
58
+ * Auto-calculated based on visible columns (expansion + selection) if not provided.
59
+ * Override for custom layouts like nested tables.
60
+ * @default Auto-calculated: "56px" (no selection) or "88px" (with selection)
61
+ */
62
+ contentIndent?: string;
63
+ /**
64
+ * CSS class applied to child rows rendered via renderChildRows.
65
+ * @default "bg-muted/20"
66
+ */
67
+ childRowClassName?: string;
68
+ /**
69
+ * Whether to indent the first column of child rows with a visual connector.
70
+ * Set to false for a cleaner left-aligned look.
71
+ * @default true
72
+ */
73
+ childRowIndent?: boolean;
74
+ }
75
+ /**
76
+ * Props for the animated expanded content component.
77
+ * Internal use only - not exported from the package.
78
+ */
79
+ export interface ExpandedRowContentProps<T> {
80
+ /** Row data */
81
+ row: T;
82
+ /** Whether the row is currently expanded */
83
+ isExpanded: boolean;
84
+ /** Total number of columns (for colspan) */
85
+ totalColumns: number;
86
+ /** Function to render the expanded content */
87
+ renderExpandedContent: (row: T) => ReactNode;
88
+ /** Left indentation for expanded content */
89
+ contentIndent: string;
90
+ }
91
+ //# sourceMappingURL=DataTable.expansion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.expansion.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/DataTable.expansion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,8CAA8C;IAC9C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACrC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;IACzC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAChC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,eAAe;IACf,GAAG,EAAE,CAAC,CAAC;IACP,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAC7C,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * DataTable Filter Types
3
+ *
4
+ * Pure TypeScript types for the filtering system.
5
+ * Zero runtime code - all types are stripped at compile time.
6
+ *
7
+ * These types are used by:
8
+ * - useTableFilters hook (state management)
9
+ * - Filter editor components (UI)
10
+ * - DataTable integration (props)
11
+ * - Consumer applications (type-safe filter definitions)
12
+ */
13
+ import type React from "react";
14
+ /**
15
+ * All supported filter operators.
16
+ * Matches common backend filter APIs (Django, FastAPI, Prisma, etc.)
17
+ */
18
+ export type FilterOperator = "equals" | "not_equals" | "contains" | "not_contains" | "starts_with" | "ends_with" | "gt" | "gte" | "lt" | "lte" | "between" | "in" | "not_in" | "is_empty" | "is_not_empty";
19
+ /**
20
+ * Default operators for each filter type.
21
+ * Used when column doesn't specify explicit operators.
22
+ */
23
+ export declare const DEFAULT_OPERATORS: Record<ColumnFilterType, FilterOperator[]>;
24
+ /**
25
+ * Human-readable labels for operators.
26
+ */
27
+ export declare const OPERATOR_LABELS: Record<FilterOperator, string>;
28
+ /**
29
+ * Filter value types - discriminated union for type safety.
30
+ * The `type` field determines which value shape is used.
31
+ */
32
+ export type FilterValue = {
33
+ type: "text";
34
+ value: string;
35
+ } | {
36
+ type: "number";
37
+ value: number;
38
+ } | {
39
+ type: "number_range";
40
+ min?: number;
41
+ max?: number;
42
+ } | {
43
+ type: "date";
44
+ value: Date;
45
+ } | {
46
+ type: "date_range";
47
+ start?: Date;
48
+ end?: Date;
49
+ } | {
50
+ type: "select";
51
+ value: string;
52
+ } | {
53
+ type: "multi_select";
54
+ values: string[];
55
+ } | {
56
+ type: "boolean";
57
+ value: boolean;
58
+ };
59
+ /**
60
+ * Extract the value type from a FilterValue.
61
+ */
62
+ export type FilterValueType = FilterValue["type"];
63
+ /**
64
+ * A single filter applied to a column.
65
+ */
66
+ export interface ColumnFilter {
67
+ /** Column key this filter applies to */
68
+ columnKey: string;
69
+ /** Filter operator */
70
+ operator: FilterOperator;
71
+ /** Filter value */
72
+ value: FilterValue;
73
+ }
74
+ /**
75
+ * Complete filter state for a DataTable.
76
+ */
77
+ export interface FilterState {
78
+ /** Per-column filters keyed by column key */
79
+ columnFilters: Record<string, ColumnFilter>;
80
+ /** Active quick filter values */
81
+ quickFilters: QuickFilterValue[];
82
+ }
83
+ /**
84
+ * Empty filter state constant.
85
+ */
86
+ export declare const EMPTY_FILTER_STATE: FilterState;
87
+ /**
88
+ * Filter type determines the UI component and operators.
89
+ */
90
+ export type ColumnFilterType = "text" | "select" | "multi_select" | "number" | "number_range" | "date" | "date_range" | "boolean";
91
+ /**
92
+ * Option for select/multi-select filters.
93
+ */
94
+ export interface FilterOption {
95
+ /** Option value (stored in filter) */
96
+ value: string;
97
+ /** Display label */
98
+ label: string;
99
+ /** Optional icon */
100
+ icon?: React.ReactNode;
101
+ /** Optional count (for faceted filtering) */
102
+ count?: number;
103
+ /** Optional color for badge rendering */
104
+ color?: string;
105
+ }
106
+ /**
107
+ * Configuration for a column's filter behavior.
108
+ * Applied to column definitions via the `filter` prop.
109
+ */
110
+ export interface ColumnFilterConfig {
111
+ /** Filter type determines the UI component */
112
+ type: ColumnFilterType;
113
+ /** Available operators (defaults based on type) */
114
+ operators?: FilterOperator[];
115
+ /** Options for select/multi_select types */
116
+ options?: FilterOption[];
117
+ /** Placeholder text for the input */
118
+ placeholder?: string;
119
+ /** Load options dynamically (for large option sets) */
120
+ loadOptions?: (search: string) => Promise<FilterOption[]>;
121
+ /** Custom filter function for client-side filtering */
122
+ filterFn?: <T>(item: T, filter: ColumnFilter) => boolean;
123
+ /** Minimum value for number/date filters */
124
+ min?: number | Date;
125
+ /** Maximum value for number/date filters */
126
+ max?: number | Date;
127
+ /** Step for number filters */
128
+ step?: number;
129
+ }
130
+ /**
131
+ * Quick filter definition - describes an available filter.
132
+ * Consumers define these to create a quick filter bar.
133
+ */
134
+ export interface QuickFilterDefinition {
135
+ /** Unique identifier */
136
+ id: string;
137
+ /** Display label for the filter button/dropdown */
138
+ label: string;
139
+ /** Column key this filter applies to */
140
+ columnKey: string;
141
+ /** Filter type determines the picker UI */
142
+ type: ColumnFilterType;
143
+ /** Icon to display with the filter */
144
+ icon?: React.ReactNode;
145
+ /** Options for select/multi_select types */
146
+ options?: FilterOption[];
147
+ /** Load options dynamically */
148
+ loadOptions?: (search: string) => Promise<FilterOption[]>;
149
+ /** Default operator (defaults based on type) */
150
+ defaultOperator?: FilterOperator;
151
+ /** Category for grouping filters in the UI */
152
+ category?: string;
153
+ }
154
+ /**
155
+ * Active quick filter value.
156
+ * Represents a filter that the user has applied.
157
+ */
158
+ export interface QuickFilterValue {
159
+ /** Unique ID for this filter instance */
160
+ id: string;
161
+ /** References QuickFilterDefinition.id */
162
+ filterId: string;
163
+ /** The filter value */
164
+ value: FilterValue;
165
+ /** Display label for the pill (pre-formatted) */
166
+ label: string;
167
+ }
168
+ /**
169
+ * Base props for all filter editors.
170
+ */
171
+ export interface BaseFilterEditorProps {
172
+ /** Current filter value (if editing existing filter) */
173
+ currentFilter?: ColumnFilter;
174
+ /** Callback when filter is applied */
175
+ onApply: (filter: ColumnFilter) => void;
176
+ /** Callback when filter is cleared */
177
+ onClear: () => void;
178
+ /** Column key for the filter */
179
+ columnKey: string;
180
+ /** Placeholder text */
181
+ placeholder?: string;
182
+ /** Auto-focus the input */
183
+ autoFocus?: boolean;
184
+ }
185
+ /**
186
+ * Props for text filter editor.
187
+ */
188
+ export interface TextFilterEditorProps extends BaseFilterEditorProps {
189
+ /** Available operators */
190
+ operators?: FilterOperator[];
191
+ }
192
+ /**
193
+ * Props for select filter editor.
194
+ */
195
+ export interface SelectFilterEditorProps extends BaseFilterEditorProps {
196
+ /** Available options */
197
+ options: FilterOption[];
198
+ /** Load options dynamically */
199
+ loadOptions?: (search: string) => Promise<FilterOption[]>;
200
+ /** Allow searching options */
201
+ searchable?: boolean;
202
+ }
203
+ /**
204
+ * Props for multi-select filter editor.
205
+ */
206
+ export interface MultiSelectFilterEditorProps extends BaseFilterEditorProps {
207
+ /** Available options */
208
+ options: FilterOption[];
209
+ /** Load options dynamically */
210
+ loadOptions?: (search: string) => Promise<FilterOption[]>;
211
+ /** Allow searching options */
212
+ searchable?: boolean;
213
+ /** Maximum selections allowed */
214
+ maxSelections?: number;
215
+ }
216
+ /**
217
+ * Props for number filter editor.
218
+ */
219
+ export interface NumberFilterEditorProps extends BaseFilterEditorProps {
220
+ /** Available operators */
221
+ operators?: FilterOperator[];
222
+ /** Minimum value */
223
+ min?: number;
224
+ /** Maximum value */
225
+ max?: number;
226
+ /** Step increment */
227
+ step?: number;
228
+ /** Allow range selection */
229
+ allowRange?: boolean;
230
+ }
231
+ /**
232
+ * Props for date filter editor.
233
+ */
234
+ export interface DateFilterEditorProps extends BaseFilterEditorProps {
235
+ /** Available operators */
236
+ operators?: FilterOperator[];
237
+ /** Minimum date */
238
+ min?: Date;
239
+ /** Maximum date */
240
+ max?: Date;
241
+ /** Allow range selection */
242
+ allowRange?: boolean;
243
+ /** Include time picker */
244
+ includeTime?: boolean;
245
+ }
246
+ /**
247
+ * Props for boolean filter editor.
248
+ */
249
+ export interface BooleanFilterEditorProps extends BaseFilterEditorProps {
250
+ /** Label for true value */
251
+ trueLabel?: string;
252
+ /** Label for false value */
253
+ falseLabel?: string;
254
+ }
255
+ /**
256
+ * Helper to check if a filter value is empty.
257
+ */
258
+ export declare function isFilterValueEmpty(value: FilterValue): boolean;
259
+ /**
260
+ * Format a filter value for display in a pill.
261
+ */
262
+ export declare function formatFilterValueForDisplay(value: FilterValue, options?: FilterOption[]): string;
263
+ /**
264
+ * Create an empty filter value for a given type.
265
+ */
266
+ export declare function createEmptyFilterValue(type: ColumnFilterType): FilterValue;
267
+ /**
268
+ * Get default operator for a filter type.
269
+ */
270
+ export declare function getDefaultOperator(type: ColumnFilterType): FilterOperator;
271
+ //# sourceMappingURL=DataTable.filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.filters.d.ts","sourceRoot":"","sources":["../../../../../src/atoms/components/data/DataTable/DataTable.filters.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,27 @@
1
1
  import type { ResponsiveColumnConfig, DisplayMode, ResponsiveValue, Breakpoint } from "../../../config/responsive";
2
- import type { UIConfig } from "../../../types/ui-config";
2
+ import type { UIConfig, UIType, FieldFormat } from "../../../types/ui-config";
3
+ import type { ColumnMetadata } from "../../../types/ui-metadata";
4
+ import type { ExpansionConfig } from "./DataTable.expansion";
5
+ /**
6
+ * Unified query result with metadata - compatible with sync-patterns generated hooks.
7
+ * This interface matches UnifiedQueryResultWithMeta from sync-patterns.
8
+ */
9
+ export interface QueryWithMeta<T> {
10
+ /** Entity data array */
11
+ data: T[] | undefined;
12
+ /** Whether data is loading */
13
+ isLoading: boolean;
14
+ /** Data query error */
15
+ error: Error | null;
16
+ /** Column metadata for rendering */
17
+ columns: ColumnMetadata[];
18
+ /** Whether metadata is still loading */
19
+ isLoadingMetadata: boolean;
20
+ /** Metadata-specific error */
21
+ metadataError: Error | null;
22
+ /** True when both data AND metadata are loaded */
23
+ isReady: boolean;
24
+ }
3
25
  export interface Column<T> {
4
26
  key: string;
5
27
  header: string | React.ReactNode;
@@ -7,8 +29,21 @@ export interface Column<T> {
7
29
  sortable?: boolean;
8
30
  filterable?: boolean;
9
31
  width?: string;
10
- /** Auto-render badges for status/category columns */
11
- type?: "status" | "category" | "default";
32
+ /**
33
+ * Field type for automatic rendering.
34
+ * When set, DataTable uses defaultFieldRenderers to format the cell.
35
+ * Overridden by custom `cell` renderer if provided.
36
+ *
37
+ * Supports all UIType values: text, password, number, money, percent,
38
+ * date, datetime, email, url, phone, boolean, badge, status, entity,
39
+ * user, json, image, rating, color, file.
40
+ */
41
+ type?: UIType;
42
+ /**
43
+ * Format configuration for typed fields.
44
+ * Used by money (currency, decimals, locale), date (locale), status (statusColors), etc.
45
+ */
46
+ format?: FieldFormat;
12
47
  }
13
48
  export interface ResponsiveColumn<T> extends Column<T>, ResponsiveColumnConfig {
14
49
  /** Responsive width adjustments */
@@ -22,9 +57,46 @@ export interface ResponsiveColumn<T> extends Column<T>, ResponsiveColumnConfig {
22
57
  /** Priority for column visibility (higher = more important) */
23
58
  priority?: number;
24
59
  }
60
+ /**
61
+ * Union type for DataTable columns - accepts both internal Column format
62
+ * and backend ColumnMetadata format for seamless API integration.
63
+ */
64
+ export type DataTableColumn<T> = Column<T> | ResponsiveColumn<T> | ColumnMetadata;
65
+ /**
66
+ * Configuration for row selection behavior (grouped API).
67
+ * This is the preferred API over flat selection props.
68
+ */
69
+ export interface SelectionConfig<T> {
70
+ /** Currently selected row IDs (controlled) */
71
+ selectedIds: Set<string>;
72
+ /** Called when selection changes */
73
+ onChange: (ids: Set<string>) => void;
74
+ /** Extract row ID (default: row.id) */
75
+ getRowId?: (row: T) => string;
76
+ /** What "select all" selects */
77
+ mode?: "page" | "all";
78
+ }
25
79
  export interface DataTableProps<T> {
26
- data: T[];
27
- columns: Column<T>[] | ResponsiveColumn<T>[];
80
+ /**
81
+ * Raw data array. Use this OR `query`, not both.
82
+ * If `query` is provided, this is ignored.
83
+ */
84
+ data?: T[];
85
+ /**
86
+ * Column definitions. If `query` is provided and has columns,
87
+ * this prop takes precedence (allows overriding query columns).
88
+ */
89
+ columns?: DataTableColumn<T>[];
90
+ /**
91
+ * Unified query result with metadata from sync-patterns.
92
+ * When provided, extracts data, columns, loading, and error states automatically.
93
+ * Explicit props (data, columns, isLoading, error) take precedence over query values.
94
+ *
95
+ * @example
96
+ * const query = useAccountsWithMeta()
97
+ * <DataTable query={query} />
98
+ */
99
+ query?: QueryWithMeta<T>;
28
100
  searchPlaceholder?: string;
29
101
  pageSize?: number;
30
102
  showPagination?: boolean;
@@ -47,5 +119,83 @@ export interface DataTableProps<T> {
47
119
  }) => React.ReactNode;
48
120
  /** UI configuration for automatic field rendering */
49
121
  ui?: UIConfig<T>;
122
+ /** Error state - renders error message instead of table */
123
+ error?: Error | string | null;
124
+ /** Custom error title (default: "Error loading data") */
125
+ errorTitle?: string;
126
+ /** Callback for retry button */
127
+ errorRetry?: () => void;
128
+ /**
129
+ * Configuration for row expansion behavior.
130
+ * When provided, an expand button column is prepended to the table.
131
+ *
132
+ * @example
133
+ * ```tsx
134
+ * const { expandedIds, toggleExpand } = useExpandedRows()
135
+ *
136
+ * <DataTable
137
+ * data={categories}
138
+ * columns={columns}
139
+ * expansion={{
140
+ * expandedIds,
141
+ * onChange: (ids) => setExpandedIds(ids),
142
+ * renderContent: (row) => <SubcategoryList items={row.subcategories} />,
143
+ * }}
144
+ * />
145
+ * ```
146
+ */
147
+ expansion?: ExpansionConfig<T>;
148
+ /**
149
+ * Configuration for row selection behavior (grouped API).
150
+ * When provided, a selection column is prepended to the table.
151
+ * This is the preferred API over flat selection props.
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * <DataTable
156
+ * data={items}
157
+ * columns={columns}
158
+ * selection={{
159
+ * selectedIds,
160
+ * onChange: setSelectedIds,
161
+ * mode: 'page',
162
+ * }}
163
+ * />
164
+ * ```
165
+ */
166
+ selection?: SelectionConfig<T>;
167
+ /**
168
+ * Enable row selection with checkboxes.
169
+ * When true, a selection column is prepended to the table.
170
+ * @default false
171
+ * @deprecated Use `selection` prop instead for grouped API
172
+ */
173
+ selectable?: boolean;
174
+ /**
175
+ * Set of selected row IDs (controlled).
176
+ * Required when `selectable` is true.
177
+ * @deprecated Use `selection.selectedIds` instead
178
+ */
179
+ selectedIds?: Set<string>;
180
+ /**
181
+ * Callback fired when selection changes.
182
+ * Required when `selectable` is true.
183
+ * @deprecated Use `selection.onChange` instead
184
+ */
185
+ onSelectionChange?: (selectedIds: Set<string>) => void;
186
+ /**
187
+ * Function to extract unique ID from a row.
188
+ * @default (row) => row.id
189
+ * @deprecated Use `selection.getRowId` instead
190
+ */
191
+ getRowId?: (row: T) => string;
192
+ /**
193
+ * What "select all" checkbox selects.
194
+ * - 'page': Only visible rows on current page
195
+ * - 'all': All rows matching current filters
196
+ * @default 'page'
197
+ * @deprecated Use `selection.mode` instead
198
+ */
199
+ selectAllMode?: "page" | "all";
50
200
  }
51
201
  //# sourceMappingURL=DataTable.types.d.ts.map