@lattice-php/lattice 0.1.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 (589) hide show
  1. package/README.md +3 -1
  2. package/dist/action/components/action-form.d.ts +24 -0
  3. package/dist/action/components/action-form.js +238 -0
  4. package/dist/action/components/action-form.js.map +1 -0
  5. package/dist/action/components/action-group.d.ts +1 -8
  6. package/dist/action/components/action-group.js +34 -64
  7. package/dist/action/components/action-group.js.map +1 -1
  8. package/dist/action/components/action-menu-context.d.ts +6 -0
  9. package/dist/action/components/action-menu-context.js +18 -0
  10. package/dist/action/components/action-menu-context.js.map +1 -0
  11. package/dist/action/components/action.d.ts +1 -24
  12. package/dist/action/components/action.js +73 -51
  13. package/dist/action/components/action.js.map +1 -1
  14. package/dist/action/index.d.ts +1 -1
  15. package/dist/action/index.js.map +1 -1
  16. package/dist/appearance/index.js +7 -2
  17. package/dist/appearance/index.js.map +1 -1
  18. package/dist/chat/components/chat-box.d.ts +3 -0
  19. package/dist/chat/components/chat-box.js +53 -0
  20. package/dist/chat/components/chat-box.js.map +1 -0
  21. package/dist/chat/components/message-list.d.ts +5 -0
  22. package/dist/chat/components/message-list.js +22 -0
  23. package/dist/chat/components/message-list.js.map +1 -0
  24. package/dist/chat/components/message.d.ts +5 -0
  25. package/dist/chat/components/message.js +20 -0
  26. package/dist/chat/components/message.js.map +1 -0
  27. package/dist/chat/components/prompt-input.d.ts +8 -0
  28. package/dist/chat/components/prompt-input.js +49 -0
  29. package/dist/chat/components/prompt-input.js.map +1 -0
  30. package/dist/chat/index.d.ts +1 -0
  31. package/dist/chat/index.js +15 -0
  32. package/dist/chat/index.js.map +1 -0
  33. package/dist/chat/parts/text.d.ts +3 -0
  34. package/dist/chat/parts/text.js +12 -0
  35. package/dist/chat/parts/text.js.map +1 -0
  36. package/dist/chat/parts/tool-call.d.ts +3 -0
  37. package/dist/chat/parts/tool-call.js +20 -0
  38. package/dist/chat/parts/tool-call.js.map +1 -0
  39. package/dist/chat/transport.d.ts +2 -0
  40. package/dist/chat/transport.js +47 -0
  41. package/dist/chat/transport.js.map +1 -0
  42. package/dist/chat/types.d.ts +39 -0
  43. package/dist/chat/use-chat.d.ts +15 -0
  44. package/dist/chat/use-chat.js +161 -0
  45. package/dist/chat/use-chat.js.map +1 -0
  46. package/dist/core/api.d.ts +18 -0
  47. package/dist/core/api.js +51 -0
  48. package/dist/core/api.js.map +1 -0
  49. package/dist/core/collapsed-context.d.ts +2 -0
  50. package/dist/core/collapsed-context.js +10 -0
  51. package/dist/core/collapsed-context.js.map +1 -0
  52. package/dist/core/column-sizing.d.ts +17 -0
  53. package/dist/core/column-sizing.js +61 -0
  54. package/dist/core/column-sizing.js.map +1 -0
  55. package/dist/core/components/badge.d.ts +1 -8
  56. package/dist/core/components/badge.js +2 -3
  57. package/dist/core/components/badge.js.map +1 -1
  58. package/dist/core/components/button.d.ts +5 -13
  59. package/dist/core/components/button.js +10 -9
  60. package/dist/core/components/button.js.map +1 -1
  61. package/dist/core/components/card.d.ts +1 -9
  62. package/dist/core/components/card.js +1 -3
  63. package/dist/core/components/card.js.map +1 -1
  64. package/dist/core/components/chart.d.ts +3 -0
  65. package/dist/core/components/chart.js +175 -0
  66. package/dist/core/components/chart.js.map +1 -0
  67. package/dist/{form/components/base → core/components}/checkbox.js +7 -4
  68. package/dist/core/components/checkbox.js.map +1 -0
  69. package/dist/core/components/combobox.d.ts +33 -0
  70. package/dist/core/components/combobox.js +99 -0
  71. package/dist/core/components/combobox.js.map +1 -0
  72. package/dist/core/components/confirm-dialog.d.ts +2 -3
  73. package/dist/core/components/confirm-dialog.js +17 -17
  74. package/dist/core/components/confirm-dialog.js.map +1 -1
  75. package/dist/core/components/control.d.ts +13 -0
  76. package/dist/core/components/control.js +27 -0
  77. package/dist/core/components/control.js.map +1 -0
  78. package/dist/core/components/dialog.d.ts +19 -0
  79. package/dist/core/components/dialog.js +75 -0
  80. package/dist/core/components/dialog.js.map +1 -0
  81. package/dist/core/components/dropdown-menu.d.ts +14 -0
  82. package/dist/core/components/dropdown-menu.js +42 -0
  83. package/dist/core/components/dropdown-menu.js.map +1 -0
  84. package/dist/core/components/floating-panel.d.ts +3 -0
  85. package/dist/core/components/floating-panel.js +65 -0
  86. package/dist/core/components/floating-panel.js.map +1 -0
  87. package/dist/core/components/fragment.d.ts +1 -10
  88. package/dist/core/components/fragment.js +29 -18
  89. package/dist/core/components/fragment.js.map +1 -1
  90. package/dist/core/components/grid.d.ts +1 -8
  91. package/dist/core/components/grid.js +1 -2
  92. package/dist/core/components/grid.js.map +1 -1
  93. package/dist/core/components/heading.d.ts +1 -9
  94. package/dist/core/components/heading.js +2 -3
  95. package/dist/core/components/heading.js.map +1 -1
  96. package/dist/core/components/icon.d.ts +3 -0
  97. package/dist/core/components/icon.js +31 -0
  98. package/dist/core/components/icon.js.map +1 -0
  99. package/dist/core/components/index.d.ts +1 -1
  100. package/dist/core/components/index.js +12 -1
  101. package/dist/core/components/index.js.map +1 -1
  102. package/dist/core/components/info-tooltip.d.ts +3 -0
  103. package/dist/core/components/info-tooltip.js +26 -0
  104. package/dist/core/components/info-tooltip.js.map +1 -0
  105. package/dist/core/components/link.d.ts +1 -12
  106. package/dist/core/components/link.js +12 -11
  107. package/dist/core/components/link.js.map +1 -1
  108. package/dist/core/components/modal.d.ts +1 -11
  109. package/dist/core/components/modal.js +16 -42
  110. package/dist/core/components/modal.js.map +1 -1
  111. package/dist/core/components/popover.d.ts +8 -0
  112. package/dist/core/components/popover.js +37 -0
  113. package/dist/core/components/popover.js.map +1 -0
  114. package/dist/core/components/raw-block.d.ts +3 -0
  115. package/dist/core/components/raw-block.js +10 -0
  116. package/dist/core/components/raw-block.js.map +1 -0
  117. package/dist/core/components/section.d.ts +3 -0
  118. package/dist/core/components/section.js +75 -0
  119. package/dist/core/components/section.js.map +1 -0
  120. package/dist/core/components/segmented-control.d.ts +1 -14
  121. package/dist/core/components/segmented-control.js +4 -7
  122. package/dist/core/components/segmented-control.js.map +1 -1
  123. package/dist/core/components/segmented-pills.d.ts +4 -2
  124. package/dist/core/components/segmented-pills.js +10 -1
  125. package/dist/core/components/segmented-pills.js.map +1 -1
  126. package/dist/core/components/skeleton.d.ts +3 -0
  127. package/dist/core/components/skeleton.js +16 -0
  128. package/dist/core/components/skeleton.js.map +1 -0
  129. package/dist/core/components/spinner.js +8 -4
  130. package/dist/core/components/spinner.js.map +1 -1
  131. package/dist/core/components/stack.d.ts +1 -11
  132. package/dist/core/components/stack.js +24 -13
  133. package/dist/core/components/stack.js.map +1 -1
  134. package/dist/core/components/tabs.d.ts +1 -19
  135. package/dist/core/components/tabs.js +45 -21
  136. package/dist/core/components/tabs.js.map +1 -1
  137. package/dist/core/components/text.d.ts +1 -9
  138. package/dist/core/components/text.js +18 -3
  139. package/dist/core/components/text.js.map +1 -1
  140. package/dist/core/headers.d.ts +1 -0
  141. package/dist/core/headers.js +14 -0
  142. package/dist/core/headers.js.map +1 -0
  143. package/dist/core/registry-context.d.ts +21 -0
  144. package/dist/core/registry-context.js +40 -0
  145. package/dist/core/registry-context.js.map +1 -0
  146. package/dist/core/registry.d.ts +12 -3
  147. package/dist/core/registry.js +30 -5
  148. package/dist/core/registry.js.map +1 -1
  149. package/dist/core/renderer.d.ts +8 -14
  150. package/dist/core/renderer.js +20 -36
  151. package/dist/core/renderer.js.map +1 -1
  152. package/dist/core/test-id.d.ts +8 -0
  153. package/dist/core/test-id.js +21 -0
  154. package/dist/core/test-id.js.map +1 -0
  155. package/dist/core/types.d.ts +68 -26
  156. package/dist/core/use-column-resizing.d.ts +27 -0
  157. package/dist/core/use-column-resizing.js +228 -0
  158. package/dist/core/use-column-resizing.js.map +1 -0
  159. package/dist/effects/dispatch.d.ts +20 -0
  160. package/dist/effects/dispatch.js +39 -0
  161. package/dist/effects/dispatch.js.map +1 -0
  162. package/dist/effects/registry.d.ts +38 -0
  163. package/dist/effects/registry.js +51 -0
  164. package/dist/effects/registry.js.map +1 -0
  165. package/dist/effects/use-effect-dispatcher.d.ts +8 -0
  166. package/dist/effects/use-effect-dispatcher.js +20 -0
  167. package/dist/effects/use-effect-dispatcher.js.map +1 -0
  168. package/dist/effects/use-flash-effects.d.ts +5 -0
  169. package/dist/effects/use-flash-effects.js +22 -0
  170. package/dist/effects/use-flash-effects.js.map +1 -0
  171. package/dist/events/event-bridge.d.ts +3 -7
  172. package/dist/events/event-bridge.js +17 -47
  173. package/dist/events/event-bridge.js.map +1 -1
  174. package/dist/events/event-names.d.ts +3 -1
  175. package/dist/events/event-names.js +3 -1
  176. package/dist/events/event-names.js.map +1 -1
  177. package/dist/form/components/base/field.d.ts +3 -1
  178. package/dist/form/components/base/field.js +21 -2
  179. package/dist/form/components/base/field.js.map +1 -1
  180. package/dist/form/components/base/input-error.js +1 -1
  181. package/dist/form/components/base/input-error.js.map +1 -1
  182. package/dist/form/components/base/input.js +2 -1
  183. package/dist/form/components/base/input.js.map +1 -1
  184. package/dist/form/components/base/label.js.map +1 -1
  185. package/dist/form/components/base/password-input.js +9 -2
  186. package/dist/form/components/base/password-input.js.map +1 -1
  187. package/dist/form/components/base/submit-button.d.ts +4 -4
  188. package/dist/form/components/base/submit-button.js +5 -3
  189. package/dist/form/components/base/submit-button.js.map +1 -1
  190. package/dist/form/components/base/textarea.js +2 -1
  191. package/dist/form/components/base/textarea.js.map +1 -1
  192. package/dist/form/components/conditions.d.ts +6 -9
  193. package/dist/form/components/conditions.js +10 -2
  194. package/dist/form/components/conditions.js.map +1 -1
  195. package/dist/form/components/context.d.ts +1 -4
  196. package/dist/form/components/context.js +2 -5
  197. package/dist/form/components/context.js.map +1 -1
  198. package/dist/form/components/field-props.d.ts +28 -0
  199. package/dist/form/components/field-props.js +15 -0
  200. package/dist/form/components/field-props.js.map +1 -0
  201. package/dist/form/components/field-scope.d.ts +21 -0
  202. package/dist/form/components/field-scope.js +54 -0
  203. package/dist/form/components/field-scope.js.map +1 -0
  204. package/dist/form/components/fields/block-add-menu.d.ts +9 -0
  205. package/dist/form/components/fields/block-add-menu.js +27 -0
  206. package/dist/form/components/fields/block-add-menu.js.map +1 -0
  207. package/dist/form/components/fields/builder.d.ts +2 -0
  208. package/dist/form/components/fields/builder.js +124 -0
  209. package/dist/form/components/fields/builder.js.map +1 -0
  210. package/dist/form/components/fields/checkbox.d.ts +2 -16
  211. package/dist/form/components/fields/checkbox.js +28 -30
  212. package/dist/form/components/fields/checkbox.js.map +1 -1
  213. package/dist/form/components/fields/choice.d.ts +2 -14
  214. package/dist/form/components/fields/choice.js +14 -20
  215. package/dist/form/components/fields/choice.js.map +1 -1
  216. package/dist/form/components/fields/date-input.d.ts +2 -20
  217. package/dist/form/components/fields/date-input.js +12 -16
  218. package/dist/form/components/fields/date-input.js.map +1 -1
  219. package/dist/form/components/fields/file-upload.d.ts +2 -0
  220. package/dist/form/components/fields/file-upload.js +250 -0
  221. package/dist/form/components/fields/file-upload.js.map +1 -0
  222. package/dist/form/components/fields/hidden-input.d.ts +2 -10
  223. package/dist/form/components/fields/hidden-input.js +11 -6
  224. package/dist/form/components/fields/hidden-input.js.map +1 -1
  225. package/dist/form/components/fields/number-input.d.ts +2 -23
  226. package/dist/form/components/fields/number-input.js +40 -41
  227. package/dist/form/components/fields/number-input.js.map +1 -1
  228. package/dist/form/components/fields/password-input.d.ts +2 -29
  229. package/dist/form/components/fields/password-input.js +41 -41
  230. package/dist/form/components/fields/password-input.js.map +1 -1
  231. package/dist/form/components/fields/repeater-rows.d.ts +12 -0
  232. package/dist/form/components/fields/repeater-rows.js +46 -0
  233. package/dist/form/components/fields/repeater-rows.js.map +1 -0
  234. package/dist/form/components/fields/repeater.d.ts +2 -0
  235. package/dist/form/components/fields/repeater.js +97 -0
  236. package/dist/form/components/fields/repeater.js.map +1 -0
  237. package/dist/form/components/fields/rich-editor.d.ts +2 -17
  238. package/dist/form/components/fields/rich-editor.js +90 -52
  239. package/dist/form/components/fields/rich-editor.js.map +1 -1
  240. package/dist/form/components/fields/row-action-menu.d.ts +17 -0
  241. package/dist/form/components/fields/row-action-menu.js +61 -0
  242. package/dist/form/components/fields/row-action-menu.js.map +1 -0
  243. package/dist/form/components/fields/row-actions.d.ts +10 -0
  244. package/dist/form/components/fields/row-actions.js +45 -0
  245. package/dist/form/components/fields/row-actions.js.map +1 -0
  246. package/dist/form/components/fields/row-item.d.ts +27 -0
  247. package/dist/form/components/fields/row-item.js +69 -0
  248. package/dist/form/components/fields/row-item.js.map +1 -0
  249. package/dist/form/components/fields/select.d.ts +2 -23
  250. package/dist/form/components/fields/select.js +97 -121
  251. package/dist/form/components/fields/select.js.map +1 -1
  252. package/dist/form/components/fields/simple-field.d.ts +9 -0
  253. package/dist/form/components/fields/simple-field.js +23 -0
  254. package/dist/form/components/fields/simple-field.js.map +1 -0
  255. package/dist/form/components/fields/table-rows.d.ts +32 -0
  256. package/dist/form/components/fields/table-rows.js +188 -0
  257. package/dist/form/components/fields/table-rows.js.map +1 -0
  258. package/dist/form/components/fields/text-input.d.ts +2 -21
  259. package/dist/form/components/fields/text-input.js +13 -17
  260. package/dist/form/components/fields/text-input.js.map +1 -1
  261. package/dist/form/components/fields/textarea.d.ts +2 -20
  262. package/dist/form/components/fields/textarea.js +12 -16
  263. package/dist/form/components/fields/textarea.js.map +1 -1
  264. package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
  265. package/dist/form/components/fields/use-flip-reorder.js +51 -0
  266. package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
  267. package/dist/form/components/fields/use-row-collection.d.ts +11 -0
  268. package/dist/form/components/fields/use-row-collection.js +44 -0
  269. package/dist/form/components/fields/use-row-collection.js.map +1 -0
  270. package/dist/form/components/form-path.d.ts +5 -0
  271. package/dist/form/components/form-path.js +40 -0
  272. package/dist/form/components/form-path.js.map +1 -0
  273. package/dist/form/components/form-transport.d.ts +3 -4
  274. package/dist/form/components/form-transport.js +17 -18
  275. package/dist/form/components/form-transport.js.map +1 -1
  276. package/dist/form/components/form.d.ts +1 -20
  277. package/dist/form/components/form.js +47 -48
  278. package/dist/form/components/form.js.map +1 -1
  279. package/dist/form/components/index.d.ts +3 -1
  280. package/dist/form/components/index.js +4 -2
  281. package/dist/form/components/override-keys.d.ts +2 -0
  282. package/dist/form/components/override-keys.js +12 -0
  283. package/dist/form/components/override-keys.js.map +1 -0
  284. package/dist/form/components/prefill-context.d.ts +5 -0
  285. package/dist/form/components/prefill-context.js +11 -0
  286. package/dist/form/components/prefill-context.js.map +1 -0
  287. package/dist/form/components/prefill-targets.d.ts +17 -0
  288. package/dist/form/components/prefill-targets.js +73 -0
  289. package/dist/form/components/prefill-targets.js.map +1 -0
  290. package/dist/form/components/resolved-nodes.d.ts +1 -1
  291. package/dist/form/components/resolved-nodes.js +6 -3
  292. package/dist/form/components/resolved-nodes.js.map +1 -1
  293. package/dist/form/components/row-layout-context.d.ts +5 -0
  294. package/dist/form/components/row-layout-context.js +18 -0
  295. package/dist/form/components/row-layout-context.js.map +1 -0
  296. package/dist/form/components/types.d.ts +1 -0
  297. package/dist/form/components/use-controlled-field.d.ts +5 -9
  298. package/dist/form/components/use-controlled-field.js +17 -13
  299. package/dist/form/components/use-controlled-field.js.map +1 -1
  300. package/dist/form/components/use-dependent-field.d.ts +1 -1
  301. package/dist/form/components/use-dependent-field.js +14 -8
  302. package/dist/form/components/use-dependent-field.js.map +1 -1
  303. package/dist/form/components/use-field-commit.d.ts +4 -0
  304. package/dist/form/components/use-field-commit.js +21 -7
  305. package/dist/form/components/use-field-commit.js.map +1 -1
  306. package/dist/form/components/use-form-resolver.d.ts +7 -2
  307. package/dist/form/components/use-form-resolver.js +57 -17
  308. package/dist/form/components/use-form-resolver.js.map +1 -1
  309. package/dist/form/components/use-seed-default.d.ts +5 -0
  310. package/dist/form/components/use-seed-default.js +28 -0
  311. package/dist/form/components/use-seed-default.js.map +1 -0
  312. package/dist/form/components/values.js +20 -5
  313. package/dist/form/components/values.js.map +1 -1
  314. package/dist/form/index.d.ts +1 -1
  315. package/dist/form/index.js +13 -11
  316. package/dist/form/index.js.map +1 -1
  317. package/dist/form/skeleton.d.ts +1 -1
  318. package/dist/form/skeleton.js +5 -4
  319. package/dist/form/skeleton.js.map +1 -1
  320. package/dist/i18n/backend.d.ts +26 -0
  321. package/dist/i18n/backend.js +54 -0
  322. package/dist/i18n/backend.js.map +1 -0
  323. package/dist/i18n/config.d.ts +6 -0
  324. package/dist/i18n/config.js +36 -0
  325. package/dist/i18n/config.js.map +1 -0
  326. package/dist/i18n/index.d.ts +9 -0
  327. package/dist/i18n/index.js +7 -0
  328. package/dist/i18n/instance.d.ts +27 -0
  329. package/dist/i18n/instance.js +95 -0
  330. package/dist/i18n/instance.js.map +1 -0
  331. package/dist/i18n/locale-reload.d.ts +3 -0
  332. package/dist/i18n/locale-reload.js +17 -0
  333. package/dist/i18n/locale-reload.js.map +1 -0
  334. package/dist/i18n/locale-switcher.d.ts +21 -0
  335. package/dist/i18n/locale-switcher.js +25 -0
  336. package/dist/i18n/locale-switcher.js.map +1 -0
  337. package/dist/i18n/locale.d.ts +9 -0
  338. package/dist/i18n/locale.js +93 -0
  339. package/dist/i18n/locale.js.map +1 -0
  340. package/dist/i18n/page-props.d.ts +3 -0
  341. package/dist/i18n/page-props.js +24 -0
  342. package/dist/i18n/page-props.js.map +1 -0
  343. package/dist/icons/icon-renderer.js +30 -5
  344. package/dist/icons/icon-renderer.js.map +1 -1
  345. package/dist/icons/index.d.ts +2 -0
  346. package/dist/icons/index.js +2 -1
  347. package/dist/icons/sprite.d.ts +30 -0
  348. package/dist/icons/sprite.js +40 -0
  349. package/dist/icons/sprite.js.map +1 -0
  350. package/dist/index.d.ts +23 -9
  351. package/dist/index.js +22 -7
  352. package/dist/inertia.d.ts +3 -7
  353. package/dist/inertia.js +13 -10
  354. package/dist/inertia.js.map +1 -1
  355. package/dist/lattice.css +172 -15
  356. package/dist/layout/breadcrumbs.d.ts +3 -0
  357. package/dist/layout/breadcrumbs.js +34 -0
  358. package/dist/layout/breadcrumbs.js.map +1 -0
  359. package/dist/layout/callouts.d.ts +3 -0
  360. package/dist/layout/callouts.js +67 -0
  361. package/dist/layout/callouts.js.map +1 -0
  362. package/dist/layout/components.d.ts +1 -0
  363. package/dist/layout/components.js +25 -0
  364. package/dist/layout/components.js.map +1 -0
  365. package/dist/layout/context.d.ts +4 -0
  366. package/dist/layout/context.js +8 -0
  367. package/dist/layout/context.js.map +1 -0
  368. package/dist/layout/dropdown.d.ts +3 -0
  369. package/dist/layout/dropdown.js +23 -0
  370. package/dist/layout/dropdown.js.map +1 -0
  371. package/dist/layout/index.d.ts +4 -0
  372. package/dist/layout/index.js +6 -0
  373. package/dist/layout/menu-item.d.ts +3 -0
  374. package/dist/layout/menu-item.js +101 -0
  375. package/dist/layout/menu-item.js.map +1 -0
  376. package/dist/layout/menu.d.ts +3 -0
  377. package/dist/layout/menu.js +13 -0
  378. package/dist/layout/menu.js.map +1 -0
  379. package/dist/layout/outlet.d.ts +6 -0
  380. package/dist/layout/outlet.js +14 -0
  381. package/dist/layout/outlet.js.map +1 -0
  382. package/dist/layout/popover.d.ts +17 -0
  383. package/dist/layout/popover.js +46 -0
  384. package/dist/layout/popover.js.map +1 -0
  385. package/dist/layout/schema-layout.d.ts +10 -0
  386. package/dist/layout/schema-layout.js +23 -0
  387. package/dist/layout/schema-layout.js.map +1 -0
  388. package/dist/layout/sidebar.d.ts +3 -0
  389. package/dist/layout/sidebar.js +48 -0
  390. package/dist/layout/sidebar.js.map +1 -0
  391. package/dist/lib/utils.d.ts +0 -2
  392. package/dist/lib/utils.js +1 -4
  393. package/dist/lib/utils.js.map +1 -1
  394. package/dist/page.d.ts +1 -1
  395. package/dist/page.js +4 -10
  396. package/dist/page.js.map +1 -1
  397. package/dist/provider.d.ts +7 -4
  398. package/dist/provider.js +15 -11
  399. package/dist/provider.js.map +1 -1
  400. package/dist/registry.d.ts +1 -1
  401. package/dist/registry.js +3 -1
  402. package/dist/registry.js.map +1 -1
  403. package/dist/svg-sprite-client/index.d.ts +1 -0
  404. package/dist/svg-sprite-client/index.js +0 -0
  405. package/dist/svg-sprite-client.d.ts +1 -0
  406. package/dist/table/align.d.ts +4 -0
  407. package/dist/table/align.js +23 -0
  408. package/dist/table/align.js.map +1 -0
  409. package/dist/table/bulk.d.ts +6 -10
  410. package/dist/table/bulk.js +13 -35
  411. package/dist/table/bulk.js.map +1 -1
  412. package/dist/table/components/bulk-bar.js +40 -6
  413. package/dist/table/components/bulk-bar.js.map +1 -1
  414. package/dist/table/components/cells/badge-cell.d.ts +2 -0
  415. package/dist/table/components/cells/badge-cell.js +16 -0
  416. package/dist/table/components/cells/badge-cell.js.map +1 -0
  417. package/dist/table/components/cells/boolean-cell.d.ts +3 -0
  418. package/dist/table/components/cells/boolean-cell.js +23 -0
  419. package/dist/table/components/cells/boolean-cell.js.map +1 -0
  420. package/dist/table/components/cells/icon-cell.d.ts +2 -0
  421. package/dist/table/components/cells/icon-cell.js +21 -0
  422. package/dist/table/components/cells/icon-cell.js.map +1 -0
  423. package/dist/table/components/cells/image-cell.d.ts +2 -0
  424. package/dist/table/components/cells/image-cell.js +23 -0
  425. package/dist/table/components/cells/image-cell.js.map +1 -0
  426. package/dist/table/components/cells/money-cell.d.ts +2 -0
  427. package/dist/table/components/cells/money-cell.js +28 -0
  428. package/dist/table/components/cells/money-cell.js.map +1 -0
  429. package/dist/table/components/cells/number-cell.d.ts +2 -0
  430. package/dist/table/components/cells/number-cell.js +25 -0
  431. package/dist/table/components/cells/number-cell.js.map +1 -0
  432. package/dist/table/components/cells/numeric.d.ts +2 -0
  433. package/dist/table/components/cells/numeric.js +10 -0
  434. package/dist/table/components/cells/numeric.js.map +1 -0
  435. package/dist/table/components/cells/stack-cell.d.ts +3 -0
  436. package/dist/table/components/cells/stack-cell.js +17 -0
  437. package/dist/table/components/cells/stack-cell.js.map +1 -0
  438. package/dist/table/components/cells/text-cell.d.ts +2 -0
  439. package/dist/table/components/cells/text-cell.js +49 -0
  440. package/dist/table/components/cells/text-cell.js.map +1 -0
  441. package/dist/table/components/column-filter-control.d.ts +3 -1
  442. package/dist/table/components/column-filter-control.js +125 -100
  443. package/dist/table/components/column-filter-control.js.map +1 -1
  444. package/dist/table/components/column-header.d.ts +3 -1
  445. package/dist/table/components/column-header.js +28 -14
  446. package/dist/table/components/column-header.js.map +1 -1
  447. package/dist/table/components/filter-bar.d.ts +15 -0
  448. package/dist/table/components/filter-bar.js +81 -0
  449. package/dist/table/components/filter-bar.js.map +1 -0
  450. package/dist/table/components/filter-controls.d.ts +18 -0
  451. package/dist/table/components/filter-controls.js +256 -0
  452. package/dist/table/components/filter-controls.js.map +1 -0
  453. package/dist/table/components/filter-stack-bar.d.ts +2 -2
  454. package/dist/table/components/filter-stack-bar.js +10 -8
  455. package/dist/table/components/filter-stack-bar.js.map +1 -1
  456. package/dist/table/components/filter-value-input.d.ts +6 -3
  457. package/dist/table/components/filter-value-input.js +27 -17
  458. package/dist/table/components/filter-value-input.js.map +1 -1
  459. package/dist/table/components/pagination.d.ts +1 -1
  460. package/dist/table/components/pagination.js +20 -8
  461. package/dist/table/components/pagination.js.map +1 -1
  462. package/dist/table/components/sort-bar.d.ts +2 -2
  463. package/dist/table/components/sort-bar.js +12 -10
  464. package/dist/table/components/sort-bar.js.map +1 -1
  465. package/dist/table/components/table-action-node.d.ts +1 -1
  466. package/dist/table/components/table-action-node.js +1 -1
  467. package/dist/table/components/table-action-node.js.map +1 -1
  468. package/dist/table/components/table-cell.js +23 -52
  469. package/dist/table/components/table-cell.js.map +1 -1
  470. package/dist/table/components/table.d.ts +6 -2
  471. package/dist/table/components/table.js +198 -136
  472. package/dist/table/components/table.js.map +1 -1
  473. package/dist/table/filter-values.d.ts +13 -0
  474. package/dist/table/filter-values.js +30 -0
  475. package/dist/table/filter-values.js.map +1 -0
  476. package/dist/table/format.js +5 -3
  477. package/dist/table/format.js.map +1 -1
  478. package/dist/table/index.d.ts +1 -1
  479. package/dist/table/index.js.map +1 -1
  480. package/dist/table/payload.d.ts +1 -1
  481. package/dist/table/payload.js +24 -3
  482. package/dist/table/payload.js.map +1 -1
  483. package/dist/table/query.d.ts +10 -2
  484. package/dist/table/query.js +64 -11
  485. package/dist/table/query.js.map +1 -1
  486. package/dist/table/registry.d.ts +19 -0
  487. package/dist/table/registry.js +14 -0
  488. package/dist/table/registry.js.map +1 -0
  489. package/dist/table/types.d.ts +43 -57
  490. package/dist/table/use-table.d.ts +9 -5
  491. package/dist/table/use-table.js +66 -27
  492. package/dist/table/use-table.js.map +1 -1
  493. package/dist/toast/callout.d.ts +6 -0
  494. package/dist/toast/callout.js +31 -0
  495. package/dist/toast/callout.js.map +1 -0
  496. package/dist/toast/index.d.ts +5 -0
  497. package/dist/toast/index.js +4 -0
  498. package/dist/toast/toast.d.ts +14 -0
  499. package/dist/toast/toast.js +51 -0
  500. package/dist/toast/toast.js.map +1 -0
  501. package/dist/toast/toaster.d.ts +3 -0
  502. package/dist/toast/toaster.js +62 -0
  503. package/dist/toast/toaster.js.map +1 -0
  504. package/dist/toast/variant-styles.d.ts +6 -0
  505. package/dist/toast/variant-styles.js +37 -0
  506. package/dist/toast/variant-styles.js.map +1 -0
  507. package/dist/types/generated.d.ts +1037 -0
  508. package/dist/types/generated.js +0 -0
  509. package/dist/types/index.d.ts +1 -1
  510. package/dist/types/vite-env.d.ts +1 -0
  511. package/dist/vite.d.ts +25 -0
  512. package/dist/vite.js +72 -0
  513. package/dist/vite.js.map +1 -0
  514. package/package.json +125 -12
  515. package/resources/icons/align-center.svg +17 -0
  516. package/resources/icons/align-justify.svg +17 -0
  517. package/resources/icons/align-left.svg +17 -0
  518. package/resources/icons/align-right.svg +17 -0
  519. package/resources/icons/arrow-down.svg +16 -0
  520. package/resources/icons/arrow-up.svg +16 -0
  521. package/resources/icons/bold.svg +15 -0
  522. package/resources/icons/check.svg +15 -0
  523. package/resources/icons/chevron-down.svg +15 -0
  524. package/resources/icons/chevron-right.svg +15 -0
  525. package/resources/icons/chevrons-up-down.svg +16 -0
  526. package/resources/icons/circle-alert.svg +17 -0
  527. package/resources/icons/circle-check.svg +16 -0
  528. package/resources/icons/circle-help.svg +17 -0
  529. package/resources/icons/circle-x.svg +17 -0
  530. package/resources/icons/code.svg +16 -0
  531. package/resources/icons/columns-3.svg +17 -0
  532. package/resources/icons/copy.svg +16 -0
  533. package/resources/icons/external-link.svg +17 -0
  534. package/resources/icons/eye-off.svg +18 -0
  535. package/resources/icons/eye.svg +16 -0
  536. package/resources/icons/filter.svg +15 -0
  537. package/resources/icons/heading-1.svg +18 -0
  538. package/resources/icons/heading-2.svg +18 -0
  539. package/resources/icons/heading-3.svg +19 -0
  540. package/resources/icons/highlighter.svg +16 -0
  541. package/resources/icons/info.svg +17 -0
  542. package/resources/icons/italic.svg +17 -0
  543. package/resources/icons/layout-dashboard.svg +18 -0
  544. package/resources/icons/link.svg +16 -0
  545. package/resources/icons/list-ordered.svg +20 -0
  546. package/resources/icons/list.svg +20 -0
  547. package/resources/icons/loader-2.svg +15 -0
  548. package/resources/icons/minus.svg +15 -0
  549. package/resources/icons/more-horizontal.svg +17 -0
  550. package/resources/icons/panel-left.svg +16 -0
  551. package/resources/icons/pencil-line.svg +17 -0
  552. package/resources/icons/pencil.svg +16 -0
  553. package/resources/icons/plus.svg +16 -0
  554. package/resources/icons/quote.svg +16 -0
  555. package/resources/icons/rotate-ccw.svg +16 -0
  556. package/resources/icons/rows-3.svg +17 -0
  557. package/resources/icons/search.svg +16 -0
  558. package/resources/icons/send.svg +16 -0
  559. package/resources/icons/settings.svg +16 -0
  560. package/resources/icons/smile.svg +18 -0
  561. package/resources/icons/strikethrough.svg +17 -0
  562. package/resources/icons/table.svg +18 -0
  563. package/resources/icons/trash-2.svg +19 -0
  564. package/resources/icons/underline.svg +16 -0
  565. package/resources/icons/x.svg +16 -0
  566. package/dist/action/effects.d.ts +0 -30
  567. package/dist/action/effects.js +0 -44
  568. package/dist/action/effects.js.map +0 -1
  569. package/dist/core/props.d.ts +0 -14
  570. package/dist/core/props.js +0 -30
  571. package/dist/core/props.js.map +0 -1
  572. package/dist/form/components/base/checkbox.js.map +0 -1
  573. package/dist/form/components/fields/submit-button.d.ts +0 -10
  574. package/dist/form/components/fields/submit-button.js +0 -14
  575. package/dist/form/components/fields/submit-button.js.map +0 -1
  576. package/dist/generated/types.d.ts +0 -17
  577. package/dist/icons/default-icons.d.ts +0 -3
  578. package/dist/icons/default-icons.js +0 -44
  579. package/dist/icons/default-icons.js.map +0 -1
  580. package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
  581. package/dist/icons/dynamic-lucide-renderer.js +0 -18
  582. package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
  583. package/dist/menu/index.d.ts +0 -1
  584. package/dist/menu/index.js +0 -2
  585. package/dist/menu/use-menu.d.ts +0 -2
  586. package/dist/menu/use-menu.js +0 -9
  587. package/dist/menu/use-menu.js.map +0 -1
  588. /package/dist/{generated → chat}/types.js +0 -0
  589. /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  import { TableColumn, TableSort, TableState } from '../types';
2
- export declare function SortBar({ columns, state, processing, onClear, }: {
3
- columns: TableColumn[];
2
+ export declare function SortBar({ columnsByKey, state, processing, onClear, }: {
3
+ columnsByKey: Map<string, TableColumn>;
4
4
  state: TableState;
5
5
  processing: boolean;
6
6
  onClear: (sort: TableSort) => void;
@@ -1,13 +1,13 @@
1
- import { getSortColumn, getSortDirectionLabel } from "../query.js";
1
+ import { Icon } from "../../icons/sprite.js";
2
+ import { getSortDirectionLabel } from "../query.js";
2
3
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { ArrowDown, ArrowUp, X } from "lucide-react";
4
4
  //#region resources/js/table/components/sort-bar.tsx
5
- function SortBar({ columns, state, processing, onClear }) {
5
+ function SortBar({ columnsByKey, state, processing, onClear }) {
6
6
  return /* @__PURE__ */ jsx("div", {
7
7
  className: "flex flex-wrap items-center gap-4 border-b border-lt-border px-4 py-2.5 text-sm",
8
8
  children: state.sorts.map((sort, index) => {
9
- const label = getSortColumn(columns, sort)?.label ?? sort.key;
10
- const Chevron = sort.direction === "desc" ? ArrowDown : ArrowUp;
9
+ const label = columnsByKey.get(sort.key)?.label ?? sort.key;
10
+ const arrow = sort.direction === "desc" ? "arrow-down" : "arrow-up";
11
11
  return /* @__PURE__ */ jsxs("span", {
12
12
  className: "inline-flex items-center gap-1.5",
13
13
  children: [
@@ -15,10 +15,12 @@ function SortBar({ columns, state, processing, onClear }) {
15
15
  className: "font-medium",
16
16
  children: `${index + 1}. ${label}`
17
17
  }),
18
- /* @__PURE__ */ jsx(Chevron, {
18
+ /* @__PURE__ */ jsx(Icon, {
19
+ name: arrow,
19
20
  role: "img",
21
+ "aria-hidden": false,
20
22
  "aria-label": getSortDirectionLabel(sort.direction),
21
- className: "size-3.5 text-lt-muted-fg"
23
+ className: "size-lt-icon-sm text-lt-muted-fg"
22
24
  }),
23
25
  /* @__PURE__ */ jsx("button", {
24
26
  type: "button",
@@ -27,9 +29,9 @@ function SortBar({ columns, state, processing, onClear }) {
27
29
  "aria-label": `Clear ${label} sort`,
28
30
  "data-test": `clear-${sort.key}-sort`,
29
31
  onClick: () => onClear(sort),
30
- children: /* @__PURE__ */ jsx(X, {
31
- "aria-hidden": "true",
32
- className: "size-3.5"
32
+ children: /* @__PURE__ */ jsx(Icon, {
33
+ name: "x",
34
+ className: "size-lt-icon-sm"
33
35
  })
34
36
  })
35
37
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"sort-bar.js","names":[],"sources":["../../../resources/js/table/components/sort-bar.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp, X } from \"lucide-react\";\nimport { getSortColumn, getSortDirectionLabel } from \"../query\";\nimport type { TableColumn, TableSort, TableState } from \"../types\";\n\nexport function SortBar({\n columns,\n state,\n processing,\n onClear,\n}: {\n columns: 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 = getSortColumn(columns, sort);\n const label = column?.label ?? sort.key;\n const Chevron = sort.direction === \"desc\" ? ArrowDown : ArrowUp;\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 <Chevron\n role=\"img\"\n aria-label={getSortDirectionLabel(sort.direction)}\n className=\"size-3.5 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 <X aria-hidden=\"true\" className=\"size-3.5\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AAIA,SAAgB,QAAQ,EACtB,SACA,OACA,YACA,WAMC;CACD,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,MAAM,MAAM,KAAK,MAAM,UAAU;GAEhC,MAAM,QADS,cAAc,SAAS,IACxB,GAAQ,SAAS,KAAK;GACpC,MAAM,UAAU,KAAK,cAAc,SAAS,YAAY;GAExD,OACE,qBAAC,QAAD;IAAqB,WAAU;cAA/B;KACE,oBAAC,QAAD;MAAM,WAAU;gBAAe,GAAG,QAAQ,EAAE,IAAI;KAAc,CAAA;KAC9D,oBAAC,SAAD;MACE,MAAK;MACL,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,GAAD;OAAG,eAAY;OAAO,WAAU;MAAY,CAAA;KACtC,CAAA;IACJ;MAjBK,KAAK,GAiBV;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,4 +1,4 @@
1
- import { Node } from '../../../../core/types';
1
+ import { Node } from '../../core/types';
2
2
  export declare function TableActionNode({ node }: {
3
3
  node: Node;
4
4
  }): import("react").JSX.Element | null;
@@ -10,7 +10,7 @@ function TableActionNode({ node }) {
10
10
  });
11
11
  if (node.type === "action.group") return /* @__PURE__ */ jsx(ActionGroupComponent, {
12
12
  node,
13
- children: node.children?.map((childNode, index) => /* @__PURE__ */ jsx(TableActionNode, { node: childNode }, childNode.key ?? childNode.id ?? `${childNode.type}-${index}`)) ?? null
13
+ children: node.schema?.map((childNode, index) => /* @__PURE__ */ jsx(TableActionNode, { node: childNode }, childNode.key ?? childNode.id ?? `${childNode.type}-${index}`)) ?? null
14
14
  });
15
15
  if (node.type === "link") return /* @__PURE__ */ jsx(LinkComponent, {
16
16
  node,
@@ -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.children?.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,UAAU,KAAK,WAAW,UAC9B,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"}
@@ -1,62 +1,33 @@
1
- import { copyToClipboard } from "../../clipboard/index.js";
2
- import { formatCell, resolveLink } from "../format.js";
3
- import { useEffect, useState } from "react";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
- import { Check, Copy } from "lucide-react";
1
+ import { useColumnRegistry } from "../../core/registry-context.js";
2
+ import { columnCell } from "../registry.js";
3
+ import { BadgeCell } from "./cells/badge-cell.js";
4
+ import { BooleanCell } from "./cells/boolean-cell.js";
5
+ import { IconCell } from "./cells/icon-cell.js";
6
+ import { ImageCell } from "./cells/image-cell.js";
7
+ import { MoneyCell } from "./cells/money-cell.js";
8
+ import { NumberCell } from "./cells/number-cell.js";
9
+ import { TextCell } from "./cells/text-cell.js";
10
+ import { StackCell } from "./cells/stack-cell.js";
11
+ import { jsx } from "react/jsx-runtime";
6
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
+ };
7
23
  function ColumnCell({ column, row }) {
8
- if (column.type === "stack") return /* @__PURE__ */ jsx("div", {
9
- className: "grid gap-1",
10
- children: (column.columns ?? []).map((stackedColumn) => /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(TextCell, {
11
- column: stackedColumn,
12
- row,
13
- value: row[stackedColumn.key]
14
- }) }, stackedColumn.key))
15
- });
16
- return /* @__PURE__ */ jsx(TextCell, {
24
+ return /* @__PURE__ */ jsx(useColumnRegistry()[column.type] ?? builtinColumnCells[column.type] ?? builtinColumnCells["column.text"], {
17
25
  column,
26
+ props: column.props ?? {},
18
27
  row,
19
28
  value: row[column.key]
20
29
  });
21
30
  }
22
- function TextCell({ column, row, value }) {
23
- const text = formatCell(value, column);
24
- const [copied, setCopied] = useState(false);
25
- const href = resolveLink(column, row, value);
26
- const content = href ? /* @__PURE__ */ jsx("a", {
27
- className: "underline underline-offset-2",
28
- href,
29
- rel: column.link?.external ? "noreferrer" : void 0,
30
- target: column.link?.external ? "_blank" : void 0,
31
- children: text
32
- }) : text;
33
- useEffect(() => {
34
- if (!copied) return;
35
- const timeout = window.setTimeout(() => setCopied(false), 1500);
36
- return () => window.clearTimeout(timeout);
37
- }, [copied]);
38
- function handleCopy() {
39
- copyToClipboard(text);
40
- setCopied(true);
41
- }
42
- if (!column.copyable) return content;
43
- return /* @__PURE__ */ jsxs("span", {
44
- className: "inline-flex items-center gap-2",
45
- children: [/* @__PURE__ */ jsx("span", { children: content }), /* @__PURE__ */ jsxs("button", {
46
- type: "button",
47
- className: "inline-flex items-center gap-1 rounded border border-lt-border px-2 py-1 text-xs",
48
- "aria-label": `${copied ? "Copied" : "Copy"} ${column.label}`,
49
- onClick: handleCopy,
50
- children: [copied ? /* @__PURE__ */ jsx(Check, {
51
- "aria-hidden": "true",
52
- className: "size-3"
53
- }) : /* @__PURE__ */ jsx(Copy, {
54
- "aria-hidden": "true",
55
- className: "size-3"
56
- }), copied ? "Copied" : "Copy"]
57
- })]
58
- });
59
- }
60
31
  //#endregion
61
32
  export { ColumnCell };
62
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","names":[],"sources":["../../../resources/js/table/components/table-cell.tsx"],"sourcesContent":["import { copyToClipboard } from \"@lattice/lattice/clipboard\";\nimport { Check, Copy } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { formatCell, resolveLink } from \"../format\";\nimport type { TableColumn, TableRow } from \"../types\";\n\nexport function ColumnCell({ column, row }: { column: TableColumn; row: TableRow }) {\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 return <TextCell column={column} row={row} value={row[column.key]} />;\n}\n\nfunction TextCell({ column, row, value }: { column: TableColumn; row: TableRow; value: unknown }) {\n const text = formatCell(value, column);\n const [copied, setCopied] = useState(false);\n const href = resolveLink(column, row, value);\n const content = href ? (\n <a\n className=\"underline underline-offset-2\"\n href={href}\n rel={column.link?.external ? \"noreferrer\" : undefined}\n target={column.link?.external ? \"_blank\" : undefined}\n >\n {text}\n </a>\n ) : (\n text\n );\n\n useEffect(() => {\n if (!copied) {\n return;\n }\n\n const timeout = window.setTimeout(() => setCopied(false), 1500);\n\n return () => window.clearTimeout(timeout);\n }, [copied]);\n\n function handleCopy(): void {\n void copyToClipboard(text);\n setCopied(true);\n }\n\n if (!column.copyable) {\n return content;\n }\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span>{content}</span>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded border border-lt-border px-2 py-1 text-xs\"\n aria-label={`${copied ? \"Copied\" : \"Copy\"} ${column.label}`}\n onClick={handleCopy}\n >\n {copied ? (\n <Check aria-hidden=\"true\" className=\"size-3\" />\n ) : (\n <Copy aria-hidden=\"true\" className=\"size-3\" />\n )}\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </span>\n );\n}\n"],"mappings":";;;;;;AAMA,SAAgB,WAAW,EAAE,QAAQ,OAA+C;CAClF,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,OAAO,oBAAC,UAAD;EAAkB;EAAa;EAAK,OAAO,IAAI,OAAO;CAAO,CAAA;AACtE;AAEA,SAAS,SAAS,EAAE,QAAQ,KAAK,SAAiE;CAChG,MAAM,OAAO,WAAW,OAAO,MAAM;CACrC,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,OAAO,YAAY,QAAQ,KAAK,KAAK;CAC3C,MAAM,UAAU,OACd,oBAAC,KAAD;EACE,WAAU;EACJ;EACN,KAAK,OAAO,MAAM,WAAW,eAAe,KAAA;EAC5C,QAAQ,OAAO,MAAM,WAAW,WAAW,KAAA;YAE1C;CACA,CAAA,IAEH;CAGF,gBAAgB;EACd,IAAI,CAAC,QACH;EAGF,MAAM,UAAU,OAAO,iBAAiB,UAAU,KAAK,GAAG,IAAI;EAE9D,aAAa,OAAO,aAAa,OAAO;CAC1C,GAAG,CAAC,MAAM,CAAC;CAEX,SAAS,aAAmB;EAC1B,gBAAqB,IAAI;EACzB,UAAU,IAAI;CAChB;CAEA,IAAI,CAAC,OAAO,UACV,OAAO;CAGT,OACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,QAAD,EAAA,UAAO,QAAc,CAAA,GACrB,qBAAC,UAAD;GACE,MAAK;GACL,WAAU;GACV,cAAY,GAAG,SAAS,WAAW,OAAO,GAAG,OAAO;GACpD,SAAS;aAJX,CAMG,SACC,oBAAC,OAAD;IAAO,eAAY;IAAO,WAAU;GAAU,CAAA,IAE9C,oBAAC,MAAD;IAAM,eAAY;IAAO,WAAU;GAAU,CAAA,GAE9C,SAAS,WAAW,MACf;IACJ;;AAEV"}
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,3 +1,7 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare const TableComponent: RendererComponent<"table">;
1
+ import { ReactNode } from 'react';
2
+ import { TableNode } from '../types';
3
+ declare const TableComponent: ({ node }: {
4
+ children?: ReactNode;
5
+ node: TableNode;
6
+ }) => import("react").JSX.Element;
3
7
  export default TableComponent;
@@ -1,28 +1,39 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import { nodeIdentity } from "../../core/test-id.js";
3
+ import { Icon } from "../../icons/sprite.js";
4
+ import { useT } from "../../i18n/instance.js";
5
+ import { useColumnResizing } from "../../core/use-column-resizing.js";
6
+ import { alignJustifyItems, alignText } from "../align.js";
1
7
  import { getBulkActions } from "../bulk.js";
2
- import { getRowActions, getRowKey } from "../payload.js";
3
- import { getColumnGridTemplate, getQueryParams, getVisiblePages } from "../query.js";
8
+ import { flattenColumns, getRowActions, getRowKey } from "../payload.js";
9
+ import { getQueryParams, getTableSizingColumns, getTableUtilityTracks, getVisiblePages } from "../query.js";
4
10
  import { useTableSelection } from "../use-table-selection.js";
5
11
  import { useTable } from "../use-table.js";
12
+ import { Checkbox } from "../../core/components/checkbox.js";
6
13
  import { BulkBar } from "./bulk-bar.js";
7
14
  import { ColumnFilterControl } from "./column-filter-control.js";
8
15
  import { ColumnHeader } from "./column-header.js";
16
+ import { FilterBar } from "./filter-bar.js";
9
17
  import { FilterStackBar } from "./filter-stack-bar.js";
10
18
  import { TablePagination } from "./pagination.js";
11
19
  import { SortBar } from "./sort-bar.js";
12
20
  import { TableActionNode } from "./table-action-node.js";
13
21
  import { ColumnCell } from "./table-cell.js";
22
+ import { useMemo } from "react";
14
23
  import { jsx, jsxs } from "react/jsx-runtime";
15
24
  //#region resources/js/table/components/table.tsx
16
25
  var TableComponent = ({ node }) => {
17
- const { columns, rows, pagination, state, filters, addFilter, updateFilter, removeFilter, processing, hasLoaded, infiniteLoaderRef, sort, clearSort, goToPage, loadMore } = useTable(node);
18
- const bulkActions = getBulkActions(node.props?.bulkActions);
26
+ const { t } = useT("lattice");
27
+ const { columns, rows, pagination, state, filters, tableFilters, addFilter, updateFilter, removeFilter, setTableFilter, resetFilters, searchFilterOptions, processing, hasLoaded, infiniteLoaderRef, sort, clearSort, goToPage, loadMore } = useTable(node);
28
+ const bulkActions = useMemo(() => getBulkActions(node.props?.bulkActions), [node.props?.bulkActions]);
19
29
  const hasBulkActions = bulkActions.length > 0;
20
- const rowEntries = rows.map((row, index) => ({
30
+ const rowEntries = useMemo(() => rows.map((row, index) => ({
21
31
  row,
22
32
  actions: getRowActions(row),
23
33
  key: getRowKey(row, index)
24
- }));
34
+ })), [rows]);
25
35
  const selection = useTableSelection(rowEntries.map((entry) => entry.key));
36
+ const columnsByKey = useMemo(() => new Map(flattenColumns(columns).map((column) => [column.key, column])), [columns]);
26
37
  const currentPage = pagination.currentPage ?? state.page;
27
38
  const lastPage = pagination.lastPage ?? currentPage;
28
39
  const mode = pagination.mode ?? "table";
@@ -35,152 +46,203 @@ var TableComponent = ({ node }) => {
35
46
  clause,
36
47
  index
37
48
  }));
38
- const gridTemplateColumns = getColumnGridTemplate(columns, hasActions, hasBulkActions);
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
+ });
39
63
  return /* @__PURE__ */ jsxs("div", {
40
64
  "data-lattice-component": node.id,
41
- className: "overflow-x-auto rounded-lt-sm border border-lt-border",
42
- children: [
43
- hasBulkActions && selection.active && /* @__PURE__ */ jsx(BulkBar, {
44
- actions: bulkActions,
45
- selectedKeys: selection.selectedKeys,
46
- allMatching: selection.allMatching,
47
- total: pagination.total,
48
- query: getQueryParams(state),
49
- canSelectAllMatching: selection.allVisibleSelected && !selection.allMatching && pagination.total !== void 0 && pagination.total > selection.selectedKeys.length,
50
- onSelectAllMatching: selection.selectAllMatching,
51
- onCompleted: selection.clear
52
- }),
53
- filters.length > 0 && /* @__PURE__ */ jsx(FilterStackBar, {
54
- filters,
55
- columns,
56
- processing,
57
- onRemove: removeFilter
58
- }),
59
- state.sorts.length > 0 && /* @__PURE__ */ jsx(SortBar, {
60
- columns,
61
- state,
62
- processing,
63
- onClear: clearSort
64
- }),
65
- /* @__PURE__ */ jsxs("div", {
66
- className: "w-max min-w-full text-sm",
67
- role: "table",
68
- children: [/* @__PURE__ */ jsxs("div", {
69
- className: "border-b border-lt-border bg-lt-muted/50",
70
- 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",
71
114
  children: [/* @__PURE__ */ jsxs("div", {
72
- className: "hidden min-w-full md:grid md:grid-cols-[var(--lattice-table-columns)]",
73
- role: "row",
74
- style: { "--lattice-table-columns": gridTemplateColumns },
75
- children: [
76
- hasBulkActions && /* @__PURE__ */ jsx("div", {
77
- className: "flex items-center px-4 py-3",
78
- role: "columnheader",
79
- children: /* @__PURE__ */ jsx("input", {
80
- type: "checkbox",
81
- "aria-label": "Select all rows",
82
- checked: selection.allSelected,
83
- onChange: selection.toggleAll
84
- })
85
- }),
86
- columns.map((column) => /* @__PURE__ */ jsx(ColumnHeader, {
87
- column,
88
- processing,
89
- sort,
90
- state
91
- }, column.key)),
92
- hasActions && /* @__PURE__ */ jsx("div", {
93
- className: "px-4 py-3 text-right align-middle font-medium text-lt-muted-fg",
94
- role: "columnheader",
95
- children: "Actions"
96
- })
97
- ]
98
- }), hasFilters && /* @__PURE__ */ jsxs("div", {
99
- className: "hidden min-w-full border-t border-lt-border md:grid md:grid-cols-[var(--lattice-table-columns)]",
100
- role: "row",
101
- style: { "--lattice-table-columns": gridTemplateColumns },
102
- children: [
103
- hasBulkActions && /* @__PURE__ */ jsx("div", {
104
- className: "px-4 py-2",
105
- role: "cell"
106
- }),
107
- columns.map((column) => /* @__PURE__ */ jsx("div", {
108
- className: "px-4 py-2",
109
- role: "cell",
110
- 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, {
111
133
  column,
112
- clauses: filterEntries.filter((entry) => entry.clause.field === column.key),
113
134
  processing,
114
- onAdd: addFilter,
115
- onUpdate: updateFilter,
116
- 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
+ })
117
146
  })
118
- }, column.key)),
119
- hasActions && /* @__PURE__ */ jsx("div", {
120
- className: "px-4 py-2",
121
- role: "cell"
122
- })
123
- ]
124
- })]
125
- }), /* @__PURE__ */ jsx("div", {
126
- role: "rowgroup",
127
- children: !hasLoaded ? /* @__PURE__ */ jsx("div", {
128
- className: "p-4 text-lt-muted-fg",
129
- role: "row",
130
- children: /* @__PURE__ */ jsx("div", {
131
- role: "cell",
132
- children: "Loading rows..."
133
- })
134
- }) : rowEntries.map(({ row, actions, key }) => {
135
- return /* @__PURE__ */ jsxs("div", {
136
- 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)]",
137
150
  role: "row",
138
151
  style: { "--lattice-table-columns": gridTemplateColumns },
139
152
  children: [
140
153
  hasBulkActions && /* @__PURE__ */ jsx("div", {
141
- className: "flex items-center p-4",
142
- role: "cell",
143
- children: /* @__PURE__ */ jsx("input", {
144
- type: "checkbox",
145
- "aria-label": `Select row ${key}`,
146
- checked: selection.isSelected(key),
147
- onChange: () => selection.toggle(key)
148
- })
154
+ className: "px-4 py-2",
155
+ role: "cell"
149
156
  }),
150
- columns.map((column) => /* @__PURE__ */ jsxs("div", {
151
- className: "grid gap-1 p-4 align-middle",
157
+ columns.map((column) => /* @__PURE__ */ jsx("div", {
158
+ className: "min-w-0 px-2 py-2",
152
159
  role: "cell",
153
- children: [/* @__PURE__ */ jsx("span", {
154
- "aria-hidden": "true",
155
- className: "text-xs font-medium text-lt-muted-fg md:hidden",
156
- children: column.label
157
- }), /* @__PURE__ */ jsx(ColumnCell, {
160
+ children: column.filter?.enabled && /* @__PURE__ */ jsx(ColumnFilterControl, {
158
161
  column,
159
- row
160
- })]
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
+ })
161
169
  }, column.key)),
162
- actions.length > 0 && /* @__PURE__ */ jsx("div", {
163
- className: "flex items-center justify-start gap-2 p-4 md:justify-end",
164
- role: "cell",
165
- 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"
166
173
  })
167
174
  ]
168
- }, key);
169
- })
170
- })]
171
- }),
172
- hasLoaded && /* @__PURE__ */ jsx(TablePagination, {
173
- pagination,
174
- currentPage,
175
- processing,
176
- mode,
177
- hasNextPage,
178
- visiblePages,
179
- infiniteLoaderRef,
180
- onPage: goToPage,
181
- onLoadMore: loadMore
182
- })
183
- ]
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
+ })]
184
246
  });
185
247
  };
186
248
  //#endregion