@lattice-php/lattice 0.2.0 → 0.3.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 (476) hide show
  1. package/README.md +3 -1
  2. package/dist/action/components/action-form.d.ts +2 -2
  3. package/dist/action/components/action-form.js +35 -67
  4. package/dist/action/components/action-form.js.map +1 -1
  5. package/dist/action/components/action-group.js +18 -6
  6. package/dist/action/components/action-group.js.map +1 -1
  7. package/dist/action/components/action-menu-context.d.ts +6 -0
  8. package/dist/action/components/action-menu-context.js +18 -0
  9. package/dist/action/components/action-menu-context.js.map +1 -0
  10. package/dist/action/components/action.js +20 -13
  11. package/dist/action/components/action.js.map +1 -1
  12. package/dist/action/index.js.map +1 -1
  13. package/dist/appearance/index.js +7 -2
  14. package/dist/appearance/index.js.map +1 -1
  15. package/dist/chat/components/chat-box.d.ts +3 -0
  16. package/dist/chat/components/chat-box.js +53 -0
  17. package/dist/chat/components/chat-box.js.map +1 -0
  18. package/dist/chat/components/message-list.d.ts +5 -0
  19. package/dist/chat/components/message-list.js +22 -0
  20. package/dist/chat/components/message-list.js.map +1 -0
  21. package/dist/chat/components/message.d.ts +5 -0
  22. package/dist/chat/components/message.js +20 -0
  23. package/dist/chat/components/message.js.map +1 -0
  24. package/dist/chat/components/prompt-input.d.ts +8 -0
  25. package/dist/chat/components/prompt-input.js +49 -0
  26. package/dist/chat/components/prompt-input.js.map +1 -0
  27. package/dist/chat/index.d.ts +1 -0
  28. package/dist/chat/index.js +15 -0
  29. package/dist/chat/index.js.map +1 -0
  30. package/dist/chat/parts/text.d.ts +3 -0
  31. package/dist/chat/parts/text.js +12 -0
  32. package/dist/chat/parts/text.js.map +1 -0
  33. package/dist/chat/parts/tool-call.d.ts +3 -0
  34. package/dist/chat/parts/tool-call.js +20 -0
  35. package/dist/chat/parts/tool-call.js.map +1 -0
  36. package/dist/chat/transport.d.ts +2 -0
  37. package/dist/chat/transport.js +47 -0
  38. package/dist/chat/transport.js.map +1 -0
  39. package/dist/chat/types.d.ts +39 -0
  40. package/dist/chat/use-chat.d.ts +15 -0
  41. package/dist/chat/use-chat.js +161 -0
  42. package/dist/chat/use-chat.js.map +1 -0
  43. package/dist/core/api.d.ts +18 -0
  44. package/dist/core/api.js +51 -0
  45. package/dist/core/api.js.map +1 -0
  46. package/dist/core/collapsed-context.d.ts +2 -0
  47. package/dist/core/collapsed-context.js +10 -0
  48. package/dist/core/collapsed-context.js.map +1 -0
  49. package/dist/core/column-sizing.d.ts +17 -0
  50. package/dist/core/column-sizing.js +61 -0
  51. package/dist/core/column-sizing.js.map +1 -0
  52. package/dist/core/components/badge.js.map +1 -1
  53. package/dist/core/components/button.d.ts +1 -1
  54. package/dist/core/components/button.js +4 -0
  55. package/dist/core/components/button.js.map +1 -1
  56. package/dist/core/components/card.js.map +1 -1
  57. package/dist/core/components/chart.d.ts +3 -0
  58. package/dist/core/components/chart.js +175 -0
  59. package/dist/core/components/chart.js.map +1 -0
  60. package/dist/{form/components/base → core/components}/checkbox.js +3 -3
  61. package/dist/{form/components/base → core/components}/checkbox.js.map +1 -1
  62. package/dist/core/components/combobox.d.ts +33 -0
  63. package/dist/core/components/combobox.js +99 -0
  64. package/dist/core/components/combobox.js.map +1 -0
  65. package/dist/core/components/confirm-dialog.js +6 -12
  66. package/dist/core/components/confirm-dialog.js.map +1 -1
  67. package/dist/core/components/control.d.ts +13 -0
  68. package/dist/core/components/control.js +27 -0
  69. package/dist/core/components/control.js.map +1 -0
  70. package/dist/core/components/dialog.d.ts +19 -0
  71. package/dist/core/components/dialog.js +75 -0
  72. package/dist/core/components/dialog.js.map +1 -0
  73. package/dist/core/components/dropdown-menu.d.ts +14 -0
  74. package/dist/core/components/dropdown-menu.js +42 -0
  75. package/dist/core/components/dropdown-menu.js.map +1 -0
  76. package/dist/core/components/floating-panel.d.ts +3 -0
  77. package/dist/core/components/floating-panel.js +65 -0
  78. package/dist/core/components/floating-panel.js.map +1 -0
  79. package/dist/core/components/fragment.js +25 -13
  80. package/dist/core/components/fragment.js.map +1 -1
  81. package/dist/core/components/grid.js.map +1 -1
  82. package/dist/core/components/heading.js.map +1 -1
  83. package/dist/core/components/icon.js +1 -0
  84. package/dist/core/components/icon.js.map +1 -1
  85. package/dist/core/components/index.js +8 -1
  86. package/dist/core/components/index.js.map +1 -1
  87. package/dist/core/components/info-tooltip.d.ts +3 -0
  88. package/dist/core/components/info-tooltip.js +26 -0
  89. package/dist/core/components/info-tooltip.js.map +1 -0
  90. package/dist/core/components/link.js +12 -6
  91. package/dist/core/components/link.js.map +1 -1
  92. package/dist/core/components/modal.js +9 -31
  93. package/dist/core/components/modal.js.map +1 -1
  94. package/dist/core/components/popover.d.ts +8 -0
  95. package/dist/core/components/popover.js +37 -0
  96. package/dist/core/components/popover.js.map +1 -0
  97. package/dist/core/components/raw-block.d.ts +3 -0
  98. package/dist/core/components/raw-block.js +10 -0
  99. package/dist/core/components/raw-block.js.map +1 -0
  100. package/dist/core/components/section.js +6 -10
  101. package/dist/core/components/section.js.map +1 -1
  102. package/dist/core/components/segmented-control.js.map +1 -1
  103. package/dist/core/components/segmented-pills.js.map +1 -1
  104. package/dist/core/components/skeleton.d.ts +3 -0
  105. package/dist/core/components/skeleton.js +16 -0
  106. package/dist/core/components/skeleton.js.map +1 -0
  107. package/dist/core/components/spinner.js.map +1 -1
  108. package/dist/core/components/stack.js +19 -8
  109. package/dist/core/components/stack.js.map +1 -1
  110. package/dist/core/components/tabs.js.map +1 -1
  111. package/dist/core/components/text.js +17 -1
  112. package/dist/core/components/text.js.map +1 -1
  113. package/dist/core/headers.d.ts +1 -0
  114. package/dist/core/headers.js +14 -0
  115. package/dist/core/headers.js.map +1 -0
  116. package/dist/core/registry-context.d.ts +21 -0
  117. package/dist/core/registry-context.js +40 -0
  118. package/dist/core/registry-context.js.map +1 -0
  119. package/dist/core/registry.d.ts +4 -1
  120. package/dist/core/registry.js +10 -1
  121. package/dist/core/registry.js.map +1 -1
  122. package/dist/core/renderer.d.ts +8 -14
  123. package/dist/core/renderer.js +17 -27
  124. package/dist/core/renderer.js.map +1 -1
  125. package/dist/core/test-id.d.ts +8 -0
  126. package/dist/core/test-id.js +21 -0
  127. package/dist/core/test-id.js.map +1 -0
  128. package/dist/core/types.d.ts +22 -8
  129. package/dist/core/use-column-resizing.d.ts +27 -0
  130. package/dist/core/use-column-resizing.js +228 -0
  131. package/dist/core/use-column-resizing.js.map +1 -0
  132. package/dist/effects/dispatch.d.ts +20 -0
  133. package/dist/effects/dispatch.js +39 -0
  134. package/dist/effects/dispatch.js.map +1 -0
  135. package/dist/effects/registry.d.ts +38 -0
  136. package/dist/effects/registry.js +51 -0
  137. package/dist/effects/registry.js.map +1 -0
  138. package/dist/effects/use-effect-dispatcher.d.ts +8 -0
  139. package/dist/effects/use-effect-dispatcher.js +20 -0
  140. package/dist/effects/use-effect-dispatcher.js.map +1 -0
  141. package/dist/effects/use-flash-effects.d.ts +5 -0
  142. package/dist/effects/use-flash-effects.js +22 -0
  143. package/dist/effects/use-flash-effects.js.map +1 -0
  144. package/dist/events/event-bridge.d.ts +3 -7
  145. package/dist/events/event-bridge.js +17 -47
  146. package/dist/events/event-bridge.js.map +1 -1
  147. package/dist/events/event-names.d.ts +3 -1
  148. package/dist/events/event-names.js +3 -1
  149. package/dist/events/event-names.js.map +1 -1
  150. package/dist/form/components/base/field.d.ts +2 -1
  151. package/dist/form/components/base/field.js +17 -2
  152. package/dist/form/components/base/field.js.map +1 -1
  153. package/dist/form/components/base/input-error.js +1 -1
  154. package/dist/form/components/base/input-error.js.map +1 -1
  155. package/dist/form/components/base/input.js +2 -1
  156. package/dist/form/components/base/input.js.map +1 -1
  157. package/dist/form/components/base/label.js.map +1 -1
  158. package/dist/form/components/base/password-input.js.map +1 -1
  159. package/dist/form/components/base/submit-button.js +3 -1
  160. package/dist/form/components/base/submit-button.js.map +1 -1
  161. package/dist/form/components/base/textarea.js +2 -1
  162. package/dist/form/components/base/textarea.js.map +1 -1
  163. package/dist/form/components/conditions.js.map +1 -1
  164. package/dist/form/components/context.d.ts +1 -0
  165. package/dist/form/components/context.js +1 -0
  166. package/dist/form/components/context.js.map +1 -1
  167. package/dist/form/components/field-props.d.ts +4 -0
  168. package/dist/form/components/field-props.js.map +1 -1
  169. package/dist/form/components/field-scope.d.ts +21 -0
  170. package/dist/form/components/field-scope.js +54 -0
  171. package/dist/form/components/field-scope.js.map +1 -0
  172. package/dist/form/components/fields/block-add-menu.d.ts +9 -0
  173. package/dist/form/components/fields/block-add-menu.js +27 -0
  174. package/dist/form/components/fields/block-add-menu.js.map +1 -0
  175. package/dist/form/components/fields/builder.d.ts +2 -0
  176. package/dist/form/components/fields/builder.js +124 -0
  177. package/dist/form/components/fields/builder.js.map +1 -0
  178. package/dist/form/components/fields/checkbox.d.ts +1 -1
  179. package/dist/form/components/fields/checkbox.js +14 -11
  180. package/dist/form/components/fields/checkbox.js.map +1 -1
  181. package/dist/form/components/fields/choice.d.ts +1 -1
  182. package/dist/form/components/fields/choice.js +5 -4
  183. package/dist/form/components/fields/choice.js.map +1 -1
  184. package/dist/form/components/fields/date-input.d.ts +1 -1
  185. package/dist/form/components/fields/date-input.js +2 -1
  186. package/dist/form/components/fields/date-input.js.map +1 -1
  187. package/dist/form/components/fields/file-upload.d.ts +2 -0
  188. package/dist/form/components/fields/file-upload.js +250 -0
  189. package/dist/form/components/fields/file-upload.js.map +1 -0
  190. package/dist/form/components/fields/hidden-input.d.ts +1 -1
  191. package/dist/form/components/fields/hidden-input.js +11 -5
  192. package/dist/form/components/fields/hidden-input.js.map +1 -1
  193. package/dist/form/components/fields/number-input.d.ts +1 -1
  194. package/dist/form/components/fields/number-input.js +3 -1
  195. package/dist/form/components/fields/number-input.js.map +1 -1
  196. package/dist/form/components/fields/password-input.d.ts +1 -1
  197. package/dist/form/components/fields/password-input.js +31 -22
  198. package/dist/form/components/fields/password-input.js.map +1 -1
  199. package/dist/form/components/fields/repeater-rows.d.ts +12 -0
  200. package/dist/form/components/fields/repeater-rows.js +46 -0
  201. package/dist/form/components/fields/repeater-rows.js.map +1 -0
  202. package/dist/form/components/fields/repeater.d.ts +2 -0
  203. package/dist/form/components/fields/repeater.js +97 -0
  204. package/dist/form/components/fields/repeater.js.map +1 -0
  205. package/dist/form/components/fields/rich-editor.d.ts +1 -1
  206. package/dist/form/components/fields/rich-editor.js +37 -9
  207. package/dist/form/components/fields/rich-editor.js.map +1 -1
  208. package/dist/form/components/fields/row-action-menu.d.ts +17 -0
  209. package/dist/form/components/fields/row-action-menu.js +61 -0
  210. package/dist/form/components/fields/row-action-menu.js.map +1 -0
  211. package/dist/form/components/fields/row-actions.d.ts +10 -0
  212. package/dist/form/components/fields/row-actions.js +45 -0
  213. package/dist/form/components/fields/row-actions.js.map +1 -0
  214. package/dist/form/components/fields/row-item.d.ts +27 -0
  215. package/dist/form/components/fields/row-item.js +69 -0
  216. package/dist/form/components/fields/row-item.js.map +1 -0
  217. package/dist/form/components/fields/select.d.ts +1 -1
  218. package/dist/form/components/fields/select.js +69 -104
  219. package/dist/form/components/fields/select.js.map +1 -1
  220. package/dist/form/components/fields/simple-field.js +1 -0
  221. package/dist/form/components/fields/simple-field.js.map +1 -1
  222. package/dist/form/components/fields/table-rows.d.ts +32 -0
  223. package/dist/form/components/fields/table-rows.js +188 -0
  224. package/dist/form/components/fields/table-rows.js.map +1 -0
  225. package/dist/form/components/fields/text-input.d.ts +1 -1
  226. package/dist/form/components/fields/text-input.js +2 -1
  227. package/dist/form/components/fields/text-input.js.map +1 -1
  228. package/dist/form/components/fields/textarea.d.ts +1 -1
  229. package/dist/form/components/fields/textarea.js +2 -1
  230. package/dist/form/components/fields/textarea.js.map +1 -1
  231. package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
  232. package/dist/form/components/fields/use-flip-reorder.js +51 -0
  233. package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
  234. package/dist/form/components/fields/use-row-collection.d.ts +11 -0
  235. package/dist/form/components/fields/use-row-collection.js +44 -0
  236. package/dist/form/components/fields/use-row-collection.js.map +1 -0
  237. package/dist/form/components/form-path.d.ts +5 -0
  238. package/dist/form/components/form-path.js +40 -0
  239. package/dist/form/components/form-path.js.map +1 -0
  240. package/dist/form/components/form-transport.d.ts +3 -4
  241. package/dist/form/components/form-transport.js +17 -18
  242. package/dist/form/components/form-transport.js.map +1 -1
  243. package/dist/form/components/form.js +24 -18
  244. package/dist/form/components/form.js.map +1 -1
  245. package/dist/form/components/index.d.ts +3 -0
  246. package/dist/form/components/index.js +4 -1
  247. package/dist/form/components/override-keys.d.ts +2 -0
  248. package/dist/form/components/override-keys.js +12 -0
  249. package/dist/form/components/override-keys.js.map +1 -0
  250. package/dist/form/components/prefill-context.d.ts +5 -0
  251. package/dist/form/components/prefill-context.js +11 -0
  252. package/dist/form/components/prefill-context.js.map +1 -0
  253. package/dist/form/components/prefill-targets.d.ts +17 -0
  254. package/dist/form/components/prefill-targets.js +73 -0
  255. package/dist/form/components/prefill-targets.js.map +1 -0
  256. package/dist/form/components/resolved-nodes.js +4 -1
  257. package/dist/form/components/resolved-nodes.js.map +1 -1
  258. package/dist/form/components/row-layout-context.d.ts +5 -0
  259. package/dist/form/components/row-layout-context.js +18 -0
  260. package/dist/form/components/row-layout-context.js.map +1 -0
  261. package/dist/form/components/use-controlled-field.d.ts +2 -0
  262. package/dist/form/components/use-controlled-field.js +13 -5
  263. package/dist/form/components/use-controlled-field.js.map +1 -1
  264. package/dist/form/components/use-dependent-field.js +7 -1
  265. package/dist/form/components/use-dependent-field.js.map +1 -1
  266. package/dist/form/components/use-field-commit.d.ts +4 -0
  267. package/dist/form/components/use-field-commit.js +21 -7
  268. package/dist/form/components/use-field-commit.js.map +1 -1
  269. package/dist/form/components/use-form-resolver.d.ts +6 -1
  270. package/dist/form/components/use-form-resolver.js +50 -5
  271. package/dist/form/components/use-form-resolver.js.map +1 -1
  272. package/dist/form/components/use-seed-default.js +8 -3
  273. package/dist/form/components/use-seed-default.js.map +1 -1
  274. package/dist/form/components/values.js +20 -5
  275. package/dist/form/components/values.js.map +1 -1
  276. package/dist/form/index.js +13 -10
  277. package/dist/form/index.js.map +1 -1
  278. package/dist/form/skeleton.js +5 -4
  279. package/dist/form/skeleton.js.map +1 -1
  280. package/dist/i18n/backend.d.ts +7 -5
  281. package/dist/i18n/backend.js +23 -8
  282. package/dist/i18n/backend.js.map +1 -1
  283. package/dist/i18n/config.d.ts +6 -0
  284. package/dist/i18n/config.js +36 -0
  285. package/dist/i18n/config.js.map +1 -0
  286. package/dist/i18n/index.d.ts +7 -1
  287. package/dist/i18n/index.js +5 -1
  288. package/dist/i18n/instance.d.ts +27 -0
  289. package/dist/i18n/instance.js +63 -16
  290. package/dist/i18n/instance.js.map +1 -1
  291. package/dist/i18n/locale-reload.d.ts +3 -0
  292. package/dist/i18n/locale-reload.js +17 -0
  293. package/dist/i18n/locale-reload.js.map +1 -0
  294. package/dist/i18n/locale-switcher.d.ts +21 -0
  295. package/dist/i18n/locale-switcher.js +25 -0
  296. package/dist/i18n/locale-switcher.js.map +1 -0
  297. package/dist/i18n/locale.d.ts +9 -0
  298. package/dist/i18n/locale.js +93 -0
  299. package/dist/i18n/locale.js.map +1 -0
  300. package/dist/i18n/page-props.d.ts +3 -0
  301. package/dist/i18n/page-props.js +24 -0
  302. package/dist/i18n/page-props.js.map +1 -0
  303. package/dist/index.d.ts +18 -8
  304. package/dist/index.js +18 -7
  305. package/dist/inertia.d.ts +2 -1
  306. package/dist/inertia.js +9 -2
  307. package/dist/inertia.js.map +1 -1
  308. package/dist/lattice.css +49 -16
  309. package/dist/layout/breadcrumbs.d.ts +3 -0
  310. package/dist/layout/breadcrumbs.js +34 -0
  311. package/dist/layout/breadcrumbs.js.map +1 -0
  312. package/dist/layout/callouts.d.ts +3 -0
  313. package/dist/layout/callouts.js +67 -0
  314. package/dist/layout/callouts.js.map +1 -0
  315. package/dist/layout/components.js +6 -0
  316. package/dist/layout/components.js.map +1 -1
  317. package/dist/layout/context.d.ts +2 -10
  318. package/dist/layout/context.js +3 -14
  319. package/dist/layout/context.js.map +1 -1
  320. package/dist/layout/dropdown.d.ts +3 -0
  321. package/dist/layout/dropdown.js +23 -0
  322. package/dist/layout/dropdown.js.map +1 -0
  323. package/dist/layout/index.d.ts +2 -1
  324. package/dist/layout/index.js +3 -1
  325. package/dist/layout/menu-item.js +30 -59
  326. package/dist/layout/menu-item.js.map +1 -1
  327. package/dist/layout/menu.js.map +1 -1
  328. package/dist/layout/outlet.js +2 -2
  329. package/dist/layout/outlet.js.map +1 -1
  330. package/dist/layout/popover.d.ts +17 -0
  331. package/dist/layout/popover.js +46 -0
  332. package/dist/layout/popover.js.map +1 -0
  333. package/dist/layout/schema-layout.js +2 -9
  334. package/dist/layout/schema-layout.js.map +1 -1
  335. package/dist/layout/sidebar.js +3 -3
  336. package/dist/layout/sidebar.js.map +1 -1
  337. package/dist/page.js +3 -9
  338. package/dist/page.js.map +1 -1
  339. package/dist/provider.d.ts +2 -4
  340. package/dist/provider.js +5 -9
  341. package/dist/provider.js.map +1 -1
  342. package/dist/registry.js +2 -1
  343. package/dist/registry.js.map +1 -1
  344. package/dist/svg-sprite-client/index.d.ts +1 -0
  345. package/dist/svg-sprite-client/index.js +0 -0
  346. package/dist/svg-sprite-client.d.ts +1 -0
  347. package/dist/table/align.d.ts +4 -0
  348. package/dist/table/align.js +23 -0
  349. package/dist/table/align.js.map +1 -0
  350. package/dist/table/bulk.js +1 -1
  351. package/dist/table/bulk.js.map +1 -1
  352. package/dist/table/components/bulk-bar.js +8 -5
  353. package/dist/table/components/bulk-bar.js.map +1 -1
  354. package/dist/table/components/cells/badge-cell.d.ts +2 -5
  355. package/dist/table/components/cells/badge-cell.js +3 -3
  356. package/dist/table/components/cells/badge-cell.js.map +1 -1
  357. package/dist/table/components/cells/boolean-cell.d.ts +3 -0
  358. package/dist/table/components/cells/boolean-cell.js +23 -0
  359. package/dist/table/components/cells/boolean-cell.js.map +1 -0
  360. package/dist/table/components/cells/icon-cell.d.ts +2 -5
  361. package/dist/table/components/cells/icon-cell.js +4 -5
  362. package/dist/table/components/cells/icon-cell.js.map +1 -1
  363. package/dist/table/components/cells/image-cell.d.ts +2 -5
  364. package/dist/table/components/cells/image-cell.js +4 -5
  365. package/dist/table/components/cells/image-cell.js.map +1 -1
  366. package/dist/table/components/cells/money-cell.d.ts +2 -0
  367. package/dist/table/components/cells/money-cell.js +28 -0
  368. package/dist/table/components/cells/money-cell.js.map +1 -0
  369. package/dist/table/components/cells/number-cell.d.ts +2 -0
  370. package/dist/table/components/cells/number-cell.js +25 -0
  371. package/dist/table/components/cells/number-cell.js.map +1 -0
  372. package/dist/table/components/cells/numeric.d.ts +2 -0
  373. package/dist/table/components/cells/numeric.js +10 -0
  374. package/dist/table/components/cells/numeric.js.map +1 -0
  375. package/dist/table/components/cells/stack-cell.d.ts +3 -0
  376. package/dist/table/components/cells/stack-cell.js +17 -0
  377. package/dist/table/components/cells/stack-cell.js.map +1 -0
  378. package/dist/table/components/cells/text-cell.d.ts +2 -6
  379. package/dist/table/components/cells/text-cell.js +5 -6
  380. package/dist/table/components/cells/text-cell.js.map +1 -1
  381. package/dist/table/components/column-filter-control.d.ts +3 -1
  382. package/dist/table/components/column-filter-control.js +73 -11
  383. package/dist/table/components/column-filter-control.js.map +1 -1
  384. package/dist/table/components/column-header.d.ts +3 -1
  385. package/dist/table/components/column-header.js +11 -8
  386. package/dist/table/components/column-header.js.map +1 -1
  387. package/dist/table/components/filter-bar.d.ts +15 -0
  388. package/dist/table/components/filter-bar.js +81 -0
  389. package/dist/table/components/filter-bar.js.map +1 -0
  390. package/dist/table/components/filter-controls.d.ts +18 -0
  391. package/dist/table/components/filter-controls.js +256 -0
  392. package/dist/table/components/filter-controls.js.map +1 -0
  393. package/dist/table/components/filter-stack-bar.js.map +1 -1
  394. package/dist/table/components/filter-value-input.d.ts +1 -0
  395. package/dist/table/components/filter-value-input.js +6 -5
  396. package/dist/table/components/filter-value-input.js.map +1 -1
  397. package/dist/table/components/pagination.js +1 -1
  398. package/dist/table/components/pagination.js.map +1 -1
  399. package/dist/table/components/sort-bar.js.map +1 -1
  400. package/dist/table/components/table-action-node.js.map +1 -1
  401. package/dist/table/components/table-cell.d.ts +1 -1
  402. package/dist/table/components/table-cell.js +18 -28
  403. package/dist/table/components/table-cell.js.map +1 -1
  404. package/dist/table/components/table.js +191 -152
  405. package/dist/table/components/table.js.map +1 -1
  406. package/dist/table/filter-values.d.ts +13 -0
  407. package/dist/table/filter-values.js +30 -0
  408. package/dist/table/filter-values.js.map +1 -0
  409. package/dist/table/format.js.map +1 -1
  410. package/dist/table/index.js.map +1 -1
  411. package/dist/table/payload.js +24 -3
  412. package/dist/table/payload.js.map +1 -1
  413. package/dist/table/query.d.ts +10 -1
  414. package/dist/table/query.js +60 -6
  415. package/dist/table/query.js.map +1 -1
  416. package/dist/table/registry.d.ts +19 -0
  417. package/dist/table/registry.js +14 -0
  418. package/dist/table/registry.js.map +1 -0
  419. package/dist/table/types.d.ts +9 -19
  420. package/dist/table/use-table.d.ts +7 -2
  421. package/dist/table/use-table.js +57 -7
  422. package/dist/table/use-table.js.map +1 -1
  423. package/dist/toast/callout.d.ts +6 -0
  424. package/dist/toast/callout.js +31 -0
  425. package/dist/toast/callout.js.map +1 -0
  426. package/dist/toast/index.d.ts +4 -0
  427. package/dist/toast/index.js +3 -1
  428. package/dist/toast/toast.d.ts +14 -0
  429. package/dist/toast/toast.js +51 -0
  430. package/dist/toast/toast.js.map +1 -0
  431. package/dist/toast/toaster.js +10 -74
  432. package/dist/toast/toaster.js.map +1 -1
  433. package/dist/toast/variant-styles.d.ts +6 -0
  434. package/dist/toast/variant-styles.js +37 -0
  435. package/dist/toast/variant-styles.js.map +1 -0
  436. package/dist/types/generated.d.ts +461 -101
  437. package/dist/types/vite-env.d.ts +1 -0
  438. package/dist/vite.d.ts +25 -0
  439. package/dist/vite.js +72 -0
  440. package/dist/vite.js.map +1 -0
  441. package/package.json +111 -13
  442. package/resources/icons/rotate-ccw.svg +16 -0
  443. package/dist/_virtual/_rolldown/runtime.js +0 -8
  444. package/dist/action/effects.d.ts +0 -11
  445. package/dist/action/effects.js +0 -44
  446. package/dist/action/effects.js.map +0 -1
  447. package/dist/node_modules/i18next/dist/esm/i18next.js +0 -1982
  448. package/dist/node_modules/i18next/dist/esm/i18next.js.map +0 -1
  449. package/dist/node_modules/i18next-http-backend/esm/index.js +0 -352
  450. package/dist/node_modules/i18next-http-backend/esm/index.js.map +0 -1
  451. package/dist/node_modules/react-i18next/dist/es/context.js +0 -23
  452. package/dist/node_modules/react-i18next/dist/es/context.js.map +0 -1
  453. package/dist/node_modules/react-i18next/dist/es/defaults.js +0 -29
  454. package/dist/node_modules/react-i18next/dist/es/defaults.js.map +0 -1
  455. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +0 -10
  456. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +0 -1
  457. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +0 -14
  458. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +0 -1
  459. package/dist/node_modules/react-i18next/dist/es/unescape.js +0 -30
  460. package/dist/node_modules/react-i18next/dist/es/unescape.js.map +0 -1
  461. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +0 -157
  462. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +0 -1
  463. package/dist/node_modules/react-i18next/dist/es/utils.js +0 -58
  464. package/dist/node_modules/react-i18next/dist/es/utils.js.map +0 -1
  465. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -70
  466. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
  467. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -61
  468. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
  469. package/dist/node_modules/use-sync-external-store/shim/index.js +0 -13
  470. package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
  471. package/dist/table/column-registry.d.ts +0 -9
  472. package/dist/test-support.d.ts +0 -14
  473. package/dist/test-support.js +0 -14
  474. package/dist/test-support.js.map +0 -1
  475. /package/dist/{table/column-registry.js → chat/types.js} +0 -0
  476. /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
@@ -1,9 +1,10 @@
1
1
  import { Icon } from "../../icons/sprite.js";
2
2
  import { useT } from "../../i18n/instance.js";
3
+ import { controlSurface } from "../../core/components/control.js";
3
4
  import { useEffect, useState } from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region resources/js/table/components/filter-value-input.tsx
6
- var baseClass = "h-9 w-full min-w-0 rounded-lt-sm border border-lt-input bg-lt-bg px-2 text-sm font-normal";
7
+ var fieldClass = controlSurface({ density: "compact" });
7
8
  function FilterValueInput({ type, label, value, processing, withSearchIcon = false, grouped = false, ariaLabel, testId, onCommit, onClear }) {
8
9
  const { t } = useT("lattice");
9
10
  const [draft, setDraft] = useState(value);
@@ -15,7 +16,7 @@ function FilterValueInput({ type, label, value, processing, withSearchIcon = fal
15
16
  if (type === "boolean") return /* @__PURE__ */ jsxs("select", {
16
17
  "aria-label": inputLabel,
17
18
  "data-test": testId,
18
- className: `${baseClass} ${groupedClass}`,
19
+ className: `${fieldClass} ${groupedClass}`,
19
20
  disabled: processing,
20
21
  value,
21
22
  onChange: (event) => onCommit(event.target.value),
@@ -38,7 +39,7 @@ function FilterValueInput({ type, label, value, processing, withSearchIcon = fal
38
39
  type: "date",
39
40
  "aria-label": inputLabel,
40
41
  "data-test": testId,
41
- className: `${baseClass} ${groupedClass}`,
42
+ className: `${fieldClass} ${groupedClass}`,
42
43
  disabled: processing,
43
44
  value: draft,
44
45
  onChange: (event) => {
@@ -58,7 +59,7 @@ function FilterValueInput({ type, label, value, processing, withSearchIcon = fal
58
59
  type: type === "number" ? "number" : "text",
59
60
  "aria-label": inputLabel,
60
61
  "data-test": testId,
61
- className: `${baseClass} ${groupedClass} ${withSearchIcon ? "pl-8" : ""} ${onClear ? "pr-8" : ""}`,
62
+ className: `${fieldClass} ${groupedClass} ${withSearchIcon ? "pl-8" : ""} ${onClear ? "pr-8" : ""}`,
62
63
  disabled: processing,
63
64
  value: draft,
64
65
  onChange: (event) => setDraft(event.target.value),
@@ -86,6 +87,6 @@ function FilterValueInput({ type, label, value, processing, withSearchIcon = fal
86
87
  });
87
88
  }
88
89
  //#endregion
89
- export { FilterValueInput };
90
+ export { FilterValueInput, fieldClass };
90
91
 
91
92
  //# sourceMappingURL=filter-value-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-value-input.js","names":[],"sources":["../../../resources/js/table/components/filter-value-input.tsx"],"sourcesContent":["import { Icon } from \"@lattice/lattice/icons\";\nimport { useEffect, useState } from \"react\";\nimport { useT } from \"@lattice/lattice/i18n\";\nimport type { FilterType } from \"@lattice/lattice/types/generated\";\n\nconst baseClass =\n \"h-9 w-full min-w-0 rounded-lt-sm border border-lt-input bg-lt-bg px-2 text-sm font-normal\";\n\nexport function FilterValueInput({\n type,\n label,\n value,\n processing,\n withSearchIcon = false,\n grouped = false,\n ariaLabel,\n testId,\n onCommit,\n onClear,\n}: {\n type: FilterType;\n label: string;\n value: string;\n processing: boolean;\n withSearchIcon?: boolean;\n grouped?: boolean;\n ariaLabel?: string;\n testId?: string;\n onCommit: (value: string) => void;\n onClear?: () => void;\n}) {\n const { t } = useT(\"lattice\");\n const [draft, setDraft] = useState(value);\n const inputLabel = ariaLabel ?? t(\"filter.filterBy\", \"Filter {{label}}\", { label });\n const groupedClass = grouped ? \"rounded-r-none\" : \"\";\n\n useEffect(() => {\n setDraft(value);\n }, [value]);\n\n if (type === \"boolean\") {\n return (\n <select\n aria-label={inputLabel}\n data-test={testId}\n className={`${baseClass} ${groupedClass}`}\n disabled={processing}\n value={value}\n onChange={(event) => onCommit(event.target.value)}\n >\n <option value=\"\">{t(\"filter.all\", \"All\")}</option>\n <option value=\"true\">{t(\"filter.true\", \"True\")}</option>\n <option value=\"false\">{t(\"filter.false\", \"False\")}</option>\n </select>\n );\n }\n\n if (type === \"date\") {\n return (\n <input\n type=\"date\"\n aria-label={inputLabel}\n data-test={testId}\n className={`${baseClass} ${groupedClass}`}\n disabled={processing}\n value={draft}\n onChange={(event) => {\n setDraft(event.target.value);\n onCommit(event.target.value);\n }}\n />\n );\n }\n\n return (\n <div className=\"relative flex w-full min-w-0 items-center\">\n {withSearchIcon && (\n <Icon\n name=\"search\"\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-2 size-lt-icon-md text-lt-muted-fg\"\n />\n )}\n <input\n type={type === \"number\" ? \"number\" : \"text\"}\n aria-label={inputLabel}\n data-test={testId}\n className={`${baseClass} ${groupedClass} ${withSearchIcon ? \"pl-8\" : \"\"} ${onClear ? \"pr-8\" : \"\"}`}\n disabled={processing}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n onCommit(draft);\n }\n }}\n onBlur={() => {\n if (draft !== value) {\n onCommit(draft);\n }\n }}\n />\n {onClear && draft !== \"\" && (\n <button\n type=\"button\"\n aria-label={t(\"filter.clear\", \"Clear {{label}} filter\", { label })}\n data-test={testId ? `${testId}-clear` : undefined}\n className=\"absolute right-1 inline-flex size-6 items-center justify-center rounded hover:bg-lt-muted disabled:opacity-50\"\n disabled={processing}\n onClick={onClear}\n >\n <Icon name=\"x\" aria-hidden=\"true\" className=\"size-lt-icon-sm\" />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,IAAM,YACJ;AAEF,SAAgB,iBAAiB,EAC/B,MACA,OACA,OACA,YACA,iBAAiB,OACjB,UAAU,OACV,WACA,QACA,UACA,WAYC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,OAAO,YAAY,SAAS,KAAK;CACxC,MAAM,aAAa,aAAa,EAAE,mBAAmB,oBAAoB,EAAE,MAAM,CAAC;CAClF,MAAM,eAAe,UAAU,mBAAmB;CAElD,gBAAgB;EACd,SAAS,KAAK;CAChB,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,SAAS,WACX,OACE,qBAAC,UAAD;EACE,cAAY;EACZ,aAAW;EACX,WAAW,GAAG,UAAU,GAAG;EAC3B,UAAU;EACH;EACP,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;YANlD;GAQE,oBAAC,UAAD;IAAQ,OAAM;cAAI,EAAE,cAAc,KAAK;GAAU,CAAA;GACjD,oBAAC,UAAD;IAAQ,OAAM;cAAQ,EAAE,eAAe,MAAM;GAAU,CAAA;GACvD,oBAAC,UAAD;IAAQ,OAAM;cAAS,EAAE,gBAAgB,OAAO;GAAU,CAAA;EACpD;;CAIZ,IAAI,SAAS,QACX,OACE,oBAAC,SAAD;EACE,MAAK;EACL,cAAY;EACZ,aAAW;EACX,WAAW,GAAG,UAAU,GAAG;EAC3B,UAAU;EACV,OAAO;EACP,WAAW,UAAU;GACnB,SAAS,MAAM,OAAO,KAAK;GAC3B,SAAS,MAAM,OAAO,KAAK;EAC7B;CACD,CAAA;CAIL,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACG,kBACC,oBAAC,MAAD;IACE,MAAK;IACL,eAAY;IACZ,WAAU;GACX,CAAA;GAEH,oBAAC,SAAD;IACE,MAAM,SAAS,WAAW,WAAW;IACrC,cAAY;IACZ,aAAW;IACX,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,iBAAiB,SAAS,GAAG,GAAG,UAAU,SAAS;IAC9F,UAAU;IACV,OAAO;IACP,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;IAChD,YAAY,UAAU;KACpB,IAAI,MAAM,QAAQ,SAChB,SAAS,KAAK;IAElB;IACA,cAAc;KACZ,IAAI,UAAU,OACZ,SAAS,KAAK;IAElB;GACD,CAAA;GACA,WAAW,UAAU,MACpB,oBAAC,UAAD;IACE,MAAK;IACL,cAAY,EAAE,gBAAgB,0BAA0B,EAAE,MAAM,CAAC;IACjE,aAAW,SAAS,GAAG,OAAO,UAAU,KAAA;IACxC,WAAU;IACV,UAAU;IACV,SAAS;cAET,oBAAC,MAAD;KAAM,MAAK;KAAI,eAAY;KAAO,WAAU;IAAmB,CAAA;GACzD,CAAA;EAEP;;AAET"}
1
+ {"version":3,"file":"filter-value-input.js","names":[],"sources":["../../../resources/js/table/components/filter-value-input.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useEffect, useState } from \"react\";\nimport { controlSurface } from \"@lattice-php/lattice/core/components/control\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { FilterType } from \"@lattice-php/lattice/types/generated\";\n\nexport const fieldClass = controlSurface({ density: \"compact\" });\n\nexport function FilterValueInput({\n type,\n label,\n value,\n processing,\n withSearchIcon = false,\n grouped = false,\n ariaLabel,\n testId,\n onCommit,\n onClear,\n}: {\n type: FilterType;\n label: string;\n value: string;\n processing: boolean;\n withSearchIcon?: boolean;\n grouped?: boolean;\n ariaLabel?: string;\n testId?: string;\n onCommit: (value: string) => void;\n onClear?: () => void;\n}) {\n const { t } = useT(\"lattice\");\n const [draft, setDraft] = useState(value);\n const inputLabel = ariaLabel ?? t(\"filter.filterBy\", \"Filter {{label}}\", { label });\n const groupedClass = grouped ? \"rounded-r-none\" : \"\";\n\n useEffect(() => {\n setDraft(value);\n }, [value]);\n\n if (type === \"boolean\") {\n return (\n <select\n aria-label={inputLabel}\n data-test={testId}\n className={`${fieldClass} ${groupedClass}`}\n disabled={processing}\n value={value}\n onChange={(event) => onCommit(event.target.value)}\n >\n <option value=\"\">{t(\"filter.all\", \"All\")}</option>\n <option value=\"true\">{t(\"filter.true\", \"True\")}</option>\n <option value=\"false\">{t(\"filter.false\", \"False\")}</option>\n </select>\n );\n }\n\n if (type === \"date\") {\n return (\n <input\n type=\"date\"\n aria-label={inputLabel}\n data-test={testId}\n className={`${fieldClass} ${groupedClass}`}\n disabled={processing}\n value={draft}\n onChange={(event) => {\n setDraft(event.target.value);\n onCommit(event.target.value);\n }}\n />\n );\n }\n\n return (\n <div className=\"relative flex w-full min-w-0 items-center\">\n {withSearchIcon && (\n <Icon\n name=\"search\"\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-2 size-lt-icon-md text-lt-muted-fg\"\n />\n )}\n <input\n type={type === \"number\" ? \"number\" : \"text\"}\n aria-label={inputLabel}\n data-test={testId}\n className={`${fieldClass} ${groupedClass} ${withSearchIcon ? \"pl-8\" : \"\"} ${onClear ? \"pr-8\" : \"\"}`}\n disabled={processing}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n onCommit(draft);\n }\n }}\n onBlur={() => {\n if (draft !== value) {\n onCommit(draft);\n }\n }}\n />\n {onClear && draft !== \"\" && (\n <button\n type=\"button\"\n aria-label={t(\"filter.clear\", \"Clear {{label}} filter\", { label })}\n data-test={testId ? `${testId}-clear` : undefined}\n className=\"absolute right-1 inline-flex size-6 items-center justify-center rounded hover:bg-lt-muted disabled:opacity-50\"\n disabled={processing}\n onClick={onClear}\n >\n <Icon name=\"x\" aria-hidden=\"true\" className=\"size-lt-icon-sm\" />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;AAMA,IAAa,aAAa,eAAe,EAAE,SAAS,UAAU,CAAC;AAE/D,SAAgB,iBAAiB,EAC/B,MACA,OACA,OACA,YACA,iBAAiB,OACjB,UAAU,OACV,WACA,QACA,UACA,WAYC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,OAAO,YAAY,SAAS,KAAK;CACxC,MAAM,aAAa,aAAa,EAAE,mBAAmB,oBAAoB,EAAE,MAAM,CAAC;CAClF,MAAM,eAAe,UAAU,mBAAmB;CAElD,gBAAgB;EACd,SAAS,KAAK;CAChB,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,SAAS,WACX,OACE,qBAAC,UAAD;EACE,cAAY;EACZ,aAAW;EACX,WAAW,GAAG,WAAW,GAAG;EAC5B,UAAU;EACH;EACP,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;YANlD;GAQE,oBAAC,UAAD;IAAQ,OAAM;cAAI,EAAE,cAAc,KAAK;GAAU,CAAA;GACjD,oBAAC,UAAD;IAAQ,OAAM;cAAQ,EAAE,eAAe,MAAM;GAAU,CAAA;GACvD,oBAAC,UAAD;IAAQ,OAAM;cAAS,EAAE,gBAAgB,OAAO;GAAU,CAAA;EACpD;;CAIZ,IAAI,SAAS,QACX,OACE,oBAAC,SAAD;EACE,MAAK;EACL,cAAY;EACZ,aAAW;EACX,WAAW,GAAG,WAAW,GAAG;EAC5B,UAAU;EACV,OAAO;EACP,WAAW,UAAU;GACnB,SAAS,MAAM,OAAO,KAAK;GAC3B,SAAS,MAAM,OAAO,KAAK;EAC7B;CACD,CAAA;CAIL,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACG,kBACC,oBAAC,MAAD;IACE,MAAK;IACL,eAAY;IACZ,WAAU;GACX,CAAA;GAEH,oBAAC,SAAD;IACE,MAAM,SAAS,WAAW,WAAW;IACrC,cAAY;IACZ,aAAW;IACX,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,iBAAiB,SAAS,GAAG,GAAG,UAAU,SAAS;IAC/F,UAAU;IACV,OAAO;IACP,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;IAChD,YAAY,UAAU;KACpB,IAAI,MAAM,QAAQ,SAChB,SAAS,KAAK;IAElB;IACA,cAAc;KACZ,IAAI,UAAU,OACZ,SAAS,KAAK;IAElB;GACD,CAAA;GACA,WAAW,UAAU,MACpB,oBAAC,UAAD;IACE,MAAK;IACL,cAAY,EAAE,gBAAgB,0BAA0B,EAAE,MAAM,CAAC;IACjE,aAAW,SAAS,GAAG,OAAO,UAAU,KAAA;IACxC,WAAU;IACV,UAAU;IACV,SAAS;cAET,oBAAC,MAAD;KAAM,MAAK;KAAI,eAAY;KAAO,WAAU;IAAmB,CAAA;GACzD,CAAA;EAEP;;AAET"}
@@ -5,7 +5,7 @@ function TablePagination({ pagination, currentPage, processing, mode, hasNextPag
5
5
  const { t } = useT("lattice");
6
6
  return /* @__PURE__ */ jsxs("div", {
7
7
  className: "flex items-center justify-between gap-3 border-t border-lt-border p-4 text-sm",
8
- children: [/* @__PURE__ */ jsx("span", { children: pagination.total === void 0 ? t("pagination.page", "Page {{page}}", { page: currentPage }) : t("pagination.showing", "Showing {{from}}-{{to}} of {{total}}", {
8
+ children: [/* @__PURE__ */ jsx("span", { children: pagination.total == null ? t("pagination.page", "Page {{page}}", { page: currentPage }) : t("pagination.showing", "Showing {{from}}-{{to}} of {{total}}", {
9
9
  from: pagination.from ?? 0,
10
10
  to: pagination.to ?? 0,
11
11
  total: pagination.total
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","names":[],"sources":["../../../resources/js/table/components/pagination.tsx"],"sourcesContent":["import type { RefObject } from \"react\";\nimport { useT } from \"@lattice/lattice/i18n\";\nimport type { PaginationType } from \"@lattice/lattice/types/generated\";\nimport type { TablePagination as TablePaginationData } from \"../types\";\n\nexport function TablePagination({\n pagination,\n currentPage,\n processing,\n mode,\n hasNextPage,\n visiblePages,\n infiniteLoaderRef,\n onPage,\n onLoadMore,\n}: {\n pagination: TablePaginationData;\n currentPage: number;\n processing: boolean;\n mode: PaginationType;\n hasNextPage: boolean;\n visiblePages: number[];\n infiniteLoaderRef: RefObject<HTMLDivElement | null>;\n onPage: (page: number) => void;\n onLoadMore: () => void;\n}) {\n const { t } = useT(\"lattice\");\n\n return (\n <div className=\"flex items-center justify-between gap-3 border-t border-lt-border p-4 text-sm\">\n <span>\n {pagination.total === undefined\n ? t(\"pagination.page\", \"Page {{page}}\", { page: currentPage })\n : t(\"pagination.showing\", \"Showing {{from}}-{{to}} of {{total}}\", {\n from: pagination.from ?? 0,\n to: pagination.to ?? 0,\n total: pagination.total,\n })}\n </span>\n {mode === \"infinite\" ? (\n <div ref={infiniteLoaderRef} className=\"flex items-center gap-2\">\n {pagination.hasMore ? (\n <button\n type=\"button\"\n data-test=\"pagination-load-more\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing}\n onClick={onLoadMore}\n >\n {processing\n ? t(\"pagination.loading\", \"Loading...\")\n : t(\"pagination.loadMore\", \"Load more\")}\n </button>\n ) : (\n <span className=\"text-lt-muted-fg\">{t(\"pagination.allLoaded\", \"All rows loaded\")}</span>\n )}\n </div>\n ) : mode === \"simple\" ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n data-test=\"pagination-previous\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || currentPage <= 1}\n onClick={() => onPage(currentPage - 1)}\n >\n {t(\"pagination.previous\", \"Previous\")}\n </button>\n <button\n type=\"button\"\n data-test=\"pagination-next\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || !hasNextPage}\n onClick={() => onPage(currentPage + 1)}\n >\n {t(\"pagination.next\", \"Next\")}\n </button>\n </div>\n ) : mode === \"table\" ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n data-test=\"pagination-previous\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || currentPage <= 1}\n onClick={() => onPage(currentPage - 1)}\n >\n {t(\"pagination.previous\", \"Previous\")}\n </button>\n {visiblePages.map((pageNumber) => (\n <button\n key={pageNumber}\n type=\"button\"\n data-test={`pagination-page-${pageNumber}`}\n className=\"inline-flex size-9 items-center justify-center rounded-lt-sm border border-lt-border font-medium disabled:opacity-50\"\n disabled={processing || pageNumber === currentPage}\n aria-current={pageNumber === currentPage ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {{page}}\", { page: pageNumber })}\n onClick={() => onPage(pageNumber)}\n >\n {pageNumber}\n </button>\n ))}\n <button\n type=\"button\"\n data-test=\"pagination-next\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || !hasNextPage}\n onClick={() => onPage(currentPage + 1)}\n >\n {t(\"pagination.next\", \"Next\")}\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;AAKA,SAAgB,gBAAgB,EAC9B,YACA,aACA,YACA,MACA,aACA,cACA,mBACA,QACA,cAWC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD,EAAA,UACG,WAAW,UAAU,KAAA,IAClB,EAAE,mBAAmB,iBAAiB,EAAE,MAAM,YAAY,CAAC,IAC3D,EAAE,sBAAsB,wCAAwC;GAC9D,MAAM,WAAW,QAAQ;GACzB,IAAI,WAAW,MAAM;GACrB,OAAO,WAAW;EACpB,CAAC,EACD,CAAA,GACL,SAAS,aACR,oBAAC,OAAD;GAAK,KAAK;GAAmB,WAAU;aACpC,WAAW,UACV,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU;IACV,SAAS;cAER,aACG,EAAE,sBAAsB,YAAY,IACpC,EAAE,uBAAuB,WAAW;GAClC,CAAA,IAER,oBAAC,QAAD;IAAM,WAAU;cAAoB,EAAE,wBAAwB,iBAAiB;GAAQ,CAAA;EAEtF,CAAA,IACH,SAAS,WACX,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU,cAAc,eAAe;IACvC,eAAe,OAAO,cAAc,CAAC;cAEpC,EAAE,uBAAuB,UAAU;GAC9B,CAAA,GACR,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU,cAAc,CAAC;IACzB,eAAe,OAAO,cAAc,CAAC;cAEpC,EAAE,mBAAmB,MAAM;GACtB,CAAA,CACL;OACH,SAAS,UACX,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,UAAD;KACE,MAAK;KACL,aAAU;KACV,WAAU;KACV,UAAU,cAAc,eAAe;KACvC,eAAe,OAAO,cAAc,CAAC;eAEpC,EAAE,uBAAuB,UAAU;IAC9B,CAAA;IACP,aAAa,KAAK,eACjB,oBAAC,UAAD;KAEE,MAAK;KACL,aAAW,mBAAmB;KAC9B,WAAU;KACV,UAAU,cAAc,eAAe;KACvC,gBAAc,eAAe,cAAc,SAAS,KAAA;KACpD,cAAY,EAAE,mBAAmB,iBAAiB,EAAE,MAAM,WAAW,CAAC;KACtE,eAAe,OAAO,UAAU;eAE/B;IACK,GAVD,UAUC,CACT;IACD,oBAAC,UAAD;KACE,MAAK;KACL,aAAU;KACV,WAAU;KACV,UAAU,cAAc,CAAC;KACzB,eAAe,OAAO,cAAc,CAAC;eAEpC,EAAE,mBAAmB,MAAM;IACtB,CAAA;GACL;OACH,IACD;;AAET"}
1
+ {"version":3,"file":"pagination.js","names":[],"sources":["../../../resources/js/table/components/pagination.tsx"],"sourcesContent":["import type { RefObject } from \"react\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { PaginationType } from \"@lattice-php/lattice/types/generated\";\nimport type { TablePagination as TablePaginationData } from \"../types\";\n\nexport function TablePagination({\n pagination,\n currentPage,\n processing,\n mode,\n hasNextPage,\n visiblePages,\n infiniteLoaderRef,\n onPage,\n onLoadMore,\n}: {\n pagination: TablePaginationData;\n currentPage: number;\n processing: boolean;\n mode: PaginationType;\n hasNextPage: boolean;\n visiblePages: number[];\n infiniteLoaderRef: RefObject<HTMLDivElement | null>;\n onPage: (page: number) => void;\n onLoadMore: () => void;\n}) {\n const { t } = useT(\"lattice\");\n\n return (\n <div className=\"flex items-center justify-between gap-3 border-t border-lt-border p-4 text-sm\">\n <span>\n {pagination.total == null\n ? t(\"pagination.page\", \"Page {{page}}\", { page: currentPage })\n : t(\"pagination.showing\", \"Showing {{from}}-{{to}} of {{total}}\", {\n from: pagination.from ?? 0,\n to: pagination.to ?? 0,\n total: pagination.total,\n })}\n </span>\n {mode === \"infinite\" ? (\n <div ref={infiniteLoaderRef} className=\"flex items-center gap-2\">\n {pagination.hasMore ? (\n <button\n type=\"button\"\n data-test=\"pagination-load-more\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing}\n onClick={onLoadMore}\n >\n {processing\n ? t(\"pagination.loading\", \"Loading...\")\n : t(\"pagination.loadMore\", \"Load more\")}\n </button>\n ) : (\n <span className=\"text-lt-muted-fg\">{t(\"pagination.allLoaded\", \"All rows loaded\")}</span>\n )}\n </div>\n ) : mode === \"simple\" ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n data-test=\"pagination-previous\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || currentPage <= 1}\n onClick={() => onPage(currentPage - 1)}\n >\n {t(\"pagination.previous\", \"Previous\")}\n </button>\n <button\n type=\"button\"\n data-test=\"pagination-next\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || !hasNextPage}\n onClick={() => onPage(currentPage + 1)}\n >\n {t(\"pagination.next\", \"Next\")}\n </button>\n </div>\n ) : mode === \"table\" ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n data-test=\"pagination-previous\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || currentPage <= 1}\n onClick={() => onPage(currentPage - 1)}\n >\n {t(\"pagination.previous\", \"Previous\")}\n </button>\n {visiblePages.map((pageNumber) => (\n <button\n key={pageNumber}\n type=\"button\"\n data-test={`pagination-page-${pageNumber}`}\n className=\"inline-flex size-9 items-center justify-center rounded-lt-sm border border-lt-border font-medium disabled:opacity-50\"\n disabled={processing || pageNumber === currentPage}\n aria-current={pageNumber === currentPage ? \"page\" : undefined}\n aria-label={t(\"pagination.page\", \"Page {{page}}\", { page: pageNumber })}\n onClick={() => onPage(pageNumber)}\n >\n {pageNumber}\n </button>\n ))}\n <button\n type=\"button\"\n data-test=\"pagination-next\"\n className=\"h-9 rounded-lt-sm border border-lt-border px-3 font-medium disabled:opacity-50\"\n disabled={processing || !hasNextPage}\n onClick={() => onPage(currentPage + 1)}\n >\n {t(\"pagination.next\", \"Next\")}\n </button>\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;AAKA,SAAgB,gBAAgB,EAC9B,YACA,aACA,YACA,MACA,aACA,cACA,mBACA,QACA,cAWC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD,EAAA,UACG,WAAW,SAAS,OACjB,EAAE,mBAAmB,iBAAiB,EAAE,MAAM,YAAY,CAAC,IAC3D,EAAE,sBAAsB,wCAAwC;GAC9D,MAAM,WAAW,QAAQ;GACzB,IAAI,WAAW,MAAM;GACrB,OAAO,WAAW;EACpB,CAAC,EACD,CAAA,GACL,SAAS,aACR,oBAAC,OAAD;GAAK,KAAK;GAAmB,WAAU;aACpC,WAAW,UACV,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU;IACV,SAAS;cAER,aACG,EAAE,sBAAsB,YAAY,IACpC,EAAE,uBAAuB,WAAW;GAClC,CAAA,IAER,oBAAC,QAAD;IAAM,WAAU;cAAoB,EAAE,wBAAwB,iBAAiB;GAAQ,CAAA;EAEtF,CAAA,IACH,SAAS,WACX,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU,cAAc,eAAe;IACvC,eAAe,OAAO,cAAc,CAAC;cAEpC,EAAE,uBAAuB,UAAU;GAC9B,CAAA,GACR,oBAAC,UAAD;IACE,MAAK;IACL,aAAU;IACV,WAAU;IACV,UAAU,cAAc,CAAC;IACzB,eAAe,OAAO,cAAc,CAAC;cAEpC,EAAE,mBAAmB,MAAM;GACtB,CAAA,CACL;OACH,SAAS,UACX,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,UAAD;KACE,MAAK;KACL,aAAU;KACV,WAAU;KACV,UAAU,cAAc,eAAe;KACvC,eAAe,OAAO,cAAc,CAAC;eAEpC,EAAE,uBAAuB,UAAU;IAC9B,CAAA;IACP,aAAa,KAAK,eACjB,oBAAC,UAAD;KAEE,MAAK;KACL,aAAW,mBAAmB;KAC9B,WAAU;KACV,UAAU,cAAc,eAAe;KACvC,gBAAc,eAAe,cAAc,SAAS,KAAA;KACpD,cAAY,EAAE,mBAAmB,iBAAiB,EAAE,MAAM,WAAW,CAAC;KACtE,eAAe,OAAO,UAAU;eAE/B;IACK,GAVD,UAUC,CACT;IACD,oBAAC,UAAD;KACE,MAAK;KACL,aAAU;KACV,WAAU;KACV,UAAU,cAAc,CAAC;KACzB,eAAe,OAAO,cAAc,CAAC;eAEpC,EAAE,mBAAmB,MAAM;IACtB,CAAA;GACL;OACH,IACD;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"sort-bar.js","names":[],"sources":["../../../resources/js/table/components/sort-bar.tsx"],"sourcesContent":["import { Icon } from \"@lattice/lattice/icons\";\nimport { getSortDirectionLabel } from \"../query\";\nimport type { TableColumn, TableSort, TableState } from \"../types\";\n\nexport function SortBar({\n columnsByKey,\n state,\n processing,\n onClear,\n}: {\n columnsByKey: Map<string, TableColumn>;\n state: TableState;\n processing: boolean;\n onClear: (sort: TableSort) => void;\n}) {\n return (\n <div className=\"flex flex-wrap items-center gap-4 border-b border-lt-border px-4 py-2.5 text-sm\">\n {state.sorts.map((sort, index) => {\n const column = columnsByKey.get(sort.key);\n const label = column?.label ?? sort.key;\n const arrow = sort.direction === \"desc\" ? \"arrow-down\" : \"arrow-up\";\n\n return (\n <span key={sort.key} className=\"inline-flex items-center gap-1.5\">\n <span className=\"font-medium\">{`${index + 1}. ${label}`}</span>\n <Icon\n name={arrow}\n role=\"img\"\n aria-hidden={false}\n aria-label={getSortDirectionLabel(sort.direction)}\n className=\"size-lt-icon-sm text-lt-muted-fg\"\n />\n <button\n type=\"button\"\n className=\"inline-flex size-5 items-center justify-center rounded text-lt-muted-fg hover:bg-lt-muted disabled:opacity-50\"\n disabled={processing}\n aria-label={`Clear ${label} sort`}\n data-test={`clear-${sort.key}-sort`}\n onClick={() => onClear(sort)}\n >\n <Icon name=\"x\" className=\"size-lt-icon-sm\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AAIA,SAAgB,QAAQ,EACtB,cACA,OACA,YACA,WAMC;CACD,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,MAAM,MAAM,KAAK,MAAM,UAAU;GAEhC,MAAM,QADS,aAAa,IAAI,KAAK,GACvB,GAAQ,SAAS,KAAK;GACpC,MAAM,QAAQ,KAAK,cAAc,SAAS,eAAe;GAEzD,OACE,qBAAC,QAAD;IAAqB,WAAU;cAA/B;KACE,oBAAC,QAAD;MAAM,WAAU;gBAAe,GAAG,QAAQ,EAAE,IAAI;KAAc,CAAA;KAC9D,oBAAC,MAAD;MACE,MAAM;MACN,MAAK;MACL,eAAa;MACb,cAAY,sBAAsB,KAAK,SAAS;MAChD,WAAU;KACX,CAAA;KACD,oBAAC,UAAD;MACE,MAAK;MACL,WAAU;MACV,UAAU;MACV,cAAY,SAAS,MAAM;MAC3B,aAAW,SAAS,KAAK,IAAI;MAC7B,eAAe,QAAQ,IAAI;gBAE3B,oBAAC,MAAD;OAAM,MAAK;OAAI,WAAU;MAAmB,CAAA;KACtC,CAAA;IACJ;MAnBK,KAAK,GAmBV;EAEV,CAAC;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"sort-bar.js","names":[],"sources":["../../../resources/js/table/components/sort-bar.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { getSortDirectionLabel } from \"../query\";\nimport type { TableColumn, TableSort, TableState } from \"../types\";\n\nexport function SortBar({\n columnsByKey,\n state,\n processing,\n onClear,\n}: {\n columnsByKey: Map<string, TableColumn>;\n state: TableState;\n processing: boolean;\n onClear: (sort: TableSort) => void;\n}) {\n return (\n <div className=\"flex flex-wrap items-center gap-4 border-b border-lt-border px-4 py-2.5 text-sm\">\n {state.sorts.map((sort, index) => {\n const column = columnsByKey.get(sort.key);\n const label = column?.label ?? sort.key;\n const arrow = sort.direction === \"desc\" ? \"arrow-down\" : \"arrow-up\";\n\n return (\n <span key={sort.key} className=\"inline-flex items-center gap-1.5\">\n <span className=\"font-medium\">{`${index + 1}. ${label}`}</span>\n <Icon\n name={arrow}\n role=\"img\"\n aria-hidden={false}\n aria-label={getSortDirectionLabel(sort.direction)}\n className=\"size-lt-icon-sm text-lt-muted-fg\"\n />\n <button\n type=\"button\"\n className=\"inline-flex size-5 items-center justify-center rounded text-lt-muted-fg hover:bg-lt-muted disabled:opacity-50\"\n disabled={processing}\n aria-label={`Clear ${label} sort`}\n data-test={`clear-${sort.key}-sort`}\n onClick={() => onClear(sort)}\n >\n <Icon name=\"x\" className=\"size-lt-icon-sm\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AAIA,SAAgB,QAAQ,EACtB,cACA,OACA,YACA,WAMC;CACD,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,MAAM,MAAM,KAAK,MAAM,UAAU;GAEhC,MAAM,QADS,aAAa,IAAI,KAAK,GACvB,GAAQ,SAAS,KAAK;GACpC,MAAM,QAAQ,KAAK,cAAc,SAAS,eAAe;GAEzD,OACE,qBAAC,QAAD;IAAqB,WAAU;cAA/B;KACE,oBAAC,QAAD;MAAM,WAAU;gBAAe,GAAG,QAAQ,EAAE,IAAI;KAAc,CAAA;KAC9D,oBAAC,MAAD;MACE,MAAM;MACN,MAAK;MACL,eAAa;MACb,cAAY,sBAAsB,KAAK,SAAS;MAChD,WAAU;KACX,CAAA;KACD,oBAAC,UAAD;MACE,MAAK;MACL,WAAU;MACV,UAAU;MACV,cAAY,SAAS,MAAM;MAC3B,aAAW,SAAS,KAAK,IAAI;MAC7B,eAAe,QAAQ,IAAI;gBAE3B,oBAAC,MAAD;OAAM,MAAK;OAAI,WAAU;MAAmB,CAAA;KACtC,CAAA;IACJ;MAnBK,KAAK,GAmBV;EAEV,CAAC;CACE,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-action-node.js","names":[],"sources":["../../../resources/js/table/components/table-action-node.tsx"],"sourcesContent":["import type { Node } from \"@lattice/lattice/core/types\";\nimport ActionComponent from \"@lattice/lattice/action/components/action\";\nimport ActionGroupComponent from \"@lattice/lattice/action/components/action-group\";\nimport LinkComponent from \"@lattice/lattice/core/components/link\";\n\nexport function TableActionNode({ node }: { node: Node }) {\n if (node.type === \"action\") {\n return <ActionComponent node={node as Node<\"action\">}>{null}</ActionComponent>;\n }\n\n if (node.type === \"action.group\") {\n return (\n <ActionGroupComponent node={node as Node<\"action.group\">}>\n {node.schema?.map((childNode, index) => (\n <TableActionNode\n key={childNode.key ?? childNode.id ?? `${childNode.type}-${index}`}\n node={childNode}\n />\n )) ?? null}\n </ActionGroupComponent>\n );\n }\n\n if (node.type === \"link\") {\n return <LinkComponent node={node as Node<\"link\">}>{null}</LinkComponent>;\n }\n\n return null;\n}\n"],"mappings":";;;;;AAKA,SAAgB,gBAAgB,EAAE,QAAwB;CACxD,IAAI,KAAK,SAAS,UAChB,OAAO,oBAAC,iBAAD;EAAuB;YAAyB;CAAsB,CAAA;CAG/E,IAAI,KAAK,SAAS,gBAChB,OACE,oBAAC,sBAAD;EAA4B;YACzB,KAAK,QAAQ,KAAK,WAAW,UAC5B,oBAAC,iBAAD,EAEE,MAAM,UACP,GAFM,UAAU,OAAO,UAAU,MAAM,GAAG,UAAU,KAAK,GAAG,OAE5D,CACF,KAAK;CACc,CAAA;CAI1B,IAAI,KAAK,SAAS,QAChB,OAAO,oBAAC,eAAD;EAAqB;YAAuB;CAAoB,CAAA;CAGzE,OAAO;AACT"}
1
+ {"version":3,"file":"table-action-node.js","names":[],"sources":["../../../resources/js/table/components/table-action-node.tsx"],"sourcesContent":["import type { Node } from \"@lattice-php/lattice/core/types\";\nimport ActionComponent from \"@lattice-php/lattice/action/components/action\";\nimport ActionGroupComponent from \"@lattice-php/lattice/action/components/action-group\";\nimport LinkComponent from \"@lattice-php/lattice/core/components/link\";\n\nexport function TableActionNode({ node }: { node: Node }) {\n if (node.type === \"action\") {\n return <ActionComponent node={node as Node<\"action\">}>{null}</ActionComponent>;\n }\n\n if (node.type === \"action.group\") {\n return (\n <ActionGroupComponent node={node as Node<\"action.group\">}>\n {node.schema?.map((childNode, index) => (\n <TableActionNode\n key={childNode.key ?? childNode.id ?? `${childNode.type}-${index}`}\n node={childNode}\n />\n )) ?? null}\n </ActionGroupComponent>\n );\n }\n\n if (node.type === \"link\") {\n return <LinkComponent node={node as Node<\"link\">}>{null}</LinkComponent>;\n }\n\n return null;\n}\n"],"mappings":";;;;;AAKA,SAAgB,gBAAgB,EAAE,QAAwB;CACxD,IAAI,KAAK,SAAS,UAChB,OAAO,oBAAC,iBAAD;EAAuB;YAAyB;CAAsB,CAAA;CAG/E,IAAI,KAAK,SAAS,gBAChB,OACE,oBAAC,sBAAD;EAA4B;YACzB,KAAK,QAAQ,KAAK,WAAW,UAC5B,oBAAC,iBAAD,EAEE,MAAM,UACP,GAFM,UAAU,OAAO,UAAU,MAAM,GAAG,UAAU,KAAK,GAAG,OAE5D,CACF,KAAK;CACc,CAAA;CAI1B,IAAI,KAAK,SAAS,QAChB,OAAO,oBAAC,eAAD;EAAqB;YAAuB;CAAoB,CAAA;CAGzE,OAAO;AACT"}
@@ -2,4 +2,4 @@ import { TableColumn, TableRow } from '../types';
2
2
  export declare function ColumnCell({ column, row }: {
3
3
  column: TableColumn;
4
4
  row: TableRow;
5
- }): string | number | bigint | boolean | Iterable<import('react').ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<import('react').ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
5
+ }): import("react").JSX.Element;
@@ -1,39 +1,29 @@
1
- import { useColumnRegistry } from "../../provider.js";
1
+ import { useColumnRegistry } from "../../core/registry-context.js";
2
+ import { columnCell } from "../registry.js";
2
3
  import { BadgeCell } from "./cells/badge-cell.js";
4
+ import { BooleanCell } from "./cells/boolean-cell.js";
3
5
  import { IconCell } from "./cells/icon-cell.js";
4
6
  import { ImageCell } from "./cells/image-cell.js";
7
+ import { MoneyCell } from "./cells/money-cell.js";
8
+ import { NumberCell } from "./cells/number-cell.js";
5
9
  import { TextCell } from "./cells/text-cell.js";
10
+ import { StackCell } from "./cells/stack-cell.js";
6
11
  import { jsx } from "react/jsx-runtime";
7
12
  //#region resources/js/table/components/table-cell.tsx
13
+ var builtinColumnCells = {
14
+ "column.badge": columnCell(BadgeCell),
15
+ "column.boolean": columnCell(BooleanCell),
16
+ "column.icon": columnCell(IconCell),
17
+ "column.image": columnCell(ImageCell),
18
+ "column.money": columnCell(MoneyCell),
19
+ "column.number": columnCell(NumberCell),
20
+ "column.stack": columnCell(StackCell),
21
+ "column.text": columnCell(TextCell)
22
+ };
8
23
  function ColumnCell({ column, row }) {
9
- const customRenderer = useColumnRegistry()[column.type];
10
- if (customRenderer) return customRenderer({
11
- column,
12
- row,
13
- value: row[column.key]
14
- });
15
- if (column.type === "stack") return /* @__PURE__ */ jsx("div", {
16
- className: "grid gap-1",
17
- children: (column.columns ?? []).map((stackedColumn) => /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(TextCell, {
18
- column: stackedColumn,
19
- row,
20
- value: row[stackedColumn.key]
21
- }) }, stackedColumn.key))
22
- });
23
- if (column.type === "badge") return /* @__PURE__ */ jsx(BadgeCell, {
24
- column,
25
- value: row[column.key]
26
- });
27
- if (column.type === "icon") return /* @__PURE__ */ jsx(IconCell, {
28
- column,
29
- value: row[column.key]
30
- });
31
- if (column.type === "image") return /* @__PURE__ */ jsx(ImageCell, {
32
- column,
33
- value: row[column.key]
34
- });
35
- return /* @__PURE__ */ jsx(TextCell, {
24
+ return /* @__PURE__ */ jsx(useColumnRegistry()[column.type] ?? builtinColumnCells[column.type] ?? builtinColumnCells["column.text"], {
36
25
  column,
26
+ props: column.props ?? {},
37
27
  row,
38
28
  value: row[column.key]
39
29
  });
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","names":[],"sources":["../../../resources/js/table/components/table-cell.tsx"],"sourcesContent":["import { useColumnRegistry } from \"../../provider\";\nimport type { TableColumn, TableRow } from \"../types\";\nimport { BadgeCell } from \"./cells/badge-cell\";\nimport { IconCell } from \"./cells/icon-cell\";\nimport { ImageCell } from \"./cells/image-cell\";\nimport { TextCell } from \"./cells/text-cell\";\n\nexport function ColumnCell({ column, row }: { column: TableColumn; row: TableRow }) {\n const columnRegistry = useColumnRegistry();\n const customRenderer = columnRegistry[column.type];\n\n if (customRenderer) {\n return customRenderer({ column, row, value: row[column.key] });\n }\n\n if (column.type === \"stack\") {\n return (\n <div className=\"grid gap-1\">\n {(column.columns ?? []).map((stackedColumn) => (\n <span key={stackedColumn.key}>\n <TextCell column={stackedColumn} row={row} value={row[stackedColumn.key]} />\n </span>\n ))}\n </div>\n );\n }\n\n if (column.type === \"badge\") {\n return <BadgeCell column={column} value={row[column.key]} />;\n }\n\n if (column.type === \"icon\") {\n return <IconCell column={column} value={row[column.key]} />;\n }\n\n if (column.type === \"image\") {\n return <ImageCell column={column} value={row[column.key]} />;\n }\n\n return <TextCell column={column} row={row} value={row[column.key]} />;\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,WAAW,EAAE,QAAQ,OAA+C;CAElF,MAAM,iBADiB,kBACA,EAAe,OAAO;CAE7C,IAAI,gBACF,OAAO,eAAe;EAAE;EAAQ;EAAK,OAAO,IAAI,OAAO;CAAK,CAAC;CAG/D,IAAI,OAAO,SAAS,SAClB,OACE,oBAAC,OAAD;EAAK,WAAU;aACX,OAAO,WAAW,CAAC,GAAG,KAAK,kBAC3B,oBAAC,QAAD,EAAA,UACE,oBAAC,UAAD;GAAU,QAAQ;GAAoB;GAAK,OAAO,IAAI,cAAc;EAAO,CAAA,EACvE,GAFK,cAAc,GAEnB,CACP;CACE,CAAA;CAIT,IAAI,OAAO,SAAS,SAClB,OAAO,oBAAC,WAAD;EAAmB;EAAQ,OAAO,IAAI,OAAO;CAAO,CAAA;CAG7D,IAAI,OAAO,SAAS,QAClB,OAAO,oBAAC,UAAD;EAAkB;EAAQ,OAAO,IAAI,OAAO;CAAO,CAAA;CAG5D,IAAI,OAAO,SAAS,SAClB,OAAO,oBAAC,WAAD;EAAmB;EAAQ,OAAO,IAAI,OAAO;CAAO,CAAA;CAG7D,OAAO,oBAAC,UAAD;EAAkB;EAAa;EAAK,OAAO,IAAI,OAAO;CAAO,CAAA;AACtE"}
1
+ {"version":3,"file":"table-cell.js","names":[],"sources":["../../../resources/js/table/components/table-cell.tsx"],"sourcesContent":["import { useColumnRegistry } from \"../../provider\";\nimport { columnCell, type ColumnRegistry } from \"../registry\";\nimport type { TableColumn, TableRow } from \"../types\";\nimport { BadgeCell } from \"./cells/badge-cell\";\nimport { BooleanCell } from \"./cells/boolean-cell\";\nimport { IconCell } from \"./cells/icon-cell\";\nimport { ImageCell } from \"./cells/image-cell\";\nimport { MoneyCell } from \"./cells/money-cell\";\nimport { NumberCell } from \"./cells/number-cell\";\nimport { StackCell } from \"./cells/stack-cell\";\nimport { TextCell } from \"./cells/text-cell\";\n\n// Built-in cells live with the (lazy-loaded) table feature rather than the\n// eager registry, so they stay code-split. Consumer-registered columns are\n// merged on top and win on type collisions.\nconst builtinColumnCells: ColumnRegistry = {\n \"column.badge\": columnCell(BadgeCell),\n \"column.boolean\": columnCell(BooleanCell),\n \"column.icon\": columnCell(IconCell),\n \"column.image\": columnCell(ImageCell),\n \"column.money\": columnCell(MoneyCell),\n \"column.number\": columnCell(NumberCell),\n \"column.stack\": columnCell(StackCell),\n \"column.text\": columnCell(TextCell),\n};\n\nexport function ColumnCell({ column, row }: { column: TableColumn; row: TableRow }) {\n const customCells = useColumnRegistry();\n const Cell =\n customCells[column.type] ??\n builtinColumnCells[column.type] ??\n builtinColumnCells[\"column.text\"];\n\n return <Cell column={column} props={column.props ?? {}} row={row} value={row[column.key]} />;\n}\n"],"mappings":";;;;;;;;;;;;AAeA,IAAM,qBAAqC;CACzC,gBAAgB,WAAW,SAAS;CACpC,kBAAkB,WAAW,WAAW;CACxC,eAAe,WAAW,QAAQ;CAClC,gBAAgB,WAAW,SAAS;CACpC,gBAAgB,WAAW,SAAS;CACpC,iBAAiB,WAAW,UAAU;CACtC,gBAAgB,WAAW,SAAS;CACpC,eAAe,WAAW,QAAQ;AACpC;AAEA,SAAgB,WAAW,EAAE,QAAQ,OAA+C;CAOlF,OAAO,oBANa,kBAElB,EAAY,OAAO,SACnB,mBAAmB,OAAO,SAC1B,mBAAmB,gBAEd;EAAc;EAAQ,OAAO,OAAO,SAAS,CAAC;EAAQ;EAAK,OAAO,IAAI,OAAO;CAAO,CAAA;AAC7F"}
@@ -1,12 +1,19 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import { nodeIdentity } from "../../core/test-id.js";
3
+ import { Icon } from "../../icons/sprite.js";
1
4
  import { useT } from "../../i18n/instance.js";
5
+ import { useColumnResizing } from "../../core/use-column-resizing.js";
6
+ import { alignJustifyItems, alignText } from "../align.js";
2
7
  import { getBulkActions } from "../bulk.js";
3
8
  import { flattenColumns, getRowActions, getRowKey } from "../payload.js";
4
- import { getColumnGridTemplate, getQueryParams, getVisiblePages } from "../query.js";
9
+ import { getQueryParams, getTableSizingColumns, getTableUtilityTracks, getVisiblePages } from "../query.js";
5
10
  import { useTableSelection } from "../use-table-selection.js";
6
11
  import { useTable } from "../use-table.js";
12
+ import { Checkbox } from "../../core/components/checkbox.js";
7
13
  import { BulkBar } from "./bulk-bar.js";
8
14
  import { ColumnFilterControl } from "./column-filter-control.js";
9
15
  import { ColumnHeader } from "./column-header.js";
16
+ import { FilterBar } from "./filter-bar.js";
10
17
  import { FilterStackBar } from "./filter-stack-bar.js";
11
18
  import { TablePagination } from "./pagination.js";
12
19
  import { SortBar } from "./sort-bar.js";
@@ -17,7 +24,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
17
24
  //#region resources/js/table/components/table.tsx
18
25
  var TableComponent = ({ node }) => {
19
26
  const { t } = useT("lattice");
20
- const { columns, rows, pagination, state, filters, addFilter, updateFilter, removeFilter, processing, hasLoaded, infiniteLoaderRef, sort, clearSort, goToPage, loadMore } = useTable(node);
27
+ const { columns, rows, pagination, state, filters, tableFilters, addFilter, updateFilter, removeFilter, setTableFilter, resetFilters, searchFilterOptions, processing, hasLoaded, infiniteLoaderRef, sort, clearSort, goToPage, loadMore } = useTable(node);
21
28
  const bulkActions = useMemo(() => getBulkActions(node.props?.bulkActions), [node.props?.bulkActions]);
22
29
  const hasBulkActions = bulkActions.length > 0;
23
30
  const rowEntries = useMemo(() => rows.map((row, index) => ({
@@ -39,171 +46,203 @@ var TableComponent = ({ node }) => {
39
46
  clause,
40
47
  index
41
48
  }));
42
- const gridTemplateColumns = useMemo(() => getColumnGridTemplate(columns, hasActions, hasBulkActions), [
43
- columns,
44
- hasActions,
45
- hasBulkActions
46
- ]);
49
+ const filterDefinitions = useMemo(() => Array.isArray(node.props?.filters) ? node.props.filters : [], [node.props?.filters]);
50
+ const hasActiveFilters = filters.length > 0 || Object.keys(tableFilters).length > 0;
51
+ const sizingColumns = useMemo(() => getTableSizingColumns(columns), [columns]);
52
+ const utilityTracks = useMemo(() => getTableUtilityTracks(hasActions, hasBulkActions), [hasActions, hasBulkActions]);
53
+ const resizingEnabled = node.props?.resizableColumns === true;
54
+ const resizeStorageIdentity = nodeIdentity(node);
55
+ const { getResizeHandleProps, gridTemplateColumns, hasOverrides, resetColumns } = useColumnResizing({
56
+ columns: sizingColumns,
57
+ enabled: resizingEnabled,
58
+ leadingTracks: utilityTracks.leadingTracks,
59
+ showIndicator: node.props?.resizeIndicator === true,
60
+ storageKey: resizingEnabled && resizeStorageIdentity ? `lattice:table-columns:${resizeStorageIdentity}` : void 0,
61
+ trailingTracks: utilityTracks.trailingTracks
62
+ });
47
63
  return /* @__PURE__ */ jsxs("div", {
48
64
  "data-lattice-component": node.id,
49
- className: "overflow-x-auto rounded-lt-sm border border-lt-border",
50
- children: [
51
- hasBulkActions && selection.active && /* @__PURE__ */ jsx(BulkBar, {
52
- actions: bulkActions,
53
- selectedKeys: selection.selectedKeys,
54
- allMatching: selection.allMatching,
55
- total: pagination.total,
56
- query: getQueryParams(state),
57
- canSelectAllMatching: selection.allVisibleSelected && !selection.allMatching && pagination.total !== void 0 && pagination.total > selection.selectedKeys.length,
58
- onSelectAllMatching: selection.selectAllMatching,
59
- onCompleted: selection.clear
60
- }),
61
- filters.length > 0 && /* @__PURE__ */ jsx(FilterStackBar, {
62
- filters,
63
- columnsByKey,
64
- processing,
65
- onRemove: removeFilter
66
- }),
67
- state.sorts.length > 0 && /* @__PURE__ */ jsx(SortBar, {
68
- columnsByKey,
69
- state,
70
- processing,
71
- onClear: clearSort
72
- }),
73
- /* @__PURE__ */ jsxs("div", {
74
- className: "min-w-full text-sm",
75
- role: "table",
76
- children: [/* @__PURE__ */ jsxs("div", {
77
- className: "border-b border-lt-border bg-lt-muted/50",
78
- role: "rowgroup",
65
+ className: "relative",
66
+ children: [hasOverrides && /* @__PURE__ */ jsx("button", {
67
+ "aria-label": t("a11y.resetColumnWidths", "Reset column widths"),
68
+ className: "absolute right-1 top-1 z-10 hidden rounded-lt-sm p-1 text-lt-muted-fg hover:text-lt-fg md:inline-flex",
69
+ "data-test": "table-reset-columns",
70
+ onClick: resetColumns,
71
+ title: t("a11y.resetColumnWidths", "Reset column widths"),
72
+ type: "button",
73
+ children: /* @__PURE__ */ jsx(Icon, {
74
+ name: "rotate-ccw",
75
+ className: "size-lt-icon-sm"
76
+ })
77
+ }), /* @__PURE__ */ jsxs("div", {
78
+ className: "overflow-x-auto rounded-lt-sm border border-lt-border",
79
+ children: [
80
+ filterDefinitions.length > 0 && /* @__PURE__ */ jsx(FilterBar, {
81
+ filters: filterDefinitions,
82
+ values: tableFilters,
83
+ processing,
84
+ hasActiveFilters,
85
+ onChange: setTableFilter,
86
+ onReset: resetFilters,
87
+ onSearch: searchFilterOptions
88
+ }),
89
+ hasBulkActions && selection.active && /* @__PURE__ */ jsx(BulkBar, {
90
+ actions: bulkActions,
91
+ selectedKeys: selection.selectedKeys,
92
+ allMatching: selection.allMatching,
93
+ total: pagination.total ?? void 0,
94
+ query: getQueryParams(state),
95
+ canSelectAllMatching: selection.allVisibleSelected && !selection.allMatching && pagination.total != null && pagination.total > selection.selectedKeys.length,
96
+ onSelectAllMatching: selection.selectAllMatching,
97
+ onCompleted: selection.clear
98
+ }),
99
+ filters.length > 0 && /* @__PURE__ */ jsx(FilterStackBar, {
100
+ filters,
101
+ columnsByKey,
102
+ processing,
103
+ onRemove: removeFilter
104
+ }),
105
+ state.sorts.length > 0 && /* @__PURE__ */ jsx(SortBar, {
106
+ columnsByKey,
107
+ state,
108
+ processing,
109
+ onClear: clearSort
110
+ }),
111
+ /* @__PURE__ */ jsxs("div", {
112
+ className: "min-w-full text-sm",
113
+ role: "table",
79
114
  children: [/* @__PURE__ */ jsxs("div", {
80
- className: "hidden min-w-full md:grid md:grid-cols-[var(--lattice-table-columns)]",
81
- role: "row",
82
- style: { "--lattice-table-columns": gridTemplateColumns },
83
- children: [
84
- hasBulkActions && /* @__PURE__ */ jsx("div", {
85
- className: "flex items-center px-4 py-3",
86
- role: "columnheader",
87
- children: /* @__PURE__ */ jsx("input", {
88
- type: "checkbox",
89
- "aria-label": t("a11y.selectAllRows", "Select all rows"),
90
- "data-test": "select-all",
91
- checked: selection.allSelected,
92
- onChange: selection.toggleAll
93
- })
94
- }),
95
- columns.map((column) => /* @__PURE__ */ jsx(ColumnHeader, {
96
- column,
97
- processing,
98
- sort,
99
- state
100
- }, column.key)),
101
- hasActions && /* @__PURE__ */ jsx("div", {
102
- className: "px-4 py-3 text-right align-middle font-medium text-lt-muted-fg",
103
- role: "columnheader",
104
- children: /* @__PURE__ */ jsx("span", {
105
- className: "sr-only",
106
- children: node.props?.actionsLabel
107
- })
108
- })
109
- ]
110
- }), hasFilters && /* @__PURE__ */ jsxs("div", {
111
- className: "hidden min-w-full border-t border-lt-border md:grid md:grid-cols-[var(--lattice-table-columns)]",
112
- role: "row",
113
- style: { "--lattice-table-columns": gridTemplateColumns },
114
- children: [
115
- hasBulkActions && /* @__PURE__ */ jsx("div", {
116
- className: "px-4 py-2",
117
- role: "cell"
118
- }),
119
- columns.map((column) => /* @__PURE__ */ jsx("div", {
120
- className: "min-w-0 px-2 py-2",
121
- role: "cell",
122
- children: column.filter?.enabled && /* @__PURE__ */ jsx(ColumnFilterControl, {
115
+ className: "border-b border-lt-border bg-lt-muted/50",
116
+ role: "rowgroup",
117
+ children: [/* @__PURE__ */ jsxs("div", {
118
+ className: "hidden min-w-full md:grid md:grid-cols-[var(--lattice-table-columns)]",
119
+ role: "row",
120
+ style: { "--lattice-table-columns": gridTemplateColumns },
121
+ children: [
122
+ hasBulkActions && /* @__PURE__ */ jsx("div", {
123
+ className: "flex items-center px-4 py-3",
124
+ role: "columnheader",
125
+ children: /* @__PURE__ */ jsx(Checkbox, {
126
+ "aria-label": t("a11y.selectAllRows", "Select all rows"),
127
+ "data-test": "select-all",
128
+ checked: selection.allSelected,
129
+ onCheckedChange: () => selection.toggleAll()
130
+ })
131
+ }),
132
+ columns.map((column, index) => /* @__PURE__ */ jsx(ColumnHeader, {
123
133
  column,
124
- clauses: filterEntries.filter((entry) => entry.clause.field === column.key),
125
134
  processing,
126
- onAdd: addFilter,
127
- onUpdate: updateFilter,
128
- onRemove: removeFilter
135
+ resizeHandleProps: resizingEnabled ? getResizeHandleProps(sizingColumns[index]) : void 0,
136
+ sort,
137
+ state
138
+ }, column.key)),
139
+ hasActions && /* @__PURE__ */ jsx("div", {
140
+ className: "px-4 py-3 text-right align-middle font-medium text-lt-muted-fg",
141
+ role: "columnheader",
142
+ children: /* @__PURE__ */ jsx("span", {
143
+ className: "sr-only",
144
+ children: node.props?.actionsLabel
145
+ })
129
146
  })
130
- }, column.key)),
131
- hasActions && /* @__PURE__ */ jsx("div", {
132
- className: "px-4 py-2",
133
- role: "cell"
134
- })
135
- ]
136
- })]
137
- }), /* @__PURE__ */ jsx("div", {
138
- role: "rowgroup",
139
- children: !hasLoaded ? /* @__PURE__ */ jsx("div", {
140
- className: "p-4 text-lt-muted-fg",
141
- role: "row",
142
- children: /* @__PURE__ */ jsx("div", {
143
- role: "cell",
144
- children: t("table.loading", "Loading rows...")
145
- })
146
- }) : rowEntries.length === 0 ? /* @__PURE__ */ jsx("div", {
147
- className: "p-8 text-center text-lt-muted-fg",
148
- role: "row",
149
- children: /* @__PURE__ */ jsx("div", {
150
- role: "cell",
151
- children: node.props?.emptyLabel
152
- })
153
- }) : rowEntries.map(({ row, actions, key }) => {
154
- return /* @__PURE__ */ jsxs("div", {
155
- className: `grid grid-cols-1 border-b border-lt-border last:border-b-0 md:grid-cols-[var(--lattice-table-columns)] ${striped ? "odd:bg-lt-muted/30" : ""}`,
147
+ ]
148
+ }), hasFilters && /* @__PURE__ */ jsxs("div", {
149
+ className: "hidden min-w-full border-t border-lt-border md:grid md:grid-cols-[var(--lattice-table-columns)]",
156
150
  role: "row",
157
151
  style: { "--lattice-table-columns": gridTemplateColumns },
158
152
  children: [
159
153
  hasBulkActions && /* @__PURE__ */ jsx("div", {
160
- className: "flex items-center p-4",
161
- role: "cell",
162
- children: /* @__PURE__ */ jsx("input", {
163
- type: "checkbox",
164
- "aria-label": t("a11y.selectRow", "Select row {{key}}", { key }),
165
- "data-test": `select-row-${key}`,
166
- checked: selection.isSelected(key),
167
- onChange: () => selection.toggle(key)
168
- })
154
+ className: "px-4 py-2",
155
+ role: "cell"
169
156
  }),
170
- columns.map((column) => /* @__PURE__ */ jsxs("div", {
171
- className: "grid min-w-0 gap-1 p-4 align-middle",
157
+ columns.map((column) => /* @__PURE__ */ jsx("div", {
158
+ className: "min-w-0 px-2 py-2",
172
159
  role: "cell",
173
- children: [/* @__PURE__ */ jsx("span", {
174
- "aria-hidden": "true",
175
- className: "text-xs font-medium text-lt-muted-fg md:hidden",
176
- children: column.label
177
- }), /* @__PURE__ */ jsx("div", {
178
- className: "min-w-0 truncate",
179
- children: /* @__PURE__ */ jsx(ColumnCell, {
180
- column,
181
- row
182
- })
183
- })]
160
+ children: column.filter?.enabled && /* @__PURE__ */ jsx(ColumnFilterControl, {
161
+ column,
162
+ clauses: filterEntries.filter((entry) => entry.clause.field === column.key),
163
+ processing,
164
+ onAdd: addFilter,
165
+ onUpdate: updateFilter,
166
+ onRemove: removeFilter,
167
+ onSearch: (query) => searchFilterOptions(column.key, query)
168
+ })
184
169
  }, column.key)),
185
- actions.length > 0 && /* @__PURE__ */ jsx("div", {
186
- className: "flex items-center justify-start gap-2 p-4 md:justify-end",
187
- role: "cell",
188
- children: actions.map((action, actionIndex) => /* @__PURE__ */ jsx(TableActionNode, { node: action }, action.key ?? action.id ?? actionIndex))
170
+ hasActions && /* @__PURE__ */ jsx("div", {
171
+ className: "px-4 py-2",
172
+ role: "cell"
189
173
  })
190
174
  ]
191
- }, key);
192
- })
193
- })]
194
- }),
195
- hasLoaded && /* @__PURE__ */ jsx(TablePagination, {
196
- pagination,
197
- currentPage,
198
- processing,
199
- mode,
200
- hasNextPage,
201
- visiblePages,
202
- infiniteLoaderRef,
203
- onPage: goToPage,
204
- onLoadMore: loadMore
205
- })
206
- ]
175
+ })]
176
+ }), /* @__PURE__ */ jsx("div", {
177
+ role: "rowgroup",
178
+ children: !hasLoaded ? /* @__PURE__ */ jsx("div", {
179
+ className: "p-4 text-lt-muted-fg",
180
+ role: "row",
181
+ children: /* @__PURE__ */ jsx("div", {
182
+ role: "cell",
183
+ children: t("table.loading", "Loading rows...")
184
+ })
185
+ }) : rowEntries.length === 0 ? /* @__PURE__ */ jsx("div", {
186
+ className: "p-8 text-center text-lt-muted-fg",
187
+ role: "row",
188
+ children: /* @__PURE__ */ jsx("div", {
189
+ role: "cell",
190
+ children: node.props?.emptyLabel
191
+ })
192
+ }) : rowEntries.map(({ row, actions, key }) => {
193
+ return /* @__PURE__ */ jsxs("div", {
194
+ className: `grid grid-cols-1 border-b border-lt-border last:border-b-0 md:grid-cols-[var(--lattice-table-columns)] ${striped ? "odd:bg-lt-muted/30" : ""}`,
195
+ role: "row",
196
+ style: { "--lattice-table-columns": gridTemplateColumns },
197
+ children: [
198
+ hasBulkActions && /* @__PURE__ */ jsx("div", {
199
+ className: "flex items-center p-4",
200
+ role: "cell",
201
+ children: /* @__PURE__ */ jsx(Checkbox, {
202
+ "aria-label": t("a11y.selectRow", "Select row {{key}}", { key }),
203
+ "data-test": `select-row-${key}`,
204
+ checked: selection.isSelected(key),
205
+ onCheckedChange: () => selection.toggle(key)
206
+ })
207
+ }),
208
+ columns.map((column) => /* @__PURE__ */ jsxs("div", {
209
+ className: cn("grid min-w-0 gap-1 p-4 align-middle", alignText(column.align), alignJustifyItems(column.align)),
210
+ role: "cell",
211
+ children: [/* @__PURE__ */ jsx("span", {
212
+ "aria-hidden": "true",
213
+ className: "text-xs font-medium text-lt-muted-fg md:hidden",
214
+ children: column.label
215
+ }), /* @__PURE__ */ jsx("div", {
216
+ className: "min-w-0 truncate",
217
+ children: /* @__PURE__ */ jsx(ColumnCell, {
218
+ column,
219
+ row
220
+ })
221
+ })]
222
+ }, column.key)),
223
+ actions.length > 0 && /* @__PURE__ */ jsx("div", {
224
+ className: "flex items-center justify-start gap-2 p-4 md:justify-end",
225
+ role: "cell",
226
+ children: actions.map((action, actionIndex) => /* @__PURE__ */ jsx(TableActionNode, { node: action }, action.key ?? action.id ?? actionIndex))
227
+ })
228
+ ]
229
+ }, key);
230
+ })
231
+ })]
232
+ }),
233
+ hasLoaded && /* @__PURE__ */ jsx(TablePagination, {
234
+ pagination,
235
+ currentPage,
236
+ processing,
237
+ mode,
238
+ hasNextPage,
239
+ visiblePages,
240
+ infiniteLoaderRef,
241
+ onPage: goToPage,
242
+ onLoadMore: loadMore
243
+ })
244
+ ]
245
+ })]
207
246
  });
208
247
  };
209
248
  //#endregion