react-restyle-components 0.4.23 → 0.4.25

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 (193) hide show
  1. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.d.ts +4 -0
  2. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.d.ts.map +1 -0
  3. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.js +45 -0
  4. package/lib/src/core-components/src/components/AlertBanner/elements.d.ts +27 -0
  5. package/lib/src/core-components/src/components/AlertBanner/elements.d.ts.map +1 -0
  6. package/lib/src/core-components/src/components/AlertBanner/elements.js +233 -0
  7. package/lib/src/core-components/src/components/AlertBanner/index.d.ts +3 -0
  8. package/lib/src/core-components/src/components/AlertBanner/index.d.ts.map +1 -0
  9. package/lib/src/core-components/src/components/AlertBanner/index.js +2 -0
  10. package/lib/src/core-components/src/components/AlertBanner/types.d.ts +46 -0
  11. package/lib/src/core-components/src/components/AlertBanner/types.d.ts.map +1 -0
  12. package/lib/src/core-components/src/components/AlertBanner/types.js +10 -0
  13. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.component.d.ts.map +1 -1
  14. package/lib/src/core-components/src/components/Badge/Badge.d.ts +33 -33
  15. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.d.ts +28 -0
  16. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  17. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.js +83 -0
  18. package/lib/src/core-components/src/components/Breadcrumb/elements.d.ts +44 -0
  19. package/lib/src/core-components/src/components/Breadcrumb/elements.d.ts.map +1 -0
  20. package/lib/src/core-components/src/components/Breadcrumb/elements.js +370 -0
  21. package/lib/src/core-components/src/components/Breadcrumb/index.d.ts +4 -0
  22. package/lib/src/core-components/src/components/Breadcrumb/index.d.ts.map +1 -0
  23. package/lib/src/core-components/src/components/Breadcrumb/index.js +3 -0
  24. package/lib/src/core-components/src/components/Breadcrumb/types.d.ts +14 -0
  25. package/lib/src/core-components/src/components/Breadcrumb/types.d.ts.map +1 -0
  26. package/lib/src/core-components/src/components/Breadcrumb/types.js +3 -0
  27. package/lib/src/core-components/src/components/Button/Button.spec.js +1 -1
  28. package/lib/src/core-components/src/components/Button/button.component.js +1 -1
  29. package/lib/src/core-components/src/components/Chip/Chip.d.ts +5 -0
  30. package/lib/src/core-components/src/components/Chip/Chip.d.ts.map +1 -0
  31. package/lib/src/core-components/src/components/Chip/Chip.js +64 -0
  32. package/lib/src/core-components/src/components/Chip/elements.d.ts +27 -0
  33. package/lib/src/core-components/src/components/Chip/elements.d.ts.map +1 -0
  34. package/lib/src/core-components/src/components/Chip/elements.js +253 -0
  35. package/lib/src/core-components/src/components/Chip/index.d.ts +3 -0
  36. package/lib/src/core-components/src/components/Chip/index.d.ts.map +1 -0
  37. package/lib/src/core-components/src/components/Chip/index.js +2 -0
  38. package/lib/src/core-components/src/components/Chip/types.d.ts +54 -0
  39. package/lib/src/core-components/src/components/Chip/types.d.ts.map +1 -0
  40. package/lib/src/core-components/src/components/Chip/types.js +4 -0
  41. package/lib/src/core-components/src/components/Divider/Divider.d.ts +4 -0
  42. package/lib/src/core-components/src/components/Divider/Divider.d.ts.map +1 -0
  43. package/lib/src/core-components/src/components/Divider/Divider.js +25 -0
  44. package/lib/src/core-components/src/components/Divider/elements.d.ts +22 -0
  45. package/lib/src/core-components/src/components/Divider/elements.d.ts.map +1 -0
  46. package/lib/src/core-components/src/components/Divider/elements.js +103 -0
  47. package/lib/src/core-components/src/components/Divider/index.d.ts +3 -0
  48. package/lib/src/core-components/src/components/Divider/index.d.ts.map +1 -0
  49. package/lib/src/core-components/src/components/Divider/index.js +2 -0
  50. package/lib/src/core-components/src/components/Divider/types.d.ts +30 -0
  51. package/lib/src/core-components/src/components/Divider/types.d.ts.map +1 -0
  52. package/lib/src/core-components/src/components/Divider/types.js +4 -0
  53. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.d.ts +6 -0
  54. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.d.ts.map +1 -0
  55. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.js +147 -0
  56. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.d.ts +12 -0
  57. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.d.ts.map +1 -0
  58. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.js +89 -0
  59. package/lib/src/core-components/src/components/DynamicGrid/elements.d.ts +49 -0
  60. package/lib/src/core-components/src/components/DynamicGrid/elements.d.ts.map +1 -0
  61. package/lib/src/core-components/src/components/DynamicGrid/elements.js +409 -0
  62. package/lib/src/core-components/src/components/DynamicGrid/index.d.ts +4 -0
  63. package/lib/src/core-components/src/components/DynamicGrid/index.d.ts.map +1 -0
  64. package/lib/src/core-components/src/components/DynamicGrid/index.js +3 -0
  65. package/lib/src/core-components/src/components/DynamicGrid/types.d.ts +173 -0
  66. package/lib/src/core-components/src/components/DynamicGrid/types.d.ts.map +1 -0
  67. package/lib/src/core-components/src/components/DynamicGrid/types.js +28 -0
  68. package/lib/src/core-components/src/components/DynamicGrid/utils.d.ts +65 -0
  69. package/lib/src/core-components/src/components/DynamicGrid/utils.d.ts.map +1 -0
  70. package/lib/src/core-components/src/components/DynamicGrid/utils.js +193 -0
  71. package/lib/src/core-components/src/components/Icon/Icon.js +1 -1
  72. package/lib/src/core-components/src/components/Masonry/Masonry.d.ts +7 -0
  73. package/lib/src/core-components/src/components/Masonry/Masonry.d.ts.map +1 -0
  74. package/lib/src/core-components/src/components/Masonry/Masonry.js +73 -0
  75. package/lib/src/core-components/src/components/Masonry/elements.d.ts +31 -0
  76. package/lib/src/core-components/src/components/Masonry/elements.d.ts.map +1 -0
  77. package/lib/src/core-components/src/components/Masonry/elements.js +122 -0
  78. package/lib/src/core-components/src/components/Masonry/hooks.d.ts +21 -0
  79. package/lib/src/core-components/src/components/Masonry/hooks.d.ts.map +1 -0
  80. package/lib/src/core-components/src/components/Masonry/hooks.js +100 -0
  81. package/lib/src/core-components/src/components/Masonry/index.d.ts +4 -0
  82. package/lib/src/core-components/src/components/Masonry/index.d.ts.map +1 -0
  83. package/lib/src/core-components/src/components/Masonry/index.js +3 -0
  84. package/lib/src/core-components/src/components/Masonry/types.d.ts +117 -0
  85. package/lib/src/core-components/src/components/Masonry/types.d.ts.map +1 -0
  86. package/lib/src/core-components/src/components/Masonry/types.js +1 -0
  87. package/lib/src/core-components/src/components/Picker/color-picker-modal/color-picker-modal.component.js +1 -1
  88. package/lib/src/core-components/src/components/Skeleton/Skeleton.d.ts +8 -0
  89. package/lib/src/core-components/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  90. package/lib/src/core-components/src/components/Skeleton/Skeleton.js +51 -0
  91. package/lib/src/core-components/src/components/Skeleton/elements.d.ts +33 -0
  92. package/lib/src/core-components/src/components/Skeleton/elements.d.ts.map +1 -0
  93. package/lib/src/core-components/src/components/Skeleton/elements.js +238 -0
  94. package/lib/src/core-components/src/components/Skeleton/index.d.ts +3 -0
  95. package/lib/src/core-components/src/components/Skeleton/index.d.ts.map +1 -0
  96. package/lib/src/core-components/src/components/Skeleton/index.js +2 -0
  97. package/lib/src/core-components/src/components/Skeleton/types.d.ts +80 -0
  98. package/lib/src/core-components/src/components/Skeleton/types.d.ts.map +1 -0
  99. package/lib/src/core-components/src/components/Skeleton/types.js +4 -0
  100. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.d.ts +4 -0
  101. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.d.ts.map +1 -0
  102. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.js +128 -0
  103. package/lib/src/core-components/src/components/SpeedDial/elements.d.ts +57 -0
  104. package/lib/src/core-components/src/components/SpeedDial/elements.d.ts.map +1 -0
  105. package/lib/src/core-components/src/components/SpeedDial/elements.js +299 -0
  106. package/lib/src/core-components/src/components/SpeedDial/index.d.ts +3 -0
  107. package/lib/src/core-components/src/components/SpeedDial/index.d.ts.map +1 -0
  108. package/lib/src/core-components/src/components/SpeedDial/index.js +2 -0
  109. package/lib/src/core-components/src/components/SpeedDial/types.d.ts +149 -0
  110. package/lib/src/core-components/src/components/SpeedDial/types.d.ts.map +1 -0
  111. package/lib/src/core-components/src/components/SpeedDial/types.js +3 -0
  112. package/lib/src/core-components/src/components/Switch/Switch.d.ts +4 -0
  113. package/lib/src/core-components/src/components/Switch/Switch.d.ts.map +1 -0
  114. package/lib/src/core-components/src/components/Switch/Switch.js +26 -0
  115. package/lib/src/core-components/src/components/Switch/elements.d.ts +33 -0
  116. package/lib/src/core-components/src/components/Switch/elements.d.ts.map +1 -0
  117. package/lib/src/core-components/src/components/Switch/elements.js +167 -0
  118. package/lib/src/core-components/src/components/Switch/index.d.ts +3 -0
  119. package/lib/src/core-components/src/components/Switch/index.d.ts.map +1 -0
  120. package/lib/src/core-components/src/components/Switch/index.js +2 -0
  121. package/lib/src/core-components/src/components/Switch/types.d.ts +32 -0
  122. package/lib/src/core-components/src/components/Switch/types.d.ts.map +1 -0
  123. package/lib/src/core-components/src/components/Switch/types.js +3 -0
  124. package/lib/src/core-components/src/components/Table/Table.d.ts +7 -0
  125. package/lib/src/core-components/src/components/Table/Table.d.ts.map +1 -0
  126. package/lib/src/core-components/src/components/Table/Table.js +695 -0
  127. package/lib/src/core-components/src/components/Table/elements.d.ts +89 -0
  128. package/lib/src/core-components/src/components/Table/elements.d.ts.map +1 -0
  129. package/lib/src/core-components/src/components/Table/elements.js +611 -0
  130. package/lib/src/core-components/src/components/Table/filters.d.ts +23 -0
  131. package/lib/src/core-components/src/components/Table/filters.d.ts.map +1 -0
  132. package/lib/src/core-components/src/components/Table/filters.js +181 -0
  133. package/lib/src/core-components/src/components/Table/hooks.d.ts +107 -0
  134. package/lib/src/core-components/src/components/Table/hooks.d.ts.map +1 -0
  135. package/lib/src/core-components/src/components/Table/hooks.js +451 -0
  136. package/lib/src/core-components/src/components/Table/index.d.ts +5 -0
  137. package/lib/src/core-components/src/components/Table/index.d.ts.map +1 -0
  138. package/lib/src/core-components/src/components/Table/index.js +4 -0
  139. package/lib/src/core-components/src/components/Table/types.d.ts +635 -0
  140. package/lib/src/core-components/src/components/Table/types.d.ts.map +1 -0
  141. package/lib/src/core-components/src/components/Table/types.js +1 -0
  142. package/lib/src/core-components/src/components/Toast/Toast.d.ts +5 -0
  143. package/lib/src/core-components/src/components/Toast/Toast.d.ts.map +1 -0
  144. package/lib/src/core-components/src/components/Toast/Toast.js +50 -0
  145. package/lib/src/core-components/src/components/Toast/elements.d.ts +28 -0
  146. package/lib/src/core-components/src/components/Toast/elements.d.ts.map +1 -0
  147. package/lib/src/core-components/src/components/Toast/elements.js +272 -0
  148. package/lib/src/core-components/src/components/Toast/index.d.ts +3 -0
  149. package/lib/src/core-components/src/components/Toast/index.d.ts.map +1 -0
  150. package/lib/src/core-components/src/components/Toast/index.js +2 -0
  151. package/lib/src/core-components/src/components/Toast/types.d.ts +52 -0
  152. package/lib/src/core-components/src/components/Toast/types.d.ts.map +1 -0
  153. package/lib/src/core-components/src/components/Toast/types.js +9 -0
  154. package/lib/src/core-components/src/components/Tooltip/Tooltip.d.ts +7 -0
  155. package/lib/src/core-components/src/components/Tooltip/Tooltip.d.ts.map +1 -0
  156. package/lib/src/core-components/src/components/Tooltip/Tooltip.js +200 -0
  157. package/lib/src/core-components/src/components/Tooltip/elements.d.ts +19 -0
  158. package/lib/src/core-components/src/components/Tooltip/elements.d.ts.map +1 -0
  159. package/lib/src/core-components/src/components/Tooltip/elements.js +195 -0
  160. package/lib/src/core-components/src/components/Tooltip/index.d.ts +3 -0
  161. package/lib/src/core-components/src/components/Tooltip/index.d.ts.map +1 -0
  162. package/lib/src/core-components/src/components/Tooltip/index.js +2 -0
  163. package/lib/src/core-components/src/components/Tooltip/types.d.ts +81 -17
  164. package/lib/src/core-components/src/components/Tooltip/types.d.ts.map +1 -1
  165. package/lib/src/core-components/src/components/Tooltip/types.js +17 -1
  166. package/lib/src/core-components/src/components/Tooltip/utils.d.ts +26 -0
  167. package/lib/src/core-components/src/components/Tooltip/utils.d.ts.map +1 -0
  168. package/lib/src/core-components/src/components/Tooltip/utils.js +140 -0
  169. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.d.ts +5 -0
  170. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.d.ts.map +1 -0
  171. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.js +303 -0
  172. package/lib/src/core-components/src/components/TreeSelect/elements.d.ts +74 -0
  173. package/lib/src/core-components/src/components/TreeSelect/elements.d.ts.map +1 -0
  174. package/lib/src/core-components/src/components/TreeSelect/elements.js +494 -0
  175. package/lib/src/core-components/src/components/TreeSelect/hooks.d.ts +57 -0
  176. package/lib/src/core-components/src/components/TreeSelect/hooks.d.ts.map +1 -0
  177. package/lib/src/core-components/src/components/TreeSelect/hooks.js +252 -0
  178. package/lib/src/core-components/src/components/TreeSelect/index.d.ts +4 -0
  179. package/lib/src/core-components/src/components/TreeSelect/index.d.ts.map +1 -0
  180. package/lib/src/core-components/src/components/TreeSelect/index.js +3 -0
  181. package/lib/src/core-components/src/components/TreeSelect/types.d.ts +205 -0
  182. package/lib/src/core-components/src/components/TreeSelect/types.d.ts.map +1 -0
  183. package/lib/src/core-components/src/components/TreeSelect/types.js +1 -0
  184. package/lib/src/core-components/src/components/index.d.ts +13 -1
  185. package/lib/src/core-components/src/components/index.d.ts.map +1 -1
  186. package/lib/src/core-components/src/components/index.js +14 -1
  187. package/lib/src/core-components/src/core-components/CoreButton/CoreButton.d.ts +2 -2
  188. package/lib/src/core-components/src/tc.global.css +14 -3
  189. package/lib/src/core-components/src/tc.module.css +2 -2
  190. package/package.json +1 -1
  191. package/lib/src/core-components/src/components/Tooltip/tooltip.component.d.ts +0 -29
  192. package/lib/src/core-components/src/components/Tooltip/tooltip.component.d.ts.map +0 -1
  193. package/lib/src/core-components/src/components/Tooltip/tooltip.component.js +0 -10
@@ -0,0 +1,451 @@
1
+ import { useState, useCallback, useMemo, useEffect } from 'react';
2
+ /**
3
+ * Debounce function for table
4
+ */
5
+ export function useTableDebounce(value, delay) {
6
+ const [debouncedValue, setDebouncedValue] = useState(value);
7
+ useEffect(() => {
8
+ const handler = setTimeout(() => {
9
+ setDebouncedValue(value);
10
+ }, delay);
11
+ return () => clearTimeout(handler);
12
+ }, [value, delay]);
13
+ return debouncedValue;
14
+ }
15
+ /**
16
+ * Hook for managing sort state
17
+ */
18
+ export function useSortState(defaultSort, controlledSort, multiSort = false) {
19
+ const [internalSort, setInternalSort] = useState(defaultSort || { field: '', order: null });
20
+ const sort = controlledSort ?? internalSort;
21
+ const handleSort = useCallback((field, currentOrder) => {
22
+ let nextOrder;
23
+ if (sort.field !== field) {
24
+ nextOrder = 'asc';
25
+ }
26
+ else if (currentOrder === null) {
27
+ nextOrder = 'asc';
28
+ }
29
+ else if (currentOrder === 'asc') {
30
+ nextOrder = 'desc';
31
+ }
32
+ else {
33
+ nextOrder = null;
34
+ }
35
+ const newSort = { field, order: nextOrder };
36
+ setInternalSort(newSort);
37
+ return newSort;
38
+ }, [sort.field]);
39
+ return { sort, handleSort, setSort: setInternalSort };
40
+ }
41
+ /**
42
+ * Hook for managing filter state
43
+ */
44
+ export function useFilterState(defaultFilters, controlledFilters) {
45
+ const [internalFilters, setInternalFilters] = useState(defaultFilters || {});
46
+ const filters = controlledFilters ?? internalFilters;
47
+ const setFilter = useCallback((field, value) => {
48
+ setInternalFilters((prev) => {
49
+ if (value === undefined || value === null || value === '') {
50
+ const { [field]: _, ...rest } = prev;
51
+ return rest;
52
+ }
53
+ return { ...prev, [field]: value };
54
+ });
55
+ }, []);
56
+ const clearFilters = useCallback(() => {
57
+ setInternalFilters({});
58
+ }, []);
59
+ return { filters, setFilter, clearFilters, setFilters: setInternalFilters };
60
+ }
61
+ /**
62
+ * Hook for managing pagination state
63
+ */
64
+ export function usePaginationState(defaultPage = 0, defaultPageSize = 10, totalSize = 0) {
65
+ const [page, setPage] = useState(defaultPage);
66
+ const [pageSize, setPageSize] = useState(defaultPageSize);
67
+ const totalPages = Math.ceil(totalSize / pageSize) || 1;
68
+ const goToPage = useCallback((newPage) => {
69
+ const validPage = Math.max(0, Math.min(newPage, totalPages - 1));
70
+ setPage(validPage);
71
+ }, [totalPages]);
72
+ const goToNextPage = useCallback(() => {
73
+ goToPage(page + 1);
74
+ }, [page, goToPage]);
75
+ const goToPrevPage = useCallback(() => {
76
+ goToPage(page - 1);
77
+ }, [page, goToPage]);
78
+ const goToFirstPage = useCallback(() => {
79
+ goToPage(0);
80
+ }, [goToPage]);
81
+ const goToLastPage = useCallback(() => {
82
+ goToPage(totalPages - 1);
83
+ }, [totalPages, goToPage]);
84
+ const changePageSize = useCallback((newSize) => {
85
+ setPageSize(newSize);
86
+ setPage(0); // Reset to first page
87
+ }, []);
88
+ return {
89
+ page,
90
+ pageSize,
91
+ totalPages,
92
+ goToPage,
93
+ goToNextPage,
94
+ goToPrevPage,
95
+ goToFirstPage,
96
+ goToLastPage,
97
+ changePageSize,
98
+ setPage,
99
+ setPageSize,
100
+ };
101
+ }
102
+ /**
103
+ * Hook for managing row selection
104
+ */
105
+ export function useRowSelection(data, keyField = '_id', mode = 'none', controlledSelectedKeys, getCheckboxProps) {
106
+ const [internalSelected, setInternalSelected] = useState(new Set());
107
+ const selectedKeys = controlledSelectedKeys
108
+ ? new Set(controlledSelectedKeys)
109
+ : internalSelected;
110
+ const isSelected = useCallback((key) => selectedKeys.has(key), [selectedKeys]);
111
+ const toggleRow = useCallback((row) => {
112
+ const key = row[keyField];
113
+ const props = getCheckboxProps?.(row);
114
+ if (props?.disabled)
115
+ return;
116
+ if (mode === 'single') {
117
+ setInternalSelected(new Set([key]));
118
+ return { selectedKeys: [key], selectedRows: [row] };
119
+ }
120
+ setInternalSelected((prev) => {
121
+ const next = new Set(prev);
122
+ if (next.has(key)) {
123
+ next.delete(key);
124
+ }
125
+ else {
126
+ next.add(key);
127
+ }
128
+ return next;
129
+ });
130
+ const newSelected = selectedKeys.has(key)
131
+ ? Array.from(selectedKeys).filter((k) => k !== key)
132
+ : [...Array.from(selectedKeys), key];
133
+ return {
134
+ selectedKeys: newSelected,
135
+ selectedRows: data.filter((r) => newSelected.includes(r[keyField])),
136
+ };
137
+ }, [data, keyField, mode, selectedKeys, getCheckboxProps]);
138
+ const toggleAll = useCallback((selectAll) => {
139
+ if (selectAll) {
140
+ const selectableKeys = data
141
+ .filter((row) => {
142
+ const props = getCheckboxProps?.(row);
143
+ return !props?.disabled;
144
+ })
145
+ .map((row) => row[keyField]);
146
+ setInternalSelected(new Set(selectableKeys));
147
+ return {
148
+ selectedKeys: selectableKeys,
149
+ selectedRows: data.filter((r) => selectableKeys.includes(r[keyField])),
150
+ };
151
+ }
152
+ else {
153
+ setInternalSelected(new Set());
154
+ return { selectedKeys: [], selectedRows: [] };
155
+ }
156
+ }, [data, keyField, getCheckboxProps]);
157
+ const isAllSelected = useMemo(() => {
158
+ if (data.length === 0)
159
+ return false;
160
+ const selectableRows = data.filter((row) => {
161
+ const props = getCheckboxProps?.(row);
162
+ return !props?.disabled;
163
+ });
164
+ return selectableRows.every((row) => selectedKeys.has(row[keyField]));
165
+ }, [data, selectedKeys, keyField, getCheckboxProps]);
166
+ const isIndeterminate = useMemo(() => {
167
+ if (data.length === 0)
168
+ return false;
169
+ const selectableRows = data.filter((row) => {
170
+ const props = getCheckboxProps?.(row);
171
+ return !props?.disabled;
172
+ });
173
+ const selectedCount = selectableRows.filter((row) => selectedKeys.has(row[keyField])).length;
174
+ return selectedCount > 0 && selectedCount < selectableRows.length;
175
+ }, [data, selectedKeys, keyField, getCheckboxProps]);
176
+ const clearSelection = useCallback(() => {
177
+ setInternalSelected(new Set());
178
+ }, []);
179
+ return {
180
+ selectedKeys,
181
+ isSelected,
182
+ toggleRow,
183
+ toggleAll,
184
+ isAllSelected,
185
+ isIndeterminate,
186
+ clearSelection,
187
+ setSelected: setInternalSelected,
188
+ };
189
+ }
190
+ /**
191
+ * Hook for managing row expansion
192
+ */
193
+ export function useRowExpansion(keyField = '_id', defaultExpandedKeys, controlledExpandedKeys, accordion = false) {
194
+ const [internalExpanded, setInternalExpanded] = useState(new Set(defaultExpandedKeys || []));
195
+ const expandedKeys = controlledExpandedKeys
196
+ ? new Set(controlledExpandedKeys)
197
+ : internalExpanded;
198
+ const isExpanded = useCallback((key) => expandedKeys.has(key), [expandedKeys]);
199
+ const toggleExpand = useCallback((row) => {
200
+ const key = row[keyField];
201
+ setInternalExpanded((prev) => {
202
+ const next = accordion ? new Set() : new Set(prev);
203
+ if (prev.has(key)) {
204
+ next.delete(key);
205
+ }
206
+ else {
207
+ next.add(key);
208
+ }
209
+ return next;
210
+ });
211
+ const newExpanded = expandedKeys.has(key)
212
+ ? Array.from(expandedKeys).filter((k) => k !== key)
213
+ : accordion
214
+ ? [key]
215
+ : [...Array.from(expandedKeys), key];
216
+ return { expandedKeys: newExpanded, expanded: !expandedKeys.has(key), row };
217
+ }, [keyField, expandedKeys, accordion]);
218
+ return {
219
+ expandedKeys,
220
+ isExpanded,
221
+ toggleExpand,
222
+ setExpanded: setInternalExpanded,
223
+ };
224
+ }
225
+ /**
226
+ * Hook for managing column visibility
227
+ */
228
+ export function useColumnVisibility(columns, storageKey) {
229
+ const [hiddenColumns, setHiddenColumns] = useState(() => {
230
+ // Load from storage if available
231
+ if (storageKey && typeof window !== 'undefined') {
232
+ const stored = localStorage.getItem(`table_columns_${storageKey}`);
233
+ if (stored) {
234
+ try {
235
+ return new Set(JSON.parse(stored));
236
+ }
237
+ catch (e) {
238
+ // Ignore
239
+ }
240
+ }
241
+ }
242
+ return new Set(columns.filter((c) => c.hidden).map((c) => c.dataField));
243
+ });
244
+ const visibleColumns = useMemo(() => columns.filter((c) => !hiddenColumns.has(c.dataField)), [columns, hiddenColumns]);
245
+ const toggleColumn = useCallback((dataField) => {
246
+ setHiddenColumns((prev) => {
247
+ const next = new Set(prev);
248
+ if (next.has(dataField)) {
249
+ next.delete(dataField);
250
+ }
251
+ else {
252
+ next.add(dataField);
253
+ }
254
+ // Save to storage
255
+ if (storageKey && typeof window !== 'undefined') {
256
+ localStorage.setItem(`table_columns_${storageKey}`, JSON.stringify(Array.from(next)));
257
+ }
258
+ return next;
259
+ });
260
+ }, [storageKey]);
261
+ const showAllColumns = useCallback(() => {
262
+ setHiddenColumns(new Set());
263
+ if (storageKey && typeof window !== 'undefined') {
264
+ localStorage.removeItem(`table_columns_${storageKey}`);
265
+ }
266
+ }, [storageKey]);
267
+ return {
268
+ hiddenColumns,
269
+ visibleColumns,
270
+ toggleColumn,
271
+ showAllColumns,
272
+ isColumnHidden: (field) => hiddenColumns.has(field),
273
+ };
274
+ }
275
+ /**
276
+ * Sort data locally
277
+ */
278
+ export function sortData(data, sort, columns) {
279
+ if (!sort.field || !sort.order)
280
+ return data;
281
+ const column = columns.find((c) => c.dataField === sort.field);
282
+ if (!column)
283
+ return data;
284
+ const sorted = [...data].sort((a, b) => {
285
+ const aVal = getNestedValue(a, sort.field);
286
+ const bVal = getNestedValue(b, sort.field);
287
+ if (column.sortFunc) {
288
+ return column.sortFunc(aVal, bVal, sort.order, a, b);
289
+ }
290
+ // Default sorting
291
+ if (aVal === bVal)
292
+ return 0;
293
+ if (aVal === null || aVal === undefined)
294
+ return 1;
295
+ if (bVal === null || bVal === undefined)
296
+ return -1;
297
+ const comparison = typeof aVal === 'string'
298
+ ? aVal.localeCompare(bVal)
299
+ : aVal < bVal
300
+ ? -1
301
+ : 1;
302
+ return sort.order === 'asc' ? comparison : -comparison;
303
+ });
304
+ return sorted;
305
+ }
306
+ /**
307
+ * Filter data locally
308
+ */
309
+ export function filterData(data, filters, columns, searchValue) {
310
+ let filtered = data;
311
+ // Apply column filters
312
+ for (const [field, value] of Object.entries(filters)) {
313
+ if (value === undefined || value === null || value === '')
314
+ continue;
315
+ const column = columns.find((c) => c.dataField === field);
316
+ if (!column)
317
+ continue;
318
+ filtered = filtered.filter((row) => {
319
+ const cellValue = getNestedValue(row, field);
320
+ if (typeof value === 'object' && value !== null) {
321
+ // Complex filter (number range, date range, etc.)
322
+ if ('number' in value && 'comparator' in value) {
323
+ return compareNumber(cellValue, value.number, value.comparator);
324
+ }
325
+ if ('startDate' in value) {
326
+ return compareDateRange(cellValue, value);
327
+ }
328
+ return true;
329
+ }
330
+ // Simple text filter
331
+ if (cellValue === null || cellValue === undefined)
332
+ return false;
333
+ return String(cellValue)
334
+ .toLowerCase()
335
+ .includes(String(value).toLowerCase());
336
+ });
337
+ }
338
+ // Apply global search
339
+ if (searchValue) {
340
+ const searchLower = searchValue.toLowerCase();
341
+ filtered = filtered.filter((row) => {
342
+ return columns.some((column) => {
343
+ const value = getNestedValue(row, column.dataField);
344
+ if (value === null || value === undefined)
345
+ return false;
346
+ return String(value).toLowerCase().includes(searchLower);
347
+ });
348
+ });
349
+ }
350
+ return filtered;
351
+ }
352
+ /**
353
+ * Paginate data locally
354
+ */
355
+ export function paginateData(data, page, pageSize) {
356
+ const start = page * pageSize;
357
+ return data.slice(start, start + pageSize);
358
+ }
359
+ /**
360
+ * Get nested value from object
361
+ */
362
+ export function getNestedValue(obj, path) {
363
+ return path.split('.').reduce((acc, part) => acc?.[part], obj);
364
+ }
365
+ /**
366
+ * Compare numbers with comparator
367
+ */
368
+ function compareNumber(value, filterValue, comparator) {
369
+ const num = parseFloat(value);
370
+ const filterNum = parseFloat(filterValue);
371
+ if (isNaN(num) || isNaN(filterNum))
372
+ return false;
373
+ switch (comparator) {
374
+ case '=':
375
+ return num === filterNum;
376
+ case '!=':
377
+ return num !== filterNum;
378
+ case '>':
379
+ return num > filterNum;
380
+ case '>=':
381
+ return num >= filterNum;
382
+ case '<':
383
+ return num < filterNum;
384
+ case '<=':
385
+ return num <= filterNum;
386
+ default:
387
+ return true;
388
+ }
389
+ }
390
+ /**
391
+ * Compare date range
392
+ */
393
+ function compareDateRange(value, filter) {
394
+ if (!value)
395
+ return false;
396
+ const date = new Date(value);
397
+ if (isNaN(date.getTime()))
398
+ return false;
399
+ if (filter.diffFlag && filter.startDate && filter.endDate) {
400
+ const start = new Date(filter.startDate);
401
+ const end = new Date(filter.endDate);
402
+ return date >= start && date <= end;
403
+ }
404
+ if (filter.startDate) {
405
+ const start = new Date(filter.startDate);
406
+ switch (filter.comparator) {
407
+ case '=':
408
+ return date.toDateString() === start.toDateString();
409
+ case '>=':
410
+ return date >= start;
411
+ case '<':
412
+ return date < start;
413
+ default:
414
+ return date >= start;
415
+ }
416
+ }
417
+ return true;
418
+ }
419
+ /**
420
+ * Export data to CSV
421
+ */
422
+ export function exportToCSV(data, columns, fileName) {
423
+ const exportColumns = columns.filter((c) => c.csvExport !== false);
424
+ // Header row
425
+ const header = exportColumns.map((c) => `"${c.text}"`).join(',');
426
+ // Data rows
427
+ const rows = data.map((row) => {
428
+ return exportColumns
429
+ .map((col) => {
430
+ const value = col.csvFormatter
431
+ ? col.csvFormatter(getNestedValue(row, col.dataField), row)
432
+ : getNestedValue(row, col.dataField);
433
+ if (value === null || value === undefined)
434
+ return '""';
435
+ if (typeof value === 'string')
436
+ return `"${value.replace(/"/g, '""')}"`;
437
+ if (typeof value === 'object')
438
+ return `"${JSON.stringify(value).replace(/"/g, '""')}"`;
439
+ return `"${value}"`;
440
+ })
441
+ .join(',');
442
+ });
443
+ const csv = [header, ...rows].join('\n');
444
+ const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
445
+ const url = URL.createObjectURL(blob);
446
+ const link = document.createElement('a');
447
+ link.href = url;
448
+ link.download = `${fileName}_${new Date().toISOString().slice(0, 10)}.csv`;
449
+ link.click();
450
+ URL.revokeObjectURL(url);
451
+ }
@@ -0,0 +1,5 @@
1
+ export { Table, default } from './Table';
2
+ export * from './types';
3
+ export { useSortState, useFilterState, usePaginationState, useRowSelection, useRowExpansion, useColumnVisibility, useTableDebounce, sortData, filterData, paginateData, getNestedValue, exportToCSV, } from './hooks';
4
+ export { TextFilter, NumberFilter, DateFilter, SelectFilter, getFilterComponent, } from './filters';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core-components/src/components/Table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,MAAM,SAAS,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { Table, default } from './Table';
2
+ export * from './types';
3
+ export { useSortState, useFilterState, usePaginationState, useRowSelection, useRowExpansion, useColumnVisibility, useTableDebounce, sortData, filterData, paginateData, getNestedValue, exportToCSV, } from './hooks';
4
+ export { TextFilter, NumberFilter, DateFilter, SelectFilter, getFilterComponent, } from './filters';