@lattice-php/lattice 0.17.2 → 0.18.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 (728) hide show
  1. package/dist/action/components/action-form.d.ts +2 -2
  2. package/dist/action/components/action-form.js +11 -11
  3. package/dist/action/components/action-form.js.map +1 -1
  4. package/dist/action/components/action-group.d.ts +1 -1
  5. package/dist/action/components/action-group.js +6 -4
  6. package/dist/action/components/action-group.js.map +1 -1
  7. package/dist/action/components/action-trigger-provider.d.ts +10 -0
  8. package/dist/action/components/action-trigger-provider.js +24 -0
  9. package/dist/action/components/action-trigger-provider.js.map +1 -0
  10. package/dist/action/components/action.d.ts +1 -1
  11. package/dist/action/components/action.js +4 -4
  12. package/dist/action/components/action.js.map +1 -1
  13. package/dist/action/{use-action.d.ts → hooks/use-action.d.ts} +1 -1
  14. package/dist/action/{use-action.js → hooks/use-action.js} +7 -7
  15. package/dist/action/hooks/use-action.js.map +1 -0
  16. package/dist/action/hooks/use-click-behavior.d.ts +3 -0
  17. package/dist/action/hooks/use-click-behavior.js +3 -0
  18. package/dist/action/index.d.ts +10 -1
  19. package/dist/action/index.js +8 -13
  20. package/dist/action/{run-action.d.ts → lib/run-action.d.ts} +1 -1
  21. package/dist/action/{run-action.js → lib/run-action.js} +2 -2
  22. package/dist/action/lib/run-action.js.map +1 -0
  23. package/dist/action/plugin.d.ts +1 -0
  24. package/dist/action/plugin.js +15 -0
  25. package/dist/action/plugin.js.map +1 -0
  26. package/dist/appearance/index.d.ts +4 -1
  27. package/dist/appearance/index.js +11 -2
  28. package/dist/appearance/index.js.map +1 -1
  29. package/dist/chat/components/chat-box.d.ts +1 -1
  30. package/dist/chat/components/chat-box.js +2 -2
  31. package/dist/chat/components/chat-box.js.map +1 -1
  32. package/dist/chat/components/message-list.d.ts +1 -1
  33. package/dist/chat/components/message-list.js.map +1 -1
  34. package/dist/chat/components/message.d.ts +1 -1
  35. package/dist/chat/components/message.js.map +1 -1
  36. package/dist/chat/components/prompt-input.js +1 -1
  37. package/dist/chat/components/prompt-input.js.map +1 -1
  38. package/dist/chat/{use-chat.d.ts → hooks/use-chat.d.ts} +1 -1
  39. package/dist/chat/{use-chat.js → hooks/use-chat.js} +2 -2
  40. package/dist/chat/hooks/use-chat.js.map +1 -0
  41. package/dist/chat/index.d.ts +4 -1
  42. package/dist/chat/index.js +3 -17
  43. package/dist/chat/{transport.d.ts → lib/transport.d.ts} +2 -2
  44. package/dist/chat/{transport.js → lib/transport.js} +2 -2
  45. package/dist/chat/lib/transport.js.map +1 -0
  46. package/dist/chat/parts/text.d.ts +1 -1
  47. package/dist/chat/parts/tool-call.d.ts +1 -1
  48. package/dist/chat/plugin.d.ts +2 -0
  49. package/dist/chat/plugin.js +17 -0
  50. package/dist/chat/plugin.js.map +1 -0
  51. package/dist/chat/types.d.ts +2 -2
  52. package/dist/clipboard/index.d.ts +1 -2
  53. package/dist/clipboard/index.js +1 -10
  54. package/dist/clipboard/index.js.map +1 -1
  55. package/dist/core/api.d.ts +1 -1
  56. package/dist/core/api.js.map +1 -1
  57. package/dist/core/headers.js.map +1 -1
  58. package/dist/core/{column-sizing.d.ts → hooks/column-sizing.d.ts} +2 -2
  59. package/dist/core/{column-sizing.js → hooks/column-sizing.js} +1 -1
  60. package/dist/core/hooks/column-sizing.js.map +1 -0
  61. package/dist/core/{use-column-resizing.d.ts → hooks/use-column-resizing.d.ts} +2 -1
  62. package/dist/core/{use-column-resizing.js → hooks/use-column-resizing.js} +59 -31
  63. package/dist/core/hooks/use-column-resizing.js.map +1 -0
  64. package/dist/core/index.d.ts +13 -0
  65. package/dist/core/index.js +10 -0
  66. package/dist/core/materialize.d.ts +9 -0
  67. package/dist/core/materialize.js +39 -0
  68. package/dist/core/materialize.js.map +1 -0
  69. package/dist/core/nodes.d.ts +1 -1
  70. package/dist/core/registry-context.d.ts +3 -3
  71. package/dist/core/registry-context.js.map +1 -1
  72. package/dist/core/registry.d.ts +5 -3
  73. package/dist/core/registry.js.map +1 -1
  74. package/dist/core/renderer.d.ts +1 -1
  75. package/dist/core/renderer.js +3 -3
  76. package/dist/core/renderer.js.map +1 -1
  77. package/dist/core/test-id.d.ts +1 -1
  78. package/dist/core/types.d.ts +1 -1
  79. package/dist/create-app.d.ts +3 -3
  80. package/dist/effects/dispatch.d.ts +2 -2
  81. package/dist/effects/registry.d.ts +4 -3
  82. package/dist/effects/registry.js +7 -7
  83. package/dist/effects/registry.js.map +1 -1
  84. package/dist/effects/use-effect-dispatcher.d.ts +1 -1
  85. package/dist/{events/event-bridge.d.ts → event-bridge.d.ts} +2 -3
  86. package/dist/{events/event-bridge.js → event-bridge.js} +4 -11
  87. package/dist/event-bridge.js.map +1 -0
  88. package/dist/form/components/base/field.d.ts +1 -1
  89. package/dist/form/components/base/field.js +5 -5
  90. package/dist/form/components/base/field.js.map +1 -1
  91. package/dist/form/components/base/submit-button.d.ts +1 -1
  92. package/dist/form/components/base/submit-button.js +3 -3
  93. package/dist/form/components/base/submit-button.js.map +1 -1
  94. package/dist/form/components/fields/{block-add-menu.d.ts → add-row-menu.d.ts} +3 -3
  95. package/dist/form/components/fields/{block-add-menu.js → add-row-menu.js} +10 -10
  96. package/dist/form/components/fields/add-row-menu.js.map +1 -0
  97. package/dist/form/components/fields/builder.d.ts +1 -1
  98. package/dist/form/components/fields/builder.js +80 -75
  99. package/dist/form/components/fields/builder.js.map +1 -1
  100. package/dist/form/components/fields/checkbox.d.ts +1 -1
  101. package/dist/form/components/fields/checkbox.js +12 -9
  102. package/dist/form/components/fields/checkbox.js.map +1 -1
  103. package/dist/form/components/fields/choice.d.ts +1 -1
  104. package/dist/form/components/fields/choice.js +4 -4
  105. package/dist/form/components/fields/choice.js.map +1 -1
  106. package/dist/form/components/fields/date-input.d.ts +1 -1
  107. package/dist/form/components/fields/date-picker-field.js +2 -2
  108. package/dist/form/components/fields/date-picker-field.js.map +1 -1
  109. package/dist/form/components/fields/date-picker.d.ts +1 -1
  110. package/dist/form/components/fields/date-time-input.d.ts +1 -1
  111. package/dist/form/components/fields/file-upload.d.ts +1 -1
  112. package/dist/form/components/fields/file-upload.js +4 -4
  113. package/dist/form/components/fields/file-upload.js.map +1 -1
  114. package/dist/form/components/fields/hidden-input.d.ts +1 -1
  115. package/dist/form/components/fields/hidden-input.js +1 -1
  116. package/dist/form/components/fields/hidden-input.js.map +1 -1
  117. package/dist/form/components/fields/number-input.d.ts +1 -1
  118. package/dist/form/components/fields/number-input.js +2 -2
  119. package/dist/form/components/fields/number-input.js.map +1 -1
  120. package/dist/form/components/fields/otp-input.d.ts +1 -1
  121. package/dist/form/components/fields/otp-input.js +1 -1
  122. package/dist/form/components/fields/otp-input.js.map +1 -1
  123. package/dist/form/components/fields/password-input.d.ts +1 -1
  124. package/dist/form/components/fields/password-input.js +6 -6
  125. package/dist/form/components/fields/password-input.js.map +1 -1
  126. package/dist/form/components/fields/repeater-rows.d.ts +6 -1
  127. package/dist/form/components/fields/repeater-rows.js +9 -5
  128. package/dist/form/components/fields/repeater-rows.js.map +1 -1
  129. package/dist/form/components/fields/repeater.d.ts +1 -1
  130. package/dist/form/components/fields/repeater.js +57 -48
  131. package/dist/form/components/fields/repeater.js.map +1 -1
  132. package/dist/form/components/fields/rich-editor-field.d.ts +1 -1
  133. package/dist/form/components/fields/rich-editor-field.js +5 -5
  134. package/dist/form/components/fields/rich-editor-field.js.map +1 -1
  135. package/dist/form/components/fields/rich-editor.d.ts +1 -1
  136. package/dist/form/components/fields/row-action-menu.d.ts +2 -2
  137. package/dist/form/components/fields/row-actions.js +1 -1
  138. package/dist/form/components/fields/row-actions.js.map +1 -1
  139. package/dist/form/components/fields/row-item.d.ts +3 -3
  140. package/dist/form/components/fields/row-item.js +1 -1
  141. package/dist/form/components/fields/row-item.js.map +1 -1
  142. package/dist/form/components/fields/row-key-inputs.d.ts +7 -0
  143. package/dist/form/components/fields/row-key-inputs.js +16 -0
  144. package/dist/form/components/fields/row-key-inputs.js.map +1 -0
  145. package/dist/form/components/fields/row-templates.d.ts +9 -0
  146. package/dist/form/components/fields/row-templates.js +14 -0
  147. package/dist/form/components/fields/row-templates.js.map +1 -0
  148. package/dist/form/components/fields/select.d.ts +1 -1
  149. package/dist/form/components/fields/select.js +23 -13
  150. package/dist/form/components/fields/select.js.map +1 -1
  151. package/dist/form/components/fields/simple-field.d.ts +2 -2
  152. package/dist/form/components/fields/simple-field.js +2 -2
  153. package/dist/form/components/fields/simple-field.js.map +1 -1
  154. package/dist/form/components/fields/table-rows.d.ts +3 -3
  155. package/dist/form/components/fields/table-rows.js +10 -11
  156. package/dist/form/components/fields/table-rows.js.map +1 -1
  157. package/dist/form/components/fields/text-input.d.ts +1 -1
  158. package/dist/form/components/fields/text-input.js +2 -2
  159. package/dist/form/components/fields/text-input.js.map +1 -1
  160. package/dist/form/components/fields/textarea.d.ts +1 -1
  161. package/dist/form/components/fields/textarea.js +1 -1
  162. package/dist/form/components/fields/textarea.js.map +1 -1
  163. package/dist/form/components/fields/time-input.d.ts +1 -1
  164. package/dist/form/components/fields/time-input.js +3 -3
  165. package/dist/form/components/fields/time-input.js.map +1 -1
  166. package/dist/form/components/fields/time-picker.d.ts +1 -1
  167. package/dist/form/components/fields/toggle.d.ts +1 -1
  168. package/dist/form/components/fields/toggle.js +10 -9
  169. package/dist/form/components/fields/toggle.js.map +1 -1
  170. package/dist/form/components/fields/use-row-collection.d.ts +1 -1
  171. package/dist/form/components/fields/use-row-collection.js +2 -2
  172. package/dist/form/components/fields/use-row-collection.js.map +1 -1
  173. package/dist/form/components/form.d.ts +1 -1
  174. package/dist/form/components/form.js +6 -6
  175. package/dist/form/components/form.js.map +1 -1
  176. package/dist/form/components/index.d.ts +17 -17
  177. package/dist/form/embed.d.ts +17 -0
  178. package/dist/form/embed.js +10 -0
  179. package/dist/form/{components → hooks}/context.d.ts +3 -0
  180. package/dist/form/{components → hooks}/context.js +2 -1
  181. package/dist/form/hooks/context.js.map +1 -0
  182. package/dist/form/{components → hooks}/field-scope.js +3 -3
  183. package/dist/form/hooks/field-scope.js.map +1 -0
  184. package/dist/form/{components → hooks}/prefill-context.js +1 -1
  185. package/dist/form/hooks/prefill-context.js.map +1 -0
  186. package/dist/form/{components → hooks}/resolved-nodes.d.ts +1 -1
  187. package/dist/form/{components → hooks}/resolved-nodes.js +2 -2
  188. package/dist/form/hooks/resolved-nodes.js.map +1 -0
  189. package/dist/form/{components → hooks}/row-layout-context.js +1 -1
  190. package/dist/form/hooks/row-layout-context.js.map +1 -0
  191. package/dist/form/{components → hooks}/use-controlled-field.d.ts +2 -2
  192. package/dist/form/{components → hooks}/use-controlled-field.js +6 -5
  193. package/dist/form/hooks/use-controlled-field.js.map +1 -0
  194. package/dist/form/hooks/use-dependent-field.d.ts +3 -0
  195. package/dist/form/{components → hooks}/use-dependent-field.js +6 -6
  196. package/dist/form/hooks/use-dependent-field.js.map +1 -0
  197. package/dist/form/{components → hooks}/use-field-commit.d.ts +5 -0
  198. package/dist/form/{components → hooks}/use-field-commit.js +9 -2
  199. package/dist/form/hooks/use-field-commit.js.map +1 -0
  200. package/dist/form/{components → hooks}/use-form-resolver.d.ts +2 -2
  201. package/dist/form/{components → hooks}/use-form-resolver.js +5 -5
  202. package/dist/form/hooks/use-form-resolver.js.map +1 -0
  203. package/dist/form/{components → hooks}/use-seed-default.js +1 -1
  204. package/dist/form/hooks/use-seed-default.js.map +1 -0
  205. package/dist/form/{components → hooks}/values.d.ts +3 -1
  206. package/dist/form/hooks/values.js +136 -0
  207. package/dist/form/hooks/values.js.map +1 -0
  208. package/dist/form/index.d.ts +4 -1
  209. package/dist/form/index.js +3 -30
  210. package/dist/form/{components → lib}/conditions.d.ts +2 -1
  211. package/dist/form/{components → lib}/conditions.js +12 -2
  212. package/dist/form/lib/conditions.js.map +1 -0
  213. package/dist/form/lib/field-dom-name.d.ts +1 -0
  214. package/dist/form/lib/field-dom-name.js +10 -0
  215. package/dist/form/lib/field-dom-name.js.map +1 -0
  216. package/dist/form/{components → lib}/field-props.d.ts +2 -3
  217. package/dist/form/{components → lib}/field-props.js +1 -1
  218. package/dist/form/lib/field-props.js.map +1 -0
  219. package/dist/form/{components → lib}/form-path.js +1 -1
  220. package/dist/form/lib/form-path.js.map +1 -0
  221. package/dist/form/{components → lib}/form-transport.d.ts +1 -1
  222. package/dist/form/lib/form-transport.js +21 -0
  223. package/dist/form/lib/form-transport.js.map +1 -0
  224. package/dist/form/lib/override-keys.js +12 -0
  225. package/dist/form/lib/override-keys.js.map +1 -0
  226. package/dist/form/{components → lib}/prefill-targets.d.ts +2 -2
  227. package/dist/form/{components → lib}/prefill-targets.js +4 -5
  228. package/dist/form/lib/prefill-targets.js.map +1 -0
  229. package/dist/form/plugin.d.ts +1 -0
  230. package/dist/form/plugin.js +47 -0
  231. package/dist/form/plugin.js.map +1 -0
  232. package/dist/form/toolkit.d.ts +17 -0
  233. package/dist/form/toolkit.js +14 -0
  234. package/dist/form/{components/types.d.ts → types.d.ts} +3 -3
  235. package/dist/format/number.d.ts +1 -1
  236. package/dist/format/value.d.ts +1 -1
  237. package/dist/i18n/backend.d.ts +1 -1
  238. package/dist/i18n/config.d.ts +1 -1
  239. package/dist/i18n/index.d.ts +13 -13
  240. package/dist/i18n/locale-reload.js +1 -1
  241. package/dist/i18n/locale-reload.js.map +1 -1
  242. package/dist/i18n/locale.js.map +1 -1
  243. package/dist/i18n/page-props.d.ts +1 -1
  244. package/dist/i18n/timezone.js.map +1 -1
  245. package/dist/i18n/translatable.d.ts +1 -1
  246. package/dist/icons/icon-renderer.js.map +1 -1
  247. package/dist/icons/index.d.ts +4 -4
  248. package/dist/icons/sprite.js.map +1 -1
  249. package/dist/index.d.ts +37 -38
  250. package/dist/index.js +10 -9
  251. package/dist/inertia.js +1 -1
  252. package/dist/layout/{breadcrumbs.d.ts → components/breadcrumbs.d.ts} +1 -1
  253. package/dist/layout/{breadcrumbs.js → components/breadcrumbs.js} +2 -2
  254. package/dist/layout/components/breadcrumbs.js.map +1 -0
  255. package/dist/layout/{callouts.d.ts → components/callouts.d.ts} +1 -1
  256. package/dist/layout/{callouts.js → components/callouts.js} +7 -7
  257. package/dist/layout/components/callouts.js.map +1 -0
  258. package/dist/layout/{dropdown.d.ts → components/dropdown.d.ts} +1 -1
  259. package/dist/layout/{dropdown.js → components/dropdown.js} +2 -2
  260. package/dist/layout/components/dropdown.js.map +1 -0
  261. package/dist/layout/{menu-item.d.ts → components/menu-item.d.ts} +1 -1
  262. package/dist/layout/{menu-item.js → components/menu-item.js} +9 -8
  263. package/dist/layout/components/menu-item.js.map +1 -0
  264. package/dist/layout/{menu.d.ts → components/menu.d.ts} +1 -1
  265. package/dist/layout/{menu.js → components/menu.js} +2 -2
  266. package/dist/layout/components/menu.js.map +1 -0
  267. package/dist/layout/{outlet.d.ts → components/outlet.d.ts} +1 -1
  268. package/dist/layout/{outlet.js → components/outlet.js} +2 -2
  269. package/dist/layout/components/outlet.js.map +1 -0
  270. package/dist/layout/{popover.js → components/popover.js} +4 -4
  271. package/dist/layout/components/popover.js.map +1 -0
  272. package/dist/layout/{schema-layout.js → components/schema-layout.js} +3 -3
  273. package/dist/layout/components/schema-layout.js.map +1 -0
  274. package/dist/layout/{sidebar.d.ts → components/sidebar.d.ts} +1 -1
  275. package/dist/layout/{sidebar.js → components/sidebar.js} +5 -5
  276. package/dist/layout/components/sidebar.js.map +1 -0
  277. package/dist/layout/{topbar.d.ts → components/topbar.d.ts} +1 -1
  278. package/dist/layout/{topbar.js → components/topbar.js} +3 -3
  279. package/dist/layout/components/topbar.js.map +1 -0
  280. package/dist/layout/{context.d.ts → hooks/context.d.ts} +1 -1
  281. package/dist/layout/{context.js → hooks/context.js} +2 -2
  282. package/dist/layout/hooks/context.js.map +1 -0
  283. package/dist/layout/index.d.ts +4 -4
  284. package/dist/layout/index.js +4 -4
  285. package/dist/layout/plugin.d.ts +2 -0
  286. package/dist/layout/{components.js → plugin.js} +10 -10
  287. package/dist/layout/plugin.js.map +1 -0
  288. package/dist/notifications/api.d.ts +1 -1
  289. package/dist/notifications/components/notification-item.d.ts +1 -1
  290. package/dist/notifications/components/notification-item.js.map +1 -1
  291. package/dist/notifications/components/notification-list.d.ts +2 -2
  292. package/dist/notifications/components/notification-list.js +1 -1
  293. package/dist/notifications/components/notification-list.js.map +1 -1
  294. package/dist/notifications/components/notifications-echo.d.ts +1 -1
  295. package/dist/notifications/components/notifications-echo.js.map +1 -1
  296. package/dist/notifications/components/notifications.d.ts +1 -1
  297. package/dist/notifications/components/notifications.js +3 -3
  298. package/dist/notifications/components/notifications.js.map +1 -1
  299. package/dist/notifications/index.d.ts +2 -1
  300. package/dist/notifications/index.js +1 -10
  301. package/dist/notifications/plugin.d.ts +2 -0
  302. package/dist/notifications/plugin.js +11 -0
  303. package/dist/notifications/plugin.js.map +1 -0
  304. package/dist/notifications/store.d.ts +1 -1
  305. package/dist/notifications/types.d.ts +1 -1
  306. package/dist/page.d.ts +1 -1
  307. package/dist/provider-base.d.ts +2 -2
  308. package/dist/provider-base.js +5 -4
  309. package/dist/provider-base.js.map +1 -1
  310. package/dist/provider.d.ts +3 -3
  311. package/dist/realtime/build-effects.d.ts +2 -2
  312. package/dist/realtime/listeners.d.ts +1 -1
  313. package/dist/realtime/subscriptions.d.ts +1 -1
  314. package/dist/registry.d.ts +1 -1
  315. package/dist/registry.js +9 -9
  316. package/dist/registry.js.map +1 -1
  317. package/dist/remote/components/data-list.d.ts +2 -2
  318. package/dist/remote/components/data-list.js +1 -34
  319. package/dist/remote/components/data-list.js.map +1 -1
  320. package/dist/remote/index.d.ts +1 -1
  321. package/dist/remote/index.js +1 -10
  322. package/dist/remote/plugin.d.ts +2 -0
  323. package/dist/remote/plugin.js +11 -0
  324. package/dist/remote/plugin.js.map +1 -0
  325. package/dist/table/components/bulk-bar.d.ts +1 -1
  326. package/dist/table/components/bulk-bar.js +4 -4
  327. package/dist/table/components/bulk-bar.js.map +1 -1
  328. package/dist/table/components/cells/badge-cell.d.ts +1 -1
  329. package/dist/table/components/cells/badge-cell.js +1 -1
  330. package/dist/table/components/cells/badge-cell.js.map +1 -1
  331. package/dist/table/components/cells/boolean-cell.d.ts +1 -1
  332. package/dist/table/components/cells/boolean-cell.js.map +1 -1
  333. package/dist/table/components/cells/icon-cell.d.ts +1 -1
  334. package/dist/table/components/cells/icon-cell.js.map +1 -1
  335. package/dist/table/components/cells/image-cell.d.ts +1 -1
  336. package/dist/table/components/cells/image-cell.js +1 -1
  337. package/dist/table/components/cells/image-cell.js.map +1 -1
  338. package/dist/table/components/cells/money-cell.d.ts +1 -1
  339. package/dist/table/components/cells/money-cell.js +1 -1
  340. package/dist/table/components/cells/money-cell.js.map +1 -1
  341. package/dist/table/components/cells/number-cell.d.ts +1 -1
  342. package/dist/table/components/cells/number-cell.js +1 -1
  343. package/dist/table/components/cells/number-cell.js.map +1 -1
  344. package/dist/table/components/cells/stack-cell.d.ts +1 -1
  345. package/dist/table/components/cells/stack-cell.js +3 -7
  346. package/dist/table/components/cells/stack-cell.js.map +1 -1
  347. package/dist/table/components/cells/text-cell.d.ts +1 -1
  348. package/dist/table/components/cells/text-cell.js +4 -4
  349. package/dist/table/components/cells/text-cell.js.map +1 -1
  350. package/dist/table/components/column-filter-control.d.ts +3 -3
  351. package/dist/table/components/column-filter-control.js +34 -19
  352. package/dist/table/components/column-filter-control.js.map +1 -1
  353. package/dist/table/components/column-header.d.ts +1 -1
  354. package/dist/table/components/column-header.js +7 -7
  355. package/dist/table/components/column-header.js.map +1 -1
  356. package/dist/table/components/column-visibility-menu.d.ts +1 -1
  357. package/dist/table/components/column-visibility-menu.js +3 -3
  358. package/dist/table/components/column-visibility-menu.js.map +1 -1
  359. package/dist/table/components/filter-bar.d.ts +9 -7
  360. package/dist/table/components/filter-bar.js +62 -52
  361. package/dist/table/components/filter-bar.js.map +1 -1
  362. package/dist/table/components/filter-controls.d.ts +5 -9
  363. package/dist/table/components/filter-controls.js +96 -224
  364. package/dist/table/components/filter-controls.js.map +1 -1
  365. package/dist/table/components/filter-value-input.d.ts +1 -1
  366. package/dist/table/components/filter-value-input.js +1 -1
  367. package/dist/table/components/filter-value-input.js.map +1 -1
  368. package/dist/table/components/pagination.d.ts +2 -2
  369. package/dist/table/components/pagination.js.map +1 -1
  370. package/dist/table/components/sort-bar.d.ts +1 -1
  371. package/dist/table/components/sort-bar.js +2 -2
  372. package/dist/table/components/sort-bar.js.map +1 -1
  373. package/dist/table/components/table-action-node.d.ts +1 -1
  374. package/dist/table/components/table-action-node.js +1 -1
  375. package/dist/table/components/table-action-node.js.map +1 -1
  376. package/dist/table/components/table-cell.d.ts +1 -1
  377. package/dist/table/components/table-cell.js +2 -2
  378. package/dist/table/components/table-cell.js.map +1 -1
  379. package/dist/table/components/table.d.ts +1 -1
  380. package/dist/table/components/table.js +23 -31
  381. package/dist/table/components/table.js.map +1 -1
  382. package/dist/{core → table/hooks}/use-column-visibility.d.ts +5 -3
  383. package/dist/{core → table/hooks}/use-column-visibility.js +4 -4
  384. package/dist/table/hooks/use-column-visibility.js.map +1 -0
  385. package/dist/table/{use-table-selection.js → hooks/use-table-selection.js} +1 -1
  386. package/dist/table/hooks/use-table-selection.js.map +1 -0
  387. package/dist/table/{use-table.d.ts → hooks/use-table.d.ts} +7 -7
  388. package/dist/table/{use-table.js → hooks/use-table.js} +12 -9
  389. package/dist/table/hooks/use-table.js.map +1 -0
  390. package/dist/table/index.d.ts +6 -1
  391. package/dist/table/index.js +5 -11
  392. package/dist/table/{align.d.ts → lib/align.d.ts} +1 -1
  393. package/dist/table/{align.js → lib/align.js} +1 -1
  394. package/dist/table/lib/align.js.map +1 -0
  395. package/dist/table/{bulk.d.ts → lib/bulk.d.ts} +3 -3
  396. package/dist/table/{bulk.js → lib/bulk.js} +1 -1
  397. package/dist/table/lib/bulk.js.map +1 -0
  398. package/dist/table/{filter-values.d.ts → lib/filter-values.d.ts} +10 -3
  399. package/dist/table/{filter-values.js → lib/filter-values.js} +14 -4
  400. package/dist/table/lib/filter-values.js.map +1 -0
  401. package/dist/table/{format.d.ts → lib/format.d.ts} +2 -2
  402. package/dist/table/{format.js → lib/format.js} +3 -3
  403. package/dist/table/lib/format.js.map +1 -0
  404. package/dist/table/{payload.d.ts → lib/payload.d.ts} +2 -3
  405. package/dist/table/{payload.js → lib/payload.js} +12 -9
  406. package/dist/table/lib/payload.js.map +1 -0
  407. package/dist/table/{query.d.ts → lib/query.d.ts} +3 -3
  408. package/dist/table/{query.js → lib/query.js} +27 -27
  409. package/dist/table/lib/query.js.map +1 -0
  410. package/dist/table/plugin.d.ts +2 -0
  411. package/dist/table/plugin.js +11 -0
  412. package/dist/table/plugin.js.map +1 -0
  413. package/dist/table/registry.d.ts +3 -1
  414. package/dist/table/registry.js.map +1 -1
  415. package/dist/table/types.d.ts +57 -7
  416. package/dist/toast/callout.d.ts +1 -1
  417. package/dist/toast/callout.js.map +1 -1
  418. package/dist/toast/index.d.ts +6 -5
  419. package/dist/toast/index.js +2 -1
  420. package/dist/toast/toast.d.ts +1 -1
  421. package/dist/toast/toaster.js.map +1 -1
  422. package/dist/toast/variant-styles.d.ts +1 -1
  423. package/dist/types/generated.d.ts +118 -64
  424. package/dist/types/index.d.ts +1 -1
  425. package/dist/{action/components → ui}/action-menu-context.js +1 -1
  426. package/dist/ui/action-menu-context.js.map +1 -0
  427. package/dist/{form/components/base → ui}/affix-group.d.ts +1 -1
  428. package/dist/{form/components/base → ui}/affix-group.js +3 -3
  429. package/dist/ui/affix-group.js.map +1 -0
  430. package/dist/{core/components → ui}/badge.d.ts +1 -1
  431. package/dist/{core/components → ui}/badge.js +2 -2
  432. package/dist/ui/badge.js.map +1 -0
  433. package/dist/{core/components → ui}/button.d.ts +2 -2
  434. package/dist/{core/components → ui}/button.js +5 -5
  435. package/dist/ui/button.js.map +1 -0
  436. package/dist/{core/components → ui}/card.d.ts +1 -1
  437. package/dist/{core/components → ui}/card.js +3 -3
  438. package/dist/ui/card.js.map +1 -0
  439. package/dist/{core/components → ui}/chart-view.d.ts +1 -1
  440. package/dist/{core/components → ui}/chart-view.js +5 -5
  441. package/dist/ui/chart-view.js.map +1 -0
  442. package/dist/{core/components → ui}/chart.d.ts +1 -1
  443. package/dist/{core/components → ui}/chart.js +1 -1
  444. package/dist/ui/chart.js.map +1 -0
  445. package/dist/{core/components → ui}/checkbox.js +3 -3
  446. package/dist/ui/checkbox.js.map +1 -0
  447. package/dist/{core/use-click-behavior.d.ts → ui/click-behavior.d.ts} +17 -19
  448. package/dist/ui/click-behavior.js +46 -0
  449. package/dist/ui/click-behavior.js.map +1 -0
  450. package/dist/{core/components → ui}/collapsible.d.ts +1 -1
  451. package/dist/{core/components → ui}/collapsible.js +6 -6
  452. package/dist/ui/collapsible.js.map +1 -0
  453. package/dist/{core/components → ui}/combobox.d.ts +1 -1
  454. package/dist/{core/components → ui}/combobox.js +4 -4
  455. package/dist/ui/combobox.js.map +1 -0
  456. package/dist/{core/components → ui}/confirm-dialog.d.ts +1 -1
  457. package/dist/{core/components → ui}/confirm-dialog.js +1 -1
  458. package/dist/ui/confirm-dialog.js.map +1 -0
  459. package/dist/{core/components → ui}/control.d.ts +1 -1
  460. package/dist/{core/components → ui}/control.js +1 -1
  461. package/dist/ui/control.js.map +1 -0
  462. package/dist/{clipboard → ui}/copyable-text.d.ts +1 -0
  463. package/dist/{clipboard → ui}/copyable-text.js +11 -3
  464. package/dist/ui/copyable-text.js.map +1 -0
  465. package/dist/{core/components → ui}/dialog.js +3 -3
  466. package/dist/ui/dialog.js.map +1 -0
  467. package/dist/{core/components → ui}/dropdown-menu.d.ts +1 -1
  468. package/dist/{core/components → ui}/dropdown-menu.js +3 -3
  469. package/dist/ui/dropdown-menu.js.map +1 -0
  470. package/dist/{core/components → ui}/floating-panel.d.ts +1 -1
  471. package/dist/{core/components → ui}/floating-panel.js +4 -4
  472. package/dist/ui/floating-panel.js.map +1 -0
  473. package/dist/{core/components → ui}/fragment.d.ts +1 -1
  474. package/dist/{core/components → ui}/fragment.js +5 -5
  475. package/dist/ui/fragment.js.map +1 -0
  476. package/dist/{core/components → ui}/grid.d.ts +1 -1
  477. package/dist/{core/components → ui}/grid.js +3 -3
  478. package/dist/ui/grid.js.map +1 -0
  479. package/dist/{core/components → ui}/heading.d.ts +1 -1
  480. package/dist/{core/components → ui}/heading.js +2 -2
  481. package/dist/ui/heading.js.map +1 -0
  482. package/dist/{core/components → ui}/icon.d.ts +1 -1
  483. package/dist/{core/components → ui}/icon.js +3 -3
  484. package/dist/ui/icon.js.map +1 -0
  485. package/dist/ui/index.d.ts +27 -0
  486. package/dist/ui/index.js +26 -0
  487. package/dist/{core/components → ui}/info-tooltip.js +3 -3
  488. package/dist/ui/info-tooltip.js.map +1 -0
  489. package/dist/{form/components/base → ui}/input-error.js +2 -2
  490. package/dist/ui/input-error.js.map +1 -0
  491. package/dist/{form/components/base → ui}/input-otp.js +2 -2
  492. package/dist/ui/input-otp.js.map +1 -0
  493. package/dist/{form/components/base → ui}/input.js +3 -3
  494. package/dist/ui/input.js.map +1 -0
  495. package/dist/{form/components/base → ui}/label.js +2 -2
  496. package/dist/ui/label.js.map +1 -0
  497. package/dist/{core/components → ui}/link.d.ts +1 -1
  498. package/dist/{core/components → ui}/link.js +8 -7
  499. package/dist/ui/link.js.map +1 -0
  500. package/dist/{core/components → ui}/modal.d.ts +1 -1
  501. package/dist/{core/components → ui}/modal.js +2 -2
  502. package/dist/ui/modal.js.map +1 -0
  503. package/dist/{form/components/base → ui}/password-input.js +3 -3
  504. package/dist/ui/password-input.js.map +1 -0
  505. package/dist/ui/plugin.d.ts +1 -0
  506. package/dist/{core/components/index.js → ui/plugin.js} +6 -6
  507. package/dist/ui/plugin.js.map +1 -0
  508. package/dist/{core/components → ui}/popover.js +2 -2
  509. package/dist/ui/popover.js.map +1 -0
  510. package/dist/{core/components → ui}/raw-block.d.ts +1 -1
  511. package/dist/{core/components → ui}/raw-block.js +1 -1
  512. package/dist/ui/raw-block.js.map +1 -0
  513. package/dist/{core/components → ui}/section.d.ts +1 -1
  514. package/dist/{core/components → ui}/section.js +6 -6
  515. package/dist/ui/section.js.map +1 -0
  516. package/dist/{core/components → ui}/segmented-control.d.ts +1 -1
  517. package/dist/{core/components → ui}/segmented-control.js +1 -1
  518. package/dist/ui/segmented-control.js.map +1 -0
  519. package/dist/{core/components → ui}/segmented-pills.d.ts +1 -1
  520. package/dist/{core/components → ui}/segmented-pills.js +2 -2
  521. package/dist/ui/segmented-pills.js.map +1 -0
  522. package/dist/{core/components → ui}/skeleton.js +2 -2
  523. package/dist/ui/skeleton.js.map +1 -0
  524. package/dist/{core/components → ui}/spinner.js +4 -4
  525. package/dist/ui/spinner.js.map +1 -0
  526. package/dist/{core/components → ui}/stack.d.ts +1 -1
  527. package/dist/{core/components → ui}/stack.js +3 -3
  528. package/dist/ui/stack.js.map +1 -0
  529. package/dist/{core/components → ui}/tabs.d.ts +1 -1
  530. package/dist/{core/components → ui}/tabs.js +3 -3
  531. package/dist/ui/tabs.js.map +1 -0
  532. package/dist/{core/components → ui}/text.d.ts +1 -1
  533. package/dist/{core/components → ui}/text.js +4 -4
  534. package/dist/ui/text.js.map +1 -0
  535. package/dist/{form/components/base → ui}/textarea.js +3 -3
  536. package/dist/ui/textarea.js.map +1 -0
  537. package/dist/{core/components → ui}/tooltip.d.ts +1 -1
  538. package/dist/{core/components → ui}/tooltip.js +3 -3
  539. package/dist/ui/tooltip.js.map +1 -0
  540. package/dist/vite.js +2 -2
  541. package/dist/vite.js.map +1 -1
  542. package/package.json +28 -94
  543. package/resources/icons/align-center.svg +1 -1
  544. package/resources/icons/align-justify.svg +1 -1
  545. package/resources/icons/align-left.svg +1 -1
  546. package/resources/icons/align-right.svg +1 -1
  547. package/resources/icons/arrow-down.svg +1 -1
  548. package/resources/icons/arrow-up.svg +1 -1
  549. package/resources/icons/bell.svg +1 -1
  550. package/resources/icons/bold.svg +1 -1
  551. package/resources/icons/calendar.svg +1 -1
  552. package/resources/icons/check.svg +1 -1
  553. package/resources/icons/chevron-down.svg +1 -1
  554. package/resources/icons/chevron-left.svg +1 -1
  555. package/resources/icons/chevron-right.svg +1 -1
  556. package/resources/icons/chevrons-up-down.svg +1 -1
  557. package/resources/icons/circle-alert.svg +1 -1
  558. package/resources/icons/circle-check.svg +1 -1
  559. package/resources/icons/circle-help.svg +1 -1
  560. package/resources/icons/circle-x.svg +1 -1
  561. package/resources/icons/clock.svg +1 -1
  562. package/resources/icons/code.svg +1 -1
  563. package/resources/icons/columns-3.svg +1 -1
  564. package/resources/icons/copy.svg +1 -1
  565. package/resources/icons/external-link.svg +1 -1
  566. package/resources/icons/eye-off.svg +1 -1
  567. package/resources/icons/eye.svg +1 -1
  568. package/resources/icons/filter.svg +1 -1
  569. package/resources/icons/heading-1.svg +1 -1
  570. package/resources/icons/heading-2.svg +1 -1
  571. package/resources/icons/heading-3.svg +1 -1
  572. package/resources/icons/highlighter.svg +1 -1
  573. package/resources/icons/info.svg +1 -1
  574. package/resources/icons/italic.svg +1 -1
  575. package/resources/icons/layout-dashboard.svg +1 -1
  576. package/resources/icons/link.svg +1 -1
  577. package/resources/icons/list-ordered.svg +1 -1
  578. package/resources/icons/list.svg +1 -1
  579. package/resources/icons/loader-2.svg +1 -1
  580. package/resources/icons/minus.svg +1 -1
  581. package/resources/icons/more-horizontal.svg +1 -1
  582. package/resources/icons/panel-left.svg +1 -1
  583. package/resources/icons/pencil-line.svg +1 -1
  584. package/resources/icons/pencil.svg +1 -1
  585. package/resources/icons/plus.svg +1 -1
  586. package/resources/icons/quote.svg +1 -1
  587. package/resources/icons/rotate-ccw.svg +1 -1
  588. package/resources/icons/rows-3.svg +1 -1
  589. package/resources/icons/search.svg +1 -1
  590. package/resources/icons/send.svg +1 -1
  591. package/resources/icons/settings.svg +1 -1
  592. package/resources/icons/smile.svg +1 -1
  593. package/resources/icons/strikethrough.svg +1 -1
  594. package/resources/icons/table.svg +1 -1
  595. package/resources/icons/trash-2.svg +1 -1
  596. package/resources/icons/underline.svg +1 -1
  597. package/resources/icons/x.svg +1 -1
  598. package/dist/action/components/action-menu-context.js.map +0 -1
  599. package/dist/action/index.js.map +0 -1
  600. package/dist/action/run-action.js.map +0 -1
  601. package/dist/action/use-action.js.map +0 -1
  602. package/dist/chat/index.js.map +0 -1
  603. package/dist/chat/transport.js.map +0 -1
  604. package/dist/chat/use-chat.js.map +0 -1
  605. package/dist/clipboard/copyable-text.js.map +0 -1
  606. package/dist/core/column-sizing.js.map +0 -1
  607. package/dist/core/components/badge.js.map +0 -1
  608. package/dist/core/components/button.js.map +0 -1
  609. package/dist/core/components/card.js.map +0 -1
  610. package/dist/core/components/chart-view.js.map +0 -1
  611. package/dist/core/components/chart.js.map +0 -1
  612. package/dist/core/components/checkbox.js.map +0 -1
  613. package/dist/core/components/collapsible.js.map +0 -1
  614. package/dist/core/components/combobox.js.map +0 -1
  615. package/dist/core/components/confirm-dialog.js.map +0 -1
  616. package/dist/core/components/control.js.map +0 -1
  617. package/dist/core/components/dialog.js.map +0 -1
  618. package/dist/core/components/dropdown-menu.js.map +0 -1
  619. package/dist/core/components/floating-panel.js.map +0 -1
  620. package/dist/core/components/fragment.js.map +0 -1
  621. package/dist/core/components/grid.js.map +0 -1
  622. package/dist/core/components/heading.js.map +0 -1
  623. package/dist/core/components/icon.js.map +0 -1
  624. package/dist/core/components/index.d.ts +0 -1
  625. package/dist/core/components/index.js.map +0 -1
  626. package/dist/core/components/info-tooltip.js.map +0 -1
  627. package/dist/core/components/link.js.map +0 -1
  628. package/dist/core/components/modal.js.map +0 -1
  629. package/dist/core/components/popover.js.map +0 -1
  630. package/dist/core/components/raw-block.js.map +0 -1
  631. package/dist/core/components/section.js.map +0 -1
  632. package/dist/core/components/segmented-control.js.map +0 -1
  633. package/dist/core/components/segmented-pills.js.map +0 -1
  634. package/dist/core/components/skeleton.js.map +0 -1
  635. package/dist/core/components/spinner.js.map +0 -1
  636. package/dist/core/components/stack.js.map +0 -1
  637. package/dist/core/components/tabs.js.map +0 -1
  638. package/dist/core/components/text.js.map +0 -1
  639. package/dist/core/components/tooltip.js.map +0 -1
  640. package/dist/core/use-click-behavior.js +0 -46
  641. package/dist/core/use-click-behavior.js.map +0 -1
  642. package/dist/core/use-column-resizing.js.map +0 -1
  643. package/dist/core/use-column-visibility.js.map +0 -1
  644. package/dist/events/event-bridge.js.map +0 -1
  645. package/dist/form/components/base/affix-group.js.map +0 -1
  646. package/dist/form/components/base/input-error.js.map +0 -1
  647. package/dist/form/components/base/input-otp.js.map +0 -1
  648. package/dist/form/components/base/input.js.map +0 -1
  649. package/dist/form/components/base/label.js.map +0 -1
  650. package/dist/form/components/base/password-input.js.map +0 -1
  651. package/dist/form/components/base/textarea.js.map +0 -1
  652. package/dist/form/components/conditions.js.map +0 -1
  653. package/dist/form/components/context.js.map +0 -1
  654. package/dist/form/components/field-props.js.map +0 -1
  655. package/dist/form/components/field-scope.js.map +0 -1
  656. package/dist/form/components/fields/block-add-menu.js.map +0 -1
  657. package/dist/form/components/form-path.js.map +0 -1
  658. package/dist/form/components/form-transport.js +0 -30
  659. package/dist/form/components/form-transport.js.map +0 -1
  660. package/dist/form/components/override-keys.js +0 -12
  661. package/dist/form/components/override-keys.js.map +0 -1
  662. package/dist/form/components/prefill-context.js.map +0 -1
  663. package/dist/form/components/prefill-targets.js.map +0 -1
  664. package/dist/form/components/resolved-nodes.js.map +0 -1
  665. package/dist/form/components/row-layout-context.js.map +0 -1
  666. package/dist/form/components/use-controlled-field.js.map +0 -1
  667. package/dist/form/components/use-dependent-field.d.ts +0 -3
  668. package/dist/form/components/use-dependent-field.js.map +0 -1
  669. package/dist/form/components/use-field-commit.js.map +0 -1
  670. package/dist/form/components/use-form-resolver.js.map +0 -1
  671. package/dist/form/components/use-seed-default.js.map +0 -1
  672. package/dist/form/components/values.js +0 -52
  673. package/dist/form/components/values.js.map +0 -1
  674. package/dist/form/index.js.map +0 -1
  675. package/dist/layout/breadcrumbs.js.map +0 -1
  676. package/dist/layout/callouts.js.map +0 -1
  677. package/dist/layout/components.d.ts +0 -1
  678. package/dist/layout/components.js.map +0 -1
  679. package/dist/layout/context.js.map +0 -1
  680. package/dist/layout/dropdown.js.map +0 -1
  681. package/dist/layout/menu-item.js.map +0 -1
  682. package/dist/layout/menu.js.map +0 -1
  683. package/dist/layout/outlet.js.map +0 -1
  684. package/dist/layout/popover.js.map +0 -1
  685. package/dist/layout/schema-layout.js.map +0 -1
  686. package/dist/layout/sidebar.js.map +0 -1
  687. package/dist/layout/topbar.js.map +0 -1
  688. package/dist/notifications/index.js.map +0 -1
  689. package/dist/remote/index.js.map +0 -1
  690. package/dist/svg-sprite-client/index.d.ts +0 -1
  691. package/dist/svg-sprite-client/index.js +0 -0
  692. package/dist/table/align.js.map +0 -1
  693. package/dist/table/bulk.js.map +0 -1
  694. package/dist/table/components/filter-stack-bar.d.ts +0 -7
  695. package/dist/table/components/filter-stack-bar.js +0 -38
  696. package/dist/table/components/filter-stack-bar.js.map +0 -1
  697. package/dist/table/filter-values.js.map +0 -1
  698. package/dist/table/format.js.map +0 -1
  699. package/dist/table/index.js.map +0 -1
  700. package/dist/table/payload.js.map +0 -1
  701. package/dist/table/query.js.map +0 -1
  702. package/dist/table/use-table-selection.js.map +0 -1
  703. package/dist/table/use-table.js.map +0 -1
  704. package/dist/types/generated.js +0 -0
  705. package/dist/types/index.js +0 -0
  706. /package/dist/form/{components → hooks}/field-scope.d.ts +0 -0
  707. /package/dist/form/{components → hooks}/prefill-context.d.ts +0 -0
  708. /package/dist/form/{components → hooks}/row-layout-context.d.ts +0 -0
  709. /package/dist/form/{components → hooks}/use-seed-default.d.ts +0 -0
  710. /package/dist/form/{components → lib}/form-path.d.ts +0 -0
  711. /package/dist/form/{components → lib}/override-keys.d.ts +0 -0
  712. /package/dist/form/{components/types.js → types.js} +0 -0
  713. /package/dist/layout/{popover.d.ts → components/popover.d.ts} +0 -0
  714. /package/dist/layout/{schema-layout.d.ts → components/schema-layout.d.ts} +0 -0
  715. /package/dist/table/{use-table-selection.d.ts → hooks/use-table-selection.d.ts} +0 -0
  716. /package/dist/{action/components → ui}/action-menu-context.d.ts +0 -0
  717. /package/dist/{core/components → ui}/checkbox.d.ts +0 -0
  718. /package/dist/{core/components → ui}/dialog.d.ts +0 -0
  719. /package/dist/{core/components → ui}/info-tooltip.d.ts +0 -0
  720. /package/dist/{form/components/base → ui}/input-error.d.ts +0 -0
  721. /package/dist/{form/components/base → ui}/input-otp.d.ts +0 -0
  722. /package/dist/{form/components/base → ui}/input.d.ts +0 -0
  723. /package/dist/{form/components/base → ui}/label.d.ts +0 -0
  724. /package/dist/{form/components/base → ui}/password-input.d.ts +0 -0
  725. /package/dist/{core/components → ui}/popover.d.ts +0 -0
  726. /package/dist/{core/components → ui}/skeleton.d.ts +0 -0
  727. /package/dist/{core/components → ui}/spinner.d.ts +0 -0
  728. /package/dist/{form/components/base → ui}/textarea.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-item.js","names":[],"sources":["../../resources/js/layout/menu-item.tsx"],"sourcesContent":["import { Link, usePage } from \"@inertiajs/react\";\nimport { useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { prefixedNodeTestId } from \"@lattice-php/lattice/core/test-id\";\nimport type { RendererComponent, Schema } from \"@lattice-php/lattice/core/types\";\nimport {\n ActionTrigger,\n type TriggerState,\n useClickBehavior,\n} from \"@lattice-php/lattice/core/use-click-behavior\";\nimport { Icon, IconRenderer } from \"@lattice-php/lattice/icons\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { Affix } from \"@lattice-php/lattice/types/generated\";\nimport { useSidebarCollapsed } from \"./context\";\nimport { Popover } from \"./popover\";\n\nconst rowClass =\n \"flex items-center gap-2 rounded-lt-sm px-3 py-2 text-base font-medium text-lt-fg transition-colors hover:bg-lt-muted\";\n\nfunction MenuAffix({ affix, className }: { affix: Affix; className?: string }) {\n if (affix.icon) {\n return <IconRenderer className={cn(\"size-lt-icon-md shrink-0\", className)} icon={affix.icon} />;\n }\n\n return <span className={cn(\"shrink-0 text-sm text-lt-muted-fg\", className)}>{affix.text}</span>;\n}\n\nfunction schemaContainsPath(schema: Schema | undefined, path: string): boolean {\n return (schema ?? []).some(\n (child) => child.props?.href === path || schemaContainsPath(child.schema, path),\n );\n}\n\nconst MenuItemComponent: RendererComponent<\"menu-item\"> = ({ children, node }) => {\n const collapsed = useSidebarCollapsed();\n const { icon, label, prefix, suffix } = node.props;\n const iconOnly = Boolean(icon);\n const flyoutIcon = icon ?? prefix?.icon ?? null;\n const currentPath = usePage().url.split(\"?\")[0];\n const testId = prefixedNodeTestId(\"menu\", node);\n const behavior = useClickBehavior(node.props);\n\n const content = icon ? (\n <IconRenderer className=\"size-lt-icon-md shrink-0\" icon={icon} />\n ) : (\n <>\n {prefix ? <MenuAffix affix={prefix} /> : null}\n {collapsed ? (\n <span\n className=\"pointer-events-none absolute top-1/2 left-full z-lt-popover ml-2 hidden -translate-y-1/2 rounded-lt-sm border border-lt-border bg-lt-popover px-2 py-1 text-sm whitespace-nowrap text-lt-popover-fg shadow-lt-md group-hover:block\"\n role=\"tooltip\"\n >\n {label}\n </span>\n ) : (\n <span>{label}</span>\n )}\n {suffix ? <MenuAffix affix={suffix} className=\"ml-auto\" /> : null}\n </>\n );\n\n const rowClassName = cn(\n rowClass,\n \"w-full\",\n collapsed && \"group relative justify-center\",\n iconOnly && \"justify-center\",\n );\n\n const triggerButton = ({ onClick, processing }: TriggerState) => (\n <button\n aria-label={collapsed || iconOnly ? label : undefined}\n className={rowClassName}\n data-test={testId}\n disabled={processing}\n onClick={onClick}\n type=\"button\"\n >\n {content}\n </button>\n );\n\n if (behavior.kind === \"action\") {\n return (\n <li>\n <ActionTrigger action={behavior.action}>{triggerButton}</ActionTrigger>\n </li>\n );\n }\n\n if (behavior.kind === \"effects\") {\n return <li>{triggerButton({ onClick: behavior.onClick, processing: false })}</li>;\n }\n\n if (behavior.kind === \"navigate\") {\n const active = currentPath === behavior.href;\n\n return (\n <li>\n <Link\n aria-current={active ? \"page\" : undefined}\n aria-label={collapsed || iconOnly ? label : undefined}\n as={behavior.method === \"get\" ? undefined : \"button\"}\n className={cn(rowClassName, active && \"bg-lt-muted font-medium\")}\n data-test={testId}\n href={behavior.href}\n method={behavior.method}\n >\n {content}\n </Link>\n </li>\n );\n }\n\n if (!children) {\n return collapsed ? null : (\n <li>\n <span className=\"flex items-center gap-2 px-3 py-2 text-xs font-semibold tracking-wide text-lt-muted-fg uppercase\">\n {content}\n </span>\n </li>\n );\n }\n\n if (collapsed) {\n return (\n <FlyoutGroup icon={flyoutIcon} label={label} testId={testId}>\n {children}\n </FlyoutGroup>\n );\n }\n\n return (\n <CollapsibleItem\n content={content}\n defaultOpen={schemaContainsPath(node.schema, currentPath)}\n testId={testId}\n >\n {children}\n </CollapsibleItem>\n );\n};\n\nfunction CollapsibleItem({\n children,\n content,\n defaultOpen,\n testId,\n}: {\n children: ReactNode;\n content: ReactNode;\n defaultOpen: boolean;\n testId?: string;\n}) {\n const [open, setOpen] = useState(defaultOpen);\n\n return (\n <li>\n <button\n aria-expanded={open}\n className={cn(rowClass, \"w-full\")}\n data-test={testId}\n onClick={() => setOpen((value) => !value)}\n type=\"button\"\n >\n {content}\n <Icon\n name=\"chevron-right\"\n className={cn(\n \"ml-auto size-lt-icon-md shrink-0 transition-transform\",\n open && \"rotate-90\",\n )}\n />\n </button>\n {open ? <ul className=\"mt-1 flex flex-col gap-1 pl-3\">{children}</ul> : null}\n </li>\n );\n}\n\nfunction FlyoutGroup({\n children,\n icon,\n label,\n testId,\n}: {\n children: ReactNode;\n icon?: string | null;\n label: string;\n testId?: string;\n}) {\n return (\n <li>\n <Popover\n className=\"min-w-48\"\n placement=\"right\"\n testId={testId}\n trigger={\n icon ? (\n <IconRenderer className=\"size-lt-icon-md shrink-0\" icon={icon} />\n ) : (\n <span>{label}</span>\n )\n }\n triggerClassName={cn(rowClass, \"justify-center\")}\n triggerLabel={label}\n >\n <ul className=\"flex flex-col gap-1\">\n <li className=\"px-3 py-1.5 text-xs font-semibold tracking-wide text-lt-muted-fg uppercase\">\n {label}\n </li>\n {children}\n </ul>\n </Popover>\n </li>\n );\n}\n\nexport default MenuItemComponent;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.js","names":[],"sources":["../../resources/js/layout/menu.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\n\nconst MenuComponent: RendererComponent<\"menu\"> = ({ children, node }) => (\n <nav data-lattice-component={nodeIdentity(node)}>\n <ul className=\"flex flex-col gap-1\">{children}</ul>\n </nav>\n);\n\nexport default MenuComponent;\n"],"mappings":";;;AAGA,IAAM,iBAA4C,EAAE,UAAU,WAC5D,oBAAC,OAAD;CAAK,0BAAwB,aAAa,IAAI;WAC5C,oBAAC,MAAD;EAAI,WAAU;EAAuB;CAAa,CAAA;AAC/C,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"outlet.js","names":[],"sources":["../../resources/js/layout/outlet.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { OutletContext } from \"./context\";\n\n/**\n * Renders the active page at the position the layout schema places it.\n */\nconst OutletComponent: RendererComponent<\"outlet\"> = () => {\n return <>{useContext(OutletContext)}</>;\n};\n\nexport default OutletComponent;\n"],"mappings":";;;;;;;AAOA,IAAM,wBAAqD;CACzD,OAAO,oBAAA,YAAA,EAAA,UAAG,WAAW,aAAa,EAAI,CAAA;AACxC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover.js","names":[],"sources":["../../resources/js/layout/popover.tsx"],"sourcesContent":["import { usePage } from \"@inertiajs/react\";\nimport { useEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n Popover as PopoverRoot,\n PopoverContent,\n PopoverTrigger,\n} from \"@lattice-php/lattice/core/components/popover\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { CollapsedContext } from \"../core/collapsed-context\";\n\n/**\n * A navigation-aware popover for the sidebar: it wraps the shared popover\n * primitive (so positioning and dismissal stay consistent with the rest of the\n * app) and closes itself on every Inertia navigation. Items render expanded\n * regardless of the sidebar's collapsed state.\n */\nexport function Popover({\n align = \"start\",\n children,\n className,\n placement = \"bottom\",\n testId,\n trigger,\n triggerClassName,\n triggerLabel,\n}: {\n align?: \"start\" | \"end\";\n children: ReactNode;\n className?: string;\n placement?: \"bottom\" | \"right\" | \"top\";\n testId?: string;\n trigger: ReactNode;\n triggerClassName?: string;\n triggerLabel?: string;\n}) {\n const [open, setOpen] = useState(false);\n const url = usePage().url;\n\n useEffect(() => setOpen(false), [url]);\n\n return (\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n aria-label={triggerLabel}\n className={cn(\"w-full\", triggerClassName)}\n data-test={testId}\n title={triggerLabel}\n type=\"button\"\n >\n {trigger}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n className={cn(\"min-w-56 p-1\", className)}\n role=\"menu\"\n side={placement}\n >\n <CollapsedContext.Provider value={false}>{children}</CollapsedContext.Provider>\n </PopoverContent>\n </PopoverRoot>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,QAAQ,EACtB,QAAQ,SACR,UACA,WACA,YAAY,UACZ,QACA,SACA,kBACA,gBAUC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,MAAM,QAAQ,EAAE;CAEtB,gBAAgB,QAAQ,KAAK,GAAG,CAAC,GAAG,CAAC;CAErC,OACE,qBAAC,WAAD;EAAmB;EAAM,cAAc;YAAvC,CACE,oBAAC,gBAAD;GAAgB,SAAA;aACd,oBAAC,UAAD;IACE,cAAY;IACZ,WAAW,GAAG,UAAU,gBAAgB;IACxC,aAAW;IACX,OAAO;IACP,MAAK;cAEJ;GACK,CAAA;EACM,CAAA,GAChB,oBAAC,gBAAD;GACS;GACP,WAAW,GAAG,gBAAgB,SAAS;GACvC,MAAK;GACL,MAAM;aAEN,oBAAC,iBAAiB,UAAlB;IAA2B,OAAO;IAAQ;GAAoC,CAAA;EAChE,CAAA,CACL;;AAEjB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-layout.js","names":[],"sources":["../../resources/js/layout/schema-layout.tsx"],"sourcesContent":["import { usePage } from \"@inertiajs/react\";\nimport type { ReactNode } from \"react\";\nimport { Renderer } from \"@lattice-php/lattice/core/renderer\";\nimport type { PagePayload } from \"@lattice-php/lattice/core/types\";\nimport { OutletContext } from \"./context\";\n\n/**\n * Persistent Inertia layout that renders a server-composed layout schema and\n * exposes the active page (`children`) to the Outlet via context. The same\n * component instance is reused across navigations that share a layout, so\n * shell state (open sidebar, scroll position) survives page visits.\n */\nexport default function SchemaLayout({ children }: { children: ReactNode }) {\n const lattice = usePage().props.lattice as PagePayload;\n const layout = lattice.layout;\n\n if (!layout) {\n return <>{children}</>;\n }\n\n return (\n <OutletContext.Provider value={children}>\n <Renderer nodes={layout.schema} />\n </OutletContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAwB,aAAa,EAAE,YAAqC;CAE1E,MAAM,SADU,QAAQ,EAAE,MAAM,QACT;CAEvB,IAAI,CAAC,QACH,OAAO,oBAAA,UAAA,EAAG,SAAW,CAAA;CAGvB,OACE,oBAAC,cAAc,UAAf;EAAwB,OAAO;YAC7B,oBAAC,UAAD,EAAU,OAAO,OAAO,OAAS,CAAA;CACX,CAAA;AAE5B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","names":[],"sources":["../../resources/js/layout/sidebar.tsx"],"sourcesContent":["import { router } from \"@inertiajs/react\";\nimport { useEffect, useState } from \"react\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { CollapsedContext } from \"../core/collapsed-context\";\nimport { LATTICE_EVENT } from \"@lattice-php/lattice/events/event-names\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nconst DESKTOP_QUERY = \"(min-width: 768px)\";\n\nfunction readStored(key: string, remember: boolean): boolean {\n if (!remember || typeof window === \"undefined\") {\n return false;\n }\n\n return window.localStorage.getItem(key) === \"true\";\n}\n\nfunction matchesTarget(event: Event, identity: string | undefined): boolean {\n const target = (event as CustomEvent<{ target?: string }>).detail?.target;\n\n return target == null || target === identity;\n}\n\nfunction useIsDesktop(): boolean {\n const supported = () => typeof window !== \"undefined\" && typeof window.matchMedia === \"function\";\n const [isDesktop, setIsDesktop] = useState(() =>\n supported() ? window.matchMedia(DESKTOP_QUERY).matches : true,\n );\n\n useEffect(() => {\n if (!supported()) {\n return;\n }\n\n const query = window.matchMedia(DESKTOP_QUERY);\n const update = (): void => setIsDesktop(query.matches);\n\n update();\n query.addEventListener(\"change\", update);\n\n return () => query.removeEventListener(\"change\", update);\n }, []);\n\n return isDesktop;\n}\n\nconst SidebarComponent: RendererComponent<\"sidebar\"> = ({ children, node }) => {\n const collapsible = node.props.collapsible;\n const rememberState = node.props.rememberState;\n const identity = nodeIdentity(node);\n const storageKey = `lattice:sidebar:${identity ?? \"default\"}`;\n const isDesktop = useIsDesktop();\n\n const [collapsed, setCollapsed] = useState(() =>\n readStored(storageKey, collapsible && rememberState),\n );\n const [mobileOpen, setMobileOpen] = useState(false);\n\n useEffect(() => {\n function toggle(event: Event): void {\n if (!matchesTarget(event, identity)) {\n return;\n }\n\n if (window.matchMedia?.(DESKTOP_QUERY).matches ?? true) {\n if (!collapsible) {\n return;\n }\n\n setCollapsed((value) => {\n const next = !value;\n\n if (rememberState && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, String(next));\n }\n\n return next;\n });\n } else {\n setMobileOpen((open) => !open);\n }\n }\n\n window.addEventListener(LATTICE_EVENT.toggleSidebar, toggle);\n\n return () => window.removeEventListener(LATTICE_EVENT.toggleSidebar, toggle);\n }, [identity, collapsible, rememberState, storageKey]);\n\n useEffect(() => router.on(\"navigate\", () => setMobileOpen(false)), []);\n\n useEffect(() => {\n if (!mobileOpen) {\n return;\n }\n\n function close(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n setMobileOpen(false);\n }\n }\n\n window.addEventListener(\"keydown\", close);\n\n return () => window.removeEventListener(\"keydown\", close);\n }, [mobileOpen]);\n\n const isCollapsed = collapsible && collapsed && isDesktop;\n\n return (\n <CollapsedContext.Provider value={isCollapsed}>\n {mobileOpen ? (\n <div\n aria-hidden=\"true\"\n className=\"fixed inset-0 z-lt-overlay bg-lt-overlay md:hidden\"\n data-test=\"sidebar-backdrop\"\n onClick={() => setMobileOpen(false)}\n />\n ) : null}\n <aside\n className={cn(\n \"fixed inset-y-0 left-0 z-lt-modal flex h-svh w-72 max-w-[80vw] shrink-0 flex-col gap-4 border-r border-lt-border bg-lt-bg p-4 transition-transform\",\n \"md:sticky md:top-0 md:z-auto md:max-w-none md:translate-x-0 md:transition-[width]\",\n mobileOpen ? \"translate-x-0\" : \"-translate-x-full\",\n isCollapsed\n ? \"md:w-16 md:overflow-visible\"\n : \"md:w-64 md:overflow-x-hidden md:overflow-y-auto\",\n )}\n data-collapsed={isCollapsed ? \"true\" : \"false\"}\n data-lattice-component={identity}\n data-test=\"sidebar\"\n >\n {children}\n </aside>\n </CollapsedContext.Provider>\n );\n};\n\nexport default SidebarComponent;\n"],"mappings":";;;;;;;;AAQA,IAAM,gBAAgB;AAEtB,SAAS,WAAW,KAAa,UAA4B;CAC3D,IAAI,CAAC,YAAY,OAAO,WAAW,aACjC,OAAO;CAGT,OAAO,OAAO,aAAa,QAAQ,GAAG,MAAM;AAC9C;AAEA,SAAS,cAAc,OAAc,UAAuC;CAC1E,MAAM,SAAU,MAA2C,QAAQ;CAEnE,OAAO,UAAU,QAAQ,WAAW;AACtC;AAEA,SAAS,eAAwB;CAC/B,MAAM,kBAAkB,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe;CACtF,MAAM,CAAC,WAAW,gBAAgB,eAChC,UAAU,IAAI,OAAO,WAAW,aAAa,EAAE,UAAU,IAC3D;CAEA,gBAAgB;EACd,IAAI,CAAC,UAAU,GACb;EAGF,MAAM,QAAQ,OAAO,WAAW,aAAa;EAC7C,MAAM,eAAqB,aAAa,MAAM,OAAO;EAErD,OAAO;EACP,MAAM,iBAAiB,UAAU,MAAM;EAEvC,aAAa,MAAM,oBAAoB,UAAU,MAAM;CACzD,GAAG,CAAC,CAAC;CAEL,OAAO;AACT;AAEA,IAAM,oBAAkD,EAAE,UAAU,WAAW;CAC7E,MAAM,cAAc,KAAK,MAAM;CAC/B,MAAM,gBAAgB,KAAK,MAAM;CACjC,MAAM,WAAW,aAAa,IAAI;CAClC,MAAM,aAAa,mBAAmB,YAAY;CAClD,MAAM,YAAY,aAAa;CAE/B,MAAM,CAAC,WAAW,gBAAgB,eAChC,WAAW,YAAY,eAAe,aAAa,CACrD;CACA,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,gBAAgB;EACd,SAAS,OAAO,OAAoB;GAClC,IAAI,CAAC,cAAc,OAAO,QAAQ,GAChC;GAGF,IAAI,OAAO,aAAa,aAAa,EAAE,WAAW,MAAM;IACtD,IAAI,CAAC,aACH;IAGF,cAAc,UAAU;KACtB,MAAM,OAAO,CAAC;KAEd,IAAI,iBAAiB,OAAO,WAAW,aACrC,OAAO,aAAa,QAAQ,YAAY,OAAO,IAAI,CAAC;KAGtD,OAAO;IACT,CAAC;GACH,OACE,eAAe,SAAS,CAAC,IAAI;EAEjC;EAEA,OAAO,iBAAiB,cAAc,eAAe,MAAM;EAE3D,aAAa,OAAO,oBAAoB,cAAc,eAAe,MAAM;CAC7E,GAAG;EAAC;EAAU;EAAa;EAAe;CAAU,CAAC;CAErD,gBAAgB,OAAO,GAAG,kBAAkB,cAAc,KAAK,CAAC,GAAG,CAAC,CAAC;CAErE,gBAAgB;EACd,IAAI,CAAC,YACH;EAGF,SAAS,MAAM,OAA4B;GACzC,IAAI,MAAM,QAAQ,UAChB,cAAc,KAAK;EAEvB;EAEA,OAAO,iBAAiB,WAAW,KAAK;EAExC,aAAa,OAAO,oBAAoB,WAAW,KAAK;CAC1D,GAAG,CAAC,UAAU,CAAC;CAEf,MAAM,cAAc,eAAe,aAAa;CAEhD,OACE,qBAAC,iBAAiB,UAAlB;EAA2B,OAAO;YAAlC,CACG,aACC,oBAAC,OAAD;GACE,eAAY;GACZ,WAAU;GACV,aAAU;GACV,eAAe,cAAc,KAAK;EACnC,CAAA,IACC,MACJ,oBAAC,SAAD;GACE,WAAW,GACT,sJACA,qFACA,aAAa,kBAAkB,qBAC/B,cACI,gCACA,iDACN;GACA,kBAAgB,cAAc,SAAS;GACvC,0BAAwB;GACxB,aAAU;GAET;EACI,CAAA,CACkB;;AAE/B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"topbar.js","names":[],"sources":["../../resources/js/layout/topbar.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nconst TopbarComponent: RendererComponent<\"topbar\"> = ({ children, node }) => {\n const sticky = node.props.sticky;\n\n return (\n <header\n data-lattice-component={nodeIdentity(node)}\n className={cn(\n \"flex h-14 w-full items-center gap-2 border-b border-lt-border bg-lt-bg px-4 text-lt-fg\",\n sticky && \"sticky top-0 z-lt-sticky\",\n )}\n >\n {children}\n </header>\n );\n};\n\nexport default TopbarComponent;\n"],"mappings":";;;;AAIA,IAAM,mBAAgD,EAAE,UAAU,WAAW;CAC3E,MAAM,SAAS,KAAK,MAAM;CAE1B,OACE,oBAAC,UAAD;EACE,0BAAwB,aAAa,IAAI;EACzC,WAAW,GACT,0FACA,UAAU,0BACZ;EAEC;CACK,CAAA;AAEZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../resources/js/notifications/index.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice-php/lattice/core/registry\";\nimport NotificationsComponent from \"./components/notifications\";\n\nexport const notificationsComponents = createPlugin({\n name: \"lattice/notifications\",\n components: {\n notifications: eagerComponent(NotificationsComponent),\n },\n});\n"],"mappings":";;;AAGA,IAAa,0BAA0B,aAAa;CAClD,MAAM;CACN,YAAY,EACV,eAAe,eAAe,sBAAsB,EACtD;AACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../resources/js/remote/index.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice-php/lattice/core/registry\";\nimport DataListComponent from \"./components/data-list\";\n\nexport const remoteComponents = createPlugin({\n components: {\n \"remote.data-list\": eagerComponent(DataListComponent),\n },\n name: \"lattice/remote\",\n});\n"],"mappings":";;;AAGA,IAAa,mBAAmB,aAAa;CAC3C,YAAY,EACV,oBAAoB,eAAe,QAAiB,EACtD;CACA,MAAM;AACR,CAAC"}
@@ -1 +0,0 @@
1
- export {};
File without changes
@@ -1 +0,0 @@
1
- {"version":3,"file":"align.js","names":[],"sources":["../../resources/js/table/align.ts"],"sourcesContent":["import type { ColumnAlign } from \"@lattice-php/lattice/types/generated\";\n\nconst TEXT: Record<ColumnAlign, string> = {\n start: \"text-start\",\n center: \"text-center\",\n end: \"text-end\",\n};\n\nconst JUSTIFY: Record<ColumnAlign, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n};\n\nconst JUSTIFY_ITEMS: Record<ColumnAlign, string> = {\n start: \"justify-items-start\",\n center: \"justify-items-center\",\n end: \"justify-items-end\",\n};\n\nexport const alignText = (align: ColumnAlign): string => TEXT[align];\nexport const alignJustify = (align: ColumnAlign): string => JUSTIFY[align];\nexport const alignJustifyItems = (align: ColumnAlign): string => JUSTIFY_ITEMS[align];\n"],"mappings":";AAEA,IAAM,OAAoC;CACxC,OAAO;CACP,QAAQ;CACR,KAAK;AACP;AAEA,IAAM,UAAuC;CAC3C,OAAO;CACP,QAAQ;CACR,KAAK;AACP;AAEA,IAAM,gBAA6C;CACjD,OAAO;CACP,QAAQ;CACR,KAAK;AACP;AAEA,IAAa,aAAa,UAA+B,KAAK;AAC9D,IAAa,gBAAgB,UAA+B,QAAQ;AACpE,IAAa,qBAAqB,UAA+B,cAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulk.js","names":[],"sources":["../../resources/js/table/bulk.ts"],"sourcesContent":["import type { Method } from \"@inertiajs/core\";\nimport type { Node } from \"@lattice-php/lattice/core/types\";\nimport type { Action, ButtonVariant } from \"@lattice-php/lattice/types/generated\";\nimport type { ActionNode } from \"./types\";\n\nexport type BulkAction = {\n id: string;\n label: string;\n method: Method;\n endpoint: string;\n ref: string;\n variant: ButtonVariant;\n confirmation: Action[\"confirmation\"];\n form: Node | null;\n};\n\nexport function getBulkActions(actions: ActionNode[] | undefined): BulkAction[] {\n return (actions ?? []).flatMap((node): BulkAction[] => {\n if (node.type === \"action.group\") {\n return [];\n }\n\n const props = node.props;\n\n if (!props.endpoint) {\n return [];\n }\n\n return [\n {\n id: node.id ?? \"\",\n label: props.label ?? \"Run action\",\n method: props.method ?? \"post\",\n endpoint: props.endpoint,\n ref: props.ref ?? \"\",\n variant: props.variant ?? \"default\",\n confirmation: props.confirmation,\n form: props.form,\n },\n ];\n });\n}\n"],"mappings":";AAgBA,SAAgB,eAAe,SAAiD;CAC9E,QAAQ,WAAW,CAAC,GAAG,SAAS,SAAuB;EACrD,IAAI,KAAK,SAAS,gBAChB,OAAO,CAAC;EAGV,MAAM,QAAQ,KAAK;EAEnB,IAAI,CAAC,MAAM,UACT,OAAO,CAAC;EAGV,OAAO,CACL;GACE,IAAI,KAAK,MAAM;GACf,OAAO,MAAM,SAAS;GACtB,QAAQ,MAAM,UAAU;GACxB,UAAU,MAAM;GAChB,KAAK,MAAM,OAAO;GAClB,SAAS,MAAM,WAAW;GAC1B,cAAc,MAAM;GACpB,MAAM,MAAM;EACd,CACF;CACF,CAAC;AACH"}
@@ -1,7 +0,0 @@
1
- import { FilterClause, TableColumn } from '../types';
2
- export declare function FilterStackBar({ filters, columnsByKey, processing, onRemove, }: {
3
- filters: FilterClause[];
4
- columnsByKey: Map<string, TableColumn>;
5
- processing: boolean;
6
- onRemove: (index: number) => void;
7
- }): import("react").JSX.Element;
@@ -1,38 +0,0 @@
1
- import { Icon } from "../../icons/sprite.js";
2
- import { useT } from "../../i18n/instance.js";
3
- import { VALUELESS_FILTER_OPERATORS, operatorLabel } from "../query.js";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
- //#region resources/js/table/components/filter-stack-bar.tsx
6
- function FilterStackBar({ filters, columnsByKey, processing, onRemove }) {
7
- const { t } = useT("lattice");
8
- return /* @__PURE__ */ jsx("div", {
9
- className: "flex flex-wrap items-center gap-4 border-b border-lt-border px-4 py-2.5 text-sm",
10
- children: filters.map((clause, index) => {
11
- const label = columnsByKey.get(clause.field)?.label ?? clause.field;
12
- const valueless = VALUELESS_FILTER_OPERATORS.has(clause.operator);
13
- return /* @__PURE__ */ jsxs("span", {
14
- className: "inline-flex items-center gap-1.5",
15
- children: [/* @__PURE__ */ jsxs("span", { children: [valueless ? `${label} ${operatorLabel(clause.operator)}` : `${label} ${operatorLabel(clause.operator)}: `, !valueless && /* @__PURE__ */ jsx("span", {
16
- className: "font-semibold",
17
- children: clause.value
18
- })] }), /* @__PURE__ */ jsx("button", {
19
- type: "button",
20
- "data-test": `filter-chip-${clause.field}-remove`,
21
- className: "inline-flex size-5 items-center justify-center rounded-lt-sm text-lt-muted-fg hover:bg-lt-muted disabled:opacity-50",
22
- disabled: processing,
23
- "aria-label": t("table.filter.remove", "Remove {{label}} filter", { label }),
24
- onClick: () => onRemove(index),
25
- children: /* @__PURE__ */ jsx(Icon, {
26
- name: "x",
27
- "aria-hidden": "true",
28
- className: "size-lt-icon-sm"
29
- })
30
- })]
31
- }, `${clause.field}-${clause.operator}-${index}`);
32
- })
33
- });
34
- }
35
- //#endregion
36
- export { FilterStackBar };
37
-
38
- //# sourceMappingURL=filter-stack-bar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-stack-bar.js","names":[],"sources":["../../../resources/js/table/components/filter-stack-bar.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport { operatorLabel, VALUELESS_FILTER_OPERATORS } from \"../query\";\nimport type { FilterClause, TableColumn } from \"../types\";\n\nexport function FilterStackBar({\n filters,\n columnsByKey,\n processing,\n onRemove,\n}: {\n filters: FilterClause[];\n columnsByKey: Map<string, TableColumn>;\n processing: boolean;\n onRemove: (index: number) => void;\n}) {\n const { t } = useT(\"lattice\");\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 {filters.map((clause, index) => {\n const label = columnsByKey.get(clause.field)?.label ?? clause.field;\n const valueless = VALUELESS_FILTER_OPERATORS.has(clause.operator);\n\n return (\n <span\n key={`${clause.field}-${clause.operator}-${index}`}\n className=\"inline-flex items-center gap-1.5\"\n >\n <span>\n {valueless\n ? `${label} ${operatorLabel(clause.operator)}`\n : `${label} ${operatorLabel(clause.operator)}: `}\n {!valueless && <span className=\"font-semibold\">{clause.value}</span>}\n </span>\n <button\n type=\"button\"\n data-test={`filter-chip-${clause.field}-remove`}\n className=\"inline-flex size-5 items-center justify-center rounded-lt-sm text-lt-muted-fg hover:bg-lt-muted disabled:opacity-50\"\n disabled={processing}\n aria-label={t(\"table.filter.remove\", \"Remove {{label}} filter\", { label })}\n onClick={() => onRemove(index)}\n >\n <Icon name=\"x\" aria-hidden=\"true\" className=\"size-lt-icon-sm\" />\n </button>\n </span>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,eAAe,EAC7B,SACA,cACA,YACA,YAMC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,QAAQ,KAAK,QAAQ,UAAU;GAC9B,MAAM,QAAQ,aAAa,IAAI,OAAO,KAAK,GAAG,SAAS,OAAO;GAC9D,MAAM,YAAY,2BAA2B,IAAI,OAAO,QAAQ;GAEhE,OACE,qBAAC,QAAD;IAEE,WAAU;cAFZ,CAIE,qBAAC,QAAD,EAAA,UAAA,CACG,YACG,GAAG,MAAM,GAAG,cAAc,OAAO,QAAQ,MACzC,GAAG,MAAM,GAAG,cAAc,OAAO,QAAQ,EAAE,KAC9C,CAAC,aAAa,oBAAC,QAAD;KAAM,WAAU;eAAiB,OAAO;IAAY,CAAA,CAC/D,EAAA,CAAA,GACN,oBAAC,UAAD;KACE,MAAK;KACL,aAAW,eAAe,OAAO,MAAM;KACvC,WAAU;KACV,UAAU;KACV,cAAY,EAAE,uBAAuB,2BAA2B,EAAE,MAAM,CAAC;KACzE,eAAe,SAAS,KAAK;eAE7B,oBAAC,MAAD;MAAM,MAAK;MAAI,eAAY;MAAO,WAAU;KAAmB,CAAA;IACzD,CAAA,CACJ;MAnBC,GAAG,OAAO,MAAM,GAAG,OAAO,SAAS,GAAG,OAmBvC;EAEV,CAAC;CACE,CAAA;AAET"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-values.js","names":[],"sources":["../../resources/js/table/filter-values.ts"],"sourcesContent":["import type { FilterData, Option } from \"@lattice-php/lattice/types/generated\";\n\n/**\n * Whether a single scalar filter member is absent — the atomic rule the\n * filter-emptiness and query-serialization logic both build on.\n */\nexport function isEmptyMember(value: unknown): value is null | undefined | \"\" {\n return value == null || value === \"\";\n}\n\n/**\n * Whether a table-filter value should clear the filter rather than apply it —\n * an empty string, empty list, or an object whose every member is empty.\n */\nexport function isEmptyFilterValue(value: unknown): boolean {\n if (isEmptyMember(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n\n if (typeof value === \"object\") {\n return Object.values(value).every(isEmptyMember);\n }\n\n return false;\n}\n\nexport function isActiveFilterValue(value: unknown): boolean {\n return !isEmptyFilterValue(value);\n}\n\n/**\n * Read a string entry from a filter's loose `props` bag, falling back when the\n * key is absent or not a string.\n */\nexport function stringProp(filter: FilterData, key: string, fallback: string): string {\n const value = filter.props[key];\n\n return typeof value === \"string\" ? value : fallback;\n}\n\nexport function filterOptions(filter: FilterData): Option[] {\n const value = filter.props.options;\n\n return Array.isArray(value) ? (value as Option[]) : [];\n}\n"],"mappings":";;;;;AAMA,SAAgB,cAAc,OAAgD;CAC5E,OAAO,SAAS,QAAQ,UAAU;AACpC;;;;;AAMA,SAAgB,mBAAmB,OAAyB;CAC1D,IAAI,cAAc,KAAK,GACrB,OAAO;CAGT,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,WAAW;CAG1B,IAAI,OAAO,UAAU,UACnB,OAAO,OAAO,OAAO,KAAK,EAAE,MAAM,aAAa;CAGjD,OAAO;AACT;AAEA,SAAgB,oBAAoB,OAAyB;CAC3D,OAAO,CAAC,mBAAmB,KAAK;AAClC;;;;;AAMA,SAAgB,WAAW,QAAoB,KAAa,UAA0B;CACpF,MAAM,QAAQ,OAAO,MAAM;CAE3B,OAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAgB,cAAc,QAA8B;CAC1D,MAAM,QAAQ,OAAO,MAAM;CAE3B,OAAO,MAAM,QAAQ,KAAK,IAAK,QAAqB,CAAC;AACvD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","names":[],"sources":["../../resources/js/table/format.ts"],"sourcesContent":["import { type FormatOptions, formatDateValue } from \"@lattice-php/lattice/format/date-time\";\nimport type { ColumnPropsOf, TableColumn, TableRow } from \"./types\";\n\nexport function formatCell(value: unknown, column?: TableColumn, options?: FormatOptions): string {\n if (value === null || value === undefined) {\n return \"\";\n }\n\n const date = (column?.props as ColumnPropsOf<\"column.text\"> | null)?.date;\n\n if (date) {\n return formatDateValue(value, date, options);\n }\n\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n}\n\nexport function resolveLink(column: TableColumn, row: TableRow, value: unknown): string | null {\n const link = (column.props as ColumnPropsOf<\"column.text\"> | null)?.link;\n\n if (!link) {\n return null;\n }\n\n const href = link.href ?? String(value ?? \"\");\n\n if (href === \"\") {\n return null;\n }\n\n return href.replace(/\\{([^}]+)\\}/g, (_, key: string) => {\n if (key === \"value\") {\n return encodeURIComponent(String(value ?? \"\"));\n }\n\n return encodeURIComponent(String(row[key] ?? \"\"));\n });\n}\n"],"mappings":";;AAGA,SAAgB,WAAW,OAAgB,QAAsB,SAAiC;CAChG,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B,OAAO;CAGT,MAAM,QAAQ,QAAQ,QAA+C;CAErE,IAAI,MACF,OAAO,gBAAgB,OAAO,MAAM,OAAO;CAG7C,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAC7E,OAAO,OAAO,KAAK;CAGrB,OAAO,KAAK,UAAU,KAAK;AAC7B;AAEA,SAAgB,YAAY,QAAqB,KAAe,OAA+B;CAC7F,MAAM,OAAQ,OAAO,OAA+C;CAEpE,IAAI,CAAC,MACH,OAAO;CAGT,MAAM,OAAO,KAAK,QAAQ,OAAO,SAAS,EAAE;CAE5C,IAAI,SAAS,IACX,OAAO;CAGT,OAAO,KAAK,QAAQ,iBAAiB,GAAG,QAAgB;EACtD,IAAI,QAAQ,SACV,OAAO,mBAAmB,OAAO,SAAS,EAAE,CAAC;EAG/C,OAAO,mBAAmB,OAAO,IAAI,QAAQ,EAAE,CAAC;CAClD,CAAC;AACH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../resources/js/table/index.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice-php/lattice/core/registry\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport TableComponent from \"./components/table\";\n\n// The table renders an enriched TableNode (rows/pagination/state the server\n// hydrates onto it); the registry erases per-component node types here.\nexport const tableComponents = createPlugin({\n components: {\n table: eagerComponent(TableComponent as unknown as RendererComponent<\"table\">),\n },\n name: \"lattice/table\",\n});\n"],"mappings":";;;AAMA,IAAa,kBAAkB,aAAa;CAC1C,YAAY,EACV,OAAO,eAAe,cAAuD,EAC/E;CACA,MAAM;AACR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"payload.js","names":[],"sources":["../../resources/js/table/payload.ts"],"sourcesContent":["import type { Node } from \"@lattice-php/lattice/core/types\";\nimport type { FilterClause, TableColumn, TablePagination, TableRow, TableState } from \"./types\";\n\nfunction getFilters(value: unknown): FilterClause[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter(\n (clause): clause is FilterClause =>\n typeof clause === \"object\" &&\n clause !== null &&\n typeof clause.field === \"string\" &&\n typeof clause.operator === \"string\" &&\n typeof clause.value === \"string\",\n );\n}\n\nexport function getColumns(value: unknown): TableColumn[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter(\n (column): column is TableColumn =>\n typeof column === \"object\" &&\n column !== null &&\n \"key\" in column &&\n \"label\" in column &&\n typeof column.key === \"string\" &&\n typeof column.label === \"string\",\n );\n}\n\nexport function getRows(value: unknown): TableRow[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter(\n (row): row is TableRow => typeof row === \"object\" && row !== null && !Array.isArray(row),\n );\n}\n\nconst EMPTY_PAGINATION: TablePagination = {\n mode: \"none\",\n currentPage: null,\n lastPage: null,\n perPage: null,\n total: null,\n from: null,\n to: null,\n hasMore: false,\n nextPage: null,\n};\n\nexport function getPagination(value: unknown): TablePagination {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return EMPTY_PAGINATION;\n }\n\n return value as TablePagination;\n}\n\nexport function flattenColumns(columns: TableColumn[]): TableColumn[] {\n return columns.flatMap((column) => [column, ...flattenColumns(column.columns ?? [])]);\n}\n\nexport function getState(value: unknown): TableState {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {\n filters: [],\n sorts: [],\n page: 1,\n perPage: 25,\n tableFilters: {},\n };\n }\n\n const state = value as Partial<TableState>;\n\n return {\n filters: getFilters(state.filters),\n sorts: Array.isArray(state.sorts) ? state.sorts : [],\n page: typeof state.page === \"number\" ? state.page : 1,\n perPage: typeof state.perPage === \"number\" ? state.perPage : 25,\n tableFilters: getTableFilters(state.tableFilters),\n };\n}\n\n/**\n * The wire serializes an empty filter map as `[]` and a populated one as an\n * object, so coerce both to a plain `key => value` record.\n */\nfunction getTableFilters(value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {};\n }\n\n return value as Record<string, unknown>;\n}\n\nexport function getRowKey(row: TableRow, index: number): string {\n const key = row.id ?? row.uuid ?? row.key ?? index;\n\n return String(key);\n}\n\nexport function getRowActions(row: TableRow): Node[] {\n return Array.isArray(row.actions) ? (row.actions as Node[]) : [];\n}\n"],"mappings":";AAGA,SAAS,WAAW,OAAgC;CAClD,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAGV,OAAO,MAAM,QACV,WACC,OAAO,WAAW,YAClB,WAAW,QACX,OAAO,OAAO,UAAU,YACxB,OAAO,OAAO,aAAa,YAC3B,OAAO,OAAO,UAAU,QAC5B;AACF;AAEA,SAAgB,WAAW,OAA+B;CACxD,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAGV,OAAO,MAAM,QACV,WACC,OAAO,WAAW,YAClB,WAAW,QACX,SAAS,UACT,WAAW,UACX,OAAO,OAAO,QAAQ,YACtB,OAAO,OAAO,UAAU,QAC5B;AACF;AAEA,SAAgB,QAAQ,OAA4B;CAClD,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAGV,OAAO,MAAM,QACV,QAAyB,OAAO,QAAQ,YAAY,QAAQ,QAAQ,CAAC,MAAM,QAAQ,GAAG,CACzF;AACF;AAEA,IAAM,mBAAoC;CACxC,MAAM;CACN,aAAa;CACb,UAAU;CACV,SAAS;CACT,OAAO;CACP,MAAM;CACN,IAAI;CACJ,SAAS;CACT,UAAU;AACZ;AAEA,SAAgB,cAAc,OAAiC;CAC7D,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO;CAGT,OAAO;AACT;AAEA,SAAgB,eAAe,SAAuC;CACpE,OAAO,QAAQ,SAAS,WAAW,CAAC,QAAQ,GAAG,eAAe,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AACtF;AAEA,SAAgB,SAAS,OAA4B;CACnD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO;EACL,SAAS,CAAC;EACV,OAAO,CAAC;EACR,MAAM;EACN,SAAS;EACT,cAAc,CAAC;CACjB;CAGF,MAAM,QAAQ;CAEd,OAAO;EACL,SAAS,WAAW,MAAM,OAAO;EACjC,OAAO,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAC;EACnD,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;EACpD,SAAS,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;EAC7D,cAAc,gBAAgB,MAAM,YAAY;CAClD;AACF;;;;;AAMA,SAAS,gBAAgB,OAAyC;CAChE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,CAAC;CAGV,OAAO;AACT;AAEA,SAAgB,UAAU,KAAe,OAAuB;CAC9D,MAAM,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAO;CAE7C,OAAO,OAAO,GAAG;AACnB;AAEA,SAAgB,cAAc,KAAuB;CACnD,OAAO,MAAM,QAAQ,IAAI,OAAO,IAAK,IAAI,UAAqB,CAAC;AACjE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","names":[],"sources":["../../resources/js/table/query.ts"],"sourcesContent":["import { translate } from \"@lattice-php/lattice/i18n\";\nimport { DEFAULT_COLUMN_WIDTH } from \"@lattice-php/lattice/core/column-sizing\";\nimport type { ColumnWidth } from \"@lattice-php/lattice/types/generated\";\nimport { isEmptyMember } from \"./filter-values\";\nimport type { TableColumn, TableSort, TableState } from \"./types\";\n\nexport function getColumnSort(state: TableState, column: TableColumn): TableSort | undefined {\n return state.sorts.find((currentSort) => currentSort.key === column.key);\n}\n\nexport function getColumnAriaSort(\n sort: TableSort | undefined,\n): \"ascending\" | \"descending\" | undefined {\n if (sort?.direction === \"asc\") {\n return \"ascending\";\n }\n\n if (sort?.direction === \"desc\") {\n return \"descending\";\n }\n\n return undefined;\n}\n\nexport function buildEndpoint(endpoint: string, state: TableState): string {\n const url = new URL(endpoint, window.location.origin);\n\n if (state.filters.length > 0) {\n url.searchParams.set(\"filter\", serializeFilters(state));\n }\n\n if (state.sorts.length > 0) {\n url.searchParams.set(\"sort\", serializeSorts(state));\n }\n\n appendTableFilters(url, state.tableFilters);\n\n url.searchParams.set(\"page\", String(state.page));\n url.searchParams.set(\"per_page\", String(state.perPage));\n\n return `${url.pathname}${url.search}`;\n}\n\n/**\n * Serialize the dedicated table filters as Laravel-native bracket params:\n * `tf[key]=v`, repeated `tf[key][]=v` for multi-value, and `tf[key][sub]=v`\n * for structured values (e.g. a date range's from/until). Empty values are\n * dropped so an unset filter never reaches the server.\n */\nfunction appendTableFilters(url: URL, tableFilters: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(getTableFilterParams(tableFilters))) {\n if (typeof value === \"string\") {\n url.searchParams.set(`tf[${key}]`, value);\n\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n if (!isEmptyMember(item)) {\n url.searchParams.append(`tf[${key}][]`, String(item));\n }\n }\n\n continue;\n }\n\n if (typeof value === \"object\" && value !== null) {\n for (const [subKey, subValue] of Object.entries(value as Record<string, unknown>)) {\n url.searchParams.set(`tf[${key}][${subKey}]`, String(subValue));\n }\n }\n }\n}\n\nfunction getTableFilterParams(tableFilters: Record<string, unknown>): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(tableFilters)) {\n const normalized = normalizeTableFilterValue(value);\n\n if (normalized !== undefined) {\n params[key] = normalized;\n }\n }\n\n return params;\n}\n\nfunction normalizeTableFilterValue(value: unknown): unknown | undefined {\n if (isEmptyMember(value)) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const items = value.filter((item) => !isEmptyMember(item)).map(String);\n\n return items.length > 0 ? items : undefined;\n }\n\n if (typeof value === \"object\") {\n const entries = Object.entries(value)\n .filter(([, subValue]) => !isEmptyMember(subValue))\n .map(([subKey, subValue]) => [subKey, String(subValue)]);\n\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n }\n\n return String(value);\n}\n\nexport function getQueryParams(state: TableState): Record<string, unknown> {\n const params: Record<string, unknown> = {};\n\n if (state.filters.length > 0) {\n params.filter = serializeFilters(state);\n }\n\n if (state.sorts.length > 0) {\n params.sort = serializeSorts(state);\n }\n\n const tableFilters = getTableFilterParams(state.tableFilters);\n\n if (Object.keys(tableFilters).length > 0) {\n params.tf = tableFilters;\n }\n\n return params;\n}\n\nfunction serializeFilters(state: TableState): string {\n return state.filters\n .map((clause) => `${clause.field}:${clause.operator}:${encodeURIComponent(clause.value)}`)\n .join(\",\");\n}\n\nfunction serializeSorts(state: TableState): string {\n return state.sorts\n .map((sort) => (sort.direction === \"desc\" ? `-${sort.key}` : sort.key))\n .join(\",\");\n}\n\nconst operatorLabels: Record<string, string> = {\n contains: \"contains\",\n starts_with: \"starts with\",\n ends_with: \"ends with\",\n eq: \"equals\",\n neq: \"not equals\",\n gt: \">\",\n gte: \"≥\",\n lt: \"<\",\n lte: \"≤\",\n in: \"in\",\n not_in: \"not in\",\n before: \"before\",\n after: \"after\",\n empty: \"is empty\",\n filled: \"is not empty\",\n};\n\nexport const VALUELESS_FILTER_OPERATORS = new Set<string>([\"empty\", \"filled\"]);\n\nexport function operatorLabel(operator: string): string {\n return translate(\"lattice\", `table.operators.${operator}`, operatorLabels[operator] ?? operator);\n}\n\nexport function getSortDirectionLabel(direction: string): string {\n return direction === \"desc\" ? \"descending\" : \"ascending\";\n}\n\nexport function nextSort(sorts: TableSort[], column: TableColumn): TableSort[] {\n if (!column.sortable) {\n return sorts;\n }\n\n const currentSort = sorts.find((sort) => sort.key === column.key);\n const remainingSorts = sorts.filter((sort) => sort.key !== column.key);\n\n if (!currentSort) {\n return [...sorts, { key: column.key, direction: \"asc\" }];\n }\n\n if (currentSort.direction === \"asc\") {\n return [...remainingSorts, { key: column.key, direction: \"desc\" }];\n }\n\n return remainingSorts;\n}\n\nexport function getVisiblePages(currentPage: number, lastPage: number): number[] {\n if (lastPage <= 5) {\n return Array.from({ length: lastPage }, (_, index) => index + 1);\n }\n\n const start = Math.max(1, Math.min(currentPage - 2, lastPage - 4));\n\n return Array.from({ length: 5 }, (_, index) => start + index);\n}\n\nexport function getTableSizingColumns(columns: TableColumn[]) {\n return columns.map((column) => ({\n key: column.key,\n label: column.label,\n width: columnWidthOrDefault(column),\n }));\n}\n\nfunction columnWidthOrDefault(column: TableColumn): ColumnWidth {\n return (column.width ??\n (column.type === \"column.stack\" ? \"xl\" : DEFAULT_COLUMN_WIDTH)) as ColumnWidth;\n}\n\nexport function getTableUtilityTracks(hasActions: boolean, hasSelection: boolean) {\n // Utility tracks are fixed because the independent header/filter/body grids would drift with content-sized tracks.\n return {\n leadingTracks: hasSelection ? [\"3rem\"] : [],\n trailingTracks: hasActions ? [\"10rem\"] : [],\n };\n}\n"],"mappings":";;;;AAMA,SAAgB,cAAc,OAAmB,QAA4C;CAC3F,OAAO,MAAM,MAAM,MAAM,gBAAgB,YAAY,QAAQ,OAAO,GAAG;AACzE;AAEA,SAAgB,kBACd,MACwC;CACxC,IAAI,MAAM,cAAc,OACtB,OAAO;CAGT,IAAI,MAAM,cAAc,QACtB,OAAO;AAIX;AAEA,SAAgB,cAAc,UAAkB,OAA2B;CACzE,MAAM,MAAM,IAAI,IAAI,UAAU,OAAO,SAAS,MAAM;CAEpD,IAAI,MAAM,QAAQ,SAAS,GACzB,IAAI,aAAa,IAAI,UAAU,iBAAiB,KAAK,CAAC;CAGxD,IAAI,MAAM,MAAM,SAAS,GACvB,IAAI,aAAa,IAAI,QAAQ,eAAe,KAAK,CAAC;CAGpD,mBAAmB,KAAK,MAAM,YAAY;CAE1C,IAAI,aAAa,IAAI,QAAQ,OAAO,MAAM,IAAI,CAAC;CAC/C,IAAI,aAAa,IAAI,YAAY,OAAO,MAAM,OAAO,CAAC;CAEtD,OAAO,GAAG,IAAI,WAAW,IAAI;AAC/B;;;;;;;AAQA,SAAS,mBAAmB,KAAU,cAA6C;CACjF,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,qBAAqB,YAAY,CAAC,GAAG;EAC7E,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,aAAa,IAAI,MAAM,IAAI,IAAI,KAAK;GAExC;EACF;EAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxB,KAAK,MAAM,QAAQ,OACjB,IAAI,CAAC,cAAc,IAAI,GACrB,IAAI,aAAa,OAAO,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC;GAIxD;EACF;EAEA,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,KAAK,MAAM,CAAC,QAAQ,aAAa,OAAO,QAAQ,KAAgC,GAC9E,IAAI,aAAa,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,OAAO,QAAQ,CAAC;CAGpE;AACF;AAEA,SAAS,qBAAqB,cAAgE;CAC5F,MAAM,SAAkC,CAAC;CAEzC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,YAAY,GAAG;EACvD,MAAM,aAAa,0BAA0B,KAAK;EAElD,IAAI,eAAe,KAAA,GACjB,OAAO,OAAO;CAElB;CAEA,OAAO;AACT;AAEA,SAAS,0BAA0B,OAAqC;CACtE,IAAI,cAAc,KAAK,GACrB;CAGF,IAAI,OAAO,UAAU,UACnB,OAAO;CAGT,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,MAAM,QAAQ,MAAM,QAAQ,SAAS,CAAC,cAAc,IAAI,CAAC,EAAE,IAAI,MAAM;EAErE,OAAO,MAAM,SAAS,IAAI,QAAQ,KAAA;CACpC;CAEA,IAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,UAAU,OAAO,QAAQ,KAAK,EACjC,QAAQ,GAAG,cAAc,CAAC,cAAc,QAAQ,CAAC,EACjD,KAAK,CAAC,QAAQ,cAAc,CAAC,QAAQ,OAAO,QAAQ,CAAC,CAAC;EAEzD,OAAO,QAAQ,SAAS,IAAI,OAAO,YAAY,OAAO,IAAI,KAAA;CAC5D;CAEA,OAAO,OAAO,KAAK;AACrB;AAEA,SAAgB,eAAe,OAA4C;CACzE,MAAM,SAAkC,CAAC;CAEzC,IAAI,MAAM,QAAQ,SAAS,GACzB,OAAO,SAAS,iBAAiB,KAAK;CAGxC,IAAI,MAAM,MAAM,SAAS,GACvB,OAAO,OAAO,eAAe,KAAK;CAGpC,MAAM,eAAe,qBAAqB,MAAM,YAAY;CAE5D,IAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GACrC,OAAO,KAAK;CAGd,OAAO;AACT;AAEA,SAAS,iBAAiB,OAA2B;CACnD,OAAO,MAAM,QACV,KAAK,WAAW,GAAG,OAAO,MAAM,GAAG,OAAO,SAAS,GAAG,mBAAmB,OAAO,KAAK,GAAG,EACxF,KAAK,GAAG;AACb;AAEA,SAAS,eAAe,OAA2B;CACjD,OAAO,MAAM,MACV,KAAK,SAAU,KAAK,cAAc,SAAS,IAAI,KAAK,QAAQ,KAAK,GAAI,EACrE,KAAK,GAAG;AACb;AAEA,IAAM,iBAAyC;CAC7C,UAAU;CACV,aAAa;CACb,WAAW;CACX,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,KAAK;CACL,IAAI;CACJ,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACP,QAAQ;AACV;AAEA,IAAa,6BAA6B,IAAI,IAAY,CAAC,SAAS,QAAQ,CAAC;AAE7E,SAAgB,cAAc,UAA0B;CACtD,OAAO,UAAU,WAAW,mBAAmB,YAAY,eAAe,aAAa,QAAQ;AACjG;AAEA,SAAgB,sBAAsB,WAA2B;CAC/D,OAAO,cAAc,SAAS,eAAe;AAC/C;AAEA,SAAgB,SAAS,OAAoB,QAAkC;CAC7E,IAAI,CAAC,OAAO,UACV,OAAO;CAGT,MAAM,cAAc,MAAM,MAAM,SAAS,KAAK,QAAQ,OAAO,GAAG;CAChE,MAAM,iBAAiB,MAAM,QAAQ,SAAS,KAAK,QAAQ,OAAO,GAAG;CAErE,IAAI,CAAC,aACH,OAAO,CAAC,GAAG,OAAO;EAAE,KAAK,OAAO;EAAK,WAAW;CAAM,CAAC;CAGzD,IAAI,YAAY,cAAc,OAC5B,OAAO,CAAC,GAAG,gBAAgB;EAAE,KAAK,OAAO;EAAK,WAAW;CAAO,CAAC;CAGnE,OAAO;AACT;AAEA,SAAgB,gBAAgB,aAAqB,UAA4B;CAC/E,IAAI,YAAY,GACd,OAAO,MAAM,KAAK,EAAE,QAAQ,SAAS,IAAI,GAAG,UAAU,QAAQ,CAAC;CAGjE,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,GAAG,WAAW,CAAC,CAAC;CAEjE,OAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,UAAU,QAAQ,KAAK;AAC9D;AAEA,SAAgB,sBAAsB,SAAwB;CAC5D,OAAO,QAAQ,KAAK,YAAY;EAC9B,KAAK,OAAO;EACZ,OAAO,OAAO;EACd,OAAO,qBAAqB,MAAM;CACpC,EAAE;AACJ;AAEA,SAAS,qBAAqB,QAAkC;CAC9D,OAAQ,OAAO,UACZ,OAAO,SAAS,iBAAiB,OAAA;AACtC;AAEA,SAAgB,sBAAsB,YAAqB,cAAuB;CAEhF,OAAO;EACL,eAAe,eAAe,CAAC,MAAM,IAAI,CAAC;EAC1C,gBAAgB,aAAa,CAAC,OAAO,IAAI,CAAC;CAC5C;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-table-selection.js","names":[],"sources":["../../resources/js/table/use-table-selection.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\n\nexport function useTableSelection(keys: string[]) {\n const [selected, setSelected] = useState<Set<string>>(() => new Set());\n const [allMatching, setAllMatching] = useState(false);\n const signature = keys.join(\" \");\n\n useEffect(() => {\n setSelected(new Set());\n setAllMatching(false);\n }, [signature]);\n\n const toggle = useCallback((key: string): void => {\n setAllMatching(false);\n setSelected((current) => {\n const next = new Set(current);\n\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n\n return next;\n });\n }, []);\n\n const toggleAll = useCallback((): void => {\n setAllMatching(false);\n setSelected((current) => (current.size === keys.length ? new Set() : new Set(keys)));\n }, [keys]);\n\n const selectAllMatching = useCallback((): void => setAllMatching(true), []);\n\n const clear = useCallback((): void => {\n setAllMatching(false);\n setSelected(new Set());\n }, []);\n\n const selectedKeys = keys.filter((key) => selected.has(key));\n const allVisibleSelected = keys.length > 0 && selectedKeys.length === keys.length;\n\n return {\n selectedKeys,\n allMatching,\n allVisibleSelected,\n allSelected: allMatching || allVisibleSelected,\n active: allMatching || selectedKeys.length > 0,\n isSelected: (key: string): boolean => allMatching || selected.has(key),\n toggle,\n toggleAll,\n selectAllMatching,\n clear,\n };\n}\n"],"mappings":";;AAEA,SAAgB,kBAAkB,MAAgB;CAChD,MAAM,CAAC,UAAU,eAAe,+BAA4B,IAAI,IAAI,CAAC;CACrE,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CAGpD,gBAAgB;EACd,4BAAY,IAAI,IAAI,CAAC;EACrB,eAAe,KAAK;CACtB,GAAG,CALe,KAAK,KAAK,GAKxB,CAAS,CAAC;CAEd,MAAM,SAAS,aAAa,QAAsB;EAChD,eAAe,KAAK;EACpB,aAAa,YAAY;GACvB,MAAM,OAAO,IAAI,IAAI,OAAO;GAE5B,IAAI,KAAK,IAAI,GAAG,GACd,KAAK,OAAO,GAAG;QAEf,KAAK,IAAI,GAAG;GAGd,OAAO;EACT,CAAC;CACH,GAAG,CAAC,CAAC;CAEL,MAAM,YAAY,kBAAwB;EACxC,eAAe,KAAK;EACpB,aAAa,YAAa,QAAQ,SAAS,KAAK,yBAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAE;CACrF,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,oBAAoB,kBAAwB,eAAe,IAAI,GAAG,CAAC,CAAC;CAE1E,MAAM,QAAQ,kBAAwB;EACpC,eAAe,KAAK;EACpB,4BAAY,IAAI,IAAI,CAAC;CACvB,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,KAAK,QAAQ,QAAQ,SAAS,IAAI,GAAG,CAAC;CAC3D,MAAM,qBAAqB,KAAK,SAAS,KAAK,aAAa,WAAW,KAAK;CAE3E,OAAO;EACL;EACA;EACA;EACA,aAAa,eAAe;EAC5B,QAAQ,eAAe,aAAa,SAAS;EAC7C,aAAa,QAAyB,eAAe,SAAS,IAAI,GAAG;EACrE;EACA;EACA;EACA;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-table.js","names":[],"sources":["../../resources/js/table/use-table.ts"],"sourcesContent":["import { apiFetch, apiJson } from \"@lattice-php/lattice/core/api\";\nimport { LATTICE_EVENT, type ReloadComponentEvent } from \"@lattice-php/lattice/events/event-names\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { Option } from \"@lattice-php/lattice/types/generated\";\nimport { isEmptyFilterValue } from \"./filter-values\";\nimport { getColumns, getPagination, getRows, getState } from \"./payload\";\nimport { buildEndpoint, nextSort } from \"./query\";\nimport type {\n FilterClause,\n TableColumn,\n TableNode,\n TableResponse,\n TableSort,\n TableState,\n} from \"./types\";\n\nexport function useTable(node: TableNode) {\n const columns = useMemo(() => getColumns(node.props?.columns), [node.props?.columns]);\n const endpoint = typeof node.props?.endpoint === \"string\" ? node.props.endpoint : null;\n const componentRef = typeof node.props?.ref === \"string\" ? node.props.ref : \"\";\n const isLazy = node.props?.lazy === true;\n const initialState = useMemo(() => getState(node.props?.state), [node.props?.state]);\n const initialRows = useMemo(() => getRows(node.props?.data), [node.props?.data]);\n const initialPagination = useMemo(\n () => getPagination(node.props?.pagination),\n [node.props?.pagination],\n );\n const [rows, setRows] = useState(initialRows);\n const [pagination, setPagination] = useState(initialPagination);\n const [state, setState] = useState(initialState);\n const [processing, setProcessing] = useState(isLazy);\n const [hasLoaded, setHasLoaded] = useState(!isLazy);\n const infiniteLoaderRef = useRef<HTMLDivElement | null>(null);\n const currentPage = pagination.currentPage ?? state.page;\n const isInfinite = (pagination.mode ?? \"table\") === \"infinite\";\n\n const load = useCallback(\n async (nextState: TableState, append = false): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n setProcessing(true);\n\n try {\n const result = await apiJson<TableResponse>(buildEndpoint(endpoint, nextState), {\n ref: componentRef,\n });\n const resultState = getState(result.state);\n const resultRows = getRows(result.data);\n\n setRows((currentRows) => (append ? [...currentRows, ...resultRows] : resultRows));\n setPagination(getPagination(result.pagination));\n setState(resultState);\n setHasLoaded(true);\n } finally {\n setProcessing(false);\n }\n },\n [endpoint, componentRef],\n );\n\n function sort(column: TableColumn): void {\n void load({\n ...state,\n page: 1,\n sorts: nextSort(state.sorts, column),\n });\n }\n\n function clearSort(sort: TableSort): void {\n void load({\n ...state,\n page: 1,\n sorts: state.sorts.filter((currentSort) => currentSort.key !== sort.key),\n });\n }\n\n function applyFilters(next: FilterClause[]): void {\n const nextState = { ...state, filters: next, page: 1 };\n\n setState(nextState);\n void load(nextState);\n }\n\n function addFilter(clause: FilterClause): void {\n applyFilters([...state.filters, clause]);\n }\n\n function updateFilter(index: number, clause: FilterClause): void {\n applyFilters(state.filters.map((current, position) => (position === index ? clause : current)));\n }\n\n function removeFilter(index: number): void {\n applyFilters(state.filters.filter((_, current) => current !== index));\n }\n\n function replaceColumnFilters(field: string, clauses: FilterClause[]): void {\n applyFilters([...state.filters.filter((clause) => clause.field !== field), ...clauses]);\n }\n\n function setTableFilter(key: string, value: unknown): void {\n const next = { ...state.tableFilters };\n\n if (isEmptyFilterValue(value)) {\n delete next[key];\n } else {\n next[key] = value;\n }\n\n const nextState = { ...state, tableFilters: next, page: 1 };\n\n setState(nextState);\n void load(nextState);\n }\n\n function resetFilters(): void {\n const nextState = { ...state, filters: [], tableFilters: {}, page: 1 };\n\n setState(nextState);\n void load(nextState);\n }\n\n const searchFilterOptions = useCallback(\n async (filterKey: string, query: string): Promise<Option[]> => {\n if (!endpoint) {\n return [];\n }\n\n const url = new URL(endpoint, window.location.origin);\n url.searchParams.set(\"_search\", filterKey);\n url.searchParams.set(\"q\", query);\n\n const response = await apiFetch(`${url.pathname}${url.search}`, {\n ref: componentRef,\n throwOnError: false,\n });\n\n if (!response.ok) {\n return [];\n }\n\n const result = (await response.json()) as { options?: Option[] };\n\n return result.options ?? [];\n },\n [endpoint, componentRef],\n );\n\n function goToPage(page: number): void {\n void load({\n ...state,\n page,\n });\n }\n\n const loadMore = useCallback((): void => {\n if (processing || !pagination.hasMore) {\n return;\n }\n\n void load(\n {\n ...state,\n page: pagination.nextPage ?? currentPage + 1,\n },\n true,\n );\n }, [currentPage, load, pagination.hasMore, pagination.nextPage, processing, state]);\n\n useEffect(() => {\n setRows(initialRows);\n setPagination(initialPagination);\n setState(initialState);\n setProcessing(isLazy);\n setHasLoaded(!isLazy);\n }, [initialRows, initialPagination, initialState, isLazy]);\n\n useEffect(() => {\n if (!isLazy || hasLoaded) {\n return;\n }\n\n void load(state);\n }, [hasLoaded, isLazy, load, state]);\n\n useEffect(() => {\n function reload(event: Event): void {\n const detail = (event as ReloadComponentEvent).detail;\n\n if (detail?.component !== node.id) {\n return;\n }\n\n void load(state);\n }\n\n window.addEventListener(LATTICE_EVENT.reloadComponent, reload);\n\n return () => window.removeEventListener(LATTICE_EVENT.reloadComponent, reload);\n }, [load, node.id, state]);\n\n useEffect(() => {\n if (\n !isInfinite ||\n !pagination.hasMore ||\n processing ||\n !infiniteLoaderRef.current ||\n typeof IntersectionObserver === \"undefined\"\n ) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n loadMore();\n }\n },\n {\n rootMargin: \"240px\",\n },\n );\n\n observer.observe(infiniteLoaderRef.current);\n\n return () => observer.disconnect();\n }, [isInfinite, loadMore, pagination.hasMore, processing]);\n\n return {\n columns,\n rows,\n pagination,\n state,\n filters: state.filters,\n tableFilters: state.tableFilters,\n addFilter,\n updateFilter,\n removeFilter,\n replaceColumnFilters,\n setTableFilter,\n resetFilters,\n searchFilterOptions,\n processing,\n hasLoaded,\n infiniteLoaderRef,\n sort,\n clearSort,\n goToPage,\n loadMore,\n };\n}\n"],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes