@lattice-php/lattice 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +3 -1
  2. package/dist/action/components/action-form.d.ts +24 -0
  3. package/dist/action/components/action-form.js +238 -0
  4. package/dist/action/components/action-form.js.map +1 -0
  5. package/dist/action/components/action-group.d.ts +1 -8
  6. package/dist/action/components/action-group.js +34 -64
  7. package/dist/action/components/action-group.js.map +1 -1
  8. package/dist/action/components/action-menu-context.d.ts +6 -0
  9. package/dist/action/components/action-menu-context.js +18 -0
  10. package/dist/action/components/action-menu-context.js.map +1 -0
  11. package/dist/action/components/action.d.ts +1 -24
  12. package/dist/action/components/action.js +73 -51
  13. package/dist/action/components/action.js.map +1 -1
  14. package/dist/action/index.d.ts +1 -1
  15. package/dist/action/index.js.map +1 -1
  16. package/dist/appearance/index.js +7 -2
  17. package/dist/appearance/index.js.map +1 -1
  18. package/dist/chat/components/chat-box.d.ts +3 -0
  19. package/dist/chat/components/chat-box.js +53 -0
  20. package/dist/chat/components/chat-box.js.map +1 -0
  21. package/dist/chat/components/message-list.d.ts +5 -0
  22. package/dist/chat/components/message-list.js +22 -0
  23. package/dist/chat/components/message-list.js.map +1 -0
  24. package/dist/chat/components/message.d.ts +5 -0
  25. package/dist/chat/components/message.js +20 -0
  26. package/dist/chat/components/message.js.map +1 -0
  27. package/dist/chat/components/prompt-input.d.ts +8 -0
  28. package/dist/chat/components/prompt-input.js +49 -0
  29. package/dist/chat/components/prompt-input.js.map +1 -0
  30. package/dist/chat/index.d.ts +1 -0
  31. package/dist/chat/index.js +15 -0
  32. package/dist/chat/index.js.map +1 -0
  33. package/dist/chat/parts/text.d.ts +3 -0
  34. package/dist/chat/parts/text.js +12 -0
  35. package/dist/chat/parts/text.js.map +1 -0
  36. package/dist/chat/parts/tool-call.d.ts +3 -0
  37. package/dist/chat/parts/tool-call.js +20 -0
  38. package/dist/chat/parts/tool-call.js.map +1 -0
  39. package/dist/chat/transport.d.ts +2 -0
  40. package/dist/chat/transport.js +47 -0
  41. package/dist/chat/transport.js.map +1 -0
  42. package/dist/chat/types.d.ts +39 -0
  43. package/dist/chat/use-chat.d.ts +15 -0
  44. package/dist/chat/use-chat.js +161 -0
  45. package/dist/chat/use-chat.js.map +1 -0
  46. package/dist/core/api.d.ts +18 -0
  47. package/dist/core/api.js +51 -0
  48. package/dist/core/api.js.map +1 -0
  49. package/dist/core/collapsed-context.d.ts +2 -0
  50. package/dist/core/collapsed-context.js +10 -0
  51. package/dist/core/collapsed-context.js.map +1 -0
  52. package/dist/core/column-sizing.d.ts +17 -0
  53. package/dist/core/column-sizing.js +61 -0
  54. package/dist/core/column-sizing.js.map +1 -0
  55. package/dist/core/components/badge.d.ts +1 -8
  56. package/dist/core/components/badge.js +2 -3
  57. package/dist/core/components/badge.js.map +1 -1
  58. package/dist/core/components/button.d.ts +5 -13
  59. package/dist/core/components/button.js +10 -9
  60. package/dist/core/components/button.js.map +1 -1
  61. package/dist/core/components/card.d.ts +1 -9
  62. package/dist/core/components/card.js +1 -3
  63. package/dist/core/components/card.js.map +1 -1
  64. package/dist/core/components/chart.d.ts +3 -0
  65. package/dist/core/components/chart.js +175 -0
  66. package/dist/core/components/chart.js.map +1 -0
  67. package/dist/{form/components/base → core/components}/checkbox.js +7 -4
  68. package/dist/core/components/checkbox.js.map +1 -0
  69. package/dist/core/components/combobox.d.ts +33 -0
  70. package/dist/core/components/combobox.js +99 -0
  71. package/dist/core/components/combobox.js.map +1 -0
  72. package/dist/core/components/confirm-dialog.d.ts +2 -3
  73. package/dist/core/components/confirm-dialog.js +17 -17
  74. package/dist/core/components/confirm-dialog.js.map +1 -1
  75. package/dist/core/components/control.d.ts +13 -0
  76. package/dist/core/components/control.js +27 -0
  77. package/dist/core/components/control.js.map +1 -0
  78. package/dist/core/components/dialog.d.ts +19 -0
  79. package/dist/core/components/dialog.js +75 -0
  80. package/dist/core/components/dialog.js.map +1 -0
  81. package/dist/core/components/dropdown-menu.d.ts +14 -0
  82. package/dist/core/components/dropdown-menu.js +42 -0
  83. package/dist/core/components/dropdown-menu.js.map +1 -0
  84. package/dist/core/components/floating-panel.d.ts +3 -0
  85. package/dist/core/components/floating-panel.js +65 -0
  86. package/dist/core/components/floating-panel.js.map +1 -0
  87. package/dist/core/components/fragment.d.ts +1 -10
  88. package/dist/core/components/fragment.js +29 -18
  89. package/dist/core/components/fragment.js.map +1 -1
  90. package/dist/core/components/grid.d.ts +1 -8
  91. package/dist/core/components/grid.js +1 -2
  92. package/dist/core/components/grid.js.map +1 -1
  93. package/dist/core/components/heading.d.ts +1 -9
  94. package/dist/core/components/heading.js +2 -3
  95. package/dist/core/components/heading.js.map +1 -1
  96. package/dist/core/components/icon.d.ts +3 -0
  97. package/dist/core/components/icon.js +31 -0
  98. package/dist/core/components/icon.js.map +1 -0
  99. package/dist/core/components/index.d.ts +1 -1
  100. package/dist/core/components/index.js +12 -1
  101. package/dist/core/components/index.js.map +1 -1
  102. package/dist/core/components/info-tooltip.d.ts +3 -0
  103. package/dist/core/components/info-tooltip.js +26 -0
  104. package/dist/core/components/info-tooltip.js.map +1 -0
  105. package/dist/core/components/link.d.ts +1 -12
  106. package/dist/core/components/link.js +12 -11
  107. package/dist/core/components/link.js.map +1 -1
  108. package/dist/core/components/modal.d.ts +1 -11
  109. package/dist/core/components/modal.js +16 -42
  110. package/dist/core/components/modal.js.map +1 -1
  111. package/dist/core/components/popover.d.ts +8 -0
  112. package/dist/core/components/popover.js +37 -0
  113. package/dist/core/components/popover.js.map +1 -0
  114. package/dist/core/components/raw-block.d.ts +3 -0
  115. package/dist/core/components/raw-block.js +10 -0
  116. package/dist/core/components/raw-block.js.map +1 -0
  117. package/dist/core/components/section.d.ts +3 -0
  118. package/dist/core/components/section.js +75 -0
  119. package/dist/core/components/section.js.map +1 -0
  120. package/dist/core/components/segmented-control.d.ts +1 -14
  121. package/dist/core/components/segmented-control.js +4 -7
  122. package/dist/core/components/segmented-control.js.map +1 -1
  123. package/dist/core/components/segmented-pills.d.ts +4 -2
  124. package/dist/core/components/segmented-pills.js +10 -1
  125. package/dist/core/components/segmented-pills.js.map +1 -1
  126. package/dist/core/components/skeleton.d.ts +3 -0
  127. package/dist/core/components/skeleton.js +16 -0
  128. package/dist/core/components/skeleton.js.map +1 -0
  129. package/dist/core/components/spinner.js +8 -4
  130. package/dist/core/components/spinner.js.map +1 -1
  131. package/dist/core/components/stack.d.ts +1 -11
  132. package/dist/core/components/stack.js +24 -13
  133. package/dist/core/components/stack.js.map +1 -1
  134. package/dist/core/components/tabs.d.ts +1 -19
  135. package/dist/core/components/tabs.js +45 -21
  136. package/dist/core/components/tabs.js.map +1 -1
  137. package/dist/core/components/text.d.ts +1 -9
  138. package/dist/core/components/text.js +18 -3
  139. package/dist/core/components/text.js.map +1 -1
  140. package/dist/core/headers.d.ts +1 -0
  141. package/dist/core/headers.js +14 -0
  142. package/dist/core/headers.js.map +1 -0
  143. package/dist/core/registry-context.d.ts +21 -0
  144. package/dist/core/registry-context.js +40 -0
  145. package/dist/core/registry-context.js.map +1 -0
  146. package/dist/core/registry.d.ts +12 -3
  147. package/dist/core/registry.js +30 -5
  148. package/dist/core/registry.js.map +1 -1
  149. package/dist/core/renderer.d.ts +8 -14
  150. package/dist/core/renderer.js +20 -36
  151. package/dist/core/renderer.js.map +1 -1
  152. package/dist/core/test-id.d.ts +8 -0
  153. package/dist/core/test-id.js +21 -0
  154. package/dist/core/test-id.js.map +1 -0
  155. package/dist/core/types.d.ts +68 -26
  156. package/dist/core/use-column-resizing.d.ts +27 -0
  157. package/dist/core/use-column-resizing.js +228 -0
  158. package/dist/core/use-column-resizing.js.map +1 -0
  159. package/dist/effects/dispatch.d.ts +20 -0
  160. package/dist/effects/dispatch.js +39 -0
  161. package/dist/effects/dispatch.js.map +1 -0
  162. package/dist/effects/registry.d.ts +38 -0
  163. package/dist/effects/registry.js +51 -0
  164. package/dist/effects/registry.js.map +1 -0
  165. package/dist/effects/use-effect-dispatcher.d.ts +8 -0
  166. package/dist/effects/use-effect-dispatcher.js +20 -0
  167. package/dist/effects/use-effect-dispatcher.js.map +1 -0
  168. package/dist/effects/use-flash-effects.d.ts +5 -0
  169. package/dist/effects/use-flash-effects.js +22 -0
  170. package/dist/effects/use-flash-effects.js.map +1 -0
  171. package/dist/events/event-bridge.d.ts +3 -7
  172. package/dist/events/event-bridge.js +17 -47
  173. package/dist/events/event-bridge.js.map +1 -1
  174. package/dist/events/event-names.d.ts +3 -1
  175. package/dist/events/event-names.js +3 -1
  176. package/dist/events/event-names.js.map +1 -1
  177. package/dist/form/components/base/field.d.ts +3 -1
  178. package/dist/form/components/base/field.js +21 -2
  179. package/dist/form/components/base/field.js.map +1 -1
  180. package/dist/form/components/base/input-error.js +1 -1
  181. package/dist/form/components/base/input-error.js.map +1 -1
  182. package/dist/form/components/base/input.js +2 -1
  183. package/dist/form/components/base/input.js.map +1 -1
  184. package/dist/form/components/base/label.js.map +1 -1
  185. package/dist/form/components/base/password-input.js +9 -2
  186. package/dist/form/components/base/password-input.js.map +1 -1
  187. package/dist/form/components/base/submit-button.d.ts +4 -4
  188. package/dist/form/components/base/submit-button.js +5 -3
  189. package/dist/form/components/base/submit-button.js.map +1 -1
  190. package/dist/form/components/base/textarea.js +2 -1
  191. package/dist/form/components/base/textarea.js.map +1 -1
  192. package/dist/form/components/conditions.d.ts +6 -9
  193. package/dist/form/components/conditions.js +10 -2
  194. package/dist/form/components/conditions.js.map +1 -1
  195. package/dist/form/components/context.d.ts +1 -4
  196. package/dist/form/components/context.js +2 -5
  197. package/dist/form/components/context.js.map +1 -1
  198. package/dist/form/components/field-props.d.ts +28 -0
  199. package/dist/form/components/field-props.js +15 -0
  200. package/dist/form/components/field-props.js.map +1 -0
  201. package/dist/form/components/field-scope.d.ts +21 -0
  202. package/dist/form/components/field-scope.js +54 -0
  203. package/dist/form/components/field-scope.js.map +1 -0
  204. package/dist/form/components/fields/block-add-menu.d.ts +9 -0
  205. package/dist/form/components/fields/block-add-menu.js +27 -0
  206. package/dist/form/components/fields/block-add-menu.js.map +1 -0
  207. package/dist/form/components/fields/builder.d.ts +2 -0
  208. package/dist/form/components/fields/builder.js +124 -0
  209. package/dist/form/components/fields/builder.js.map +1 -0
  210. package/dist/form/components/fields/checkbox.d.ts +2 -16
  211. package/dist/form/components/fields/checkbox.js +28 -30
  212. package/dist/form/components/fields/checkbox.js.map +1 -1
  213. package/dist/form/components/fields/choice.d.ts +2 -14
  214. package/dist/form/components/fields/choice.js +14 -20
  215. package/dist/form/components/fields/choice.js.map +1 -1
  216. package/dist/form/components/fields/date-input.d.ts +2 -20
  217. package/dist/form/components/fields/date-input.js +12 -16
  218. package/dist/form/components/fields/date-input.js.map +1 -1
  219. package/dist/form/components/fields/file-upload.d.ts +2 -0
  220. package/dist/form/components/fields/file-upload.js +250 -0
  221. package/dist/form/components/fields/file-upload.js.map +1 -0
  222. package/dist/form/components/fields/hidden-input.d.ts +2 -10
  223. package/dist/form/components/fields/hidden-input.js +11 -6
  224. package/dist/form/components/fields/hidden-input.js.map +1 -1
  225. package/dist/form/components/fields/number-input.d.ts +2 -23
  226. package/dist/form/components/fields/number-input.js +40 -41
  227. package/dist/form/components/fields/number-input.js.map +1 -1
  228. package/dist/form/components/fields/password-input.d.ts +2 -29
  229. package/dist/form/components/fields/password-input.js +41 -41
  230. package/dist/form/components/fields/password-input.js.map +1 -1
  231. package/dist/form/components/fields/repeater-rows.d.ts +12 -0
  232. package/dist/form/components/fields/repeater-rows.js +46 -0
  233. package/dist/form/components/fields/repeater-rows.js.map +1 -0
  234. package/dist/form/components/fields/repeater.d.ts +2 -0
  235. package/dist/form/components/fields/repeater.js +97 -0
  236. package/dist/form/components/fields/repeater.js.map +1 -0
  237. package/dist/form/components/fields/rich-editor.d.ts +2 -17
  238. package/dist/form/components/fields/rich-editor.js +90 -52
  239. package/dist/form/components/fields/rich-editor.js.map +1 -1
  240. package/dist/form/components/fields/row-action-menu.d.ts +17 -0
  241. package/dist/form/components/fields/row-action-menu.js +61 -0
  242. package/dist/form/components/fields/row-action-menu.js.map +1 -0
  243. package/dist/form/components/fields/row-actions.d.ts +10 -0
  244. package/dist/form/components/fields/row-actions.js +45 -0
  245. package/dist/form/components/fields/row-actions.js.map +1 -0
  246. package/dist/form/components/fields/row-item.d.ts +27 -0
  247. package/dist/form/components/fields/row-item.js +69 -0
  248. package/dist/form/components/fields/row-item.js.map +1 -0
  249. package/dist/form/components/fields/select.d.ts +2 -23
  250. package/dist/form/components/fields/select.js +97 -121
  251. package/dist/form/components/fields/select.js.map +1 -1
  252. package/dist/form/components/fields/simple-field.d.ts +9 -0
  253. package/dist/form/components/fields/simple-field.js +23 -0
  254. package/dist/form/components/fields/simple-field.js.map +1 -0
  255. package/dist/form/components/fields/table-rows.d.ts +32 -0
  256. package/dist/form/components/fields/table-rows.js +188 -0
  257. package/dist/form/components/fields/table-rows.js.map +1 -0
  258. package/dist/form/components/fields/text-input.d.ts +2 -21
  259. package/dist/form/components/fields/text-input.js +13 -17
  260. package/dist/form/components/fields/text-input.js.map +1 -1
  261. package/dist/form/components/fields/textarea.d.ts +2 -20
  262. package/dist/form/components/fields/textarea.js +12 -16
  263. package/dist/form/components/fields/textarea.js.map +1 -1
  264. package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
  265. package/dist/form/components/fields/use-flip-reorder.js +51 -0
  266. package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
  267. package/dist/form/components/fields/use-row-collection.d.ts +11 -0
  268. package/dist/form/components/fields/use-row-collection.js +44 -0
  269. package/dist/form/components/fields/use-row-collection.js.map +1 -0
  270. package/dist/form/components/form-path.d.ts +5 -0
  271. package/dist/form/components/form-path.js +40 -0
  272. package/dist/form/components/form-path.js.map +1 -0
  273. package/dist/form/components/form-transport.d.ts +3 -4
  274. package/dist/form/components/form-transport.js +17 -18
  275. package/dist/form/components/form-transport.js.map +1 -1
  276. package/dist/form/components/form.d.ts +1 -20
  277. package/dist/form/components/form.js +47 -48
  278. package/dist/form/components/form.js.map +1 -1
  279. package/dist/form/components/index.d.ts +3 -1
  280. package/dist/form/components/index.js +4 -2
  281. package/dist/form/components/override-keys.d.ts +2 -0
  282. package/dist/form/components/override-keys.js +12 -0
  283. package/dist/form/components/override-keys.js.map +1 -0
  284. package/dist/form/components/prefill-context.d.ts +5 -0
  285. package/dist/form/components/prefill-context.js +11 -0
  286. package/dist/form/components/prefill-context.js.map +1 -0
  287. package/dist/form/components/prefill-targets.d.ts +17 -0
  288. package/dist/form/components/prefill-targets.js +73 -0
  289. package/dist/form/components/prefill-targets.js.map +1 -0
  290. package/dist/form/components/resolved-nodes.d.ts +1 -1
  291. package/dist/form/components/resolved-nodes.js +6 -3
  292. package/dist/form/components/resolved-nodes.js.map +1 -1
  293. package/dist/form/components/row-layout-context.d.ts +5 -0
  294. package/dist/form/components/row-layout-context.js +18 -0
  295. package/dist/form/components/row-layout-context.js.map +1 -0
  296. package/dist/form/components/types.d.ts +1 -0
  297. package/dist/form/components/use-controlled-field.d.ts +5 -9
  298. package/dist/form/components/use-controlled-field.js +17 -13
  299. package/dist/form/components/use-controlled-field.js.map +1 -1
  300. package/dist/form/components/use-dependent-field.d.ts +1 -1
  301. package/dist/form/components/use-dependent-field.js +14 -8
  302. package/dist/form/components/use-dependent-field.js.map +1 -1
  303. package/dist/form/components/use-field-commit.d.ts +4 -0
  304. package/dist/form/components/use-field-commit.js +21 -7
  305. package/dist/form/components/use-field-commit.js.map +1 -1
  306. package/dist/form/components/use-form-resolver.d.ts +7 -2
  307. package/dist/form/components/use-form-resolver.js +57 -17
  308. package/dist/form/components/use-form-resolver.js.map +1 -1
  309. package/dist/form/components/use-seed-default.d.ts +5 -0
  310. package/dist/form/components/use-seed-default.js +28 -0
  311. package/dist/form/components/use-seed-default.js.map +1 -0
  312. package/dist/form/components/values.js +20 -5
  313. package/dist/form/components/values.js.map +1 -1
  314. package/dist/form/index.d.ts +1 -1
  315. package/dist/form/index.js +13 -11
  316. package/dist/form/index.js.map +1 -1
  317. package/dist/form/skeleton.d.ts +1 -1
  318. package/dist/form/skeleton.js +5 -4
  319. package/dist/form/skeleton.js.map +1 -1
  320. package/dist/i18n/backend.d.ts +26 -0
  321. package/dist/i18n/backend.js +54 -0
  322. package/dist/i18n/backend.js.map +1 -0
  323. package/dist/i18n/config.d.ts +6 -0
  324. package/dist/i18n/config.js +36 -0
  325. package/dist/i18n/config.js.map +1 -0
  326. package/dist/i18n/index.d.ts +9 -0
  327. package/dist/i18n/index.js +7 -0
  328. package/dist/i18n/instance.d.ts +27 -0
  329. package/dist/i18n/instance.js +95 -0
  330. package/dist/i18n/instance.js.map +1 -0
  331. package/dist/i18n/locale-reload.d.ts +3 -0
  332. package/dist/i18n/locale-reload.js +17 -0
  333. package/dist/i18n/locale-reload.js.map +1 -0
  334. package/dist/i18n/locale-switcher.d.ts +21 -0
  335. package/dist/i18n/locale-switcher.js +25 -0
  336. package/dist/i18n/locale-switcher.js.map +1 -0
  337. package/dist/i18n/locale.d.ts +9 -0
  338. package/dist/i18n/locale.js +93 -0
  339. package/dist/i18n/locale.js.map +1 -0
  340. package/dist/i18n/page-props.d.ts +3 -0
  341. package/dist/i18n/page-props.js +24 -0
  342. package/dist/i18n/page-props.js.map +1 -0
  343. package/dist/icons/icon-renderer.js +30 -5
  344. package/dist/icons/icon-renderer.js.map +1 -1
  345. package/dist/icons/index.d.ts +2 -0
  346. package/dist/icons/index.js +2 -1
  347. package/dist/icons/sprite.d.ts +30 -0
  348. package/dist/icons/sprite.js +40 -0
  349. package/dist/icons/sprite.js.map +1 -0
  350. package/dist/index.d.ts +23 -9
  351. package/dist/index.js +22 -7
  352. package/dist/inertia.d.ts +3 -7
  353. package/dist/inertia.js +13 -10
  354. package/dist/inertia.js.map +1 -1
  355. package/dist/lattice.css +172 -15
  356. package/dist/layout/breadcrumbs.d.ts +3 -0
  357. package/dist/layout/breadcrumbs.js +34 -0
  358. package/dist/layout/breadcrumbs.js.map +1 -0
  359. package/dist/layout/callouts.d.ts +3 -0
  360. package/dist/layout/callouts.js +67 -0
  361. package/dist/layout/callouts.js.map +1 -0
  362. package/dist/layout/components.d.ts +1 -0
  363. package/dist/layout/components.js +25 -0
  364. package/dist/layout/components.js.map +1 -0
  365. package/dist/layout/context.d.ts +4 -0
  366. package/dist/layout/context.js +8 -0
  367. package/dist/layout/context.js.map +1 -0
  368. package/dist/layout/dropdown.d.ts +3 -0
  369. package/dist/layout/dropdown.js +23 -0
  370. package/dist/layout/dropdown.js.map +1 -0
  371. package/dist/layout/index.d.ts +4 -0
  372. package/dist/layout/index.js +6 -0
  373. package/dist/layout/menu-item.d.ts +3 -0
  374. package/dist/layout/menu-item.js +101 -0
  375. package/dist/layout/menu-item.js.map +1 -0
  376. package/dist/layout/menu.d.ts +3 -0
  377. package/dist/layout/menu.js +13 -0
  378. package/dist/layout/menu.js.map +1 -0
  379. package/dist/layout/outlet.d.ts +6 -0
  380. package/dist/layout/outlet.js +14 -0
  381. package/dist/layout/outlet.js.map +1 -0
  382. package/dist/layout/popover.d.ts +17 -0
  383. package/dist/layout/popover.js +46 -0
  384. package/dist/layout/popover.js.map +1 -0
  385. package/dist/layout/schema-layout.d.ts +10 -0
  386. package/dist/layout/schema-layout.js +23 -0
  387. package/dist/layout/schema-layout.js.map +1 -0
  388. package/dist/layout/sidebar.d.ts +3 -0
  389. package/dist/layout/sidebar.js +48 -0
  390. package/dist/layout/sidebar.js.map +1 -0
  391. package/dist/lib/utils.d.ts +0 -2
  392. package/dist/lib/utils.js +1 -4
  393. package/dist/lib/utils.js.map +1 -1
  394. package/dist/page.d.ts +1 -1
  395. package/dist/page.js +4 -10
  396. package/dist/page.js.map +1 -1
  397. package/dist/provider.d.ts +7 -4
  398. package/dist/provider.js +15 -11
  399. package/dist/provider.js.map +1 -1
  400. package/dist/registry.d.ts +1 -1
  401. package/dist/registry.js +3 -1
  402. package/dist/registry.js.map +1 -1
  403. package/dist/svg-sprite-client/index.d.ts +1 -0
  404. package/dist/svg-sprite-client/index.js +0 -0
  405. package/dist/svg-sprite-client.d.ts +1 -0
  406. package/dist/table/align.d.ts +4 -0
  407. package/dist/table/align.js +23 -0
  408. package/dist/table/align.js.map +1 -0
  409. package/dist/table/bulk.d.ts +6 -10
  410. package/dist/table/bulk.js +13 -35
  411. package/dist/table/bulk.js.map +1 -1
  412. package/dist/table/components/bulk-bar.js +40 -6
  413. package/dist/table/components/bulk-bar.js.map +1 -1
  414. package/dist/table/components/cells/badge-cell.d.ts +2 -0
  415. package/dist/table/components/cells/badge-cell.js +16 -0
  416. package/dist/table/components/cells/badge-cell.js.map +1 -0
  417. package/dist/table/components/cells/boolean-cell.d.ts +3 -0
  418. package/dist/table/components/cells/boolean-cell.js +23 -0
  419. package/dist/table/components/cells/boolean-cell.js.map +1 -0
  420. package/dist/table/components/cells/icon-cell.d.ts +2 -0
  421. package/dist/table/components/cells/icon-cell.js +21 -0
  422. package/dist/table/components/cells/icon-cell.js.map +1 -0
  423. package/dist/table/components/cells/image-cell.d.ts +2 -0
  424. package/dist/table/components/cells/image-cell.js +23 -0
  425. package/dist/table/components/cells/image-cell.js.map +1 -0
  426. package/dist/table/components/cells/money-cell.d.ts +2 -0
  427. package/dist/table/components/cells/money-cell.js +28 -0
  428. package/dist/table/components/cells/money-cell.js.map +1 -0
  429. package/dist/table/components/cells/number-cell.d.ts +2 -0
  430. package/dist/table/components/cells/number-cell.js +25 -0
  431. package/dist/table/components/cells/number-cell.js.map +1 -0
  432. package/dist/table/components/cells/numeric.d.ts +2 -0
  433. package/dist/table/components/cells/numeric.js +10 -0
  434. package/dist/table/components/cells/numeric.js.map +1 -0
  435. package/dist/table/components/cells/stack-cell.d.ts +3 -0
  436. package/dist/table/components/cells/stack-cell.js +17 -0
  437. package/dist/table/components/cells/stack-cell.js.map +1 -0
  438. package/dist/table/components/cells/text-cell.d.ts +2 -0
  439. package/dist/table/components/cells/text-cell.js +49 -0
  440. package/dist/table/components/cells/text-cell.js.map +1 -0
  441. package/dist/table/components/column-filter-control.d.ts +3 -1
  442. package/dist/table/components/column-filter-control.js +125 -100
  443. package/dist/table/components/column-filter-control.js.map +1 -1
  444. package/dist/table/components/column-header.d.ts +3 -1
  445. package/dist/table/components/column-header.js +28 -14
  446. package/dist/table/components/column-header.js.map +1 -1
  447. package/dist/table/components/filter-bar.d.ts +15 -0
  448. package/dist/table/components/filter-bar.js +81 -0
  449. package/dist/table/components/filter-bar.js.map +1 -0
  450. package/dist/table/components/filter-controls.d.ts +18 -0
  451. package/dist/table/components/filter-controls.js +256 -0
  452. package/dist/table/components/filter-controls.js.map +1 -0
  453. package/dist/table/components/filter-stack-bar.d.ts +2 -2
  454. package/dist/table/components/filter-stack-bar.js +10 -8
  455. package/dist/table/components/filter-stack-bar.js.map +1 -1
  456. package/dist/table/components/filter-value-input.d.ts +6 -3
  457. package/dist/table/components/filter-value-input.js +27 -17
  458. package/dist/table/components/filter-value-input.js.map +1 -1
  459. package/dist/table/components/pagination.d.ts +1 -1
  460. package/dist/table/components/pagination.js +20 -8
  461. package/dist/table/components/pagination.js.map +1 -1
  462. package/dist/table/components/sort-bar.d.ts +2 -2
  463. package/dist/table/components/sort-bar.js +12 -10
  464. package/dist/table/components/sort-bar.js.map +1 -1
  465. package/dist/table/components/table-action-node.d.ts +1 -1
  466. package/dist/table/components/table-action-node.js +1 -1
  467. package/dist/table/components/table-action-node.js.map +1 -1
  468. package/dist/table/components/table-cell.js +23 -52
  469. package/dist/table/components/table-cell.js.map +1 -1
  470. package/dist/table/components/table.d.ts +6 -2
  471. package/dist/table/components/table.js +198 -136
  472. package/dist/table/components/table.js.map +1 -1
  473. package/dist/table/filter-values.d.ts +13 -0
  474. package/dist/table/filter-values.js +30 -0
  475. package/dist/table/filter-values.js.map +1 -0
  476. package/dist/table/format.js +5 -3
  477. package/dist/table/format.js.map +1 -1
  478. package/dist/table/index.d.ts +1 -1
  479. package/dist/table/index.js.map +1 -1
  480. package/dist/table/payload.d.ts +1 -1
  481. package/dist/table/payload.js +24 -3
  482. package/dist/table/payload.js.map +1 -1
  483. package/dist/table/query.d.ts +10 -2
  484. package/dist/table/query.js +64 -11
  485. package/dist/table/query.js.map +1 -1
  486. package/dist/table/registry.d.ts +19 -0
  487. package/dist/table/registry.js +14 -0
  488. package/dist/table/registry.js.map +1 -0
  489. package/dist/table/types.d.ts +43 -57
  490. package/dist/table/use-table.d.ts +9 -5
  491. package/dist/table/use-table.js +66 -27
  492. package/dist/table/use-table.js.map +1 -1
  493. package/dist/toast/callout.d.ts +6 -0
  494. package/dist/toast/callout.js +31 -0
  495. package/dist/toast/callout.js.map +1 -0
  496. package/dist/toast/index.d.ts +5 -0
  497. package/dist/toast/index.js +4 -0
  498. package/dist/toast/toast.d.ts +14 -0
  499. package/dist/toast/toast.js +51 -0
  500. package/dist/toast/toast.js.map +1 -0
  501. package/dist/toast/toaster.d.ts +3 -0
  502. package/dist/toast/toaster.js +62 -0
  503. package/dist/toast/toaster.js.map +1 -0
  504. package/dist/toast/variant-styles.d.ts +6 -0
  505. package/dist/toast/variant-styles.js +37 -0
  506. package/dist/toast/variant-styles.js.map +1 -0
  507. package/dist/types/generated.d.ts +1037 -0
  508. package/dist/types/generated.js +0 -0
  509. package/dist/types/index.d.ts +1 -1
  510. package/dist/types/vite-env.d.ts +1 -0
  511. package/dist/vite.d.ts +25 -0
  512. package/dist/vite.js +72 -0
  513. package/dist/vite.js.map +1 -0
  514. package/package.json +125 -12
  515. package/resources/icons/align-center.svg +17 -0
  516. package/resources/icons/align-justify.svg +17 -0
  517. package/resources/icons/align-left.svg +17 -0
  518. package/resources/icons/align-right.svg +17 -0
  519. package/resources/icons/arrow-down.svg +16 -0
  520. package/resources/icons/arrow-up.svg +16 -0
  521. package/resources/icons/bold.svg +15 -0
  522. package/resources/icons/check.svg +15 -0
  523. package/resources/icons/chevron-down.svg +15 -0
  524. package/resources/icons/chevron-right.svg +15 -0
  525. package/resources/icons/chevrons-up-down.svg +16 -0
  526. package/resources/icons/circle-alert.svg +17 -0
  527. package/resources/icons/circle-check.svg +16 -0
  528. package/resources/icons/circle-help.svg +17 -0
  529. package/resources/icons/circle-x.svg +17 -0
  530. package/resources/icons/code.svg +16 -0
  531. package/resources/icons/columns-3.svg +17 -0
  532. package/resources/icons/copy.svg +16 -0
  533. package/resources/icons/external-link.svg +17 -0
  534. package/resources/icons/eye-off.svg +18 -0
  535. package/resources/icons/eye.svg +16 -0
  536. package/resources/icons/filter.svg +15 -0
  537. package/resources/icons/heading-1.svg +18 -0
  538. package/resources/icons/heading-2.svg +18 -0
  539. package/resources/icons/heading-3.svg +19 -0
  540. package/resources/icons/highlighter.svg +16 -0
  541. package/resources/icons/info.svg +17 -0
  542. package/resources/icons/italic.svg +17 -0
  543. package/resources/icons/layout-dashboard.svg +18 -0
  544. package/resources/icons/link.svg +16 -0
  545. package/resources/icons/list-ordered.svg +20 -0
  546. package/resources/icons/list.svg +20 -0
  547. package/resources/icons/loader-2.svg +15 -0
  548. package/resources/icons/minus.svg +15 -0
  549. package/resources/icons/more-horizontal.svg +17 -0
  550. package/resources/icons/panel-left.svg +16 -0
  551. package/resources/icons/pencil-line.svg +17 -0
  552. package/resources/icons/pencil.svg +16 -0
  553. package/resources/icons/plus.svg +16 -0
  554. package/resources/icons/quote.svg +16 -0
  555. package/resources/icons/rotate-ccw.svg +16 -0
  556. package/resources/icons/rows-3.svg +17 -0
  557. package/resources/icons/search.svg +16 -0
  558. package/resources/icons/send.svg +16 -0
  559. package/resources/icons/settings.svg +16 -0
  560. package/resources/icons/smile.svg +18 -0
  561. package/resources/icons/strikethrough.svg +17 -0
  562. package/resources/icons/table.svg +18 -0
  563. package/resources/icons/trash-2.svg +19 -0
  564. package/resources/icons/underline.svg +16 -0
  565. package/resources/icons/x.svg +16 -0
  566. package/dist/action/effects.d.ts +0 -30
  567. package/dist/action/effects.js +0 -44
  568. package/dist/action/effects.js.map +0 -1
  569. package/dist/core/props.d.ts +0 -14
  570. package/dist/core/props.js +0 -30
  571. package/dist/core/props.js.map +0 -1
  572. package/dist/form/components/base/checkbox.js.map +0 -1
  573. package/dist/form/components/fields/submit-button.d.ts +0 -10
  574. package/dist/form/components/fields/submit-button.js +0 -14
  575. package/dist/form/components/fields/submit-button.js.map +0 -1
  576. package/dist/generated/types.d.ts +0 -17
  577. package/dist/icons/default-icons.d.ts +0 -3
  578. package/dist/icons/default-icons.js +0 -44
  579. package/dist/icons/default-icons.js.map +0 -1
  580. package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
  581. package/dist/icons/dynamic-lucide-renderer.js +0 -18
  582. package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
  583. package/dist/menu/index.d.ts +0 -1
  584. package/dist/menu/index.js +0 -2
  585. package/dist/menu/use-menu.d.ts +0 -2
  586. package/dist/menu/use-menu.js +0 -9
  587. package/dist/menu/use-menu.js.map +0 -1
  588. /package/dist/{generated → chat}/types.js +0 -0
  589. /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
@@ -1,5 +1,6 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getOptionalNumberProp, getStringProp } from "../props.js";
2
+ import { nodeIdentity } from "../test-id.js";
3
+ import { actionMenuItemClassName, useActionMenu } from "../../action/components/action-menu-context.js";
3
4
  import { Link } from "@inertiajs/react";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region resources/js/core/components/link.tsx
@@ -10,16 +11,16 @@ function TextLink({ className = "", children, ...props }) {
10
11
  children
11
12
  });
12
13
  }
13
- function getLinkMethod(method) {
14
- if (method === "delete" || method === "patch" || method === "post" || method === "put") return method;
15
- return "get";
16
- }
17
- var LinkComponent = ({ node }) => /* @__PURE__ */ jsx(TextLink, {
18
- href: getStringProp(node.props, "href", "#"),
19
- method: getLinkMethod(getStringProp(node.props, "method", "get")),
20
- tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
21
- children: getStringProp(node.props, "label", "Link")
22
- });
14
+ var LinkComponent = ({ node }) => {
15
+ return /* @__PURE__ */ jsx(TextLink, {
16
+ className: useActionMenu() ? actionMenuItemClassName : void 0,
17
+ "data-test": nodeIdentity(node),
18
+ href: node.props.href ?? "#",
19
+ method: node.props.method ?? "get",
20
+ tabIndex: node.props.tabIndex ?? void 0,
21
+ children: node.props.label
22
+ });
23
+ };
23
24
  //#endregion
24
25
  export { TextLink, LinkComponent as default };
25
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","names":[],"sources":["../../../resources/js/core/components/link.tsx"],"sourcesContent":["import type { Method } from \"@inertiajs/core\";\nimport { Link } from \"@inertiajs/react\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport { getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n link: {\n href?: string;\n label?: string;\n method?: Method;\n tabIndex?: number;\n };\n }\n}\n\nfunction TextLink({ className = \"\", children, ...props }: ComponentProps<typeof Link>) {\n return (\n <Link\n className={cn(\n \"text-lt-fg underline decoration-lt-border underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-lt-border\",\n className,\n )}\n {...props}\n >\n {children}\n </Link>\n );\n}\n\nfunction getLinkMethod(method: string): Method {\n if (method === \"delete\" || method === \"patch\" || method === \"post\" || method === \"put\") {\n return method;\n }\n\n return \"get\";\n}\n\nconst LinkComponent: RendererComponent<\"link\"> = ({ node }) => (\n <TextLink\n href={getStringProp(node.props, \"href\", \"#\")}\n method={getLinkMethod(getStringProp(node.props, \"method\", \"get\"))}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n >\n {getStringProp(node.props, \"label\", \"Link\")}\n </TextLink>\n);\n\nexport default LinkComponent;\nexport { TextLink };\n"],"mappings":";;;;;AAkBA,SAAS,SAAS,EAAE,YAAY,IAAI,UAAU,GAAG,SAAsC;CACrF,OACE,oBAAC,MAAD;EACE,WAAW,GACT,4JACA,SACF;EACA,GAAI;EAEH;CACG,CAAA;AAEV;AAEA,SAAS,cAAc,QAAwB;CAC7C,IAAI,WAAW,YAAY,WAAW,WAAW,WAAW,UAAU,WAAW,OAC/E,OAAO;CAGT,OAAO;AACT;AAEA,IAAM,iBAA4C,EAAE,WAClD,oBAAC,UAAD;CACE,MAAM,cAAc,KAAK,OAAO,QAAQ,GAAG;CAC3C,QAAQ,cAAc,cAAc,KAAK,OAAO,UAAU,KAAK,CAAC;CAChE,UAAU,sBAAsB,KAAK,OAAO,UAAU;WAErD,cAAc,KAAK,OAAO,SAAS,MAAM;AAClC,CAAA"}
1
+ {"version":3,"file":"link.js","names":[],"sources":["../../../resources/js/core/components/link.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport {\n actionMenuItemClassName,\n useActionMenu,\n} from \"@lattice-php/lattice/action/components/action-menu-context\";\n\nfunction TextLink({ className = \"\", children, ...props }: ComponentProps<typeof Link>) {\n return (\n <Link\n className={cn(\n \"text-lt-fg underline decoration-lt-border underline-offset-4 transition-colors duration-300 ease-out hover:decoration-current! dark:decoration-lt-border\",\n className,\n )}\n {...props}\n >\n {children}\n </Link>\n );\n}\n\nconst LinkComponent: RendererComponent<\"link\"> = ({ node }) => {\n const isMenuItem = useActionMenu();\n\n return (\n <TextLink\n className={isMenuItem ? actionMenuItemClassName : undefined}\n data-test={nodeIdentity(node)}\n href={node.props.href ?? \"#\"}\n method={node.props.method ?? \"get\"}\n tabIndex={node.props.tabIndex ?? undefined}\n >\n {node.props.label}\n </TextLink>\n );\n};\n\nexport default LinkComponent;\nexport { TextLink };\n"],"mappings":";;;;;;AAUA,SAAS,SAAS,EAAE,YAAY,IAAI,UAAU,GAAG,SAAsC;CACrF,OACE,oBAAC,MAAD;EACE,WAAW,GACT,4JACA,SACF;EACA,GAAI;EAEH;CACG,CAAA;AAEV;AAEA,IAAM,iBAA4C,EAAE,WAAW;CAG7D,OACE,oBAAC,UAAD;EACE,WAJe,cAIJ,IAAa,0BAA0B,KAAA;EAClD,aAAW,aAAa,IAAI;EAC5B,MAAM,KAAK,MAAM,QAAQ;EACzB,QAAQ,KAAK,MAAM,UAAU;EAC7B,UAAU,KAAK,MAAM,YAAY,KAAA;YAEhC,KAAK,MAAM;CACJ,CAAA;AAEd"}
@@ -1,13 +1,3 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare module '../../../../core/types' {
3
- interface ComponentProps {
4
- modal: {
5
- closeLabel?: string;
6
- description?: string;
7
- open?: boolean;
8
- title?: string;
9
- };
10
- }
11
- }
1
+ import { RendererComponent } from '../types';
12
2
  declare const ModalComponent: RendererComponent<"modal">;
13
3
  export default ModalComponent;
@@ -1,21 +1,17 @@
1
- import { getStringProp } from "../props.js";
2
- import { Button } from "./button.js";
3
1
  import { LATTICE_EVENT } from "../../events/event-names.js";
2
+ import { Dialog, DialogContent, DialogHeader } from "./dialog.js";
4
3
  import { useEffect, useState } from "react";
5
4
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { X } from "lucide-react";
7
5
  //#region resources/js/core/components/modal.tsx
8
6
  function matchesModal(event, modal) {
9
7
  const target = event.detail?.modal;
10
- return target === void 0 || target === modal;
8
+ return target == null || target === modal;
11
9
  }
12
10
  var ModalComponent = ({ children, node }) => {
13
- const title = getStringProp(node.props, "title", "Dialog");
14
- const description = getStringProp(node.props, "description");
15
- const closeLabel = getStringProp(node.props, "closeLabel", "Close");
16
- const [isOpen, setIsOpen] = useState(node.props?.open === true);
17
- const titleId = `${node.id ?? node.key ?? "lattice-modal"}-title`;
18
- const descriptionId = `${node.id ?? node.key ?? "lattice-modal"}-description`;
11
+ const title = node.props.title ?? "Dialog";
12
+ const description = node.props.description;
13
+ const closeLabel = node.props.closeLabel;
14
+ const [isOpen, setIsOpen] = useState(node.props.open === true);
19
15
  useEffect(() => {
20
16
  function open(event) {
21
17
  if (node.id && matchesModal(event, node.id)) setIsOpen(true);
@@ -30,38 +26,16 @@ var ModalComponent = ({ children, node }) => {
30
26
  window.removeEventListener(LATTICE_EVENT.closeModal, close);
31
27
  };
32
28
  }, [node.id]);
33
- if (!isOpen) return null;
34
- return /* @__PURE__ */ jsx("div", {
35
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
36
- children: /* @__PURE__ */ jsxs("div", {
37
- "aria-describedby": description ? descriptionId : void 0,
38
- "aria-labelledby": titleId,
39
- "aria-modal": "true",
40
- className: "max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg overflow-y-auto rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg",
41
- role: "dialog",
42
- children: [/* @__PURE__ */ jsxs("div", {
43
- className: "flex items-start justify-between gap-4",
44
- children: [/* @__PURE__ */ jsxs("div", {
45
- className: "grid gap-2",
46
- children: [/* @__PURE__ */ jsx("h2", {
47
- className: "text-lg font-semibold leading-none tracking-tight",
48
- id: titleId,
49
- children: title
50
- }), description && /* @__PURE__ */ jsx("p", {
51
- className: "text-sm text-lt-muted-fg",
52
- id: descriptionId,
53
- children: description
54
- })]
55
- }), /* @__PURE__ */ jsx(Button, {
56
- "aria-label": closeLabel,
57
- onClick: () => setIsOpen(false),
58
- size: "icon",
59
- variant: "ghost",
60
- children: /* @__PURE__ */ jsx(X, {
61
- "aria-hidden": "true",
62
- className: "size-4"
63
- })
64
- })]
29
+ return /* @__PURE__ */ jsx(Dialog, {
30
+ open: isOpen,
31
+ onOpenChange: setIsOpen,
32
+ children: /* @__PURE__ */ jsxs(DialogContent, {
33
+ ...description ? {} : { "aria-describedby": void 0 },
34
+ className: "max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg overflow-y-auto",
35
+ children: [/* @__PURE__ */ jsx(DialogHeader, {
36
+ closeLabel,
37
+ description,
38
+ title
65
39
  }), /* @__PURE__ */ jsx("div", {
66
40
  className: "mt-6 space-y-6",
67
41
  children
@@ -1 +1 @@
1
- {"version":3,"file":"modal.js","names":[],"sources":["../../../resources/js/core/components/modal.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"@lattice/lattice/core/components/button\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\n\ntype ModalEvent = CustomEvent<{\n modal?: string;\n}>;\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n modal: {\n closeLabel?: string;\n description?: string;\n open?: boolean;\n title?: string;\n };\n }\n}\n\nfunction matchesModal(event: Event, modal: string): boolean {\n const target = (event as ModalEvent).detail?.modal;\n\n return target === undefined || target === modal;\n}\n\nconst ModalComponent: RendererComponent<\"modal\"> = ({ children, node }) => {\n const title = getStringProp(node.props, \"title\", \"Dialog\");\n const description = getStringProp(node.props, \"description\");\n const closeLabel = getStringProp(node.props, \"closeLabel\", \"Close\");\n const [isOpen, setIsOpen] = useState(node.props?.open === true);\n const titleId = `${node.id ?? node.key ?? \"lattice-modal\"}-title`;\n const descriptionId = `${node.id ?? node.key ?? \"lattice-modal\"}-description`;\n\n useEffect(() => {\n function open(event: Event): void {\n if (node.id && matchesModal(event, node.id)) {\n setIsOpen(true);\n }\n }\n\n function close(event: Event): void {\n if (!node.id || matchesModal(event, node.id)) {\n setIsOpen(false);\n }\n }\n\n window.addEventListener(LATTICE_EVENT.openModal, open);\n window.addEventListener(LATTICE_EVENT.closeModal, close);\n\n return () => {\n window.removeEventListener(LATTICE_EVENT.openModal, open);\n window.removeEventListener(LATTICE_EVENT.closeModal, close);\n };\n }, [node.id]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div\n aria-describedby={description ? descriptionId : undefined}\n aria-labelledby={titleId}\n aria-modal=\"true\"\n className=\"max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg overflow-y-auto rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg\"\n role=\"dialog\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-2\">\n <h2 className=\"text-lg font-semibold leading-none tracking-tight\" id={titleId}>\n {title}\n </h2>\n\n {description && (\n <p className=\"text-sm text-lt-muted-fg\" id={descriptionId}>\n {description}\n </p>\n )}\n </div>\n\n <Button\n aria-label={closeLabel}\n onClick={() => setIsOpen(false)}\n size=\"icon\"\n variant=\"ghost\"\n >\n <X aria-hidden=\"true\" className=\"size-4\" />\n </Button>\n </div>\n\n <div className=\"mt-6 space-y-6\">{children}</div>\n </div>\n </div>\n );\n};\n\nexport default ModalComponent;\n"],"mappings":";;;;;;;AAsBA,SAAS,aAAa,OAAc,OAAwB;CAC1D,MAAM,SAAU,MAAqB,QAAQ;CAE7C,OAAO,WAAW,KAAA,KAAa,WAAW;AAC5C;AAEA,IAAM,kBAA8C,EAAE,UAAU,WAAW;CACzE,MAAM,QAAQ,cAAc,KAAK,OAAO,SAAS,QAAQ;CACzD,MAAM,cAAc,cAAc,KAAK,OAAO,aAAa;CAC3D,MAAM,aAAa,cAAc,KAAK,OAAO,cAAc,OAAO;CAClE,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK,OAAO,SAAS,IAAI;CAC9D,MAAM,UAAU,GAAG,KAAK,MAAM,KAAK,OAAO,gBAAgB;CAC1D,MAAM,gBAAgB,GAAG,KAAK,MAAM,KAAK,OAAO,gBAAgB;CAEhE,gBAAgB;EACd,SAAS,KAAK,OAAoB;GAChC,IAAI,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACxC,UAAU,IAAI;EAElB;EAEA,SAAS,MAAM,OAAoB;GACjC,IAAI,CAAC,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACzC,UAAU,KAAK;EAEnB;EAEA,OAAO,iBAAiB,cAAc,WAAW,IAAI;EACrD,OAAO,iBAAiB,cAAc,YAAY,KAAK;EAEvD,aAAa;GACX,OAAO,oBAAoB,cAAc,WAAW,IAAI;GACxD,OAAO,oBAAoB,cAAc,YAAY,KAAK;EAC5D;CACF,GAAG,CAAC,KAAK,EAAE,CAAC;CAEZ,IAAI,CAAC,QACH,OAAO;CAGT,OACE,oBAAC,OAAD;EAAK,WAAU;YACb,qBAAC,OAAD;GACE,oBAAkB,cAAc,gBAAgB,KAAA;GAChD,mBAAiB;GACjB,cAAW;GACX,WAAU;GACV,MAAK;aALP,CAOE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,MAAD;MAAI,WAAU;MAAoD,IAAI;gBACnE;KACC,CAAA,GAEH,eACC,oBAAC,KAAD;MAAG,WAAU;MAA2B,IAAI;gBACzC;KACA,CAAA,CAEF;QAEL,oBAAC,QAAD;KACE,cAAY;KACZ,eAAe,UAAU,KAAK;KAC9B,MAAK;KACL,SAAQ;eAER,oBAAC,GAAD;MAAG,eAAY;MAAO,WAAU;KAAU,CAAA;IACpC,CAAA,CACL;OAEL,oBAAC,OAAD;IAAK,WAAU;IAAkB;GAAc,CAAA,CAC5C;;CACF,CAAA;AAET"}
1
+ {"version":3,"file":"modal.js","names":[],"sources":["../../../resources/js/core/components/modal.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { Dialog, DialogContent, DialogHeader } from \"@lattice-php/lattice/core/components/dialog\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { LATTICE_EVENT } from \"@lattice-php/lattice/events/event-names\";\n\ntype ModalEvent = CustomEvent<{\n modal: string | null;\n}>;\n\nfunction matchesModal(event: Event, modal: string): boolean {\n const target = (event as ModalEvent).detail?.modal;\n\n return target == null || target === modal;\n}\n\nconst ModalComponent: RendererComponent<\"modal\"> = ({ children, node }) => {\n const title = node.props.title ?? \"Dialog\";\n const description = node.props.description;\n const closeLabel = node.props.closeLabel;\n const [isOpen, setIsOpen] = useState(node.props.open === true);\n\n useEffect(() => {\n function open(event: Event): void {\n if (node.id && matchesModal(event, node.id)) {\n setIsOpen(true);\n }\n }\n\n function close(event: Event): void {\n if (!node.id || matchesModal(event, node.id)) {\n setIsOpen(false);\n }\n }\n\n window.addEventListener(LATTICE_EVENT.openModal, open);\n window.addEventListener(LATTICE_EVENT.closeModal, close);\n\n return () => {\n window.removeEventListener(LATTICE_EVENT.openModal, open);\n window.removeEventListener(LATTICE_EVENT.closeModal, close);\n };\n }, [node.id]);\n\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n <DialogContent\n {...(description ? {} : { \"aria-describedby\": undefined })}\n className=\"max-h-[min(680px,calc(100vh-2rem))] w-full max-w-lg overflow-y-auto\"\n >\n <DialogHeader closeLabel={closeLabel} description={description} title={title} />\n <div className=\"mt-6 space-y-6\">{children}</div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default ModalComponent;\n"],"mappings":";;;;;AASA,SAAS,aAAa,OAAc,OAAwB;CAC1D,MAAM,SAAU,MAAqB,QAAQ;CAE7C,OAAO,UAAU,QAAQ,WAAW;AACtC;AAEA,IAAM,kBAA8C,EAAE,UAAU,WAAW;CACzE,MAAM,QAAQ,KAAK,MAAM,SAAS;CAClC,MAAM,cAAc,KAAK,MAAM;CAC/B,MAAM,aAAa,KAAK,MAAM;CAC9B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK,MAAM,SAAS,IAAI;CAE7D,gBAAgB;EACd,SAAS,KAAK,OAAoB;GAChC,IAAI,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACxC,UAAU,IAAI;EAElB;EAEA,SAAS,MAAM,OAAoB;GACjC,IAAI,CAAC,KAAK,MAAM,aAAa,OAAO,KAAK,EAAE,GACzC,UAAU,KAAK;EAEnB;EAEA,OAAO,iBAAiB,cAAc,WAAW,IAAI;EACrD,OAAO,iBAAiB,cAAc,YAAY,KAAK;EAEvD,aAAa;GACX,OAAO,oBAAoB,cAAc,WAAW,IAAI;GACxD,OAAO,oBAAoB,cAAc,YAAY,KAAK;EAC5D;CACF,GAAG,CAAC,KAAK,EAAE,CAAC;CAEZ,OACE,oBAAC,QAAD;EAAQ,MAAM;EAAQ,cAAc;YAClC,qBAAC,eAAD;GACE,GAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,KAAA,EAAU;GACxD,WAAU;aAFZ,CAIE,oBAAC,cAAD;IAA0B;IAAyB;IAAoB;GAAQ,CAAA,GAC/E,oBAAC,OAAD;IAAK,WAAU;IAAkB;GAAc,CAAA,CAClC;;CACT,CAAA;AAEZ"}
@@ -0,0 +1,8 @@
1
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
2
+ import * as React from "react";
3
+ export declare const POPOVER_SURFACE = "z-50 rounded-lt-sm border border-lt-border bg-lt-popover text-lt-popover-fg shadow-md";
4
+ declare function Popover(props: React.ComponentProps<typeof PopoverPrimitive.Root>): React.JSX.Element;
5
+ declare function PopoverTrigger(props: React.ComponentProps<typeof PopoverPrimitive.Trigger>): React.JSX.Element;
6
+ declare function PopoverClose(props: React.ComponentProps<typeof PopoverPrimitive.Close>): React.JSX.Element;
7
+ declare function PopoverContent({ align, className, sideOffset, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): React.JSX.Element;
8
+ export { Popover, PopoverClose, PopoverContent, PopoverTrigger };
@@ -0,0 +1,37 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
5
+ //#region resources/js/core/components/popover.tsx
6
+ var POPOVER_SURFACE = "z-50 rounded-lt-sm border border-lt-border bg-lt-popover text-lt-popover-fg shadow-md";
7
+ function Popover(props) {
8
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, {
9
+ "data-slot": "popover",
10
+ ...props
11
+ });
12
+ }
13
+ function PopoverTrigger(props) {
14
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, {
15
+ "data-slot": "popover-trigger",
16
+ ...props
17
+ });
18
+ }
19
+ function PopoverClose(props) {
20
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Close, {
21
+ "data-slot": "popover-close",
22
+ ...props
23
+ });
24
+ }
25
+ function PopoverContent({ align = "start", className, sideOffset = 4, ...props }) {
26
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
27
+ align,
28
+ className: cn(POPOVER_SURFACE, className),
29
+ "data-slot": "popover-content",
30
+ sideOffset,
31
+ ...props
32
+ }) });
33
+ }
34
+ //#endregion
35
+ export { POPOVER_SURFACE, Popover, PopoverClose, PopoverContent, PopoverTrigger };
36
+
37
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","names":[],"sources":["../../../resources/js/core/components/popover.tsx"],"sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nexport const POPOVER_SURFACE =\n \"z-50 rounded-lt-sm border border-lt-border bg-lt-popover text-lt-popover-fg shadow-md\";\n\nfunction Popover(props: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger(props: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverClose(props: React.ComponentProps<typeof PopoverPrimitive.Close>) {\n return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />;\n}\n\nfunction PopoverContent({\n align = \"start\",\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n className={cn(POPOVER_SURFACE, className)}\n data-slot=\"popover-content\"\n sideOffset={sideOffset}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nexport { Popover, PopoverClose, PopoverContent, PopoverTrigger };\n"],"mappings":";;;;;AAIA,IAAa,kBACX;AAEF,SAAS,QAAQ,OAA2D;CAC1E,OAAO,oBAAC,iBAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA;AAChE;AAEA,SAAS,eAAe,OAA8D;CACpF,OAAO,oBAAC,iBAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAEA,SAAS,aAAa,OAA4D;CAChF,OAAO,oBAAC,iBAAiB,OAAlB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;AAEA,SAAS,eAAe,EACtB,QAAQ,SACR,WACA,aAAa,GACb,GAAG,SACqD;CACxD,OACE,oBAAC,iBAAiB,QAAlB,EAAA,UACE,oBAAC,iBAAiB,SAAlB;EACS;EACP,WAAW,GAAG,iBAAiB,SAAS;EACxC,aAAU;EACE;EACZ,GAAI;CACL,CAAA,EACsB,CAAA;AAE7B"}
@@ -0,0 +1,3 @@
1
+ import { RendererComponent } from '../types';
2
+ declare const RawBlockComponent: RendererComponent<"raw-block">;
3
+ export default RawBlockComponent;
@@ -0,0 +1,10 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ //#region resources/js/core/components/raw-block.tsx
3
+ var RawBlockComponent = ({ node }) => /* @__PURE__ */ jsx("span", {
4
+ style: { display: "contents" },
5
+ dangerouslySetInnerHTML: { __html: node.props.html }
6
+ });
7
+ //#endregion
8
+ export { RawBlockComponent as default };
9
+
10
+ //# sourceMappingURL=raw-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-block.js","names":[],"sources":["../../../resources/js/core/components/raw-block.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\n\nconst RawBlockComponent: RendererComponent<\"raw-block\"> = ({ node }) => (\n <span style={{ display: \"contents\" }} dangerouslySetInnerHTML={{ __html: node.props.html }} />\n);\n\nexport default RawBlockComponent;\n"],"mappings":";;AAEA,IAAM,qBAAqD,EAAE,WAC3D,oBAAC,QAAD;CAAM,OAAO,EAAE,SAAS,WAAW;CAAG,yBAAyB,EAAE,QAAQ,KAAK,MAAM,KAAK;AAAI,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { RendererComponent } from '../types';
2
+ declare const SectionComponent: RendererComponent<"section">;
3
+ export default SectionComponent;
@@ -0,0 +1,75 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import { nodeIdentity, prefixedTestId } from "../test-id.js";
3
+ import { Icon } from "../../icons/sprite.js";
4
+ import { Renderer } from "../renderer.js";
5
+ import { useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region resources/js/core/components/section.tsx
8
+ function readStored(key, remember, fallback) {
9
+ if (!remember || typeof window === "undefined") return fallback;
10
+ const stored = window.localStorage.getItem(key);
11
+ return stored === null ? fallback : stored === "true";
12
+ }
13
+ function getNodes(value) {
14
+ if (!Array.isArray(value)) return [];
15
+ return value.filter((node) => typeof node === "object" && node !== null && "type" in node && typeof node.type === "string");
16
+ }
17
+ var SectionComponent = ({ children, node }) => {
18
+ const { title, description } = node.props;
19
+ const collapsible = node.props.collapsible === true;
20
+ const rememberState = node.props.rememberState !== false;
21
+ const headerActions = getNodes(node.props.headerActions);
22
+ const identity = nodeIdentity(node);
23
+ const storageKey = `lattice:section:${identity ?? "default"}`;
24
+ const [collapsed, setCollapsed] = useState(() => readStored(storageKey, collapsible && rememberState, node.props.collapsed === true));
25
+ function toggle() {
26
+ setCollapsed((value) => {
27
+ const next = !value;
28
+ if (rememberState && typeof window !== "undefined") window.localStorage.setItem(storageKey, String(next));
29
+ return next;
30
+ });
31
+ }
32
+ const isCollapsed = collapsible && collapsed;
33
+ const hasHeader = Boolean(title || description || headerActions.length > 0 || collapsible);
34
+ return /* @__PURE__ */ jsxs("section", {
35
+ className: "flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs",
36
+ "data-lattice-component": node.id,
37
+ children: [hasHeader && /* @__PURE__ */ jsxs("div", {
38
+ className: "flex items-start justify-between gap-4 px-6",
39
+ children: [/* @__PURE__ */ jsxs("div", {
40
+ className: "flex min-w-0 items-start gap-2",
41
+ children: [collapsible && /* @__PURE__ */ jsx("button", {
42
+ "aria-expanded": !isCollapsed,
43
+ "aria-label": isCollapsed ? "Expand section" : "Collapse section",
44
+ "data-test": prefixedTestId("section-toggle", identity) ?? "section-toggle-default",
45
+ className: "mt-0.5 inline-flex shrink-0 items-center rounded-md p-0.5 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg",
46
+ onClick: toggle,
47
+ type: "button",
48
+ children: /* @__PURE__ */ jsx(Icon, {
49
+ name: "chevron-down",
50
+ className: cn("size-lt-icon-md transition-transform", isCollapsed && "-rotate-90")
51
+ })
52
+ }), /* @__PURE__ */ jsxs("div", {
53
+ className: "flex min-w-0 flex-col gap-1.5",
54
+ children: [title && /* @__PURE__ */ jsx("div", {
55
+ className: "font-semibold leading-none",
56
+ children: title
57
+ }), description && /* @__PURE__ */ jsx("div", {
58
+ className: "text-sm text-lt-muted-fg",
59
+ children: description
60
+ })]
61
+ })]
62
+ }), headerActions.length > 0 && /* @__PURE__ */ jsx("div", {
63
+ className: "flex shrink-0 items-center gap-2",
64
+ children: /* @__PURE__ */ jsx(Renderer, { nodes: headerActions })
65
+ })]
66
+ }), !isCollapsed && children && /* @__PURE__ */ jsx("div", {
67
+ className: "flex flex-col gap-6 px-6",
68
+ children
69
+ })]
70
+ });
71
+ };
72
+ //#endregion
73
+ export { SectionComponent as default };
74
+
75
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","names":[],"sources":["../../../resources/js/core/components/section.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Icon } from \"@lattice-php/lattice/icons\";\nimport { Renderer } from \"@lattice-php/lattice/core/renderer\";\nimport { nodeIdentity, prefixedTestId } from \"@lattice-php/lattice/core/test-id\";\nimport type { Node, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction readStored(key: string, remember: boolean, fallback: boolean): boolean {\n if (!remember || typeof window === \"undefined\") {\n return fallback;\n }\n\n const stored = window.localStorage.getItem(key);\n\n return stored === null ? fallback : stored === \"true\";\n}\n\nfunction getNodes(value: unknown): Node[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.filter(\n (node): node is Node =>\n typeof node === \"object\" && node !== null && \"type\" in node && typeof node.type === \"string\",\n );\n}\n\nconst SectionComponent: RendererComponent<\"section\"> = ({ children, node }) => {\n const { title, description } = node.props;\n const collapsible = node.props.collapsible === true;\n const rememberState = node.props.rememberState !== false;\n const headerActions = getNodes(node.props.headerActions);\n const identity = nodeIdentity(node);\n const storageKey = `lattice:section:${identity ?? \"default\"}`;\n\n const [collapsed, setCollapsed] = useState(() =>\n readStored(storageKey, collapsible && rememberState, node.props.collapsed === true),\n );\n\n function toggle(): void {\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 }\n\n const isCollapsed = collapsible && collapsed;\n const hasHeader = Boolean(title || description || headerActions.length > 0 || collapsible);\n\n return (\n <section\n className=\"flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs\"\n data-lattice-component={node.id}\n >\n {hasHeader && (\n <div className=\"flex items-start justify-between gap-4 px-6\">\n <div className=\"flex min-w-0 items-start gap-2\">\n {collapsible && (\n <button\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Expand section\" : \"Collapse section\"}\n data-test={prefixedTestId(\"section-toggle\", identity) ?? \"section-toggle-default\"}\n className=\"mt-0.5 inline-flex shrink-0 items-center rounded-md p-0.5 text-lt-muted-fg transition-colors hover:bg-lt-muted hover:text-lt-fg\"\n onClick={toggle}\n type=\"button\"\n >\n <Icon\n name=\"chevron-down\"\n className={cn(\n \"size-lt-icon-md transition-transform\",\n isCollapsed && \"-rotate-90\",\n )}\n />\n </button>\n )}\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title && <div className=\"font-semibold leading-none\">{title}</div>}\n {description && <div className=\"text-sm text-lt-muted-fg\">{description}</div>}\n </div>\n </div>\n\n {headerActions.length > 0 && (\n <div className=\"flex shrink-0 items-center gap-2\">\n <Renderer nodes={headerActions} />\n </div>\n )}\n </div>\n )}\n\n {!isCollapsed && children && <div className=\"flex flex-col gap-6 px-6\">{children}</div>}\n </section>\n );\n};\n\nexport default SectionComponent;\n"],"mappings":";;;;;;;AAOA,SAAS,WAAW,KAAa,UAAmB,UAA4B;CAC9E,IAAI,CAAC,YAAY,OAAO,WAAW,aACjC,OAAO;CAGT,MAAM,SAAS,OAAO,aAAa,QAAQ,GAAG;CAE9C,OAAO,WAAW,OAAO,WAAW,WAAW;AACjD;AAEA,SAAS,SAAS,OAAwB;CACxC,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAGV,OAAO,MAAM,QACV,SACC,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,QAAQ,OAAO,KAAK,SAAS,QACxF;AACF;AAEA,IAAM,oBAAkD,EAAE,UAAU,WAAW;CAC7E,MAAM,EAAE,OAAO,gBAAgB,KAAK;CACpC,MAAM,cAAc,KAAK,MAAM,gBAAgB;CAC/C,MAAM,gBAAgB,KAAK,MAAM,kBAAkB;CACnD,MAAM,gBAAgB,SAAS,KAAK,MAAM,aAAa;CACvD,MAAM,WAAW,aAAa,IAAI;CAClC,MAAM,aAAa,mBAAmB,YAAY;CAElD,MAAM,CAAC,WAAW,gBAAgB,eAChC,WAAW,YAAY,eAAe,eAAe,KAAK,MAAM,cAAc,IAAI,CACpF;CAEA,SAAS,SAAe;EACtB,cAAc,UAAU;GACtB,MAAM,OAAO,CAAC;GAEd,IAAI,iBAAiB,OAAO,WAAW,aACrC,OAAO,aAAa,QAAQ,YAAY,OAAO,IAAI,CAAC;GAGtD,OAAO;EACT,CAAC;CACH;CAEA,MAAM,cAAc,eAAe;CACnC,MAAM,YAAY,QAAQ,SAAS,eAAe,cAAc,SAAS,KAAK,WAAW;CAEzF,OACE,qBAAC,WAAD;EACE,WAAU;EACV,0BAAwB,KAAK;YAF/B,CAIG,aACC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,eACC,oBAAC,UAAD;KACE,iBAAe,CAAC;KAChB,cAAY,cAAc,mBAAmB;KAC7C,aAAW,eAAe,kBAAkB,QAAQ,KAAK;KACzD,WAAU;KACV,SAAS;KACT,MAAK;eAEL,oBAAC,MAAD;MACE,MAAK;MACL,WAAW,GACT,wCACA,eAAe,YACjB;KACD,CAAA;IACK,CAAA,GAEV,qBAAC,OAAD;KAAK,WAAU;eAAf,CACG,SAAS,oBAAC,OAAD;MAAK,WAAU;gBAA8B;KAAW,CAAA,GACjE,eAAe,oBAAC,OAAD;MAAK,WAAU;gBAA4B;KAAiB,CAAA,CACzE;MACF;OAEJ,cAAc,SAAS,KACtB,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,UAAD,EAAU,OAAO,cAAgB,CAAA;GAC9B,CAAA,CAEJ;MAGN,CAAC,eAAe,YAAY,oBAAC,OAAD;GAAK,WAAU;GAA4B;EAAc,CAAA,CAC/E;;AAEb"}
@@ -1,16 +1,3 @@
1
- import { Option } from '../../../../core/props';
2
- import { RendererComponent } from '../../../../core/types';
3
- declare module '../../../../core/types' {
4
- interface ComponentProps {
5
- "segmented-control": {
6
- emits?: string;
7
- label?: string;
8
- name?: string;
9
- options?: Option[];
10
- tabIndex?: number;
11
- value?: string;
12
- };
13
- }
14
- }
1
+ import { RendererComponent } from '../types';
15
2
  declare const SegmentedControlComponent: RendererComponent<"segmented-control">;
16
3
  export default SegmentedControlComponent;
@@ -1,13 +1,10 @@
1
- import { getOptionalNumberProp, getOptions, getStringProp } from "../props.js";
2
1
  import { SegmentedPills } from "./segmented-pills.js";
3
2
  import { useState } from "react";
4
3
  import { jsx } from "react/jsx-runtime";
5
4
  //#region resources/js/core/components/segmented-control.tsx
6
5
  var SegmentedControlComponent = ({ node }) => {
7
- const options = getOptions(node.props);
8
- const name = getStringProp(node.props, "name");
9
- const emits = getStringProp(node.props, "emits");
10
- const [value, setValue] = useState(getStringProp(node.props, "value") || options[0]?.value || "");
6
+ const { options, name, emits } = node.props;
7
+ const [value, setValue] = useState(node.props.value || options[0]?.value || "");
11
8
  if (options.length === 0) return null;
12
9
  function select(next) {
13
10
  setValue(next);
@@ -17,10 +14,10 @@ var SegmentedControlComponent = ({ node }) => {
17
14
  } }));
18
15
  }
19
16
  return /* @__PURE__ */ jsx(SegmentedPills, {
20
- ariaLabel: getStringProp(node.props, "label"),
17
+ ariaLabel: node.props.label ?? void 0,
18
+ name,
21
19
  onSelect: select,
22
20
  options,
23
- tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
24
21
  value
25
22
  });
26
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-control.js","names":[],"sources":["../../../resources/js/core/components/segmented-control.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n type Option,\n getOptionalNumberProp,\n getOptions,\n getStringProp,\n} from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { SegmentedPills } from \"./segmented-pills\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"segmented-control\": {\n emits?: string;\n label?: string;\n name?: string;\n options?: Option[];\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nconst SegmentedControlComponent: RendererComponent<\"segmented-control\"> = ({ node }) => {\n const options = getOptions(node.props);\n const name = getStringProp(node.props, \"name\");\n const emits = getStringProp(node.props, \"emits\");\n const [value, setValue] = useState(getStringProp(node.props, \"value\") || options[0]?.value || \"\");\n\n if (options.length === 0) {\n return null;\n }\n\n function select(next: string): void {\n setValue(next);\n\n if (emits) {\n window.dispatchEvent(new CustomEvent(emits, { detail: { name, value: next } }));\n }\n }\n\n return (\n <SegmentedPills\n ariaLabel={getStringProp(node.props, \"label\")}\n onSelect={select}\n options={options}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n value={value}\n />\n );\n};\n\nexport default SegmentedControlComponent;\n"],"mappings":";;;;;AAuBA,IAAM,6BAAqE,EAAE,WAAW;CACtF,MAAM,UAAU,WAAW,KAAK,KAAK;CACrC,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,QAAQ,cAAc,KAAK,OAAO,OAAO;CAC/C,MAAM,CAAC,OAAO,YAAY,SAAS,cAAc,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,EAAE;CAEhG,IAAI,QAAQ,WAAW,GACrB,OAAO;CAGT,SAAS,OAAO,MAAoB;EAClC,SAAS,IAAI;EAEb,IAAI,OACF,OAAO,cAAc,IAAI,YAAY,OAAO,EAAE,QAAQ;GAAE;GAAM,OAAO;EAAK,EAAE,CAAC,CAAC;CAElF;CAEA,OACE,oBAAC,gBAAD;EACE,WAAW,cAAc,KAAK,OAAO,OAAO;EAC5C,UAAU;EACD;EACT,UAAU,sBAAsB,KAAK,OAAO,UAAU;EAC/C;CACR,CAAA;AAEL"}
1
+ {"version":3,"file":"segmented-control.js","names":[],"sources":["../../../resources/js/core/components/segmented-control.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { SegmentedPills } from \"./segmented-pills\";\n\nconst SegmentedControlComponent: RendererComponent<\"segmented-control\"> = ({ node }) => {\n const { options, name, emits } = node.props;\n const [value, setValue] = useState(node.props.value || options[0]?.value || \"\");\n\n if (options.length === 0) {\n return null;\n }\n\n function select(next: string): void {\n setValue(next);\n\n if (emits) {\n window.dispatchEvent(new CustomEvent(emits, { detail: { name, value: next } }));\n }\n }\n\n return (\n <SegmentedPills\n ariaLabel={node.props.label ?? undefined}\n name={name}\n onSelect={select}\n options={options}\n value={value}\n />\n );\n};\n\nexport default SegmentedControlComponent;\n"],"mappings":";;;;AAIA,IAAM,6BAAqE,EAAE,WAAW;CACtF,MAAM,EAAE,SAAS,MAAM,UAAU,KAAK;CACtC,MAAM,CAAC,OAAO,YAAY,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI,SAAS,EAAE;CAE9E,IAAI,QAAQ,WAAW,GACrB,OAAO;CAGT,SAAS,OAAO,MAAoB;EAClC,SAAS,IAAI;EAEb,IAAI,OACF,OAAO,cAAc,IAAI,YAAY,OAAO,EAAE,QAAQ;GAAE;GAAM,OAAO;EAAK,EAAE,CAAC,CAAC;CAElF;CAEA,OACE,oBAAC,gBAAD;EACE,WAAW,KAAK,MAAM,SAAS,KAAA;EACzB;EACN,UAAU;EACD;EACF;CACR,CAAA;AAEL"}
@@ -1,11 +1,13 @@
1
- import { Option } from '../../../../core/props';
1
+ import { Option } from '../types';
2
2
  /**
3
3
  * Presentational segmented pill group. Used by the form choice field (bound to a
4
4
  * form value) and the core segmented control (standalone, emits an event).
5
5
  */
6
- export declare function SegmentedPills({ ariaLabel, disabled, onSelect, options, tabIndex, value, }: {
6
+ export declare function SegmentedPills({ ariaLabel, autoFocus, disabled, name, onSelect, options, tabIndex, value, }: {
7
7
  ariaLabel?: string;
8
+ autoFocus?: boolean;
8
9
  disabled?: boolean;
10
+ name?: string;
9
11
  onSelect: (value: string) => void;
10
12
  options: Option[];
11
13
  tabIndex?: number;
@@ -1,19 +1,28 @@
1
1
  import { cn } from "../../lib/utils.js";
2
+ import { useEffect, useRef } from "react";
2
3
  import { jsx } from "react/jsx-runtime";
3
4
  //#region resources/js/core/components/segmented-pills.tsx
4
5
  /**
5
6
  * Presentational segmented pill group. Used by the form choice field (bound to a
6
7
  * form value) and the core segmented control (standalone, emits an event).
7
8
  */
8
- function SegmentedPills({ ariaLabel, disabled = false, onSelect, options, tabIndex, value }) {
9
+ function SegmentedPills({ ariaLabel, autoFocus = false, disabled = false, name, onSelect, options, tabIndex, value }) {
10
+ const groupRef = useRef(null);
11
+ useEffect(() => {
12
+ if (!autoFocus) return;
13
+ const group = groupRef.current;
14
+ (group?.querySelector("button[aria-checked=\"true\"]") ?? group?.querySelector("button"))?.focus();
15
+ }, [autoFocus]);
9
16
  return /* @__PURE__ */ jsx("div", {
10
17
  "aria-label": ariaLabel,
11
18
  className: "inline-flex w-fit max-w-full gap-1 overflow-x-auto rounded-lt bg-lt-muted p-1",
19
+ ref: groupRef,
12
20
  role: "radiogroup",
13
21
  children: options.map((option) => {
14
22
  const isSelected = value === option.value;
15
23
  return /* @__PURE__ */ jsx("button", {
16
24
  "aria-checked": isSelected,
25
+ "data-test": `${name ?? "segment"}-${option.value}`,
17
26
  className: cn("whitespace-nowrap rounded-lt-sm px-3 py-1.5 text-sm font-medium transition-colors", isSelected ? "bg-lt-bg text-lt-fg shadow-xs" : "text-lt-muted-fg hover:bg-lt-bg/60 hover:text-lt-fg", disabled && "cursor-not-allowed opacity-60"),
18
27
  disabled,
19
28
  onClick: () => onSelect(option.value),
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-pills.js","names":[],"sources":["../../../resources/js/core/components/segmented-pills.tsx"],"sourcesContent":["import type { Option } from \"@lattice/lattice/core/props\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\n/**\n * Presentational segmented pill group. Used by the form choice field (bound to a\n * form value) and the core segmented control (standalone, emits an event).\n */\nexport function SegmentedPills({\n ariaLabel,\n disabled = false,\n onSelect,\n options,\n tabIndex,\n value,\n}: {\n ariaLabel?: string;\n disabled?: boolean;\n onSelect: (value: string) => void;\n options: Option[];\n tabIndex?: number;\n value: string;\n}) {\n return (\n <div\n aria-label={ariaLabel}\n className=\"inline-flex w-fit max-w-full gap-1 overflow-x-auto rounded-lt bg-lt-muted p-1\"\n role=\"radiogroup\"\n >\n {options.map((option) => {\n const isSelected = value === option.value;\n\n return (\n <button\n aria-checked={isSelected}\n className={cn(\n \"whitespace-nowrap rounded-lt-sm px-3 py-1.5 text-sm font-medium transition-colors\",\n isSelected\n ? \"bg-lt-bg text-lt-fg shadow-xs\"\n : \"text-lt-muted-fg hover:bg-lt-bg/60 hover:text-lt-fg\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n disabled={disabled}\n key={option.value}\n onClick={() => onSelect(option.value)}\n role=\"radio\"\n tabIndex={tabIndex}\n type=\"button\"\n >\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,eAAe,EAC7B,WACA,WAAW,OACX,UACA,SACA,UACA,SAQC;CACD,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EACV,MAAK;YAEJ,QAAQ,KAAK,WAAW;GACvB,MAAM,aAAa,UAAU,OAAO;GAEpC,OACE,oBAAC,UAAD;IACE,gBAAc;IACd,WAAW,GACT,qFACA,aACI,kCACA,uDACJ,YAAY,+BACd;IACU;IAEV,eAAe,SAAS,OAAO,KAAK;IACpC,MAAK;IACK;IACV,MAAK;cAEJ,OAAO;GACF,GAPD,OAAO,KAON;EAEZ,CAAC;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"segmented-pills.js","names":[],"sources":["../../../resources/js/core/components/segmented-pills.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { Option } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\n/**\n * Presentational segmented pill group. Used by the form choice field (bound to a\n * form value) and the core segmented control (standalone, emits an event).\n */\nexport function SegmentedPills({\n ariaLabel,\n autoFocus = false,\n disabled = false,\n name,\n onSelect,\n options,\n tabIndex,\n value,\n}: {\n ariaLabel?: string;\n autoFocus?: boolean;\n disabled?: boolean;\n name?: string;\n onSelect: (value: string) => void;\n options: Option[];\n tabIndex?: number;\n value: string;\n}) {\n const groupRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!autoFocus) {\n return;\n }\n\n const group = groupRef.current;\n const target =\n group?.querySelector<HTMLButtonElement>('button[aria-checked=\"true\"]') ??\n group?.querySelector<HTMLButtonElement>(\"button\");\n\n target?.focus();\n }, [autoFocus]);\n\n return (\n <div\n aria-label={ariaLabel}\n className=\"inline-flex w-fit max-w-full gap-1 overflow-x-auto rounded-lt bg-lt-muted p-1\"\n ref={groupRef}\n role=\"radiogroup\"\n >\n {options.map((option) => {\n const isSelected = value === option.value;\n\n return (\n <button\n aria-checked={isSelected}\n data-test={`${name ?? \"segment\"}-${option.value}`}\n className={cn(\n \"whitespace-nowrap rounded-lt-sm px-3 py-1.5 text-sm font-medium transition-colors\",\n isSelected\n ? \"bg-lt-bg text-lt-fg shadow-xs\"\n : \"text-lt-muted-fg hover:bg-lt-bg/60 hover:text-lt-fg\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n disabled={disabled}\n key={option.value}\n onClick={() => onSelect(option.value)}\n role=\"radio\"\n tabIndex={tabIndex}\n type=\"button\"\n >\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,eAAe,EAC7B,WACA,YAAY,OACZ,WAAW,OACX,MACA,UACA,SACA,UACA,SAUC;CACD,MAAM,WAAW,OAAuB,IAAI;CAE5C,gBAAgB;EACd,IAAI,CAAC,WACH;EAGF,MAAM,QAAQ,SAAS;EAKvB,CAHE,OAAO,cAAiC,+BAA6B,KACrE,OAAO,cAAiC,QAAQ,IAE1C,MAAM;CAChB,GAAG,CAAC,SAAS,CAAC;CAEd,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EACV,KAAK;EACL,MAAK;YAEJ,QAAQ,KAAK,WAAW;GACvB,MAAM,aAAa,UAAU,OAAO;GAEpC,OACE,oBAAC,UAAD;IACE,gBAAc;IACd,aAAW,GAAG,QAAQ,UAAU,GAAG,OAAO;IAC1C,WAAW,GACT,qFACA,aACI,kCACA,uDACJ,YAAY,+BACd;IACU;IAEV,eAAe,SAAS,OAAO,KAAK;IACpC,MAAK;IACK;IACV,MAAK;cAEJ,OAAO;GACF,GAPD,OAAO,KAON;EAEZ,CAAC;CACE,CAAA;AAET"}
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
3
+ export { Skeleton };
@@ -0,0 +1,16 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region resources/js/core/components/skeleton.tsx
5
+ function Skeleton({ className, ...props }) {
6
+ return /* @__PURE__ */ jsx("div", {
7
+ "aria-hidden": "true",
8
+ className: cn("animate-pulse rounded-lt-sm bg-lt-muted", className),
9
+ "data-slot": "skeleton",
10
+ ...props
11
+ });
12
+ }
13
+ //#endregion
14
+ export { Skeleton };
15
+
16
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","names":[],"sources":["../../../resources/js/core/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\"animate-pulse rounded-lt-sm bg-lt-muted\", className)}\n data-slot=\"skeleton\"\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":";;;;AAGA,SAAS,SAAS,EAAE,WAAW,GAAG,SAAsC;CACtE,OACE,oBAAC,OAAD;EACE,eAAY;EACZ,WAAW,GAAG,2CAA2C,SAAS;EAClE,aAAU;EACV,GAAI;CACL,CAAA;AAEL"}
@@ -1,12 +1,16 @@
1
1
  import { cn } from "../../lib/utils.js";
2
+ import { Icon } from "../../icons/sprite.js";
3
+ import { useT } from "../../i18n/instance.js";
2
4
  import { jsx } from "react/jsx-runtime";
3
- import { Loader2Icon } from "lucide-react";
4
5
  //#region resources/js/core/components/spinner.tsx
5
6
  function Spinner({ className, ...props }) {
6
- return /* @__PURE__ */ jsx(Loader2Icon, {
7
+ const { t } = useT("lattice");
8
+ return /* @__PURE__ */ jsx(Icon, {
9
+ name: "loader-2",
7
10
  role: "status",
8
- "aria-label": "Loading",
9
- className: cn("size-4 animate-spin", className),
11
+ "aria-label": t("a11y.loading", "Loading"),
12
+ "aria-hidden": false,
13
+ className: cn("animate-spin", className),
10
14
  ...props
11
15
  });
12
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","names":[],"sources":["../../../resources/js/core/components/spinner.tsx"],"sourcesContent":["import { Loader2Icon } from \"lucide-react\";\n\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n"],"mappings":";;;;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAsC;CACrE,OACE,oBAAC,aAAD;EACE,MAAK;EACL,cAAW;EACX,WAAW,GAAG,uBAAuB,SAAS;EAC9C,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"spinner.js","names":[],"sources":["../../../resources/js/core/components/spinner.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n const { t } = useT(\"lattice\");\n\n return (\n <Icon\n name=\"loader-2\"\n role=\"status\"\n aria-label={t(\"a11y.loading\", \"Loading\")}\n aria-hidden={false}\n className={cn(\"animate-spin\", className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n"],"mappings":";;;;;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,SAAsC;CACrE,MAAM,EAAE,MAAM,KAAK,SAAS;CAE5B,OACE,oBAAC,MAAD;EACE,MAAK;EACL,MAAK;EACL,cAAY,EAAE,gBAAgB,SAAS;EACvC,eAAa;EACb,WAAW,GAAG,gBAAgB,SAAS;EACvC,GAAI;CACL,CAAA;AAEL"}
@@ -1,13 +1,3 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare module '../../../../core/types' {
3
- interface ComponentProps {
4
- stack: {
5
- align?: string;
6
- direction?: string;
7
- gap?: string;
8
- width?: string;
9
- };
10
- }
11
- }
1
+ import { RendererComponent } from '../types';
12
2
  declare const StackComponent: RendererComponent<"stack">;
13
3
  export default StackComponent;
@@ -1,5 +1,4 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getStringProp } from "../props.js";
3
2
  import { jsx } from "react/jsx-runtime";
4
3
  //#region resources/js/core/components/stack.tsx
5
4
  var gridAlignments = {
@@ -8,11 +7,12 @@ var gridAlignments = {
8
7
  stretch: "justify-items-stretch"
9
8
  };
10
9
  var flexAlignments = {
11
- center: "items-center justify-center text-center",
12
- start: "items-center justify-start text-left",
10
+ center: "items-center text-center",
11
+ start: "items-center text-left",
13
12
  stretch: "items-stretch justify-stretch"
14
13
  };
15
14
  var stackGaps = {
15
+ none: "gap-0",
16
16
  xs: "gap-1",
17
17
  lg: "gap-6",
18
18
  md: "gap-4",
@@ -20,24 +20,35 @@ var stackGaps = {
20
20
  xl: "gap-8"
21
21
  };
22
22
  var stackWidths = {
23
+ fill: "min-w-0 flex-1",
23
24
  full: "w-full",
24
25
  lg: "mx-auto w-full max-w-4xl",
25
26
  md: "mx-auto w-full max-w-2xl",
26
27
  sm: "mx-auto w-full max-w-md"
27
28
  };
29
+ var justifyClasses = {
30
+ around: "justify-around",
31
+ between: "justify-between",
32
+ center: "justify-center",
33
+ end: "justify-end",
34
+ evenly: "justify-evenly",
35
+ start: "justify-start"
36
+ };
37
+ var stackHeights = {
38
+ full: "h-full",
39
+ screen: "min-h-screen"
40
+ };
28
41
  var StackComponent = ({ children, node }) => {
29
- const align = getStringProp(node.props, "align", "stretch");
30
- const direction = getStringProp(node.props, "direction", "column");
31
- const gap = getStringProp(node.props, "gap", "md");
32
- const width = getStringProp(node.props, "width", "full");
33
- if (direction === "row") return /* @__PURE__ */ jsx("div", {
34
- "data-lattice-component": node.id,
35
- className: cn("flex flex-wrap", flexAlignments[align] ?? flexAlignments.stretch, stackGaps[gap] ?? stackGaps.md, stackWidths[width] ?? stackWidths.full),
36
- children
37
- });
42
+ const align = node.props.align ?? "stretch";
43
+ const direction = node.props.direction ?? "column";
44
+ const gap = node.props.gap ?? "md";
45
+ const width = node.props.width ?? "full";
46
+ const justify = node.props.justify;
47
+ const height = node.props.height;
48
+ const isFlex = direction === "row" || justify != null;
38
49
  return /* @__PURE__ */ jsx("div", {
39
50
  "data-lattice-component": node.id,
40
- className: cn("grid", gridAlignments[align] ?? gridAlignments.stretch, stackGaps[gap] ?? stackGaps.md, stackWidths[width] ?? stackWidths.full),
51
+ className: cn(isFlex ? cn("flex", direction === "row" ? "flex-wrap" : "flex-col") : "grid content-start", isFlex ? flexAlignments[align] ?? flexAlignments.stretch : gridAlignments[align] ?? gridAlignments.stretch, stackGaps[gap] ?? stackGaps.md, stackWidths[width] ?? stackWidths.full, justify ? justifyClasses[justify] : null, height ? stackHeights[height] : null),
41
52
  children
42
53
  });
43
54
  };