@zengrid/core 1.0.1

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 (252) hide show
  1. package/README.md +55 -0
  2. package/dist/README.md +55 -0
  3. package/dist/index.cjs.default.js +1 -0
  4. package/dist/index.cjs.js +9882 -0
  5. package/dist/index.cjs.mjs +2 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.esm.js +9847 -0
  8. package/dist/package.json +49 -0
  9. package/dist/src/a11y/aria-manager.d.ts +171 -0
  10. package/dist/src/a11y/aria-manager.d.ts.map +1 -0
  11. package/dist/src/a11y/focus-manager.d.ts +124 -0
  12. package/dist/src/a11y/focus-manager.d.ts.map +1 -0
  13. package/dist/src/a11y/index.d.ts +8 -0
  14. package/dist/src/a11y/index.d.ts.map +1 -0
  15. package/dist/src/data/data-accessor/array-accessor.d.ts +38 -0
  16. package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -0
  17. package/dist/src/data/data-accessor/column-store-accessor.d.ts +41 -0
  18. package/dist/src/data/data-accessor/column-store-accessor.d.ts.map +1 -0
  19. package/dist/src/data/data-accessor/data-accessor.interface.d.ts +41 -0
  20. package/dist/src/data/data-accessor/data-accessor.interface.d.ts.map +1 -0
  21. package/dist/src/data/data-accessor/index.d.ts +9 -0
  22. package/dist/src/data/data-accessor/index.d.ts.map +1 -0
  23. package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts +39 -0
  24. package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts.map +1 -0
  25. package/dist/src/data/data-manager.d.ts +161 -0
  26. package/dist/src/data/data-manager.d.ts.map +1 -0
  27. package/dist/src/data/data-source.interface.d.ts +82 -0
  28. package/dist/src/data/data-source.interface.d.ts.map +1 -0
  29. package/dist/src/data/grid-data-model.d.ts +102 -0
  30. package/dist/src/data/grid-data-model.d.ts.map +1 -0
  31. package/dist/src/data/index-map/index-map.d.ts +30 -0
  32. package/dist/src/data/index-map/index-map.d.ts.map +1 -0
  33. package/dist/src/data/index-map/index-map.interface.d.ts +49 -0
  34. package/dist/src/data/index-map/index-map.interface.d.ts.map +1 -0
  35. package/dist/src/data/index-map/index.d.ts +7 -0
  36. package/dist/src/data/index-map/index.d.ts.map +1 -0
  37. package/dist/src/data/index.d.ts +9 -0
  38. package/dist/src/data/index.d.ts.map +1 -0
  39. package/dist/src/editing/cell-editor.interface.d.ts +87 -0
  40. package/dist/src/editing/cell-editor.interface.d.ts.map +1 -0
  41. package/dist/src/editing/date-editor.d.ts +67 -0
  42. package/dist/src/editing/date-editor.d.ts.map +1 -0
  43. package/dist/src/editing/editor-manager.d.ts +141 -0
  44. package/dist/src/editing/editor-manager.d.ts.map +1 -0
  45. package/dist/src/editing/index.d.ts +15 -0
  46. package/dist/src/editing/index.d.ts.map +1 -0
  47. package/dist/src/editing/number-editor.d.ts +68 -0
  48. package/dist/src/editing/number-editor.d.ts.map +1 -0
  49. package/dist/src/editing/select-editor.d.ts +53 -0
  50. package/dist/src/editing/select-editor.d.ts.map +1 -0
  51. package/dist/src/editing/text-editor.d.ts +69 -0
  52. package/dist/src/editing/text-editor.d.ts.map +1 -0
  53. package/dist/src/events/event-emitter.d.ts +90 -0
  54. package/dist/src/events/event-emitter.d.ts.map +1 -0
  55. package/dist/src/events/grid-events.d.ts +277 -0
  56. package/dist/src/events/grid-events.d.ts.map +1 -0
  57. package/dist/src/events/index.d.ts +6 -0
  58. package/dist/src/events/index.d.ts.map +1 -0
  59. package/dist/src/features/autofill/autofill-manager.d.ts +103 -0
  60. package/dist/src/features/autofill/autofill-manager.d.ts.map +1 -0
  61. package/dist/src/features/autofill/index.d.ts +6 -0
  62. package/dist/src/features/autofill/index.d.ts.map +1 -0
  63. package/dist/src/features/column-resize/auto-fit-calculator.d.ts +52 -0
  64. package/dist/src/features/column-resize/auto-fit-calculator.d.ts.map +1 -0
  65. package/dist/src/features/column-resize/column-resize-manager.d.ts +114 -0
  66. package/dist/src/features/column-resize/column-resize-manager.d.ts.map +1 -0
  67. package/dist/src/features/column-resize/column-resize-manager.interface.d.ts +167 -0
  68. package/dist/src/features/column-resize/column-resize-manager.interface.d.ts.map +1 -0
  69. package/dist/src/features/column-resize/column-resize.styles.css +30 -0
  70. package/dist/src/features/column-resize/index.d.ts +15 -0
  71. package/dist/src/features/column-resize/index.d.ts.map +1 -0
  72. package/dist/src/features/column-resize/resize-constraint-manager.d.ts +52 -0
  73. package/dist/src/features/column-resize/resize-constraint-manager.d.ts.map +1 -0
  74. package/dist/src/features/column-resize/resize-handle-renderer.d.ts +41 -0
  75. package/dist/src/features/column-resize/resize-handle-renderer.d.ts.map +1 -0
  76. package/dist/src/features/column-resize/resize-preview.d.ts +32 -0
  77. package/dist/src/features/column-resize/resize-preview.d.ts.map +1 -0
  78. package/dist/src/features/column-resize/resize-state-manager.d.ts +75 -0
  79. package/dist/src/features/column-resize/resize-state-manager.d.ts.map +1 -0
  80. package/dist/src/features/column-resize/resize-strategies.d.ts +26 -0
  81. package/dist/src/features/column-resize/resize-strategies.d.ts.map +1 -0
  82. package/dist/src/features/column-resize/resize-test-helper.d.ts +71 -0
  83. package/dist/src/features/column-resize/resize-test-helper.d.ts.map +1 -0
  84. package/dist/src/features/column-resize/resize-zone-detector.d.ts +32 -0
  85. package/dist/src/features/column-resize/resize-zone-detector.d.ts.map +1 -0
  86. package/dist/src/features/copy-paste/clipboard-manager.d.ts +116 -0
  87. package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -0
  88. package/dist/src/features/copy-paste/index.d.ts +6 -0
  89. package/dist/src/features/copy-paste/index.d.ts.map +1 -0
  90. package/dist/src/features/filtering/adapters/adapter.interface.d.ts +100 -0
  91. package/dist/src/features/filtering/adapters/adapter.interface.d.ts.map +1 -0
  92. package/dist/src/features/filtering/adapters/graphql-adapter.d.ts +124 -0
  93. package/dist/src/features/filtering/adapters/graphql-adapter.d.ts.map +1 -0
  94. package/dist/src/features/filtering/adapters/index.d.ts +11 -0
  95. package/dist/src/features/filtering/adapters/index.d.ts.map +1 -0
  96. package/dist/src/features/filtering/adapters/rest-adapter.d.ts +108 -0
  97. package/dist/src/features/filtering/adapters/rest-adapter.d.ts.map +1 -0
  98. package/dist/src/features/filtering/adapters/sql-adapter.d.ts +123 -0
  99. package/dist/src/features/filtering/adapters/sql-adapter.d.ts.map +1 -0
  100. package/dist/src/features/filtering/adapters/types.d.ts +201 -0
  101. package/dist/src/features/filtering/adapters/types.d.ts.map +1 -0
  102. package/dist/src/features/filtering/column-filter.d.ts +117 -0
  103. package/dist/src/features/filtering/column-filter.d.ts.map +1 -0
  104. package/dist/src/features/filtering/filter-autocomplete.d.ts +78 -0
  105. package/dist/src/features/filtering/filter-autocomplete.d.ts.map +1 -0
  106. package/dist/src/features/filtering/filter-cache.d.ts +113 -0
  107. package/dist/src/features/filtering/filter-cache.d.ts.map +1 -0
  108. package/dist/src/features/filtering/filter-compiler.d.ts +66 -0
  109. package/dist/src/features/filtering/filter-compiler.d.ts.map +1 -0
  110. package/dist/src/features/filtering/filter-export-manager.d.ts +131 -0
  111. package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -0
  112. package/dist/src/features/filtering/filter-index-manager.d.ts +126 -0
  113. package/dist/src/features/filtering/filter-index-manager.d.ts.map +1 -0
  114. package/dist/src/features/filtering/filter-manager.d.ts +408 -0
  115. package/dist/src/features/filtering/filter-manager.d.ts.map +1 -0
  116. package/dist/src/features/filtering/filter-optimizer.d.ts +101 -0
  117. package/dist/src/features/filtering/filter-optimizer.d.ts.map +1 -0
  118. package/dist/src/features/filtering/filter-query-parser.d.ts +69 -0
  119. package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -0
  120. package/dist/src/features/filtering/index.d.ts +20 -0
  121. package/dist/src/features/filtering/index.d.ts.map +1 -0
  122. package/dist/src/features/filtering/range-filter-optimizer.d.ts +138 -0
  123. package/dist/src/features/filtering/range-filter-optimizer.d.ts.map +1 -0
  124. package/dist/src/features/filtering/substring-filter.d.ts +90 -0
  125. package/dist/src/features/filtering/substring-filter.d.ts.map +1 -0
  126. package/dist/src/features/filtering/types.d.ts +204 -0
  127. package/dist/src/features/filtering/types.d.ts.map +1 -0
  128. package/dist/src/features/formulas/formula-calculator.d.ts +151 -0
  129. package/dist/src/features/formulas/formula-calculator.d.ts.map +1 -0
  130. package/dist/src/features/formulas/index.d.ts +6 -0
  131. package/dist/src/features/formulas/index.d.ts.map +1 -0
  132. package/dist/src/features/hit-testing/index.d.ts +7 -0
  133. package/dist/src/features/hit-testing/index.d.ts.map +1 -0
  134. package/dist/src/features/hit-testing/spatial-hit-tester.d.ts +137 -0
  135. package/dist/src/features/hit-testing/spatial-hit-tester.d.ts.map +1 -0
  136. package/dist/src/features/loading/index.d.ts +5 -0
  137. package/dist/src/features/loading/index.d.ts.map +1 -0
  138. package/dist/src/features/loading/loading-indicator.d.ts +79 -0
  139. package/dist/src/features/loading/loading-indicator.d.ts.map +1 -0
  140. package/dist/src/features/loading/loading.styles.css +413 -0
  141. package/dist/src/features/pagination/index.d.ts +5 -0
  142. package/dist/src/features/pagination/index.d.ts.map +1 -0
  143. package/dist/src/features/pagination/pagination.styles.css +288 -0
  144. package/dist/src/features/pagination/paginator.d.ts +89 -0
  145. package/dist/src/features/pagination/paginator.d.ts.map +1 -0
  146. package/dist/src/features/selection/index.d.ts +7 -0
  147. package/dist/src/features/selection/index.d.ts.map +1 -0
  148. package/dist/src/features/selection/selection-manager.d.ts +167 -0
  149. package/dist/src/features/selection/selection-manager.d.ts.map +1 -0
  150. package/dist/src/features/sorting/index.d.ts +13 -0
  151. package/dist/src/features/sorting/index.d.ts.map +1 -0
  152. package/dist/src/features/sorting/row-sorter.interface.d.ts +63 -0
  153. package/dist/src/features/sorting/row-sorter.interface.d.ts.map +1 -0
  154. package/dist/src/features/sorting/single-column-sorter.d.ts +75 -0
  155. package/dist/src/features/sorting/single-column-sorter.d.ts.map +1 -0
  156. package/dist/src/features/sorting/sort-manager.d.ts +132 -0
  157. package/dist/src/features/sorting/sort-manager.d.ts.map +1 -0
  158. package/dist/src/features/undo-redo/index.d.ts +8 -0
  159. package/dist/src/features/undo-redo/index.d.ts.map +1 -0
  160. package/dist/src/features/undo-redo/undo-redo-manager.d.ts +215 -0
  161. package/dist/src/features/undo-redo/undo-redo-manager.d.ts.map +1 -0
  162. package/dist/src/grid.d.ts +412 -0
  163. package/dist/src/grid.d.ts.map +1 -0
  164. package/dist/src/i18n/index.d.ts +8 -0
  165. package/dist/src/i18n/index.d.ts.map +1 -0
  166. package/dist/src/i18n/locale-manager.d.ts +123 -0
  167. package/dist/src/i18n/locale-manager.d.ts.map +1 -0
  168. package/dist/src/i18n/rtl-support.d.ts +120 -0
  169. package/dist/src/i18n/rtl-support.d.ts.map +1 -0
  170. package/dist/src/index.d.ts +38 -0
  171. package/dist/src/index.d.ts.map +1 -0
  172. package/dist/src/keyboard/index.d.ts +6 -0
  173. package/dist/src/keyboard/index.d.ts.map +1 -0
  174. package/dist/src/keyboard/keyboard-navigator.d.ts +171 -0
  175. package/dist/src/keyboard/keyboard-navigator.d.ts.map +1 -0
  176. package/dist/src/rendering/cache/index.d.ts +3 -0
  177. package/dist/src/rendering/cache/index.d.ts.map +1 -0
  178. package/dist/src/rendering/cache/renderer-cache.d.ts +100 -0
  179. package/dist/src/rendering/cache/renderer-cache.d.ts.map +1 -0
  180. package/dist/src/rendering/cache/renderer-cache.interface.d.ts +89 -0
  181. package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -0
  182. package/dist/src/rendering/cell-pool/cell-pool.d.ts +36 -0
  183. package/dist/src/rendering/cell-pool/cell-pool.d.ts.map +1 -0
  184. package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts +76 -0
  185. package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts.map +1 -0
  186. package/dist/src/rendering/cell-pool/index.d.ts +6 -0
  187. package/dist/src/rendering/cell-pool/index.d.ts.map +1 -0
  188. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +46 -0
  189. package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -0
  190. package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts +86 -0
  191. package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts.map +1 -0
  192. package/dist/src/rendering/cell-positioner/index.d.ts +6 -0
  193. package/dist/src/rendering/cell-positioner/index.d.ts.map +1 -0
  194. package/dist/src/rendering/height-provider/height-provider.interface.d.ts +62 -0
  195. package/dist/src/rendering/height-provider/height-provider.interface.d.ts.map +1 -0
  196. package/dist/src/rendering/height-provider/index.d.ts +7 -0
  197. package/dist/src/rendering/height-provider/index.d.ts.map +1 -0
  198. package/dist/src/rendering/height-provider/uniform-height-provider.d.ts +31 -0
  199. package/dist/src/rendering/height-provider/uniform-height-provider.d.ts.map +1 -0
  200. package/dist/src/rendering/height-provider/variable-height-provider.d.ts +33 -0
  201. package/dist/src/rendering/height-provider/variable-height-provider.d.ts.map +1 -0
  202. package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts +105 -0
  203. package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts.map +1 -0
  204. package/dist/src/rendering/renderers/image-renderer.d.ts +60 -0
  205. package/dist/src/rendering/renderers/image-renderer.d.ts.map +1 -0
  206. package/dist/src/rendering/renderers/index.d.ts +13 -0
  207. package/dist/src/rendering/renderers/index.d.ts.map +1 -0
  208. package/dist/src/rendering/renderers/number-renderer.d.ts +71 -0
  209. package/dist/src/rendering/renderers/number-renderer.d.ts.map +1 -0
  210. package/dist/src/rendering/renderers/renderer-registry.d.ts +55 -0
  211. package/dist/src/rendering/renderers/renderer-registry.d.ts.map +1 -0
  212. package/dist/src/rendering/renderers/renderer.interface.d.ts +79 -0
  213. package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -0
  214. package/dist/src/rendering/renderers/text-renderer.d.ts +20 -0
  215. package/dist/src/rendering/renderers/text-renderer.d.ts.map +1 -0
  216. package/dist/src/rendering/spatial-hit-tester.d.ts +108 -0
  217. package/dist/src/rendering/spatial-hit-tester.d.ts.map +1 -0
  218. package/dist/src/rendering/virtual-scroller/index.d.ts +6 -0
  219. package/dist/src/rendering/virtual-scroller/index.d.ts.map +1 -0
  220. package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts +56 -0
  221. package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -0
  222. package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts +170 -0
  223. package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts.map +1 -0
  224. package/dist/src/rendering/width-provider/index.d.ts +7 -0
  225. package/dist/src/rendering/width-provider/index.d.ts.map +1 -0
  226. package/dist/src/rendering/width-provider/uniform-width-provider.d.ts +31 -0
  227. package/dist/src/rendering/width-provider/uniform-width-provider.d.ts.map +1 -0
  228. package/dist/src/rendering/width-provider/variable-width-provider.d.ts +33 -0
  229. package/dist/src/rendering/width-provider/variable-width-provider.d.ts.map +1 -0
  230. package/dist/src/rendering/width-provider/width-provider.interface.d.ts +62 -0
  231. package/dist/src/rendering/width-provider/width-provider.interface.d.ts.map +1 -0
  232. package/dist/src/selection/hit-tester.d.ts +168 -0
  233. package/dist/src/selection/hit-tester.d.ts.map +1 -0
  234. package/dist/src/selection/hit-tester.interface.d.ts +108 -0
  235. package/dist/src/selection/hit-tester.interface.d.ts.map +1 -0
  236. package/dist/src/selection/index.d.ts +9 -0
  237. package/dist/src/selection/index.d.ts.map +1 -0
  238. package/dist/src/selection/range-utils.d.ts +219 -0
  239. package/dist/src/selection/range-utils.d.ts.map +1 -0
  240. package/dist/src/selection/range-utils.interface.d.ts +51 -0
  241. package/dist/src/selection/range-utils.interface.d.ts.map +1 -0
  242. package/dist/src/styles/grid.css +356 -0
  243. package/dist/src/styles.css +273 -0
  244. package/dist/src/touch/index.d.ts +6 -0
  245. package/dist/src/touch/index.d.ts.map +1 -0
  246. package/dist/src/touch/touch-handler.d.ts +167 -0
  247. package/dist/src/touch/touch-handler.d.ts.map +1 -0
  248. package/dist/src/types/index.d.ts +133 -0
  249. package/dist/src/types/index.d.ts.map +1 -0
  250. package/dist/src/types.d.ts +559 -0
  251. package/dist/src/types.d.ts.map +1 -0
  252. package/package.json +47 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Filter Optimizer using Bloom Filter
3
+ *
4
+ * Provides fast filter membership checks to skip expensive scans.
5
+ */
6
+ /**
7
+ * FilterOptimizer - Quick filter membership tests using Bloom Filter
8
+ *
9
+ * Uses probabilistic Bloom Filter to quickly determine if a value
10
+ * definitely does NOT exist, avoiding expensive column scans.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const optimizer = new FilterOptimizer();
15
+ *
16
+ * // Index column with 1 million values
17
+ * optimizer.indexColumn(0, products);
18
+ *
19
+ * // Quick check before expensive scan
20
+ * if (!optimizer.mightContain(0, 'iPhone')) {
21
+ * return []; // Definitely not in column - skip scan
22
+ * }
23
+ *
24
+ * // Bloom filter says it might exist - do actual scan
25
+ * const results = grid.scan(0, value => value.includes('iPhone'));
26
+ * ```
27
+ */
28
+ export declare class FilterOptimizer {
29
+ private columnFilters;
30
+ private columnStats;
31
+ /**
32
+ * Index column values for quick membership tests
33
+ *
34
+ * @param col - Column index
35
+ * @param values - All values in the column
36
+ * @param falsePositiveRate - Desired false positive rate (default 0.01 = 1%)
37
+ */
38
+ indexColumn(col: number, values: any[], falsePositiveRate?: number): void;
39
+ /**
40
+ * Quick check if value might exist in column
41
+ *
42
+ * - Returns false: value definitely DOES NOT exist
43
+ * - Returns true: value MIGHT exist (needs actual check)
44
+ *
45
+ * @param col - Column index
46
+ * @param value - Value to check
47
+ * @returns true if value might exist, false if definitely doesn't
48
+ */
49
+ mightContain(col: number, value: string): boolean;
50
+ /**
51
+ * Check if column is indexed
52
+ *
53
+ * @param col - Column index
54
+ * @returns true if column has bloom filter
55
+ */
56
+ isIndexed(col: number): boolean;
57
+ /**
58
+ * Get false positive rate for a column
59
+ *
60
+ * @param col - Column index
61
+ * @returns Estimated false positive rate
62
+ */
63
+ getFalsePositiveRate(col: number): number | null;
64
+ /**
65
+ * Get statistics about indexed column
66
+ *
67
+ * @param col - Column index
68
+ */
69
+ getStats(col: number): {
70
+ uniqueValues: number;
71
+ falsePositiveRate: number;
72
+ } | null;
73
+ /**
74
+ * Clear filter for a column
75
+ *
76
+ * @param col - Column index
77
+ */
78
+ clearColumn(col: number): void;
79
+ /**
80
+ * Clear all filters
81
+ */
82
+ clearAll(): void;
83
+ /**
84
+ * Get all indexed columns
85
+ *
86
+ * @returns Array of column indices
87
+ */
88
+ getIndexedColumns(): number[];
89
+ /**
90
+ * Get memory usage estimate (in bytes)
91
+ *
92
+ * Bloom filters are very space-efficient.
93
+ * For 10,000 unique values with 1% false positive rate:
94
+ * - Optimal size: ~1.2 KB
95
+ *
96
+ * @param col - Column index
97
+ * @returns Estimated memory usage in bytes
98
+ */
99
+ getMemoryUsage(col: number): number | null;
100
+ }
101
+ //# sourceMappingURL=filter-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-optimizer.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/filter-optimizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,WAAW,CAA+E;IAElG;;;;;;OAMG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,iBAAiB,GAAE,MAAa,GAAG,IAAI;IAsB/E;;;;;;;;;OASG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAKjD;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKhD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,IAAI;IAIR;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAW3C"}
@@ -0,0 +1,69 @@
1
+ import type { FilterQuery, FilterExpression, FilterModel } from '../../types';
2
+ /**
3
+ * FilterQueryParser - Parses SQL-like filter queries
4
+ *
5
+ * Converts SQL-like syntax to FilterExpression for both backend and frontend use
6
+ *
7
+ * Supported operators:
8
+ * - Comparison: =, !=, <, >, <=, >=
9
+ * - String: LIKE, NOT LIKE
10
+ * - Range: BETWEEN, NOT BETWEEN
11
+ * - List: IN, NOT IN
12
+ * - Null: IS NULL, IS NOT NULL
13
+ * - Logic: AND, OR, NOT, ( )
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const parser = new FilterQueryParser();
18
+ *
19
+ * // Simple query
20
+ * parser.parse({ sql: "age > 18" });
21
+ *
22
+ * // Parameterized query (recommended)
23
+ * parser.parse({
24
+ * sql: "age > :minAge AND status = :status",
25
+ * params: { minAge: 18, status: 'active' }
26
+ * });
27
+ *
28
+ * // Complex query
29
+ * parser.parse({
30
+ * sql: "age BETWEEN :min AND :max AND (name LIKE :search OR email LIKE :search)",
31
+ * params: { min: 18, max: 65, search: '%john%' }
32
+ * });
33
+ * ```
34
+ */
35
+ export declare class FilterQueryParser {
36
+ /**
37
+ * Set column name to index mapping
38
+ * Required for converting SQL field names to column indices
39
+ */
40
+ setColumnMapping(_mapping: Record<string, number>): void;
41
+ /**
42
+ * Parse SQL-like filter query into FilterExpression
43
+ */
44
+ parse(query: FilterQuery): FilterExpression;
45
+ /**
46
+ * Bind named parameters (:paramName) to their values
47
+ * Converts to positional placeholders (?)
48
+ */
49
+ private bindNamedParameters;
50
+ /**
51
+ * Extract positional parameters from SQL
52
+ * Converts literal values to ? placeholders
53
+ */
54
+ private extractPositionalParameters;
55
+ /**
56
+ * Check if a value is part of a SQL keyword
57
+ */
58
+ private isPartOfKeyword;
59
+ /**
60
+ * Convert SQL query to FilterModels (for frontend filtering)
61
+ * This is a simplified conversion - complex queries may not convert perfectly
62
+ */
63
+ parseToModels(query: FilterQuery, columnNames: string[]): FilterModel[];
64
+ /**
65
+ * Convert SQL operator to FilterOperator
66
+ */
67
+ private sqlOperatorToFilterOperator;
68
+ }
69
+ //# sourceMappingURL=filter-query-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-query-parser.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/filter-query-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,iBAAiB;IAI5B;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAKxD;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,gBAAgB;IAoB3C;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAyBnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAYvE;;OAEG;IACH,OAAO,CAAC,2BAA2B;CAepC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Filtering system for ZenGrid
3
+ */
4
+ export { FilterCompiler } from './filter-compiler';
5
+ export type { FilterPredicate } from './filter-compiler';
6
+ export { ColumnFilter } from './column-filter';
7
+ export type { ColumnFilterOptions } from './column-filter';
8
+ export { FilterManager } from './filter-manager';
9
+ export type { FilterManagerOptions } from './filter-manager';
10
+ export { FilterAutocomplete } from './filter-autocomplete';
11
+ export { FilterOptimizer } from './filter-optimizer';
12
+ export { SubstringFilter } from './substring-filter';
13
+ export { FilterCache } from './filter-cache';
14
+ export { FilterIndexManager } from './filter-index-manager';
15
+ export { RangeFilterOptimizer } from './range-filter-optimizer';
16
+ export type { StandardFilterOperator, CustomOperator, FieldFilterCondition, FieldFilterGroup, FieldFilterState, } from './types';
17
+ export { FilterExportManager } from './filter-export-manager';
18
+ export type { FilterExportManagerOptions } from './filter-export-manager';
19
+ export * from './adapters';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAG1E,cAAc,YAAY,CAAC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Range Filter Optimizer using Segment Tree
3
+ *
4
+ * Provides O(log n) range queries for BETWEEN, MIN, MAX operations
5
+ * instead of O(n) linear scans.
6
+ */
7
+ /**
8
+ * Range query result
9
+ */
10
+ interface RangeQueryResult {
11
+ /** Matching row indices */
12
+ rows: number[];
13
+ /** Statistics */
14
+ stats: {
15
+ min: number;
16
+ max: number;
17
+ sum: number;
18
+ avg: number;
19
+ count: number;
20
+ };
21
+ }
22
+ /**
23
+ * RangeFilterOptimizer - Fast range queries with Segment Tree
24
+ *
25
+ * Optimizes BETWEEN, MIN, MAX queries using segment trees.
26
+ * Provides O(log n) queries instead of O(n) scans.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const optimizer = new RangeFilterOptimizer();
31
+ *
32
+ * // Index column with numeric values
33
+ * optimizer.indexColumn(0, values);
34
+ *
35
+ * // Query: price BETWEEN 100 AND 500
36
+ * const result = optimizer.queryRange(0, 100, 500);
37
+ * // O(log n) instead of O(n)
38
+ * ```
39
+ */
40
+ export declare class RangeFilterOptimizer {
41
+ private columnIndexes;
42
+ /**
43
+ * Index a numeric column for range queries
44
+ *
45
+ * @param col - Column index
46
+ * @param values - Array of numeric values (one per row)
47
+ */
48
+ indexColumn(col: number, values: number[]): void;
49
+ /**
50
+ * Query rows within a range (BETWEEN operator)
51
+ *
52
+ * @param col - Column index
53
+ * @param min - Minimum value (inclusive)
54
+ * @param max - Maximum value (inclusive)
55
+ * @returns Query result with matching rows and statistics
56
+ */
57
+ queryRange(col: number, min: number, max: number): RangeQueryResult | null;
58
+ /**
59
+ * Get MIN value in a range of rows
60
+ *
61
+ * @param col - Column index
62
+ * @param startRow - Start row index
63
+ * @param endRow - End row index
64
+ * @returns Minimum value in range
65
+ */
66
+ getMin(col: number, startRow: number, endRow: number): number | null;
67
+ /**
68
+ * Get MAX value in a range of rows
69
+ *
70
+ * @param col - Column index
71
+ * @param startRow - Start row index
72
+ * @param endRow - End row index
73
+ * @returns Maximum value in range
74
+ */
75
+ getMax(col: number, startRow: number, endRow: number): number | null;
76
+ /**
77
+ * Get SUM of values in a range of rows
78
+ *
79
+ * @param col - Column index
80
+ * @param startRow - Start row index
81
+ * @param endRow - End row index
82
+ * @returns Sum of values in range
83
+ */
84
+ getSum(col: number, startRow: number, endRow: number): number | null;
85
+ /**
86
+ * Update a single value in the index
87
+ *
88
+ * @param col - Column index
89
+ * @param row - Row index
90
+ * @param value - New value
91
+ */
92
+ update(col: number, row: number, value: number): void;
93
+ /**
94
+ * Rebuild sorted indices after multiple updates
95
+ *
96
+ * @param col - Column index
97
+ */
98
+ rebuildSortedIndices(col: number): void;
99
+ /**
100
+ * Check if column is indexed
101
+ *
102
+ * @param col - Column index
103
+ * @returns true if column has range index
104
+ */
105
+ isIndexed(col: number): boolean;
106
+ /**
107
+ * Clear index for a column
108
+ *
109
+ * @param col - Column index
110
+ */
111
+ clearColumn(col: number): void;
112
+ /**
113
+ * Clear all indexes
114
+ */
115
+ clearAll(): void;
116
+ /**
117
+ * Get statistics about indexed columns
118
+ */
119
+ getStats(): {
120
+ indexedColumns: number;
121
+ totalValues: number;
122
+ memoryEstimateMB: number;
123
+ };
124
+ /**
125
+ * Binary search for leftmost position where value >= target
126
+ */
127
+ private binarySearchLeft;
128
+ /**
129
+ * Binary search for rightmost position where value <= target
130
+ */
131
+ private binarySearchRight;
132
+ /**
133
+ * Calculate statistics for matching rows
134
+ */
135
+ private calculateRangeStats;
136
+ }
137
+ export {};
138
+ //# sourceMappingURL=range-filter-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-filter-optimizer.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/range-filter-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH;;GAEG;AACH,UAAU,gBAAgB;IACxB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf,iBAAiB;IACjB,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,aAAa,CAA2C;IAEhE;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAyChD;;;;;;;OAOG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAmC1E;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpE;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpE;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpE;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBrD;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUvC;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAoBD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA2B5B"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Substring Filter using Suffix Array
3
+ *
4
+ * Provides fast substring search ("contains") filtering for grid columns.
5
+ */
6
+ /**
7
+ * SubstringFilter - Fast substring search using Suffix Array
8
+ *
9
+ * Indexes column values for O(m log n) substring search instead of O(n*m) linear scan.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const filter = new SubstringFilter();
14
+ *
15
+ * // Index column 0 with product names
16
+ * filter.indexColumn(0, [
17
+ * 'Apple iPhone 14',
18
+ * 'Samsung Galaxy S23',
19
+ * 'Microsoft Surface Pro'
20
+ * ]);
21
+ *
22
+ * // Find all rows containing "phone" (matches "iPhone")
23
+ * const rows = filter.filterBySubstring(0, 'phone');
24
+ * // [0] - Row 0 contains "phone" in "iPhone"
25
+ * ```
26
+ */
27
+ export declare class SubstringFilter {
28
+ private columnIndexes;
29
+ private columnMaps;
30
+ /**
31
+ * Index all values in a column for substring search
32
+ *
33
+ * @param col - Column index
34
+ * @param values - All values in the column
35
+ */
36
+ indexColumn(col: number, values: any[]): void;
37
+ /**
38
+ * Find all rows where column value contains the substring
39
+ *
40
+ * @param col - Column index
41
+ * @param substring - Substring to search for
42
+ * @returns Array of row indices that match
43
+ */
44
+ filterBySubstring(col: number, substring: string): number[];
45
+ /**
46
+ * Check if any row in the column contains the substring
47
+ *
48
+ * @param col - Column index
49
+ * @param substring - Substring to check
50
+ * @returns true if at least one row contains the substring
51
+ */
52
+ contains(col: number, substring: string): boolean;
53
+ /**
54
+ * Count how many rows contain the substring
55
+ *
56
+ * @param col - Column index
57
+ * @param substring - Substring to count
58
+ * @returns Number of rows containing the substring
59
+ */
60
+ count(col: number, substring: string): number;
61
+ /**
62
+ * Get statistics for a column index
63
+ *
64
+ * @param col - Column index
65
+ * @returns Statistics or null if not indexed
66
+ */
67
+ getStats(col: number): {
68
+ rowCount: number;
69
+ totalChars: number;
70
+ textLength: number;
71
+ suffixCount: number;
72
+ memoryBytes: number;
73
+ hasLCP: boolean;
74
+ } | null;
75
+ /**
76
+ * Clear index for a column
77
+ *
78
+ * @param col - Column index
79
+ */
80
+ clearColumn(col: number): void;
81
+ /**
82
+ * Clear all indexes
83
+ */
84
+ clearAll(): void;
85
+ /**
86
+ * Binary search to find which row a position belongs to
87
+ */
88
+ private findRowIndex;
89
+ }
90
+ //# sourceMappingURL=substring-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"substring-filter.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/substring-filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,UAAU,CAAuC;IAEzD;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IAiC7C;;;;;;OAMG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAyB3D;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAKjD;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7C;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;;;;;;;;IAapB;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAQhB;;OAEG;IACH,OAAO,CAAC,YAAY;CAoBrB"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Field-Based Filter Types
3
+ *
4
+ * This module defines a new field-based filtering system that uses
5
+ * field names instead of column indices, making it easier for backends
6
+ * to consume filter parameters without complex mapping logic.
7
+ */
8
+ /**
9
+ * Standard filter operators
10
+ * Short, backend-friendly identifiers that map to common database operations
11
+ */
12
+ export type StandardFilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'in' | 'notIn' | 'between' | 'isNull' | 'isNotNull' | 'regex';
13
+ /**
14
+ * Custom operator definition
15
+ * Allows registration of domain-specific operators
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const fuzzyOperator: CustomOperator = {
20
+ * id: 'fuzzy',
21
+ * label: 'Fuzzy Match',
22
+ * valueCount: 1,
23
+ * predicate: (cellValue, filterValue) => {
24
+ * return levenshtein(cellValue, filterValue) < 3;
25
+ * },
26
+ * sqlTemplate: "SIMILARITY(?, ?) > 0.7",
27
+ * graphqlKey: '_similar',
28
+ * restSuffix: '_fuzzy'
29
+ * };
30
+ * ```
31
+ */
32
+ export interface CustomOperator {
33
+ /**
34
+ * Unique operator identifier
35
+ */
36
+ id: string;
37
+ /**
38
+ * Human-readable label for UI
39
+ */
40
+ label: string;
41
+ /**
42
+ * Number of values required
43
+ * - 0: no values (e.g., isNull)
44
+ * - 1: single value (e.g., equals, contains)
45
+ * - 2: two values (e.g., between)
46
+ * - 'array': array of values (e.g., in)
47
+ */
48
+ valueCount: 0 | 1 | 2 | 'array';
49
+ /**
50
+ * Frontend predicate function for filtering rows
51
+ * @param cellValue - The value from the cell
52
+ * @param filterValue - The filter value(s)
53
+ * @returns true if row matches filter
54
+ */
55
+ predicate: (cellValue: any, filterValue: any) => boolean;
56
+ /**
57
+ * SQL template for backend queries
58
+ * Use ? for value placeholders
59
+ * @example "SIMILARITY(?, ?) > 0.7"
60
+ */
61
+ sqlTemplate: string;
62
+ /**
63
+ * GraphQL key for the operator
64
+ * @example "_similar" for Hasura, "similar" for Prisma
65
+ */
66
+ graphqlKey?: string;
67
+ /**
68
+ * REST suffix for query params
69
+ * @example "_fuzzy" results in "name_fuzzy=value"
70
+ */
71
+ restSuffix?: string;
72
+ }
73
+ /**
74
+ * Field-based filter condition
75
+ *
76
+ * This is the NEW format sent to backends, using field names
77
+ * instead of column indices.
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Simple condition
82
+ * { field: 'age', operator: 'gt', value: 18 }
83
+ *
84
+ * // Between condition
85
+ * { field: 'price', operator: 'between', value: 100, valueTo: 500 }
86
+ *
87
+ * // In condition
88
+ * { field: 'status', operator: 'in', value: ['active', 'pending'] }
89
+ *
90
+ * // Null check
91
+ * { field: 'deletedAt', operator: 'isNull' }
92
+ * ```
93
+ */
94
+ export interface FieldFilterCondition {
95
+ /**
96
+ * Field name from ColumnDef.field
97
+ */
98
+ field: string;
99
+ /**
100
+ * Filter operator
101
+ */
102
+ operator: StandardFilterOperator | string;
103
+ /**
104
+ * Filter value
105
+ * - undefined for isNull/isNotNull
106
+ * - single value for most operators
107
+ * - array for 'in'/'notIn'
108
+ */
109
+ value?: any;
110
+ /**
111
+ * Secondary value for 'between' operator
112
+ */
113
+ valueTo?: any;
114
+ }
115
+ /**
116
+ * Filter group with logic operator
117
+ *
118
+ * Allows combining multiple conditions with AND/OR logic
119
+ * and supports nesting for complex queries.
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * // Simple AND group
124
+ * {
125
+ * logic: 'AND',
126
+ * conditions: [
127
+ * { field: 'age', operator: 'gt', value: 18 },
128
+ * { field: 'status', operator: 'eq', value: 'active' }
129
+ * ]
130
+ * }
131
+ *
132
+ * // Nested groups: (age > 18 AND status = 'active') OR (role = 'admin')
133
+ * {
134
+ * logic: 'OR',
135
+ * groups: [
136
+ * {
137
+ * logic: 'AND',
138
+ * conditions: [
139
+ * { field: 'age', operator: 'gt', value: 18 },
140
+ * { field: 'status', operator: 'eq', value: 'active' }
141
+ * ]
142
+ * },
143
+ * {
144
+ * logic: 'AND',
145
+ * conditions: [
146
+ * { field: 'role', operator: 'eq', value: 'admin' }
147
+ * ]
148
+ * }
149
+ * ]
150
+ * }
151
+ * ```
152
+ */
153
+ export interface FieldFilterGroup {
154
+ /**
155
+ * Logic operator between conditions/groups
156
+ */
157
+ logic: 'AND' | 'OR';
158
+ /**
159
+ * Filter conditions in this group
160
+ */
161
+ conditions: FieldFilterCondition[];
162
+ /**
163
+ * Nested filter groups for complex queries
164
+ */
165
+ groups?: FieldFilterGroup[];
166
+ }
167
+ /**
168
+ * Complete filter state in field-based format
169
+ *
170
+ * This is the top-level filter state that gets exported to backends.
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const filterState: FieldFilterState = {
175
+ * root: {
176
+ * logic: 'AND',
177
+ * conditions: [
178
+ * { field: 'age', operator: 'gt', value: 18 },
179
+ * { field: 'status', operator: 'eq', value: 'active' }
180
+ * ]
181
+ * },
182
+ * activeFields: ['age', 'status'],
183
+ * timestamp: Date.now()
184
+ * };
185
+ * ```
186
+ */
187
+ export interface FieldFilterState {
188
+ /**
189
+ * Root filter group
190
+ * null if no filters are active
191
+ */
192
+ root: FieldFilterGroup | null;
193
+ /**
194
+ * Quick access to all active field names
195
+ * Useful for UI highlighting
196
+ */
197
+ activeFields: string[];
198
+ /**
199
+ * Timestamp of last filter change
200
+ * Useful for caching and tracking updates
201
+ */
202
+ timestamp: number;
203
+ }
204
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/features/filtering/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAE9B,IAAI,GACJ,KAAK,GAGL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GAGL,UAAU,GACV,aAAa,GACb,YAAY,GACZ,UAAU,GAGV,IAAI,GACJ,OAAO,GACP,SAAS,GAGT,QAAQ,GACR,WAAW,GAGX,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,SAAS,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,KAAK,OAAO,CAAC;IAEzD;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAAC;IAE1C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAEnC;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE9B;;;OAGG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB"}