@furystack/shades-common-components 13.4.1 → 14.0.0

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 (365) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +3 -3
  3. package/esm/components/accordion/accordion-item.js +1 -1
  4. package/esm/components/accordion/accordion-item.js.map +1 -1
  5. package/esm/components/accordion/accordion.js +1 -1
  6. package/esm/components/accordion/accordion.js.map +1 -1
  7. package/esm/components/alert.js +1 -1
  8. package/esm/components/alert.js.map +1 -1
  9. package/esm/components/app-bar-link.js +1 -1
  10. package/esm/components/app-bar-link.js.map +1 -1
  11. package/esm/components/app-bar.js +1 -1
  12. package/esm/components/app-bar.js.map +1 -1
  13. package/esm/components/avatar.js +1 -1
  14. package/esm/components/avatar.js.map +1 -1
  15. package/esm/components/badge.js +1 -1
  16. package/esm/components/badge.js.map +1 -1
  17. package/esm/components/breadcrumb.js +1 -1
  18. package/esm/components/breadcrumb.js.map +1 -1
  19. package/esm/components/breadcrumb.spec.js +3 -3
  20. package/esm/components/breadcrumb.spec.js.map +1 -1
  21. package/esm/components/button-group.js +4 -4
  22. package/esm/components/button-group.js.map +1 -1
  23. package/esm/components/button.js +1 -1
  24. package/esm/components/button.js.map +1 -1
  25. package/esm/components/button.spec.js +1 -1
  26. package/esm/components/button.spec.js.map +1 -1
  27. package/esm/components/cache-view.js +1 -1
  28. package/esm/components/cache-view.js.map +1 -1
  29. package/esm/components/cache-view.spec.js +2 -2
  30. package/esm/components/cache-view.spec.js.map +1 -1
  31. package/esm/components/card.js +5 -5
  32. package/esm/components/card.js.map +1 -1
  33. package/esm/components/carousel.js +1 -1
  34. package/esm/components/carousel.js.map +1 -1
  35. package/esm/components/chip.js +1 -1
  36. package/esm/components/chip.js.map +1 -1
  37. package/esm/components/circular-progress.d.ts +2 -4
  38. package/esm/components/circular-progress.d.ts.map +1 -1
  39. package/esm/components/circular-progress.js +3 -6
  40. package/esm/components/circular-progress.js.map +1 -1
  41. package/esm/components/circular-progress.spec.js +19 -14
  42. package/esm/components/circular-progress.spec.js.map +1 -1
  43. package/esm/components/command-palette/command-palette-input.js +1 -1
  44. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  45. package/esm/components/command-palette/command-palette-suggestion-list.js +1 -1
  46. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  47. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +1 -1
  48. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
  49. package/esm/components/command-palette/index.js +1 -1
  50. package/esm/components/command-palette/index.js.map +1 -1
  51. package/esm/components/context-menu/context-menu-item.js +1 -1
  52. package/esm/components/context-menu/context-menu-item.js.map +1 -1
  53. package/esm/components/context-menu/context-menu.js +1 -1
  54. package/esm/components/context-menu/context-menu.js.map +1 -1
  55. package/esm/components/data-grid/body.js +1 -1
  56. package/esm/components/data-grid/body.js.map +1 -1
  57. package/esm/components/data-grid/data-grid-row.js +1 -1
  58. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  59. package/esm/components/data-grid/data-grid.d.ts +5 -2
  60. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  61. package/esm/components/data-grid/data-grid.js +5 -3
  62. package/esm/components/data-grid/data-grid.js.map +1 -1
  63. package/esm/components/data-grid/data-grid.spec.js +60 -60
  64. package/esm/components/data-grid/data-grid.spec.js.map +1 -1
  65. package/esm/components/data-grid/filters/boolean-filter.d.ts +2 -2
  66. package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -1
  67. package/esm/components/data-grid/filters/boolean-filter.js +4 -4
  68. package/esm/components/data-grid/filters/boolean-filter.js.map +1 -1
  69. package/esm/components/data-grid/filters/boolean-filter.spec.js +18 -17
  70. package/esm/components/data-grid/filters/boolean-filter.spec.js.map +1 -1
  71. package/esm/components/data-grid/filters/date-filter.d.ts +2 -2
  72. package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -1
  73. package/esm/components/data-grid/filters/date-filter.js +6 -6
  74. package/esm/components/data-grid/filters/date-filter.js.map +1 -1
  75. package/esm/components/data-grid/filters/date-filter.spec.js +26 -21
  76. package/esm/components/data-grid/filters/date-filter.spec.js.map +1 -1
  77. package/esm/components/data-grid/filters/enum-filter.d.ts +2 -2
  78. package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -1
  79. package/esm/components/data-grid/filters/enum-filter.js +5 -5
  80. package/esm/components/data-grid/filters/enum-filter.js.map +1 -1
  81. package/esm/components/data-grid/filters/enum-filter.spec.js +21 -19
  82. package/esm/components/data-grid/filters/enum-filter.spec.js.map +1 -1
  83. package/esm/components/data-grid/filters/filter-dropdown.js +1 -1
  84. package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -1
  85. package/esm/components/data-grid/filters/number-filter.d.ts +2 -2
  86. package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -1
  87. package/esm/components/data-grid/filters/number-filter.js +5 -5
  88. package/esm/components/data-grid/filters/number-filter.js.map +1 -1
  89. package/esm/components/data-grid/filters/number-filter.spec.js +23 -21
  90. package/esm/components/data-grid/filters/number-filter.spec.js.map +1 -1
  91. package/esm/components/data-grid/filters/string-filter.d.ts +2 -2
  92. package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -1
  93. package/esm/components/data-grid/filters/string-filter.js +5 -5
  94. package/esm/components/data-grid/filters/string-filter.js.map +1 -1
  95. package/esm/components/data-grid/filters/string-filter.spec.js +21 -19
  96. package/esm/components/data-grid/filters/string-filter.spec.js.map +1 -1
  97. package/esm/components/data-grid/footer.d.ts +2 -2
  98. package/esm/components/data-grid/footer.d.ts.map +1 -1
  99. package/esm/components/data-grid/footer.js +8 -13
  100. package/esm/components/data-grid/footer.js.map +1 -1
  101. package/esm/components/data-grid/footer.spec.js +38 -27
  102. package/esm/components/data-grid/footer.spec.js.map +1 -1
  103. package/esm/components/data-grid/header.d.ts +6 -6
  104. package/esm/components/data-grid/header.d.ts.map +1 -1
  105. package/esm/components/data-grid/header.js +16 -17
  106. package/esm/components/data-grid/header.js.map +1 -1
  107. package/esm/components/data-grid/header.spec.js +66 -60
  108. package/esm/components/data-grid/header.spec.js.map +1 -1
  109. package/esm/components/data-grid/selection-cell.js +1 -1
  110. package/esm/components/data-grid/selection-cell.js.map +1 -1
  111. package/esm/components/dialog.js +1 -1
  112. package/esm/components/dialog.js.map +1 -1
  113. package/esm/components/divider.js +1 -1
  114. package/esm/components/divider.js.map +1 -1
  115. package/esm/components/drawer/drawer-toggle-button.js +1 -1
  116. package/esm/components/drawer/drawer-toggle-button.js.map +1 -1
  117. package/esm/components/drawer/index.js +1 -1
  118. package/esm/components/drawer/index.js.map +1 -1
  119. package/esm/components/dropdown.js +1 -1
  120. package/esm/components/dropdown.js.map +1 -1
  121. package/esm/components/fab.js +1 -1
  122. package/esm/components/fab.js.map +1 -1
  123. package/esm/components/form.js +1 -1
  124. package/esm/components/form.js.map +1 -1
  125. package/esm/components/grid.js +1 -1
  126. package/esm/components/grid.js.map +1 -1
  127. package/esm/components/icons/icon.js +1 -1
  128. package/esm/components/icons/icon.js.map +1 -1
  129. package/esm/components/image.js +2 -2
  130. package/esm/components/image.js.map +1 -1
  131. package/esm/components/inputs/autocomplete.js +1 -1
  132. package/esm/components/inputs/autocomplete.js.map +1 -1
  133. package/esm/components/inputs/checkbox.js +1 -1
  134. package/esm/components/inputs/checkbox.js.map +1 -1
  135. package/esm/components/inputs/checkbox.spec.js +1 -1
  136. package/esm/components/inputs/checkbox.spec.js.map +1 -1
  137. package/esm/components/inputs/input-number.js +1 -1
  138. package/esm/components/inputs/input-number.js.map +1 -1
  139. package/esm/components/inputs/input-number.spec.js +1 -1
  140. package/esm/components/inputs/input-number.spec.js.map +1 -1
  141. package/esm/components/inputs/input.js +1 -1
  142. package/esm/components/inputs/input.js.map +1 -1
  143. package/esm/components/inputs/input.spec.js +1 -1
  144. package/esm/components/inputs/input.spec.js.map +1 -1
  145. package/esm/components/inputs/radio-group.js +1 -1
  146. package/esm/components/inputs/radio-group.js.map +1 -1
  147. package/esm/components/inputs/radio-group.spec.js +1 -1
  148. package/esm/components/inputs/radio-group.spec.js.map +1 -1
  149. package/esm/components/inputs/radio.js +1 -1
  150. package/esm/components/inputs/radio.js.map +1 -1
  151. package/esm/components/inputs/radio.spec.js +1 -1
  152. package/esm/components/inputs/radio.spec.js.map +1 -1
  153. package/esm/components/inputs/select.js +1 -1
  154. package/esm/components/inputs/select.js.map +1 -1
  155. package/esm/components/inputs/slider.js +1 -1
  156. package/esm/components/inputs/slider.js.map +1 -1
  157. package/esm/components/inputs/switch.js +1 -1
  158. package/esm/components/inputs/switch.js.map +1 -1
  159. package/esm/components/inputs/switch.spec.js +1 -1
  160. package/esm/components/inputs/switch.spec.js.map +1 -1
  161. package/esm/components/inputs/text-area.js +1 -1
  162. package/esm/components/inputs/text-area.js.map +1 -1
  163. package/esm/components/inputs/text-area.spec.js +1 -1
  164. package/esm/components/inputs/text-area.spec.js.map +1 -1
  165. package/esm/components/linear-progress.d.ts +2 -4
  166. package/esm/components/linear-progress.d.ts.map +1 -1
  167. package/esm/components/linear-progress.js +3 -6
  168. package/esm/components/linear-progress.js.map +1 -1
  169. package/esm/components/linear-progress.spec.js +21 -18
  170. package/esm/components/linear-progress.spec.js.map +1 -1
  171. package/esm/components/list/list-item.js +1 -1
  172. package/esm/components/list/list-item.js.map +1 -1
  173. package/esm/components/list/list.js +1 -1
  174. package/esm/components/list/list.js.map +1 -1
  175. package/esm/components/loader.js +1 -1
  176. package/esm/components/loader.js.map +1 -1
  177. package/esm/components/loader.spec.js +1 -1
  178. package/esm/components/loader.spec.js.map +1 -1
  179. package/esm/components/markdown/markdown-display.js +1 -1
  180. package/esm/components/markdown/markdown-display.js.map +1 -1
  181. package/esm/components/markdown/markdown-display.spec.js +1 -1
  182. package/esm/components/markdown/markdown-display.spec.js.map +1 -1
  183. package/esm/components/markdown/markdown-editor.js +1 -1
  184. package/esm/components/markdown/markdown-editor.js.map +1 -1
  185. package/esm/components/markdown/markdown-editor.spec.js +1 -1
  186. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  187. package/esm/components/markdown/markdown-input.js +1 -1
  188. package/esm/components/markdown/markdown-input.js.map +1 -1
  189. package/esm/components/markdown/markdown-input.spec.js +1 -1
  190. package/esm/components/markdown/markdown-input.spec.js.map +1 -1
  191. package/esm/components/menu/menu.js +1 -1
  192. package/esm/components/menu/menu.js.map +1 -1
  193. package/esm/components/modal.js +1 -1
  194. package/esm/components/modal.js.map +1 -1
  195. package/esm/components/modal.spec.js +3 -3
  196. package/esm/components/modal.spec.js.map +1 -1
  197. package/esm/components/noty-list.js +2 -2
  198. package/esm/components/noty-list.js.map +1 -1
  199. package/esm/components/page-container/index.d.ts.map +1 -1
  200. package/esm/components/page-container/index.js +2 -2
  201. package/esm/components/page-container/index.js.map +1 -1
  202. package/esm/components/page-container/index.spec.js +5 -4
  203. package/esm/components/page-container/index.spec.js.map +1 -1
  204. package/esm/components/page-container/page-header.js +1 -1
  205. package/esm/components/page-container/page-header.js.map +1 -1
  206. package/esm/components/page-layout/index.d.ts +6 -0
  207. package/esm/components/page-layout/index.d.ts.map +1 -1
  208. package/esm/components/page-layout/index.js +29 -14
  209. package/esm/components/page-layout/index.js.map +1 -1
  210. package/esm/components/page-layout/index.spec.js +119 -0
  211. package/esm/components/page-layout/index.spec.js.map +1 -1
  212. package/esm/components/pagination.js +1 -1
  213. package/esm/components/pagination.js.map +1 -1
  214. package/esm/components/paper.js +1 -1
  215. package/esm/components/paper.js.map +1 -1
  216. package/esm/components/rating.js +1 -1
  217. package/esm/components/rating.js.map +1 -1
  218. package/esm/components/rating.spec.js +1 -1
  219. package/esm/components/rating.spec.js.map +1 -1
  220. package/esm/components/result.js +1 -1
  221. package/esm/components/result.js.map +1 -1
  222. package/esm/components/skeleton.js +1 -1
  223. package/esm/components/skeleton.js.map +1 -1
  224. package/esm/components/suggest/index.js +1 -1
  225. package/esm/components/suggest/index.js.map +1 -1
  226. package/esm/components/suggest/index.spec.js +1 -1
  227. package/esm/components/suggest/index.spec.js.map +1 -1
  228. package/esm/components/suggest/suggest-input.js +1 -1
  229. package/esm/components/suggest/suggest-input.js.map +1 -1
  230. package/esm/components/suggest/suggest-input.spec.js +1 -1
  231. package/esm/components/suggest/suggest-input.spec.js.map +1 -1
  232. package/esm/components/suggest/suggestion-list.js +1 -1
  233. package/esm/components/suggest/suggestion-list.js.map +1 -1
  234. package/esm/components/suggest/suggestion-list.spec.js +1 -1
  235. package/esm/components/suggest/suggestion-list.spec.js.map +1 -1
  236. package/esm/components/tabs.js +2 -2
  237. package/esm/components/tabs.js.map +1 -1
  238. package/esm/components/timeline.js +2 -2
  239. package/esm/components/timeline.js.map +1 -1
  240. package/esm/components/tooltip.js +1 -1
  241. package/esm/components/tooltip.js.map +1 -1
  242. package/esm/components/tree/tree-item.js +1 -1
  243. package/esm/components/tree/tree-item.js.map +1 -1
  244. package/esm/components/tree/tree.js +1 -1
  245. package/esm/components/tree/tree.js.map +1 -1
  246. package/esm/components/typography.js +1 -1
  247. package/esm/components/typography.js.map +1 -1
  248. package/esm/components/wizard/index.js +1 -1
  249. package/esm/components/wizard/index.js.map +1 -1
  250. package/esm/components/wizard/index.spec.js +3 -3
  251. package/esm/components/wizard/index.spec.js.map +1 -1
  252. package/package.json +3 -3
  253. package/src/components/accordion/accordion-item.tsx +1 -1
  254. package/src/components/accordion/accordion.tsx +1 -1
  255. package/src/components/alert.tsx +1 -1
  256. package/src/components/app-bar-link.tsx +1 -1
  257. package/src/components/app-bar.tsx +1 -1
  258. package/src/components/avatar.tsx +1 -1
  259. package/src/components/badge.tsx +1 -1
  260. package/src/components/breadcrumb.spec.tsx +3 -3
  261. package/src/components/breadcrumb.tsx +1 -1
  262. package/src/components/button-group.tsx +4 -4
  263. package/src/components/button.spec.tsx +1 -1
  264. package/src/components/button.tsx +1 -1
  265. package/src/components/cache-view.spec.tsx +2 -2
  266. package/src/components/cache-view.tsx +3 -3
  267. package/src/components/card.tsx +5 -5
  268. package/src/components/carousel.tsx +1 -1
  269. package/src/components/chip.tsx +1 -1
  270. package/src/components/circular-progress.spec.tsx +20 -14
  271. package/src/components/circular-progress.tsx +5 -11
  272. package/src/components/command-palette/command-palette-input.tsx +1 -1
  273. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +1 -1
  274. package/src/components/command-palette/command-palette-suggestion-list.tsx +1 -1
  275. package/src/components/command-palette/index.tsx +1 -1
  276. package/src/components/context-menu/context-menu-item.tsx +1 -1
  277. package/src/components/context-menu/context-menu.tsx +1 -1
  278. package/src/components/data-grid/body.tsx +1 -1
  279. package/src/components/data-grid/data-grid-row.tsx +1 -1
  280. package/src/components/data-grid/data-grid.spec.tsx +62 -36
  281. package/src/components/data-grid/data-grid.tsx +14 -8
  282. package/src/components/data-grid/filters/boolean-filter.spec.tsx +29 -18
  283. package/src/components/data-grid/filters/boolean-filter.tsx +6 -6
  284. package/src/components/data-grid/filters/date-filter.spec.tsx +35 -22
  285. package/src/components/data-grid/filters/date-filter.tsx +8 -8
  286. package/src/components/data-grid/filters/enum-filter.spec.tsx +35 -20
  287. package/src/components/data-grid/filters/enum-filter.tsx +7 -7
  288. package/src/components/data-grid/filters/filter-dropdown.tsx +1 -1
  289. package/src/components/data-grid/filters/number-filter.spec.tsx +32 -22
  290. package/src/components/data-grid/filters/number-filter.tsx +7 -7
  291. package/src/components/data-grid/filters/string-filter.spec.tsx +32 -20
  292. package/src/components/data-grid/filters/string-filter.tsx +7 -7
  293. package/src/components/data-grid/footer.spec.tsx +79 -31
  294. package/src/components/data-grid/footer.tsx +10 -15
  295. package/src/components/data-grid/header.spec.tsx +152 -68
  296. package/src/components/data-grid/header.tsx +64 -27
  297. package/src/components/data-grid/selection-cell.tsx +1 -1
  298. package/src/components/dialog.tsx +1 -1
  299. package/src/components/divider.tsx +1 -1
  300. package/src/components/drawer/drawer-toggle-button.tsx +1 -1
  301. package/src/components/drawer/index.tsx +1 -1
  302. package/src/components/dropdown.tsx +1 -1
  303. package/src/components/fab.tsx +1 -1
  304. package/src/components/form.tsx +1 -1
  305. package/src/components/grid.tsx +1 -1
  306. package/src/components/icons/icon.tsx +1 -1
  307. package/src/components/image.tsx +2 -2
  308. package/src/components/inputs/autocomplete.tsx +1 -1
  309. package/src/components/inputs/checkbox.spec.tsx +1 -1
  310. package/src/components/inputs/checkbox.tsx +1 -1
  311. package/src/components/inputs/input-number.spec.tsx +1 -1
  312. package/src/components/inputs/input-number.tsx +1 -1
  313. package/src/components/inputs/input.spec.tsx +1 -1
  314. package/src/components/inputs/input.tsx +1 -1
  315. package/src/components/inputs/radio-group.spec.tsx +1 -1
  316. package/src/components/inputs/radio-group.tsx +1 -1
  317. package/src/components/inputs/radio.spec.tsx +1 -1
  318. package/src/components/inputs/radio.tsx +1 -1
  319. package/src/components/inputs/select.tsx +1 -1
  320. package/src/components/inputs/slider.tsx +1 -1
  321. package/src/components/inputs/switch.spec.tsx +1 -1
  322. package/src/components/inputs/switch.tsx +1 -1
  323. package/src/components/inputs/text-area.spec.tsx +1 -1
  324. package/src/components/inputs/text-area.tsx +1 -1
  325. package/src/components/linear-progress.spec.tsx +22 -18
  326. package/src/components/linear-progress.tsx +5 -11
  327. package/src/components/list/list-item.tsx +1 -1
  328. package/src/components/list/list.tsx +1 -1
  329. package/src/components/loader.spec.tsx +1 -1
  330. package/src/components/loader.tsx +1 -1
  331. package/src/components/markdown/markdown-display.spec.tsx +1 -1
  332. package/src/components/markdown/markdown-display.tsx +1 -1
  333. package/src/components/markdown/markdown-editor.spec.tsx +1 -1
  334. package/src/components/markdown/markdown-editor.tsx +1 -1
  335. package/src/components/markdown/markdown-input.spec.tsx +1 -1
  336. package/src/components/markdown/markdown-input.tsx +1 -1
  337. package/src/components/menu/menu.tsx +1 -1
  338. package/src/components/modal.spec.tsx +3 -3
  339. package/src/components/modal.tsx +1 -1
  340. package/src/components/noty-list.tsx +2 -2
  341. package/src/components/page-container/index.spec.tsx +5 -4
  342. package/src/components/page-container/index.tsx +8 -2
  343. package/src/components/page-container/page-header.tsx +1 -1
  344. package/src/components/page-layout/index.spec.tsx +173 -0
  345. package/src/components/page-layout/index.tsx +36 -14
  346. package/src/components/pagination.tsx +1 -1
  347. package/src/components/paper.tsx +1 -1
  348. package/src/components/rating.spec.tsx +1 -1
  349. package/src/components/rating.tsx +1 -1
  350. package/src/components/result.tsx +1 -1
  351. package/src/components/skeleton.tsx +1 -1
  352. package/src/components/suggest/index.spec.tsx +1 -1
  353. package/src/components/suggest/index.tsx +1 -1
  354. package/src/components/suggest/suggest-input.spec.tsx +1 -1
  355. package/src/components/suggest/suggest-input.tsx +1 -1
  356. package/src/components/suggest/suggestion-list.spec.tsx +1 -1
  357. package/src/components/suggest/suggestion-list.tsx +1 -1
  358. package/src/components/tabs.tsx +2 -2
  359. package/src/components/timeline.tsx +2 -2
  360. package/src/components/tooltip.tsx +1 -1
  361. package/src/components/tree/tree-item.tsx +1 -1
  362. package/src/components/tree/tree.tsx +1 -1
  363. package/src/components/typography.tsx +1 -1
  364. package/src/components/wizard/index.spec.tsx +3 -3
  365. package/src/components/wizard/index.tsx +1 -1
@@ -1,7 +1,7 @@
1
1
  import type { FindOptions } from '@furystack/core'
2
2
  import { Injector } from '@furystack/inject'
3
3
  import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
4
- import { ObservableValue, usingAsync } from '@furystack/utils'
4
+ import { usingAsync } from '@furystack/utils'
5
5
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
6
6
  import { CollectionService } from '../../services/collection-service.js'
7
7
  import { DataGrid } from './data-grid.js'
@@ -34,25 +34,23 @@ describe('DataGrid', () => {
34
34
  fn: (ctx: {
35
35
  injector: Injector
36
36
  service: CollectionService<TestEntry>
37
- findOptions: ObservableValue<FindOptions<TestEntry, Array<keyof TestEntry>>>
37
+ findOptions: FindOptions<TestEntry, Array<keyof TestEntry>>
38
+ onFindOptionsChange: (options: FindOptions<TestEntry, Array<keyof TestEntry>>) => void
38
39
  }) => Promise<void>,
39
40
  opts?: { createService?: () => CollectionService<TestEntry> },
40
41
  ) => {
41
42
  await usingAsync(new Injector(), async (injector) => {
42
43
  await usingAsync(opts?.createService?.() ?? createTestService(), async (service) => {
43
- await usingAsync(
44
- new ObservableValue<FindOptions<TestEntry, Array<keyof TestEntry>>>({}),
45
- async (findOptions) => {
46
- await fn({ injector, service, findOptions })
47
- },
48
- )
44
+ const findOptions: FindOptions<TestEntry, Array<keyof TestEntry>> = {}
45
+ const onFindOptionsChange = vi.fn<(options: FindOptions<TestEntry, Array<keyof TestEntry>>) => void>()
46
+ await fn({ injector, service, findOptions, onFindOptionsChange })
49
47
  })
50
48
  })
51
49
  }
52
50
 
53
51
  describe('rendering', () => {
54
52
  it('should render with columns', async () => {
55
- await withTestGrid(async ({ injector, service, findOptions }) => {
53
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
56
54
  const rootElement = document.getElementById('root') as HTMLDivElement
57
55
 
58
56
  initializeShadeRoot({
@@ -63,6 +61,7 @@ describe('DataGrid', () => {
63
61
  columns={['id', 'name']}
64
62
  collectionService={service}
65
63
  findOptions={findOptions}
64
+ onFindOptionsChange={onFindOptionsChange}
66
65
  styles={{}}
67
66
  headerComponents={{}}
68
67
  rowComponents={{}}
@@ -81,7 +80,7 @@ describe('DataGrid', () => {
81
80
  })
82
81
 
83
82
  it('should render table structure', async () => {
84
- await withTestGrid(async ({ injector, service, findOptions }) => {
83
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
85
84
  const rootElement = document.getElementById('root') as HTMLDivElement
86
85
 
87
86
  initializeShadeRoot({
@@ -92,6 +91,7 @@ describe('DataGrid', () => {
92
91
  columns={['id', 'name']}
93
92
  collectionService={service}
94
93
  findOptions={findOptions}
94
+ onFindOptionsChange={onFindOptionsChange}
95
95
  styles={{}}
96
96
  headerComponents={{}}
97
97
  rowComponents={{}}
@@ -113,7 +113,7 @@ describe('DataGrid', () => {
113
113
  })
114
114
 
115
115
  it('should render custom header components when provided', async () => {
116
- await withTestGrid(async ({ injector, service, findOptions }) => {
116
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
117
117
  const rootElement = document.getElementById('root') as HTMLDivElement
118
118
 
119
119
  initializeShadeRoot({
@@ -124,6 +124,7 @@ describe('DataGrid', () => {
124
124
  columns={['id', 'name']}
125
125
  collectionService={service}
126
126
  findOptions={findOptions}
127
+ onFindOptionsChange={onFindOptionsChange}
127
128
  styles={{}}
128
129
  headerComponents={{
129
130
  id: () => <span data-testid="custom-header-id">Custom ID Header</span>,
@@ -143,7 +144,7 @@ describe('DataGrid', () => {
143
144
  })
144
145
 
145
146
  it('should render default header components from headerComponents.default', async () => {
146
- await withTestGrid(async ({ injector, service, findOptions }) => {
147
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
147
148
  const rootElement = document.getElementById('root') as HTMLDivElement
148
149
 
149
150
  initializeShadeRoot({
@@ -154,6 +155,7 @@ describe('DataGrid', () => {
154
155
  columns={['id', 'name']}
155
156
  collectionService={service}
156
157
  findOptions={findOptions}
158
+ onFindOptionsChange={onFindOptionsChange}
157
159
  styles={{}}
158
160
  headerComponents={{
159
161
  default: (name) => <span data-testid={`default-header-${name}`}>Default: {name}</span>,
@@ -175,7 +177,7 @@ describe('DataGrid', () => {
175
177
  })
176
178
 
177
179
  it('should render DataGridHeader when no custom header is provided', async () => {
178
- await withTestGrid(async ({ injector, service, findOptions }) => {
180
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
179
181
  const rootElement = document.getElementById('root') as HTMLDivElement
180
182
 
181
183
  initializeShadeRoot({
@@ -186,6 +188,7 @@ describe('DataGrid', () => {
186
188
  columns={['id', 'name']}
187
189
  collectionService={service}
188
190
  findOptions={findOptions}
191
+ onFindOptionsChange={onFindOptionsChange}
189
192
  styles={{}}
190
193
  headerComponents={{}}
191
194
  rowComponents={{}}
@@ -202,7 +205,7 @@ describe('DataGrid', () => {
202
205
  })
203
206
 
204
207
  it('should render filter buttons when columnFilters are provided', async () => {
205
- await withTestGrid(async ({ injector, service, findOptions }) => {
208
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
206
209
  const rootElement = document.getElementById('root') as HTMLDivElement
207
210
 
208
211
  initializeShadeRoot({
@@ -213,6 +216,7 @@ describe('DataGrid', () => {
213
216
  columns={['id', 'name']}
214
217
  collectionService={service}
215
218
  findOptions={findOptions}
219
+ onFindOptionsChange={onFindOptionsChange}
216
220
  styles={{}}
217
221
  columnFilters={{ name: { type: 'string' } }}
218
222
  />
@@ -228,7 +232,7 @@ describe('DataGrid', () => {
228
232
  })
229
233
 
230
234
  it('should not render filter buttons when columnFilters is not provided', async () => {
231
- await withTestGrid(async ({ injector, service, findOptions }) => {
235
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
232
236
  const rootElement = document.getElementById('root') as HTMLDivElement
233
237
 
234
238
  initializeShadeRoot({
@@ -239,6 +243,7 @@ describe('DataGrid', () => {
239
243
  columns={['id', 'name']}
240
244
  collectionService={service}
241
245
  findOptions={findOptions}
246
+ onFindOptionsChange={onFindOptionsChange}
242
247
  styles={{}}
243
248
  />
244
249
  ),
@@ -253,7 +258,7 @@ describe('DataGrid', () => {
253
258
  })
254
259
 
255
260
  it('should render without headerComponents and rowComponents', async () => {
256
- await withTestGrid(async ({ injector, service, findOptions }) => {
261
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
257
262
  const rootElement = document.getElementById('root') as HTMLDivElement
258
263
 
259
264
  initializeShadeRoot({
@@ -264,6 +269,7 @@ describe('DataGrid', () => {
264
269
  columns={['id', 'name']}
265
270
  collectionService={service}
266
271
  findOptions={findOptions}
272
+ onFindOptionsChange={onFindOptionsChange}
267
273
  styles={{}}
268
274
  />
269
275
  ),
@@ -282,7 +288,7 @@ describe('DataGrid', () => {
282
288
 
283
289
  describe('focus management', () => {
284
290
  it('should set focus on click', async () => {
285
- await withTestGrid(async ({ injector, service, findOptions }) => {
291
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
286
292
  const rootElement = document.getElementById('root') as HTMLDivElement
287
293
 
288
294
  expect(service.hasFocus.getValue()).toBe(false)
@@ -295,6 +301,7 @@ describe('DataGrid', () => {
295
301
  columns={['id', 'name']}
296
302
  collectionService={service}
297
303
  findOptions={findOptions}
304
+ onFindOptionsChange={onFindOptionsChange}
298
305
  styles={{}}
299
306
  headerComponents={{}}
300
307
  rowComponents={{}}
@@ -314,7 +321,7 @@ describe('DataGrid', () => {
314
321
  })
315
322
 
316
323
  it('should lose focus on click outside', async () => {
317
- await withTestGrid(async ({ injector, service, findOptions }) => {
324
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
318
325
  const rootElement = document.getElementById('root') as HTMLDivElement
319
326
 
320
327
  initializeShadeRoot({
@@ -327,6 +334,7 @@ describe('DataGrid', () => {
327
334
  columns={['id', 'name']}
328
335
  collectionService={service}
329
336
  findOptions={findOptions}
337
+ onFindOptionsChange={onFindOptionsChange}
330
338
  styles={{}}
331
339
  headerComponents={{}}
332
340
  rowComponents={{}}
@@ -353,7 +361,7 @@ describe('DataGrid', () => {
353
361
 
354
362
  describe('keyboard navigation', () => {
355
363
  it('should handle ArrowDown to move focus to next entry', async () => {
356
- await withTestGrid(async ({ injector, service, findOptions }) => {
364
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
357
365
  const rootElement = document.getElementById('root') as HTMLDivElement
358
366
 
359
367
  service.hasFocus.setValue(true)
@@ -367,6 +375,7 @@ describe('DataGrid', () => {
367
375
  columns={['id', 'name']}
368
376
  collectionService={service}
369
377
  findOptions={findOptions}
378
+ onFindOptionsChange={onFindOptionsChange}
370
379
  styles={{}}
371
380
  headerComponents={{}}
372
381
  rowComponents={{}}
@@ -384,7 +393,7 @@ describe('DataGrid', () => {
384
393
  })
385
394
 
386
395
  it('should handle ArrowUp to move focus to previous entry', async () => {
387
- await withTestGrid(async ({ injector, service, findOptions }) => {
396
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
388
397
  const rootElement = document.getElementById('root') as HTMLDivElement
389
398
 
390
399
  service.hasFocus.setValue(true)
@@ -398,6 +407,7 @@ describe('DataGrid', () => {
398
407
  columns={['id', 'name']}
399
408
  collectionService={service}
400
409
  findOptions={findOptions}
410
+ onFindOptionsChange={onFindOptionsChange}
401
411
  styles={{}}
402
412
  headerComponents={{}}
403
413
  rowComponents={{}}
@@ -415,7 +425,7 @@ describe('DataGrid', () => {
415
425
  })
416
426
 
417
427
  it('should handle Home to move focus to first entry', async () => {
418
- await withTestGrid(async ({ injector, service, findOptions }) => {
428
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
419
429
  const rootElement = document.getElementById('root') as HTMLDivElement
420
430
 
421
431
  service.hasFocus.setValue(true)
@@ -429,6 +439,7 @@ describe('DataGrid', () => {
429
439
  columns={['id', 'name']}
430
440
  collectionService={service}
431
441
  findOptions={findOptions}
442
+ onFindOptionsChange={onFindOptionsChange}
432
443
  styles={{}}
433
444
  headerComponents={{}}
434
445
  rowComponents={{}}
@@ -446,7 +457,7 @@ describe('DataGrid', () => {
446
457
  })
447
458
 
448
459
  it('should handle End to move focus to last entry', async () => {
449
- await withTestGrid(async ({ injector, service, findOptions }) => {
460
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
450
461
  const rootElement = document.getElementById('root') as HTMLDivElement
451
462
 
452
463
  service.hasFocus.setValue(true)
@@ -460,6 +471,7 @@ describe('DataGrid', () => {
460
471
  columns={['id', 'name']}
461
472
  collectionService={service}
462
473
  findOptions={findOptions}
474
+ onFindOptionsChange={onFindOptionsChange}
463
475
  styles={{}}
464
476
  headerComponents={{}}
465
477
  rowComponents={{}}
@@ -477,7 +489,7 @@ describe('DataGrid', () => {
477
489
  })
478
490
 
479
491
  it('should handle Tab to toggle focus', async () => {
480
- await withTestGrid(async ({ injector, service, findOptions }) => {
492
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
481
493
  const rootElement = document.getElementById('root') as HTMLDivElement
482
494
 
483
495
  service.hasFocus.setValue(true)
@@ -490,6 +502,7 @@ describe('DataGrid', () => {
490
502
  columns={['id', 'name']}
491
503
  collectionService={service}
492
504
  findOptions={findOptions}
505
+ onFindOptionsChange={onFindOptionsChange}
493
506
  styles={{}}
494
507
  headerComponents={{}}
495
508
  rowComponents={{}}
@@ -507,7 +520,7 @@ describe('DataGrid', () => {
507
520
  })
508
521
 
509
522
  it('should handle Escape to clear selection and search', async () => {
510
- await withTestGrid(async ({ injector, service, findOptions }) => {
523
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
511
524
  const rootElement = document.getElementById('root') as HTMLDivElement
512
525
 
513
526
  const { entries } = service.data.getValue()
@@ -523,6 +536,7 @@ describe('DataGrid', () => {
523
536
  columns={['id', 'name']}
524
537
  collectionService={service}
525
538
  findOptions={findOptions}
539
+ onFindOptionsChange={onFindOptionsChange}
526
540
  styles={{}}
527
541
  headerComponents={{}}
528
542
  rowComponents={{}}
@@ -541,7 +555,7 @@ describe('DataGrid', () => {
541
555
  })
542
556
 
543
557
  it('should handle Space to toggle selection of focused entry', async () => {
544
- await withTestGrid(async ({ injector, service, findOptions }) => {
558
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
545
559
  const rootElement = document.getElementById('root') as HTMLDivElement
546
560
 
547
561
  const { entries } = service.data.getValue()
@@ -556,6 +570,7 @@ describe('DataGrid', () => {
556
570
  columns={['id', 'name']}
557
571
  collectionService={service}
558
572
  findOptions={findOptions}
573
+ onFindOptionsChange={onFindOptionsChange}
559
574
  styles={{}}
560
575
  headerComponents={{}}
561
576
  rowComponents={{}}
@@ -576,7 +591,7 @@ describe('DataGrid', () => {
576
591
  })
577
592
 
578
593
  it('should handle + to select all entries', async () => {
579
- await withTestGrid(async ({ injector, service, findOptions }) => {
594
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
580
595
  const rootElement = document.getElementById('root') as HTMLDivElement
581
596
 
582
597
  service.hasFocus.setValue(true)
@@ -589,6 +604,7 @@ describe('DataGrid', () => {
589
604
  columns={['id', 'name']}
590
605
  collectionService={service}
591
606
  findOptions={findOptions}
607
+ onFindOptionsChange={onFindOptionsChange}
592
608
  styles={{}}
593
609
  headerComponents={{}}
594
610
  rowComponents={{}}
@@ -606,7 +622,7 @@ describe('DataGrid', () => {
606
622
  })
607
623
 
608
624
  it('should handle - to deselect all entries', async () => {
609
- await withTestGrid(async ({ injector, service, findOptions }) => {
625
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
610
626
  const rootElement = document.getElementById('root') as HTMLDivElement
611
627
 
612
628
  const { entries } = service.data.getValue()
@@ -621,6 +637,7 @@ describe('DataGrid', () => {
621
637
  columns={['id', 'name']}
622
638
  collectionService={service}
623
639
  findOptions={findOptions}
640
+ onFindOptionsChange={onFindOptionsChange}
624
641
  styles={{}}
625
642
  headerComponents={{}}
626
643
  rowComponents={{}}
@@ -638,7 +655,7 @@ describe('DataGrid', () => {
638
655
  })
639
656
 
640
657
  it('should handle * to invert selection', async () => {
641
- await withTestGrid(async ({ injector, service, findOptions }) => {
658
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
642
659
  const rootElement = document.getElementById('root') as HTMLDivElement
643
660
 
644
661
  const { entries } = service.data.getValue()
@@ -653,6 +670,7 @@ describe('DataGrid', () => {
653
670
  columns={['id', 'name']}
654
671
  collectionService={service}
655
672
  findOptions={findOptions}
673
+ onFindOptionsChange={onFindOptionsChange}
656
674
  styles={{}}
657
675
  headerComponents={{}}
658
676
  rowComponents={{}}
@@ -673,7 +691,7 @@ describe('DataGrid', () => {
673
691
  })
674
692
 
675
693
  it('should not handle keyboard when not focused', async () => {
676
- await withTestGrid(async ({ injector, service, findOptions }) => {
694
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
677
695
  const rootElement = document.getElementById('root') as HTMLDivElement
678
696
 
679
697
  service.hasFocus.setValue(false)
@@ -687,6 +705,7 @@ describe('DataGrid', () => {
687
705
  columns={['id', 'name']}
688
706
  collectionService={service}
689
707
  findOptions={findOptions}
708
+ onFindOptionsChange={onFindOptionsChange}
690
709
  styles={{}}
691
710
  headerComponents={{}}
692
711
  rowComponents={{}}
@@ -704,7 +723,7 @@ describe('DataGrid', () => {
704
723
  })
705
724
 
706
725
  it('should handle Insert to toggle selection and move to next', async () => {
707
- await withTestGrid(async ({ injector, service, findOptions }) => {
726
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
708
727
  const rootElement = document.getElementById('root') as HTMLDivElement
709
728
 
710
729
  const { entries } = service.data.getValue()
@@ -719,6 +738,7 @@ describe('DataGrid', () => {
719
738
  columns={['id', 'name']}
720
739
  collectionService={service}
721
740
  findOptions={findOptions}
741
+ onFindOptionsChange={onFindOptionsChange}
722
742
  styles={{}}
723
743
  headerComponents={{}}
724
744
  rowComponents={{}}
@@ -739,7 +759,7 @@ describe('DataGrid', () => {
739
759
 
740
760
  describe('styles', () => {
741
761
  it('should apply wrapper styles when provided', async () => {
742
- await withTestGrid(async ({ injector, service, findOptions }) => {
762
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
743
763
  const rootElement = document.getElementById('root') as HTMLDivElement
744
764
 
745
765
  initializeShadeRoot({
@@ -750,6 +770,7 @@ describe('DataGrid', () => {
750
770
  columns={['id', 'name']}
751
771
  collectionService={service}
752
772
  findOptions={findOptions}
773
+ onFindOptionsChange={onFindOptionsChange}
753
774
  styles={{
754
775
  wrapper: { backgroundColor: 'red' },
755
776
  }}
@@ -767,7 +788,7 @@ describe('DataGrid', () => {
767
788
  })
768
789
 
769
790
  it('should apply header styles when provided', async () => {
770
- await withTestGrid(async ({ injector, service, findOptions }) => {
791
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
771
792
  const rootElement = document.getElementById('root') as HTMLDivElement
772
793
 
773
794
  initializeShadeRoot({
@@ -778,6 +799,7 @@ describe('DataGrid', () => {
778
799
  columns={['id', 'name']}
779
800
  collectionService={service}
780
801
  findOptions={findOptions}
802
+ onFindOptionsChange={onFindOptionsChange}
781
803
  styles={{
782
804
  header: { color: 'blue' },
783
805
  }}
@@ -799,7 +821,7 @@ describe('DataGrid', () => {
799
821
  describe('empty and loading states', () => {
800
822
  it('should show empty component when no data', async () => {
801
823
  await withTestGrid(
802
- async ({ injector, service, findOptions }) => {
824
+ async ({ injector, service, findOptions, onFindOptionsChange }) => {
803
825
  const rootElement = document.getElementById('root') as HTMLDivElement
804
826
 
805
827
  initializeShadeRoot({
@@ -810,6 +832,7 @@ describe('DataGrid', () => {
810
832
  columns={['id', 'name']}
811
833
  collectionService={service}
812
834
  findOptions={findOptions}
835
+ onFindOptionsChange={onFindOptionsChange}
813
836
  styles={{}}
814
837
  headerComponents={{}}
815
838
  rowComponents={{}}
@@ -834,7 +857,7 @@ describe('DataGrid', () => {
834
857
  it('should pass row click to collectionService', async () => {
835
858
  const onRowClick = vi.fn()
836
859
  await withTestGrid(
837
- async ({ injector, service, findOptions }) => {
860
+ async ({ injector, service, findOptions, onFindOptionsChange }) => {
838
861
  const rootElement = document.getElementById('root') as HTMLDivElement
839
862
 
840
863
  service.data.setValue({
@@ -850,6 +873,7 @@ describe('DataGrid', () => {
850
873
  columns={['id', 'name']}
851
874
  collectionService={service}
852
875
  findOptions={findOptions}
876
+ onFindOptionsChange={onFindOptionsChange}
853
877
  styles={{}}
854
878
  headerComponents={{}}
855
879
  rowComponents={{}}
@@ -872,7 +896,7 @@ describe('DataGrid', () => {
872
896
  it('should pass row double click to collectionService', async () => {
873
897
  const onRowDoubleClick = vi.fn()
874
898
  await withTestGrid(
875
- async ({ injector, service, findOptions }) => {
899
+ async ({ injector, service, findOptions, onFindOptionsChange }) => {
876
900
  const rootElement = document.getElementById('root') as HTMLDivElement
877
901
 
878
902
  service.data.setValue({
@@ -888,6 +912,7 @@ describe('DataGrid', () => {
888
912
  columns={['id', 'name']}
889
913
  collectionService={service}
890
914
  findOptions={findOptions}
915
+ onFindOptionsChange={onFindOptionsChange}
891
916
  styles={{}}
892
917
  headerComponents={{}}
893
918
  rowComponents={{}}
@@ -911,7 +936,7 @@ describe('DataGrid', () => {
911
936
 
912
937
  describe('keyboard listener cleanup', () => {
913
938
  it('should remove keyboard listener when component is disconnected', async () => {
914
- await withTestGrid(async ({ injector, service, findOptions }) => {
939
+ await withTestGrid(async ({ injector, service, findOptions, onFindOptionsChange }) => {
915
940
  const rootElement = document.getElementById('root') as HTMLDivElement
916
941
 
917
942
  service.hasFocus.setValue(true)
@@ -925,6 +950,7 @@ describe('DataGrid', () => {
925
950
  columns={['id', 'name']}
926
951
  collectionService={service}
927
952
  findOptions={findOptions}
953
+ onFindOptionsChange={onFindOptionsChange}
928
954
  styles={{}}
929
955
  headerComponents={{}}
930
956
  rowComponents={{}}
@@ -1,7 +1,6 @@
1
1
  import type { FindOptions } from '@furystack/core'
2
2
  import type { ChildrenList } from '@furystack/shades'
3
3
  import { createComponent, Shade } from '@furystack/shades'
4
- import type { ObservableValue } from '@furystack/utils'
5
4
  import { ClickAwayService } from '../../services/click-away-service.js'
6
5
  import type { CollectionService } from '../../services/collection-service.js'
7
6
  import { cssVariableTheme } from '../../services/css-variable-theme.js'
@@ -62,7 +61,12 @@ export interface DataGridProps<T, Column extends string> {
62
61
  /**
63
62
  * The query settings to use for the data source
64
63
  */
65
- findOptions: ObservableValue<FindOptions<T, Array<keyof T>>>
64
+ findOptions: FindOptions<T, Array<keyof T>>
65
+
66
+ /**
67
+ * Callback invoked when find options change (e.g. pagination, sorting, filtering)
68
+ */
69
+ onFindOptionsChange: (options: FindOptions<T, Array<keyof T>>) => void
66
70
 
67
71
  /**
68
72
  * A list of custom header components to use
@@ -121,7 +125,7 @@ export const DataGrid: <T, Column extends string>(
121
125
  props: DataGridProps<T, Column>,
122
126
  children: ChildrenList,
123
127
  ) => JSX.Element<any> = Shade({
124
- shadowDomName: 'shade-data-grid',
128
+ customElementName: 'shade-data-grid',
125
129
  css: {
126
130
  display: 'block',
127
131
  fontFamily: cssVariableTheme.typography.fontFamily,
@@ -156,6 +160,9 @@ export const DataGrid: <T, Column extends string>(
156
160
  render: ({ props, useDisposable, useRef, useHostProps }) => {
157
161
  const wrapperRef = useRef<HTMLDivElement>('gridWrapper')
158
162
 
163
+ const headerFindOptions = props.findOptions as FilterableFindOptions
164
+ const handleHeaderChange = props.onFindOptionsChange as (options: FilterableFindOptions) => void
165
+
159
166
  useDisposable('keydown-handler', () => {
160
167
  const listener = (ev: KeyboardEvent) => props.collectionService.handleKeyDown(ev)
161
168
  window.addEventListener('keydown', listener)
@@ -190,12 +197,10 @@ export const DataGrid: <T, Column extends string>(
190
197
  return (
191
198
  <th style={props.styles?.header}>
192
199
  {props.headerComponents?.[column]?.(column) || props.headerComponents?.default?.(column) || (
193
- <DataGridHeader<
194
- ReturnType<typeof props.collectionService.data.getValue>['entries'][number],
195
- typeof column
196
- >
200
+ <DataGridHeader<typeof column>
197
201
  field={column}
198
- findOptions={props.findOptions}
202
+ findOptions={headerFindOptions}
203
+ onFindOptionsChange={handleHeaderChange}
199
204
  filterConfig={props.columnFilters?.[column]}
200
205
  />
201
206
  )}
@@ -222,6 +227,7 @@ export const DataGrid: <T, Column extends string>(
222
227
  <DataGridFooter
223
228
  service={props.collectionService}
224
229
  findOptions={props.findOptions}
230
+ onFindOptionsChange={props.onFindOptionsChange}
225
231
  paginationOptions={props.paginationOptions}
226
232
  />
227
233
  </div>