@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,8 +1,8 @@
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'
5
- import { afterEach, beforeEach, describe, expect, it } from 'vitest'
4
+ import { usingAsync } from '@furystack/utils'
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
6
6
  import { CollectionService } from '../../services/collection-service.js'
7
7
  import { DataGridFooter, dataGridItemsPerPage } from './footer.js'
8
8
 
@@ -23,11 +23,8 @@ describe('DataGridFooter', () => {
23
23
  return service
24
24
  }
25
25
 
26
- const createFindOptions = (
27
- top: number = 10,
28
- skip: number = 0,
29
- ): ObservableValue<FindOptions<TestItem, Array<keyof TestItem>>> => {
30
- return new ObservableValue<FindOptions<TestItem, Array<keyof TestItem>>>({ top, skip })
26
+ const createFindOptions = (top: number = 10, skip: number = 0): FindOptions<TestItem, Array<keyof TestItem>> => {
27
+ return { top, skip }
31
28
  }
32
29
 
33
30
  it('should render with custom element', async () => {
@@ -35,11 +32,14 @@ describe('DataGridFooter', () => {
35
32
  const rootElement = document.getElementById('root') as HTMLDivElement
36
33
  const service = createService()
37
34
  const findOptions = createFindOptions()
35
+ const onFindOptionsChange = vi.fn()
38
36
 
39
37
  initializeShadeRoot({
40
38
  injector,
41
39
  rootElement,
42
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
40
+ jsxElement: (
41
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
42
+ ),
43
43
  })
44
44
 
45
45
  await flushUpdates()
@@ -54,11 +54,14 @@ describe('DataGridFooter', () => {
54
54
  const rootElement = document.getElementById('root') as HTMLDivElement
55
55
  const service = createService()
56
56
  const findOptions = createFindOptions()
57
+ const onFindOptionsChange = vi.fn()
57
58
 
58
59
  initializeShadeRoot({
59
60
  injector,
60
61
  rootElement,
61
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
62
+ jsxElement: (
63
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
64
+ ),
62
65
  })
63
66
 
64
67
  await flushUpdates()
@@ -75,11 +78,14 @@ describe('DataGridFooter', () => {
75
78
  const rootElement = document.getElementById('root') as HTMLDivElement
76
79
  const service = createService()
77
80
  const findOptions = createFindOptions()
81
+ const onFindOptionsChange = vi.fn()
78
82
 
79
83
  initializeShadeRoot({
80
84
  injector,
81
85
  rootElement,
82
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
86
+ jsxElement: (
87
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
88
+ ),
83
89
  })
84
90
 
85
91
  await flushUpdates()
@@ -102,11 +108,14 @@ describe('DataGridFooter', () => {
102
108
  const rootElement = document.getElementById('root') as HTMLDivElement
103
109
  const service = createService([], 100)
104
110
  const findOptions = createFindOptions(10, 0)
111
+ const onFindOptionsChange = vi.fn()
105
112
 
106
113
  initializeShadeRoot({
107
114
  injector,
108
115
  rootElement,
109
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
116
+ jsxElement: (
117
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
118
+ ),
110
119
  })
111
120
 
112
121
  await flushUpdates()
@@ -122,11 +131,14 @@ describe('DataGridFooter', () => {
122
131
  const rootElement = document.getElementById('root') as HTMLDivElement
123
132
  const service = createService([], 50)
124
133
  const findOptions = createFindOptions(Infinity, 0)
134
+ const onFindOptionsChange = vi.fn()
125
135
 
126
136
  initializeShadeRoot({
127
137
  injector,
128
138
  rootElement,
129
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
139
+ jsxElement: (
140
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
141
+ ),
130
142
  })
131
143
 
132
144
  await flushUpdates()
@@ -142,11 +154,14 @@ describe('DataGridFooter', () => {
142
154
  const rootElement = document.getElementById('root') as HTMLDivElement
143
155
  const service = createService([], 100)
144
156
  const findOptions = createFindOptions(25, 0)
157
+ const onFindOptionsChange = vi.fn()
145
158
 
146
159
  initializeShadeRoot({
147
160
  injector,
148
161
  rootElement,
149
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
162
+ jsxElement: (
163
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
164
+ ),
150
165
  })
151
166
 
152
167
  await flushUpdates()
@@ -162,16 +177,19 @@ describe('DataGridFooter', () => {
162
177
  })
163
178
  })
164
179
 
165
- it('should update findOptions when page is changed via Pagination', async () => {
180
+ it('should call onFindOptionsChange when page is changed via Pagination', async () => {
166
181
  await usingAsync(new Injector(), async (injector) => {
167
182
  const rootElement = document.getElementById('root') as HTMLDivElement
168
183
  const service = createService([], 100)
169
184
  const findOptions = createFindOptions(10, 0)
185
+ const onFindOptionsChange = vi.fn()
170
186
 
171
187
  initializeShadeRoot({
172
188
  injector,
173
189
  rootElement,
174
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
190
+ jsxElement: (
191
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
192
+ ),
175
193
  })
176
194
 
177
195
  await flushUpdates()
@@ -185,21 +203,23 @@ describe('DataGridFooter', () => {
185
203
 
186
204
  await flushUpdates()
187
205
 
188
- const updatedOptions = findOptions.getValue()
189
- expect(updatedOptions.skip).toBe(10)
206
+ expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ skip: 10 }))
190
207
  })
191
208
  })
192
209
 
193
- it('should update findOptions when items per page is changed', async () => {
210
+ it('should call onFindOptionsChange when items per page is changed', async () => {
194
211
  await usingAsync(new Injector(), async (injector) => {
195
212
  const rootElement = document.getElementById('root') as HTMLDivElement
196
213
  const service = createService([], 100)
197
214
  const findOptions = createFindOptions(10, 0)
215
+ const onFindOptionsChange = vi.fn()
198
216
 
199
217
  initializeShadeRoot({
200
218
  injector,
201
219
  rootElement,
202
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
220
+ jsxElement: (
221
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
222
+ ),
203
223
  })
204
224
 
205
225
  await flushUpdates()
@@ -218,8 +238,7 @@ describe('DataGridFooter', () => {
218
238
 
219
239
  await flushUpdates()
220
240
 
221
- const updatedOptions = findOptions.getValue()
222
- expect(updatedOptions.top).toBe(25)
241
+ expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ top: 25 }))
223
242
  })
224
243
  })
225
244
 
@@ -228,11 +247,14 @@ describe('DataGridFooter', () => {
228
247
  const rootElement = document.getElementById('root') as HTMLDivElement
229
248
  const service = createService([], 100)
230
249
  const findOptions = createFindOptions(10, 20)
250
+ const onFindOptionsChange = vi.fn()
231
251
 
232
252
  initializeShadeRoot({
233
253
  injector,
234
254
  rootElement,
235
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
255
+ jsxElement: (
256
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
257
+ ),
236
258
  })
237
259
 
238
260
  await flushUpdates()
@@ -251,9 +273,7 @@ describe('DataGridFooter', () => {
251
273
 
252
274
  await flushUpdates()
253
275
 
254
- const updatedOptions = findOptions.getValue()
255
- expect(updatedOptions.top).toBe(25)
256
- expect(updatedOptions.skip).toBe(50)
276
+ expect(onFindOptionsChange).toHaveBeenCalledWith(expect.objectContaining({ top: 25, skip: 50 }))
257
277
  })
258
278
  })
259
279
 
@@ -262,11 +282,14 @@ describe('DataGridFooter', () => {
262
282
  const rootElement = document.getElementById('root') as HTMLDivElement
263
283
  const service = createService([], 100)
264
284
  const findOptions = createFindOptions(10, 30)
285
+ const onFindOptionsChange = vi.fn()
265
286
 
266
287
  initializeShadeRoot({
267
288
  injector,
268
289
  rootElement,
269
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
290
+ jsxElement: (
291
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
292
+ ),
270
293
  })
271
294
 
272
295
  await flushUpdates()
@@ -285,11 +308,14 @@ describe('DataGridFooter', () => {
285
308
  const rootElement = document.getElementById('root') as HTMLDivElement
286
309
  const service = createService([], 100)
287
310
  const findOptions = createFindOptions(25, 0)
311
+ const onFindOptionsChange = vi.fn()
288
312
 
289
313
  initializeShadeRoot({
290
314
  injector,
291
315
  rootElement,
292
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
316
+ jsxElement: (
317
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
318
+ ),
293
319
  })
294
320
 
295
321
  await flushUpdates()
@@ -311,11 +337,14 @@ describe('DataGridFooter', () => {
311
337
  const rootElement = document.getElementById('root') as HTMLDivElement
312
338
  const service = createService([], 30)
313
339
  const findOptions = createFindOptions(10, 0)
340
+ const onFindOptionsChange = vi.fn()
314
341
 
315
342
  initializeShadeRoot({
316
343
  injector,
317
344
  rootElement,
318
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
345
+ jsxElement: (
346
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
347
+ ),
319
348
  })
320
349
 
321
350
  await flushUpdates()
@@ -349,11 +378,19 @@ describe('DataGridFooter', () => {
349
378
  const rootElement = document.getElementById('root') as HTMLDivElement
350
379
  const service = createService()
351
380
  const findOptions = createFindOptions()
381
+ const onFindOptionsChange = vi.fn()
352
382
 
353
383
  initializeShadeRoot({
354
384
  injector,
355
385
  rootElement,
356
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} paginationOptions={[5, 15, 30]} />,
386
+ jsxElement: (
387
+ <DataGridFooter
388
+ service={service}
389
+ findOptions={findOptions}
390
+ onFindOptionsChange={onFindOptionsChange}
391
+ paginationOptions={[5, 15, 30]}
392
+ />
393
+ ),
357
394
  })
358
395
 
359
396
  await flushUpdates()
@@ -375,11 +412,19 @@ describe('DataGridFooter', () => {
375
412
  const rootElement = document.getElementById('root') as HTMLDivElement
376
413
  const service = createService([], 50)
377
414
  const findOptions = createFindOptions(10, 0)
415
+ const onFindOptionsChange = vi.fn()
378
416
 
379
417
  initializeShadeRoot({
380
418
  injector,
381
419
  rootElement,
382
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} paginationOptions={[10]} />,
420
+ jsxElement: (
421
+ <DataGridFooter
422
+ service={service}
423
+ findOptions={findOptions}
424
+ onFindOptionsChange={onFindOptionsChange}
425
+ paginationOptions={[10]}
426
+ />
427
+ ),
383
428
  })
384
429
 
385
430
  await flushUpdates()
@@ -395,11 +440,14 @@ describe('DataGridFooter', () => {
395
440
  const rootElement = document.getElementById('root') as HTMLDivElement
396
441
  const service = createService()
397
442
  const findOptions = createFindOptions()
443
+ const onFindOptionsChange = vi.fn()
398
444
 
399
445
  initializeShadeRoot({
400
446
  injector,
401
447
  rootElement,
402
- jsxElement: <DataGridFooter service={service} findOptions={findOptions} />,
448
+ jsxElement: (
449
+ <DataGridFooter service={service} findOptions={findOptions} onFindOptionsChange={onFindOptionsChange} />
450
+ ),
403
451
  })
404
452
 
405
453
  await flushUpdates()
@@ -1,6 +1,5 @@
1
1
  import type { FindOptions } from '@furystack/core'
2
2
  import { Shade, createComponent } from '@furystack/shades'
3
- import type { ObservableValue } from '@furystack/utils'
4
3
  import type { CollectionService } from '../../services/collection-service.js'
5
4
  import { cssVariableTheme } from '../../services/css-variable-theme.js'
6
5
  import { Pagination } from '../pagination.js'
@@ -9,10 +8,11 @@ export const dataGridItemsPerPage = [10, 20, 25, 50, 100, Infinity]
9
8
 
10
9
  export const DataGridFooter: <T>(props: {
11
10
  service: CollectionService<T>
12
- findOptions: ObservableValue<FindOptions<T, Array<keyof T>>>
11
+ findOptions: FindOptions<T, Array<keyof T>>
12
+ onFindOptionsChange: (options: FindOptions<T, Array<keyof T>>) => void
13
13
  paginationOptions?: number[]
14
14
  }) => JSX.Element = Shade({
15
- shadowDomName: 'shade-data-grid-footer',
15
+ customElementName: 'shade-data-grid-footer',
16
16
  css: {
17
17
  display: 'block',
18
18
  fontFamily: cssVariableTheme.typography.fontFamily,
@@ -44,20 +44,15 @@ export const DataGridFooter: <T>(props: {
44
44
  },
45
45
  },
46
46
  render: ({ props, useObservable }) => {
47
- const { service, findOptions, paginationOptions = dataGridItemsPerPage } = props
47
+ const { service, findOptions, onFindOptionsChange, paginationOptions = dataGridItemsPerPage } = props
48
48
  const [currentData] = useObservable('dataUpdater', service.data)
49
- const [currentOptions, setCurrentOptions] = useObservable('optionsUpdater', findOptions, {
50
- filter: (newValue, oldValue) => {
51
- return newValue.top !== oldValue.top || newValue.skip !== oldValue.skip
52
- },
53
- })
54
49
 
55
- const top = currentOptions.top || Infinity
56
- const skip = currentOptions.skip || 0
50
+ const top = findOptions.top || Infinity
51
+ const skip = findOptions.skip || 0
57
52
  const currentPage = Math.ceil(skip) / (top || 1)
58
53
  const currentEntriesPerPage = top
59
54
 
60
- const pageCount = Math.ceil(currentData.count / (currentOptions.top || Infinity))
55
+ const pageCount = Math.ceil(currentData.count / (findOptions.top || Infinity))
61
56
 
62
57
  return (
63
58
  <div className="pager">
@@ -67,7 +62,7 @@ export const DataGridFooter: <T>(props: {
67
62
  page={currentPage + 1}
68
63
  size="small"
69
64
  onPageChange={(newPage) => {
70
- setCurrentOptions({ ...currentOptions, skip: (currentOptions.top || 0) * (newPage - 1) })
65
+ onFindOptionsChange({ ...findOptions, skip: (findOptions.top || 0) * (newPage - 1) })
71
66
  }}
72
67
  />
73
68
  )}
@@ -77,8 +72,8 @@ export const DataGridFooter: <T>(props: {
77
72
  <select
78
73
  onchange={(ev) => {
79
74
  const value = parseInt((ev.currentTarget as HTMLInputElement).value, 10)
80
- setCurrentOptions({
81
- ...currentOptions,
75
+ onFindOptionsChange({
76
+ ...findOptions,
82
77
  top: value,
83
78
  skip: currentPage * value,
84
79
  })