@lattice-php/lattice 0.1.0 → 0.2.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 (367) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +8 -0
  2. package/dist/action/components/action-form.d.ts +24 -0
  3. package/dist/action/components/action-form.js +270 -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 +24 -66
  7. package/dist/action/components/action-group.js.map +1 -1
  8. package/dist/action/components/action.d.ts +1 -24
  9. package/dist/action/components/action.js +61 -46
  10. package/dist/action/components/action.js.map +1 -1
  11. package/dist/action/effects.d.ts +6 -25
  12. package/dist/action/effects.js +2 -2
  13. package/dist/action/effects.js.map +1 -1
  14. package/dist/action/index.d.ts +1 -1
  15. package/dist/core/components/badge.d.ts +1 -8
  16. package/dist/core/components/badge.js +2 -3
  17. package/dist/core/components/badge.js.map +1 -1
  18. package/dist/core/components/button.d.ts +4 -12
  19. package/dist/core/components/button.js +6 -9
  20. package/dist/core/components/button.js.map +1 -1
  21. package/dist/core/components/card.d.ts +1 -9
  22. package/dist/core/components/card.js +1 -3
  23. package/dist/core/components/card.js.map +1 -1
  24. package/dist/core/components/confirm-dialog.d.ts +2 -3
  25. package/dist/core/components/confirm-dialog.js +19 -13
  26. package/dist/core/components/confirm-dialog.js.map +1 -1
  27. package/dist/core/components/fragment.d.ts +1 -10
  28. package/dist/core/components/fragment.js +5 -6
  29. package/dist/core/components/fragment.js.map +1 -1
  30. package/dist/core/components/grid.d.ts +1 -8
  31. package/dist/core/components/grid.js +1 -2
  32. package/dist/core/components/grid.js.map +1 -1
  33. package/dist/core/components/heading.d.ts +1 -9
  34. package/dist/core/components/heading.js +2 -3
  35. package/dist/core/components/heading.js.map +1 -1
  36. package/dist/core/components/icon.d.ts +3 -0
  37. package/dist/core/components/icon.js +30 -0
  38. package/dist/core/components/icon.js.map +1 -0
  39. package/dist/core/components/index.d.ts +1 -1
  40. package/dist/core/components/index.js +4 -0
  41. package/dist/core/components/index.js.map +1 -1
  42. package/dist/core/components/link.d.ts +1 -12
  43. package/dist/core/components/link.js +4 -9
  44. package/dist/core/components/link.js.map +1 -1
  45. package/dist/core/components/modal.d.ts +1 -11
  46. package/dist/core/components/modal.js +27 -31
  47. package/dist/core/components/modal.js.map +1 -1
  48. package/dist/core/components/section.d.ts +3 -0
  49. package/dist/core/components/section.js +79 -0
  50. package/dist/core/components/section.js.map +1 -0
  51. package/dist/core/components/segmented-control.d.ts +1 -14
  52. package/dist/core/components/segmented-control.js +4 -7
  53. package/dist/core/components/segmented-control.js.map +1 -1
  54. package/dist/core/components/segmented-pills.d.ts +4 -2
  55. package/dist/core/components/segmented-pills.js +10 -1
  56. package/dist/core/components/segmented-pills.js.map +1 -1
  57. package/dist/core/components/spinner.js +8 -4
  58. package/dist/core/components/spinner.js.map +1 -1
  59. package/dist/core/components/stack.d.ts +1 -11
  60. package/dist/core/components/stack.js +5 -5
  61. package/dist/core/components/stack.js.map +1 -1
  62. package/dist/core/components/tabs.d.ts +1 -19
  63. package/dist/core/components/tabs.js +45 -21
  64. package/dist/core/components/tabs.js.map +1 -1
  65. package/dist/core/components/text.d.ts +1 -9
  66. package/dist/core/components/text.js +2 -3
  67. package/dist/core/components/text.js.map +1 -1
  68. package/dist/core/registry.d.ts +9 -3
  69. package/dist/core/registry.js +21 -5
  70. package/dist/core/registry.js.map +1 -1
  71. package/dist/core/renderer.js +7 -13
  72. package/dist/core/renderer.js.map +1 -1
  73. package/dist/core/types.d.ts +54 -26
  74. package/dist/form/components/base/checkbox.js +5 -2
  75. package/dist/form/components/base/checkbox.js.map +1 -1
  76. package/dist/form/components/base/field.d.ts +2 -1
  77. package/dist/form/components/base/field.js +5 -1
  78. package/dist/form/components/base/field.js.map +1 -1
  79. package/dist/form/components/base/password-input.js +9 -2
  80. package/dist/form/components/base/password-input.js.map +1 -1
  81. package/dist/form/components/base/submit-button.d.ts +4 -4
  82. package/dist/form/components/base/submit-button.js +2 -2
  83. package/dist/form/components/base/submit-button.js.map +1 -1
  84. package/dist/form/components/conditions.d.ts +6 -9
  85. package/dist/form/components/conditions.js +10 -2
  86. package/dist/form/components/conditions.js.map +1 -1
  87. package/dist/form/components/context.d.ts +0 -4
  88. package/dist/form/components/context.js +1 -5
  89. package/dist/form/components/context.js.map +1 -1
  90. package/dist/form/components/field-props.d.ts +24 -0
  91. package/dist/form/components/field-props.js +15 -0
  92. package/dist/form/components/field-props.js.map +1 -0
  93. package/dist/form/components/fields/checkbox.d.ts +1 -15
  94. package/dist/form/components/fields/checkbox.js +16 -21
  95. package/dist/form/components/fields/checkbox.js.map +1 -1
  96. package/dist/form/components/fields/choice.d.ts +1 -13
  97. package/dist/form/components/fields/choice.js +13 -20
  98. package/dist/form/components/fields/choice.js.map +1 -1
  99. package/dist/form/components/fields/date-input.d.ts +1 -19
  100. package/dist/form/components/fields/date-input.js +11 -16
  101. package/dist/form/components/fields/date-input.js.map +1 -1
  102. package/dist/form/components/fields/hidden-input.d.ts +1 -9
  103. package/dist/form/components/fields/hidden-input.js +2 -3
  104. package/dist/form/components/fields/hidden-input.js.map +1 -1
  105. package/dist/form/components/fields/number-input.d.ts +1 -22
  106. package/dist/form/components/fields/number-input.js +38 -41
  107. package/dist/form/components/fields/number-input.js.map +1 -1
  108. package/dist/form/components/fields/password-input.d.ts +1 -28
  109. package/dist/form/components/fields/password-input.js +15 -24
  110. package/dist/form/components/fields/password-input.js.map +1 -1
  111. package/dist/form/components/fields/rich-editor.d.ts +1 -16
  112. package/dist/form/components/fields/rich-editor.js +57 -47
  113. package/dist/form/components/fields/rich-editor.js.map +1 -1
  114. package/dist/form/components/fields/select.d.ts +1 -22
  115. package/dist/form/components/fields/select.js +85 -74
  116. package/dist/form/components/fields/select.js.map +1 -1
  117. package/dist/form/components/fields/simple-field.d.ts +9 -0
  118. package/dist/form/components/fields/simple-field.js +22 -0
  119. package/dist/form/components/fields/simple-field.js.map +1 -0
  120. package/dist/form/components/fields/text-input.d.ts +1 -20
  121. package/dist/form/components/fields/text-input.js +12 -17
  122. package/dist/form/components/fields/text-input.js.map +1 -1
  123. package/dist/form/components/fields/textarea.d.ts +1 -19
  124. package/dist/form/components/fields/textarea.js +11 -16
  125. package/dist/form/components/fields/textarea.js.map +1 -1
  126. package/dist/form/components/form.d.ts +1 -20
  127. package/dist/form/components/form.js +29 -36
  128. package/dist/form/components/form.js.map +1 -1
  129. package/dist/form/components/index.d.ts +0 -1
  130. package/dist/form/components/index.js +1 -2
  131. package/dist/form/components/resolved-nodes.d.ts +1 -1
  132. package/dist/form/components/resolved-nodes.js +2 -2
  133. package/dist/form/components/resolved-nodes.js.map +1 -1
  134. package/dist/form/components/types.d.ts +1 -0
  135. package/dist/form/components/use-controlled-field.d.ts +3 -9
  136. package/dist/form/components/use-controlled-field.js +5 -9
  137. package/dist/form/components/use-controlled-field.js.map +1 -1
  138. package/dist/form/components/use-dependent-field.d.ts +1 -1
  139. package/dist/form/components/use-dependent-field.js +8 -8
  140. package/dist/form/components/use-dependent-field.js.map +1 -1
  141. package/dist/form/components/use-form-resolver.d.ts +1 -1
  142. package/dist/form/components/use-form-resolver.js +8 -13
  143. package/dist/form/components/use-form-resolver.js.map +1 -1
  144. package/dist/form/components/use-seed-default.d.ts +5 -0
  145. package/dist/form/components/use-seed-default.js +23 -0
  146. package/dist/form/components/use-seed-default.js.map +1 -0
  147. package/dist/form/index.d.ts +1 -1
  148. package/dist/form/index.js +0 -1
  149. package/dist/form/index.js.map +1 -1
  150. package/dist/form/skeleton.d.ts +1 -1
  151. package/dist/form/skeleton.js +1 -1
  152. package/dist/form/skeleton.js.map +1 -1
  153. package/dist/i18n/backend.d.ts +24 -0
  154. package/dist/i18n/backend.js +39 -0
  155. package/dist/i18n/backend.js.map +1 -0
  156. package/dist/i18n/index.d.ts +3 -0
  157. package/dist/i18n/index.js +3 -0
  158. package/dist/i18n/instance.js +48 -0
  159. package/dist/i18n/instance.js.map +1 -0
  160. package/dist/icons/icon-renderer.js +30 -5
  161. package/dist/icons/icon-renderer.js.map +1 -1
  162. package/dist/icons/index.d.ts +2 -0
  163. package/dist/icons/index.js +2 -1
  164. package/dist/icons/sprite.d.ts +30 -0
  165. package/dist/icons/sprite.js +40 -0
  166. package/dist/icons/sprite.js.map +1 -0
  167. package/dist/index.d.ts +9 -5
  168. package/dist/index.js +7 -3
  169. package/dist/inertia.d.ts +1 -6
  170. package/dist/inertia.js +4 -8
  171. package/dist/inertia.js.map +1 -1
  172. package/dist/lattice.css +129 -5
  173. package/dist/layout/components.d.ts +1 -0
  174. package/dist/layout/components.js +19 -0
  175. package/dist/layout/components.js.map +1 -0
  176. package/dist/layout/context.d.ts +12 -0
  177. package/dist/layout/context.js +19 -0
  178. package/dist/layout/context.js.map +1 -0
  179. package/dist/layout/index.d.ts +3 -0
  180. package/dist/layout/index.js +4 -0
  181. package/dist/layout/menu-item.d.ts +3 -0
  182. package/dist/layout/menu-item.js +130 -0
  183. package/dist/layout/menu-item.js.map +1 -0
  184. package/dist/layout/menu.d.ts +3 -0
  185. package/dist/layout/menu.js +13 -0
  186. package/dist/layout/menu.js.map +1 -0
  187. package/dist/layout/outlet.d.ts +6 -0
  188. package/dist/layout/outlet.js +14 -0
  189. package/dist/layout/outlet.js.map +1 -0
  190. package/dist/layout/schema-layout.d.ts +10 -0
  191. package/dist/layout/schema-layout.js +30 -0
  192. package/dist/layout/schema-layout.js.map +1 -0
  193. package/dist/layout/sidebar.d.ts +3 -0
  194. package/dist/layout/sidebar.js +48 -0
  195. package/dist/layout/sidebar.js.map +1 -0
  196. package/dist/lib/utils.d.ts +0 -2
  197. package/dist/lib/utils.js +1 -4
  198. package/dist/lib/utils.js.map +1 -1
  199. package/dist/node_modules/i18next/dist/esm/i18next.js +1982 -0
  200. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -0
  201. package/dist/node_modules/i18next-http-backend/esm/index.js +352 -0
  202. package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -0
  203. package/dist/node_modules/react-i18next/dist/es/context.js +23 -0
  204. package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -0
  205. package/dist/node_modules/react-i18next/dist/es/defaults.js +29 -0
  206. package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -0
  207. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +10 -0
  208. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +1 -0
  209. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +14 -0
  210. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +1 -0
  211. package/dist/node_modules/react-i18next/dist/es/unescape.js +30 -0
  212. package/dist/node_modules/react-i18next/dist/es/unescape.js.map +1 -0
  213. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +157 -0
  214. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -0
  215. package/dist/node_modules/react-i18next/dist/es/utils.js +58 -0
  216. package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -0
  217. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +70 -0
  218. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
  219. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +61 -0
  220. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +1 -0
  221. package/dist/node_modules/use-sync-external-store/shim/index.js +13 -0
  222. package/dist/node_modules/use-sync-external-store/shim/index.js.map +1 -0
  223. package/dist/page.d.ts +1 -1
  224. package/dist/page.js +2 -2
  225. package/dist/page.js.map +1 -1
  226. package/dist/provider.d.ts +8 -3
  227. package/dist/provider.js +17 -9
  228. package/dist/provider.js.map +1 -1
  229. package/dist/registry.d.ts +1 -1
  230. package/dist/registry.js +2 -1
  231. package/dist/registry.js.map +1 -1
  232. package/dist/table/bulk.d.ts +6 -10
  233. package/dist/table/bulk.js +13 -35
  234. package/dist/table/bulk.js.map +1 -1
  235. package/dist/table/column-registry.d.ts +9 -0
  236. package/dist/table/components/bulk-bar.js +34 -3
  237. package/dist/table/components/bulk-bar.js.map +1 -1
  238. package/dist/table/components/cells/badge-cell.d.ts +5 -0
  239. package/dist/table/components/cells/badge-cell.js +16 -0
  240. package/dist/table/components/cells/badge-cell.js.map +1 -0
  241. package/dist/table/components/cells/icon-cell.d.ts +5 -0
  242. package/dist/table/components/cells/icon-cell.js +22 -0
  243. package/dist/table/components/cells/icon-cell.js.map +1 -0
  244. package/dist/table/components/cells/image-cell.d.ts +5 -0
  245. package/dist/table/components/cells/image-cell.js +24 -0
  246. package/dist/table/components/cells/image-cell.js.map +1 -0
  247. package/dist/table/components/cells/text-cell.d.ts +6 -0
  248. package/dist/table/components/cells/text-cell.js +50 -0
  249. package/dist/table/components/cells/text-cell.js.map +1 -0
  250. package/dist/table/components/column-filter-control.js +59 -96
  251. package/dist/table/components/column-filter-control.js.map +1 -1
  252. package/dist/table/components/column-header.js +22 -11
  253. package/dist/table/components/column-header.js.map +1 -1
  254. package/dist/table/components/filter-stack-bar.d.ts +2 -2
  255. package/dist/table/components/filter-stack-bar.js +10 -8
  256. package/dist/table/components/filter-stack-bar.js.map +1 -1
  257. package/dist/table/components/filter-value-input.d.ts +5 -3
  258. package/dist/table/components/filter-value-input.js +25 -16
  259. package/dist/table/components/filter-value-input.js.map +1 -1
  260. package/dist/table/components/pagination.d.ts +1 -1
  261. package/dist/table/components/pagination.js +20 -8
  262. package/dist/table/components/pagination.js.map +1 -1
  263. package/dist/table/components/sort-bar.d.ts +2 -2
  264. package/dist/table/components/sort-bar.js +12 -10
  265. package/dist/table/components/sort-bar.js.map +1 -1
  266. package/dist/table/components/table-action-node.d.ts +1 -1
  267. package/dist/table/components/table-action-node.js +1 -1
  268. package/dist/table/components/table-action-node.js.map +1 -1
  269. package/dist/table/components/table-cell.d.ts +1 -1
  270. package/dist/table/components/table-cell.js +24 -43
  271. package/dist/table/components/table-cell.js.map +1 -1
  272. package/dist/table/components/table.d.ts +6 -2
  273. package/dist/table/components/table.js +40 -17
  274. package/dist/table/components/table.js.map +1 -1
  275. package/dist/table/format.js +5 -3
  276. package/dist/table/format.js.map +1 -1
  277. package/dist/table/index.d.ts +1 -1
  278. package/dist/table/index.js.map +1 -1
  279. package/dist/table/payload.d.ts +1 -1
  280. package/dist/table/query.d.ts +0 -1
  281. package/dist/table/query.js +8 -9
  282. package/dist/table/query.js.map +1 -1
  283. package/dist/table/types.d.ts +38 -42
  284. package/dist/table/use-table.d.ts +3 -4
  285. package/dist/table/use-table.js +12 -23
  286. package/dist/table/use-table.js.map +1 -1
  287. package/dist/test-support.d.ts +14 -0
  288. package/dist/test-support.js +14 -0
  289. package/dist/test-support.js.map +1 -0
  290. package/dist/toast/index.d.ts +1 -0
  291. package/dist/toast/index.js +2 -0
  292. package/dist/toast/toaster.d.ts +3 -0
  293. package/dist/toast/toaster.js +126 -0
  294. package/dist/toast/toaster.js.map +1 -0
  295. package/dist/types/generated.d.ts +677 -0
  296. package/dist/types/generated.js +0 -0
  297. package/dist/types/index.d.ts +1 -1
  298. package/package.json +18 -3
  299. package/resources/icons/align-center.svg +17 -0
  300. package/resources/icons/align-justify.svg +17 -0
  301. package/resources/icons/align-left.svg +17 -0
  302. package/resources/icons/align-right.svg +17 -0
  303. package/resources/icons/arrow-down.svg +16 -0
  304. package/resources/icons/arrow-up.svg +16 -0
  305. package/resources/icons/bold.svg +15 -0
  306. package/resources/icons/check.svg +15 -0
  307. package/resources/icons/chevron-down.svg +15 -0
  308. package/resources/icons/chevron-right.svg +15 -0
  309. package/resources/icons/chevrons-up-down.svg +16 -0
  310. package/resources/icons/circle-alert.svg +17 -0
  311. package/resources/icons/circle-check.svg +16 -0
  312. package/resources/icons/circle-help.svg +17 -0
  313. package/resources/icons/circle-x.svg +17 -0
  314. package/resources/icons/code.svg +16 -0
  315. package/resources/icons/columns-3.svg +17 -0
  316. package/resources/icons/copy.svg +16 -0
  317. package/resources/icons/external-link.svg +17 -0
  318. package/resources/icons/eye-off.svg +18 -0
  319. package/resources/icons/eye.svg +16 -0
  320. package/resources/icons/filter.svg +15 -0
  321. package/resources/icons/heading-1.svg +18 -0
  322. package/resources/icons/heading-2.svg +18 -0
  323. package/resources/icons/heading-3.svg +19 -0
  324. package/resources/icons/highlighter.svg +16 -0
  325. package/resources/icons/info.svg +17 -0
  326. package/resources/icons/italic.svg +17 -0
  327. package/resources/icons/layout-dashboard.svg +18 -0
  328. package/resources/icons/link.svg +16 -0
  329. package/resources/icons/list-ordered.svg +20 -0
  330. package/resources/icons/list.svg +20 -0
  331. package/resources/icons/loader-2.svg +15 -0
  332. package/resources/icons/minus.svg +15 -0
  333. package/resources/icons/more-horizontal.svg +17 -0
  334. package/resources/icons/panel-left.svg +16 -0
  335. package/resources/icons/pencil-line.svg +17 -0
  336. package/resources/icons/pencil.svg +16 -0
  337. package/resources/icons/plus.svg +16 -0
  338. package/resources/icons/quote.svg +16 -0
  339. package/resources/icons/rows-3.svg +17 -0
  340. package/resources/icons/search.svg +16 -0
  341. package/resources/icons/send.svg +16 -0
  342. package/resources/icons/settings.svg +16 -0
  343. package/resources/icons/smile.svg +18 -0
  344. package/resources/icons/strikethrough.svg +17 -0
  345. package/resources/icons/table.svg +18 -0
  346. package/resources/icons/trash-2.svg +19 -0
  347. package/resources/icons/underline.svg +16 -0
  348. package/resources/icons/x.svg +16 -0
  349. package/dist/core/props.d.ts +0 -14
  350. package/dist/core/props.js +0 -30
  351. package/dist/core/props.js.map +0 -1
  352. package/dist/form/components/fields/submit-button.d.ts +0 -10
  353. package/dist/form/components/fields/submit-button.js +0 -14
  354. package/dist/form/components/fields/submit-button.js.map +0 -1
  355. package/dist/generated/types.d.ts +0 -17
  356. package/dist/icons/default-icons.d.ts +0 -3
  357. package/dist/icons/default-icons.js +0 -44
  358. package/dist/icons/default-icons.js.map +0 -1
  359. package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
  360. package/dist/icons/dynamic-lucide-renderer.js +0 -18
  361. package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
  362. package/dist/menu/index.d.ts +0 -1
  363. package/dist/menu/index.js +0 -2
  364. package/dist/menu/use-menu.d.ts +0 -2
  365. package/dist/menu/use-menu.js +0 -9
  366. package/dist/menu/use-menu.js.map +0 -1
  367. /package/dist/{generated/types.js → table/column-registry.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","names":[],"sources":["../../../resources/js/action/components/action.tsx"],"sourcesContent":["import { router, useHttp } from \"@inertiajs/react\";\nimport type { Method } from \"@inertiajs/core\";\nimport { useState } from \"react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { Button } from \"@lattice/lattice/core/components/button\";\nimport { ConfirmDialog } from \"@lattice/lattice/core/components/confirm-dialog\";\nimport { Spinner } from \"@lattice/lattice/core/components/spinner\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { NodeProps, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { IconRenderer } from \"@lattice/lattice/icons\";\nimport { dispatchActionEffects, dispatchActionError, getActionEffects } from \"../effects\";\nimport type { ActionEffect } from \"../effects\";\n\ntype ActionVariant = \"default\" | \"destructive\" | \"ghost\" | \"link\" | \"outline\" | \"secondary\";\n\ntype ActionConfirmation = {\n cancelLabel?: string;\n confirmLabel?: string;\n description?: string;\n title?: string;\n};\n\ntype ActionResponse = {\n data?: Record<string, unknown>;\n effects?: ActionEffect[];\n ok?: boolean;\n};\n\ntype ActionData = Record<string, never>;\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n action: {\n confirmation?: ActionConfirmation;\n effects?: ActionEffect[];\n endpoint?: string;\n icon?: string;\n label?: string;\n ref?: string;\n method?: Method;\n variant?: ActionVariant;\n };\n }\n}\n\nconst actionMethods = [\"delete\", \"get\", \"patch\", \"post\", \"put\"] satisfies Method[];\n\nfunction getActionMethod(props: NodeProps | undefined): Method {\n const method = getStringProp(props, \"method\", \"post\");\n\n return actionMethods.includes(method as Method) ? (method as Method) : \"post\";\n}\n\nfunction getConfirmation(props: NodeProps | undefined): ActionConfirmation | null {\n const confirmation = props?.confirmation;\n\n if (typeof confirmation !== \"object\" || confirmation === null || Array.isArray(confirmation)) {\n return null;\n }\n\n return confirmation;\n}\n\nconst ActionComponent: RendererComponent<\"action\"> = ({ node }) => {\n const endpoint = getStringProp(node.props, \"endpoint\");\n const icon = getStringProp(node.props, \"icon\");\n const label = getStringProp(node.props, \"label\", \"Run action\");\n const componentRef = getStringProp(node.props, \"ref\");\n const method = getActionMethod(node.props);\n const http = useHttp<ActionData, ActionResponse>({});\n const [isConfirming, setIsConfirming] = useState(false);\n const confirmation = getConfirmation(node.props);\n\n const submit = async (): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n try {\n if (method === \"get\") {\n router.visit(endpoint, { headers: withRefHeader(componentRef) });\n setIsConfirming(false);\n\n return;\n }\n\n const response = await http[method](endpoint, { headers: withRefHeader(componentRef) });\n const responseEffects = getActionEffects(response.effects);\n\n dispatchActionEffects(\n responseEffects.length > 0 ? responseEffects : getActionEffects(node.props?.effects),\n );\n setIsConfirming(false);\n } catch (error) {\n dispatchActionError(error);\n }\n };\n\n const requestSubmit = (): void => {\n if (confirmation) {\n setIsConfirming(true);\n\n return;\n }\n\n void submit();\n };\n\n const confirmationTitle = confirmation?.title ?? label;\n const confirmationConfirmLabel = confirmation?.confirmLabel ?? label;\n const confirmationCancelLabel = confirmation?.cancelLabel ?? \"Cancel\";\n\n return (\n <>\n <Button\n data-lattice-component={node.id}\n disabled={http.processing || !endpoint}\n onClick={requestSubmit}\n type=\"button\"\n variant={node.props?.variant ?? \"default\"}\n >\n {http.processing ? <Spinner /> : icon && <IconRenderer className=\"size-4\" icon={icon} />}\n {label}\n </Button>\n\n {isConfirming && confirmation && (\n <ConfirmDialog\n title={confirmationTitle}\n description={confirmation.description}\n confirmLabel={confirmationConfirmLabel}\n cancelLabel={confirmationCancelLabel}\n confirmVariant={node.props?.variant ?? \"default\"}\n processing={http.processing}\n confirmDisabled={!endpoint}\n onConfirm={() => void submit()}\n onCancel={() => setIsConfirming(false)}\n />\n )}\n </>\n );\n};\n\nexport default ActionComponent;\n"],"mappings":";;;;;;;;;;;AA6CA,IAAM,gBAAgB;CAAC;CAAU;CAAO;CAAS;CAAQ;AAAK;AAE9D,SAAS,gBAAgB,OAAsC;CAC7D,MAAM,SAAS,cAAc,OAAO,UAAU,MAAM;CAEpD,OAAO,cAAc,SAAS,MAAgB,IAAK,SAAoB;AACzE;AAEA,SAAS,gBAAgB,OAAyD;CAChF,MAAM,eAAe,OAAO;CAE5B,IAAI,OAAO,iBAAiB,YAAY,iBAAiB,QAAQ,MAAM,QAAQ,YAAY,GACzF,OAAO;CAGT,OAAO;AACT;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,WAAW,cAAc,KAAK,OAAO,UAAU;CACrD,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,QAAQ,cAAc,KAAK,OAAO,SAAS,YAAY;CAC7D,MAAM,eAAe,cAAc,KAAK,OAAO,KAAK;CACpD,MAAM,SAAS,gBAAgB,KAAK,KAAK;CACzC,MAAM,OAAO,QAAoC,CAAC,CAAC;CACnD,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,eAAe,gBAAgB,KAAK,KAAK;CAE/C,MAAM,SAAS,YAA2B;EACxC,IAAI,CAAC,UACH;EAGF,IAAI;GACF,IAAI,WAAW,OAAO;IACpB,OAAO,MAAM,UAAU,EAAE,SAAS,cAAc,YAAY,EAAE,CAAC;IAC/D,gBAAgB,KAAK;IAErB;GACF;GAGA,MAAM,kBAAkB,kBAAiB,MADlB,KAAK,QAAQ,UAAU,EAAE,SAAS,cAAc,YAAY,EAAE,CAAC,GACpC,OAAO;GAEzD,sBACE,gBAAgB,SAAS,IAAI,kBAAkB,iBAAiB,KAAK,OAAO,OAAO,CACrF;GACA,gBAAgB,KAAK;EACvB,SAAS,OAAO;GACd,oBAAoB,KAAK;EAC3B;CACF;CAEA,MAAM,sBAA4B;EAChC,IAAI,cAAc;GAChB,gBAAgB,IAAI;GAEpB;EACF;EAEA,OAAY;CACd;CAEA,MAAM,oBAAoB,cAAc,SAAS;CACjD,MAAM,2BAA2B,cAAc,gBAAgB;CAC/D,MAAM,0BAA0B,cAAc,eAAe;CAE7D,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,qBAAC,QAAD;EACE,0BAAwB,KAAK;EAC7B,UAAU,KAAK,cAAc,CAAC;EAC9B,SAAS;EACT,MAAK;EACL,SAAS,KAAK,OAAO,WAAW;YALlC,CAOG,KAAK,aAAa,oBAAC,SAAD,CAAU,CAAA,IAAI,QAAQ,oBAAC,cAAD;GAAc,WAAU;GAAe;EAAO,CAAA,GACtF,KACK;KAEP,gBAAgB,gBACf,oBAAC,eAAD;EACE,OAAO;EACP,aAAa,aAAa;EAC1B,cAAc;EACd,aAAa;EACb,gBAAgB,KAAK,OAAO,WAAW;EACvC,YAAY,KAAK;EACjB,iBAAiB,CAAC;EAClB,iBAAiB,KAAK,OAAO;EAC7B,gBAAgB,gBAAgB,KAAK;CACtC,CAAA,CAEH,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"action.js","names":[],"sources":["../../../resources/js/action/components/action.tsx"],"sourcesContent":["import { router, useHttp } from \"@inertiajs/react\";\nimport type { Method } from \"@inertiajs/core\";\nimport { useState } from \"react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { Button } from \"@lattice/lattice/core/components/button\";\nimport { ConfirmDialog } from \"@lattice/lattice/core/components/confirm-dialog\";\nimport { Spinner } from \"@lattice/lattice/core/components/spinner\";\nimport type { Node, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { IconRenderer } from \"@lattice/lattice/icons\";\nimport { dispatchActionEffects, dispatchActionError, getActionEffects } from \"../effects\";\nimport type { ActionResponse } from \"../effects\";\nimport { ActionForm, useLazyActionForm } from \"./action-form\";\n\nconst ActionComponent: RendererComponent<\"action\"> = ({ node }) => {\n const endpoint = node.props.endpoint ?? \"\";\n const icon = node.props.icon;\n const label = node.props.label ?? \"Run action\";\n const componentRef = node.props.ref ?? \"\";\n const method: Method = node.props.method ?? \"post\";\n const http = useHttp<Record<string, never>, ActionResponse>({});\n const [isConfirming, setIsConfirming] = useState(false);\n const [isFilling, setIsFilling] = useState(false);\n const confirmation = node.props.confirmation;\n const variant = node.props.variant ?? \"default\";\n // The wire carries the embedded form as a full node; the generated prop type\n // reflects Form's props, so read it through the Node lens the renderer uses.\n const inlineForm = node.props.form as unknown as Node | null;\n const lazyForm = node.props.lazyForm === true;\n const hasForm = Boolean(inlineForm) || lazyForm;\n const lazyNode = useLazyActionForm(endpoint, method, componentRef, isFilling && lazyForm);\n const formNode = lazyForm ? lazyNode : inlineForm;\n\n const submit = async (): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n try {\n if (method === \"get\") {\n router.visit(endpoint, { headers: withRefHeader(componentRef) });\n setIsConfirming(false);\n\n return;\n }\n\n const response = await http[method](endpoint, { headers: withRefHeader(componentRef) });\n const responseEffects = getActionEffects(response.effects);\n\n dispatchActionEffects(\n responseEffects.length > 0 ? responseEffects : getActionEffects(node.props.effects),\n );\n setIsConfirming(false);\n } catch (error) {\n dispatchActionError(error);\n }\n };\n\n const requestSubmit = (): void => {\n if (hasForm) {\n setIsFilling(true);\n\n return;\n }\n\n if (confirmation) {\n setIsConfirming(true);\n\n return;\n }\n\n void submit();\n };\n\n const confirmationTitle = confirmation?.title ?? label;\n const confirmationConfirmLabel = confirmation?.confirmLabel ?? label;\n const confirmationCancelLabel = confirmation?.cancelLabel ?? \"Cancel\";\n\n return (\n <>\n <Button\n data-lattice-component={node.id}\n data-test={`action-${label.toLowerCase().replace(/\\s+/g, \"-\")}`}\n disabled={http.processing || !endpoint}\n onClick={requestSubmit}\n type=\"button\"\n variant={variant}\n >\n {http.processing ? (\n <Spinner />\n ) : (\n icon && <IconRenderer className=\"size-lt-icon-md\" icon={icon} />\n )}\n {label}\n </Button>\n\n {isConfirming && confirmation && (\n <ConfirmDialog\n title={confirmationTitle}\n description={confirmation.description ?? undefined}\n confirmLabel={confirmationConfirmLabel}\n cancelLabel={confirmationCancelLabel}\n confirmVariant={variant}\n processing={http.processing}\n confirmDisabled={!endpoint}\n onConfirm={() => void submit()}\n onCancel={() => setIsConfirming(false)}\n />\n )}\n\n {isFilling && hasForm && (\n <ActionForm\n cancelLabel={confirmationCancelLabel}\n componentRef={componentRef}\n description={confirmation?.description ?? undefined}\n endpoint={endpoint}\n formNode={formNode}\n method={method}\n onClose={() => setIsFilling(false)}\n onSuccess={(response) => {\n const responseEffects = getActionEffects(response.effects);\n\n dispatchActionEffects(\n responseEffects.length > 0 ? responseEffects : getActionEffects(node.props.effects),\n );\n setIsFilling(false);\n }}\n submitLabel={confirmationConfirmLabel}\n title={confirmationTitle}\n />\n )}\n </>\n );\n};\n\nexport default ActionComponent;\n"],"mappings":";;;;;;;;;;;AAaA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,WAAW,KAAK,MAAM,YAAY;CACxC,MAAM,OAAO,KAAK,MAAM;CACxB,MAAM,QAAQ,KAAK,MAAM,SAAS;CAClC,MAAM,eAAe,KAAK,MAAM,OAAO;CACvC,MAAM,SAAiB,KAAK,MAAM,UAAU;CAC5C,MAAM,OAAO,QAA+C,CAAC,CAAC;CAC9D,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,MAAM,eAAe,KAAK,MAAM;CAChC,MAAM,UAAU,KAAK,MAAM,WAAW;CAGtC,MAAM,aAAa,KAAK,MAAM;CAC9B,MAAM,WAAW,KAAK,MAAM,aAAa;CACzC,MAAM,UAAU,QAAQ,UAAU,KAAK;CACvC,MAAM,WAAW,kBAAkB,UAAU,QAAQ,cAAc,aAAa,QAAQ;CACxF,MAAM,WAAW,WAAW,WAAW;CAEvC,MAAM,SAAS,YAA2B;EACxC,IAAI,CAAC,UACH;EAGF,IAAI;GACF,IAAI,WAAW,OAAO;IACpB,OAAO,MAAM,UAAU,EAAE,SAAS,cAAc,YAAY,EAAE,CAAC;IAC/D,gBAAgB,KAAK;IAErB;GACF;GAGA,MAAM,kBAAkB,kBAAiB,MADlB,KAAK,QAAQ,UAAU,EAAE,SAAS,cAAc,YAAY,EAAE,CAAC,GACpC,OAAO;GAEzD,sBACE,gBAAgB,SAAS,IAAI,kBAAkB,iBAAiB,KAAK,MAAM,OAAO,CACpF;GACA,gBAAgB,KAAK;EACvB,SAAS,OAAO;GACd,oBAAoB,KAAK;EAC3B;CACF;CAEA,MAAM,sBAA4B;EAChC,IAAI,SAAS;GACX,aAAa,IAAI;GAEjB;EACF;EAEA,IAAI,cAAc;GAChB,gBAAgB,IAAI;GAEpB;EACF;EAEA,OAAY;CACd;CAEA,MAAM,oBAAoB,cAAc,SAAS;CACjD,MAAM,2BAA2B,cAAc,gBAAgB;CAC/D,MAAM,0BAA0B,cAAc,eAAe;CAE7D,OACE,qBAAA,UAAA,EAAA,UAAA;EACE,qBAAC,QAAD;GACE,0BAAwB,KAAK;GAC7B,aAAW,UAAU,MAAM,YAAY,EAAE,QAAQ,QAAQ,GAAG;GAC5D,UAAU,KAAK,cAAc,CAAC;GAC9B,SAAS;GACT,MAAK;GACI;aANX,CAQG,KAAK,aACJ,oBAAC,SAAD,CAAU,CAAA,IAEV,QAAQ,oBAAC,cAAD;IAAc,WAAU;IAAwB;GAAO,CAAA,GAEhE,KACK;;EAEP,gBAAgB,gBACf,oBAAC,eAAD;GACE,OAAO;GACP,aAAa,aAAa,eAAe,KAAA;GACzC,cAAc;GACd,aAAa;GACb,gBAAgB;GAChB,YAAY,KAAK;GACjB,iBAAiB,CAAC;GAClB,iBAAiB,KAAK,OAAO;GAC7B,gBAAgB,gBAAgB,KAAK;EACtC,CAAA;EAGF,aAAa,WACZ,oBAAC,YAAD;GACE,aAAa;GACC;GACd,aAAa,cAAc,eAAe,KAAA;GAChC;GACA;GACF;GACR,eAAe,aAAa,KAAK;GACjC,YAAY,aAAa;IACvB,MAAM,kBAAkB,iBAAiB,SAAS,OAAO;IAEzD,sBACE,gBAAgB,SAAS,IAAI,kBAAkB,iBAAiB,KAAK,MAAM,OAAO,CACpF;IACA,aAAa,KAAK;GACpB;GACA,aAAa;GACb,OAAO;EACR,CAAA;CAEH,EAAA,CAAA;AAEN"}
@@ -1,28 +1,9 @@
1
- import { ToastVariant } from '../../../generated/types';
2
- export type ActionEffect = {
3
- message?: string;
4
- type: "toast";
5
- variant?: ToastVariant;
6
- } | {
7
- type: "reloadPage";
8
- } | {
9
- component?: string;
10
- type: "reloadComponent";
11
- } | {
12
- type: "redirect";
13
- url?: string;
14
- } | {
15
- type: "download";
16
- url?: string;
17
- } | {
18
- modal?: string;
19
- type: "openModal";
20
- } | {
21
- modal?: string;
22
- type: "closeModal";
23
- } | {
24
- form?: string;
25
- type: "resetForm";
1
+ import { Effect } from '../types/generated';
2
+ export type ActionEffect = Effect;
3
+ export type ActionResponse = {
4
+ data?: Record<string, unknown>;
5
+ effects?: ActionEffect[];
6
+ ok?: boolean;
26
7
  };
27
8
  export declare function dispatchActionEffects(effects: ActionEffect[]): void;
28
9
  export declare function dispatchActionError(error: unknown): void;
@@ -23,8 +23,8 @@ function dispatchActionEffects(effects) {
23
23
  if (typeof window === "undefined") return;
24
24
  for (const effect of effects) {
25
25
  if (effect.type === "reloadPage") router.reload();
26
- if (effect.type === "redirect" && typeof effect.url === "string") router.visit(effect.url);
27
- if (effect.type === "download" && typeof effect.url === "string") triggerDownload(effect.url);
26
+ if (effect.type === "redirect") router.visit(effect.url);
27
+ if (effect.type === "download") triggerDownload(effect.url);
28
28
  window.dispatchEvent(new CustomEvent(eventNames[effect.type], { detail: effect }));
29
29
  }
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"effects.js","names":[],"sources":["../../resources/js/action/effects.ts"],"sourcesContent":["import { router } from \"@inertiajs/react\";\nimport type { EffectType, ToastVariant } from \"@lattice/lattice/generated/types\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\n\nexport type ActionEffect =\n | {\n message?: string;\n type: \"toast\";\n variant?: ToastVariant;\n }\n | {\n type: \"reloadPage\";\n }\n | {\n component?: string;\n type: \"reloadComponent\";\n }\n | {\n type: \"redirect\";\n url?: string;\n }\n | {\n type: \"download\";\n url?: string;\n }\n | {\n modal?: string;\n type: \"openModal\";\n }\n | {\n modal?: string;\n type: \"closeModal\";\n }\n | {\n form?: string;\n type: \"resetForm\";\n };\n\nconst eventNames = {\n toast: LATTICE_EVENT.toast,\n reloadComponent: LATTICE_EVENT.reloadComponent,\n reloadPage: LATTICE_EVENT.reloadPage,\n redirect: LATTICE_EVENT.redirect,\n download: LATTICE_EVENT.download,\n openModal: LATTICE_EVENT.openModal,\n closeModal: LATTICE_EVENT.closeModal,\n resetForm: LATTICE_EVENT.resetForm,\n} satisfies Record<EffectType, string>;\n\nfunction triggerDownload(url: string): void {\n const link = document.createElement(\"a\");\n link.href = url;\n link.rel = \"noopener\";\n document.body.appendChild(link);\n link.click();\n link.remove();\n}\n\nexport function dispatchActionEffects(effects: ActionEffect[]): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n for (const effect of effects) {\n if (effect.type === \"reloadPage\") {\n router.reload();\n }\n\n if (effect.type === \"redirect\" && typeof effect.url === \"string\") {\n router.visit(effect.url);\n }\n\n if (effect.type === \"download\" && typeof effect.url === \"string\") {\n triggerDownload(effect.url);\n }\n\n window.dispatchEvent(new CustomEvent(eventNames[effect.type], { detail: effect }));\n }\n}\n\nexport function dispatchActionError(error: unknown): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(new CustomEvent(LATTICE_EVENT.actionError, { detail: { error } }));\n}\n\nexport function getActionEffects(effects: unknown): ActionEffect[] {\n return Array.isArray(effects) ? effects.filter(isActionEffect) : [];\n}\n\nexport function isActionEffect(effect: unknown): effect is ActionEffect {\n return (\n typeof effect === \"object\" &&\n effect !== null &&\n \"type\" in effect &&\n typeof effect.type === \"string\" &&\n Object.hasOwn(eventNames, effect.type)\n );\n}\n"],"mappings":";;;AAsCA,IAAM,aAAa;CACjB,OAAO,cAAc;CACrB,iBAAiB,cAAc;CAC/B,YAAY,cAAc;CAC1B,UAAU,cAAc;CACxB,UAAU,cAAc;CACxB,WAAW,cAAc;CACzB,YAAY,cAAc;CAC1B,WAAW,cAAc;AAC3B;AAEA,SAAS,gBAAgB,KAAmB;CAC1C,MAAM,OAAO,SAAS,cAAc,GAAG;CACvC,KAAK,OAAO;CACZ,KAAK,MAAM;CACX,SAAS,KAAK,YAAY,IAAI;CAC9B,KAAK,MAAM;CACX,KAAK,OAAO;AACd;AAEA,SAAgB,sBAAsB,SAA+B;CACnE,IAAI,OAAO,WAAW,aACpB;CAGF,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,OAAO,SAAS,cAClB,OAAO,OAAO;EAGhB,IAAI,OAAO,SAAS,cAAc,OAAO,OAAO,QAAQ,UACtD,OAAO,MAAM,OAAO,GAAG;EAGzB,IAAI,OAAO,SAAS,cAAc,OAAO,OAAO,QAAQ,UACtD,gBAAgB,OAAO,GAAG;EAG5B,OAAO,cAAc,IAAI,YAAY,WAAW,OAAO,OAAO,EAAE,QAAQ,OAAO,CAAC,CAAC;CACnF;AACF;AAEA,SAAgB,oBAAoB,OAAsB;CACxD,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,cAAc,IAAI,YAAY,cAAc,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACxF;AAEA,SAAgB,iBAAiB,SAAkC;CACjE,OAAO,MAAM,QAAQ,OAAO,IAAI,QAAQ,OAAO,cAAc,IAAI,CAAC;AACpE;AAEA,SAAgB,eAAe,QAAyC;CACtE,OACE,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,UACV,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,YAAY,OAAO,IAAI;AAEzC"}
1
+ {"version":3,"file":"effects.js","names":[],"sources":["../../resources/js/action/effects.ts"],"sourcesContent":["import { router } from \"@inertiajs/react\";\nimport type { Effect, EffectType } from \"@lattice/lattice/types/generated\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\n\nexport type ActionEffect = Effect;\n\nexport type ActionResponse = {\n data?: Record<string, unknown>;\n effects?: ActionEffect[];\n ok?: boolean;\n};\n\nconst eventNames = {\n toast: LATTICE_EVENT.toast,\n reloadComponent: LATTICE_EVENT.reloadComponent,\n reloadPage: LATTICE_EVENT.reloadPage,\n redirect: LATTICE_EVENT.redirect,\n download: LATTICE_EVENT.download,\n openModal: LATTICE_EVENT.openModal,\n closeModal: LATTICE_EVENT.closeModal,\n resetForm: LATTICE_EVENT.resetForm,\n} satisfies Record<EffectType, string>;\n\nfunction triggerDownload(url: string): void {\n const link = document.createElement(\"a\");\n link.href = url;\n link.rel = \"noopener\";\n document.body.appendChild(link);\n link.click();\n link.remove();\n}\n\nexport function dispatchActionEffects(effects: ActionEffect[]): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n for (const effect of effects) {\n if (effect.type === \"reloadPage\") {\n router.reload();\n }\n\n if (effect.type === \"redirect\") {\n router.visit(effect.url);\n }\n\n if (effect.type === \"download\") {\n triggerDownload(effect.url);\n }\n\n window.dispatchEvent(new CustomEvent(eventNames[effect.type], { detail: effect }));\n }\n}\n\nexport function dispatchActionError(error: unknown): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(new CustomEvent(LATTICE_EVENT.actionError, { detail: { error } }));\n}\n\nexport function getActionEffects(effects: unknown): ActionEffect[] {\n return Array.isArray(effects) ? effects.filter(isActionEffect) : [];\n}\n\nexport function isActionEffect(effect: unknown): effect is ActionEffect {\n return (\n typeof effect === \"object\" &&\n effect !== null &&\n \"type\" in effect &&\n typeof effect.type === \"string\" &&\n Object.hasOwn(eventNames, effect.type)\n );\n}\n"],"mappings":";;;AAYA,IAAM,aAAa;CACjB,OAAO,cAAc;CACrB,iBAAiB,cAAc;CAC/B,YAAY,cAAc;CAC1B,UAAU,cAAc;CACxB,UAAU,cAAc;CACxB,WAAW,cAAc;CACzB,YAAY,cAAc;CAC1B,WAAW,cAAc;AAC3B;AAEA,SAAS,gBAAgB,KAAmB;CAC1C,MAAM,OAAO,SAAS,cAAc,GAAG;CACvC,KAAK,OAAO;CACZ,KAAK,MAAM;CACX,SAAS,KAAK,YAAY,IAAI;CAC9B,KAAK,MAAM;CACX,KAAK,OAAO;AACd;AAEA,SAAgB,sBAAsB,SAA+B;CACnE,IAAI,OAAO,WAAW,aACpB;CAGF,KAAK,MAAM,UAAU,SAAS;EAC5B,IAAI,OAAO,SAAS,cAClB,OAAO,OAAO;EAGhB,IAAI,OAAO,SAAS,YAClB,OAAO,MAAM,OAAO,GAAG;EAGzB,IAAI,OAAO,SAAS,YAClB,gBAAgB,OAAO,GAAG;EAG5B,OAAO,cAAc,IAAI,YAAY,WAAW,OAAO,OAAO,EAAE,QAAQ,OAAO,CAAC,CAAC;CACnF;AACF;AAEA,SAAgB,oBAAoB,OAAsB;CACxD,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,cAAc,IAAI,YAAY,cAAc,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACxF;AAEA,SAAgB,iBAAiB,SAAkC;CACjE,OAAO,MAAM,QAAQ,OAAO,IAAI,QAAQ,OAAO,cAAc,IAAI,CAAC;AACpE;AAEA,SAAgB,eAAe,QAAyC;CACtE,OACE,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,UACV,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,YAAY,OAAO,IAAI;AAEzC"}
@@ -1 +1 @@
1
- export declare const actionComponents: import('../../../core/registry').Plugin;
1
+ export declare const actionComponents: import('../core/registry').Plugin;
@@ -1,5 +1,5 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
- import { RendererComponent } from '../../../../core/types';
2
+ import { RendererComponent } from '../types';
3
3
  import * as React from "react";
4
4
  declare const badgeVariants: (props?: ({
5
5
  variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
@@ -7,13 +7,6 @@ declare const badgeVariants: (props?: ({
7
7
  declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
8
8
  asChild?: boolean;
9
9
  }): React.JSX.Element;
10
- declare module '../../../../core/types' {
11
- interface ComponentProps {
12
- badge: {
13
- label?: string;
14
- };
15
- }
16
- }
17
10
  declare const BadgeComponent: RendererComponent<"badge">;
18
11
  export default BadgeComponent;
19
12
  export { Badge, badgeVariants };
@@ -1,11 +1,10 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getStringProp } from "../props.js";
3
2
  import "react";
4
3
  import { Slot } from "@radix-ui/react-slot";
5
4
  import { cva } from "class-variance-authority";
6
5
  import { jsx } from "react/jsx-runtime";
7
6
  //#region resources/js/core/components/badge.tsx
8
- var badgeVariants = cva("inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden", {
7
+ var badgeVariants = cva("inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden", {
9
8
  variants: { variant: {
10
9
  default: "border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary/90",
11
10
  secondary: "border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary/90",
@@ -24,7 +23,7 @@ function Badge({ className, variant, asChild = false, ...props }) {
24
23
  var BadgeComponent = ({ node }) => /* @__PURE__ */ jsx(Badge, {
25
24
  variant: "secondary",
26
25
  className: "w-fit px-3 py-1",
27
- children: getStringProp(node.props, "label")
26
+ children: node.props.label
28
27
  });
29
28
  //#endregion
30
29
  export { Badge, badgeVariants, BadgeComponent as default };
@@ -1 +1 @@
1
- {"version":3,"file":"badge.js","names":[],"sources":["../../../resources/js/core/components/badge.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary/90\",\n secondary:\n \"border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary/90\",\n destructive:\n \"border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60\",\n outline: \"border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n badge: {\n label?: string;\n };\n }\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge variant=\"secondary\" className=\"w-fit px-3 py-1\">\n {getStringProp(node.props, \"label\")}\n </Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;;AAOA,IAAM,gBAAgB,IACpB,qZACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,WACE;EACF,aACE;EACF,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,UAAU,OACV,GAAG,SACyF;CAG5F,OACE,oBAHW,UAAU,OAAO,QAG5B;EAAM,aAAU;EAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE9F;AAUA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,SAAQ;CAAY,WAAU;WAClC,cAAc,KAAK,OAAO,OAAO;AAC7B,CAAA"}
1
+ {"version":3,"file":"badge.js","names":[],"sources":["../../../resources/js/core/components/badge.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary/90\",\n secondary:\n \"border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary/90\",\n destructive:\n \"border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60\",\n outline: \"border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge variant=\"secondary\" className=\"w-fit px-3 py-1\">\n {node.props.label}\n </Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;AAMA,IAAM,gBAAgB,IACpB,8ZACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,WACE;EACF,aACE;EACF,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,UAAU,OACV,GAAG,SACyF;CAG5F,OACE,oBAHW,UAAU,OAAO,QAG5B;EAAM,aAAU;EAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE9F;AAEA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,SAAQ;CAAY,WAAU;WAClC,KAAK,MAAM;AACP,CAAA"}
@@ -1,23 +1,15 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
- import { RendererComponent } from '../../../../core/types';
2
+ import { RendererComponent } from '../types';
3
+ import { ButtonVariant } from '../../types/generated';
3
4
  import * as React from "react";
4
- export type ButtonVariant = "default" | "destructive" | "ghost" | "link" | "outline" | "secondary";
5
+ export type { ButtonVariant };
5
6
  declare const buttonVariants: (props?: ({
6
- variant?: "link" | "default" | "destructive" | "ghost" | "outline" | "secondary" | null | undefined;
7
+ variant?: "default" | "destructive" | "ghost" | "info" | "link" | "outline" | "secondary" | "success" | null | undefined;
7
8
  size?: "default" | "icon" | "sm" | "lg" | null | undefined;
8
9
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
9
10
  declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
10
11
  asChild?: boolean;
11
12
  }): React.JSX.Element;
12
- declare module '../../../../core/types' {
13
- interface ComponentProps {
14
- button: {
15
- href?: string;
16
- label?: string;
17
- variant?: ButtonVariant;
18
- };
19
- }
20
- }
21
13
  declare const ButtonComponent: RendererComponent<"button">;
22
14
  export default ButtonComponent;
23
15
  export { Button, buttonVariants };
@@ -1,16 +1,17 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getStringProp } from "../props.js";
3
2
  import "react";
4
3
  import { Link } from "@inertiajs/react";
5
4
  import { Slot } from "@radix-ui/react-slot";
6
5
  import { cva } from "class-variance-authority";
7
6
  import { jsx } from "react/jsx-runtime";
8
7
  //#region resources/js/core/components/button.tsx
9
- var buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger", {
8
+ var buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger", {
10
9
  variants: {
11
10
  variant: {
12
11
  default: "bg-lt-primary text-lt-primary-fg shadow-xs hover:bg-lt-primary/90",
13
12
  destructive: "bg-lt-danger text-lt-danger-fg shadow-xs hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40",
13
+ success: "bg-lt-success text-lt-success-fg shadow-xs hover:bg-lt-success/90",
14
+ info: "bg-lt-info text-lt-info-fg shadow-xs hover:bg-lt-info/90",
14
15
  outline: "border border-lt-input bg-lt-bg shadow-xs hover:bg-lt-accent hover:text-lt-accent-fg",
15
16
  secondary: "bg-lt-secondary text-lt-secondary-fg shadow-xs hover:bg-lt-secondary/80",
16
17
  ghost: "hover:bg-lt-accent hover:text-lt-accent-fg",
@@ -39,14 +40,9 @@ function Button({ className, variant, size, asChild = false, ...props }) {
39
40
  ...props
40
41
  });
41
42
  }
42
- function getButtonVariant(variant) {
43
- if (variant === "default" || variant === "destructive" || variant === "outline" || variant === "secondary" || variant === "ghost" || variant === "link") return variant;
44
- return "default";
45
- }
46
43
  var ButtonComponent = ({ node }) => {
47
- const href = getStringProp(node.props, "href");
48
- const label = getStringProp(node.props, "label", "Action");
49
- const variant = getButtonVariant(getStringProp(node.props, "variant", "default"));
44
+ const { href, label } = node.props;
45
+ const variant = node.props.variant ?? "default";
50
46
  if (href) return /* @__PURE__ */ jsx(Button, {
51
47
  asChild: true,
52
48
  variant,
@@ -57,6 +53,7 @@ var ButtonComponent = ({ node }) => {
57
53
  })
58
54
  });
59
55
  return /* @__PURE__ */ jsx(Button, {
56
+ type: node.props.buttonType,
60
57
  variant,
61
58
  size: "lg",
62
59
  children: label
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":[],"sources":["../../../resources/js/core/components/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nexport type ButtonVariant = \"default\" | \"destructive\" | \"ghost\" | \"link\" | \"outline\" | \"secondary\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n variant: {\n default: \"bg-lt-primary text-lt-primary-fg shadow-xs hover:bg-lt-primary/90\",\n destructive:\n \"bg-lt-danger text-lt-danger-fg shadow-xs hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-xs hover:bg-lt-accent hover:text-lt-accent-fg\",\n secondary: \"bg-lt-secondary text-lt-secondary-fg shadow-xs hover:bg-lt-secondary/80\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg\",\n link: \"text-lt-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n button: {\n href?: string;\n label?: string;\n variant?: ButtonVariant;\n };\n }\n}\n\nfunction getButtonVariant(variant: string): ButtonVariant {\n if (\n variant === \"default\" ||\n variant === \"destructive\" ||\n variant === \"outline\" ||\n variant === \"secondary\" ||\n variant === \"ghost\" ||\n variant === \"link\"\n ) {\n return variant;\n }\n\n return \"default\";\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const href = getStringProp(node.props, \"href\");\n const label = getStringProp(node.props, \"label\", \"Action\");\n const variant = getButtonVariant(getStringProp(node.props, \"variant\", \"default\"));\n\n if (href) {\n return (\n <Button asChild variant={variant} size=\"lg\">\n <Link href={href}>{label}</Link>\n </Button>\n );\n }\n\n return (\n <Button variant={variant} size=\"lg\">\n {label}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;;;AAUA,IAAM,iBAAiB,IACrB,wcACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SACE;GACF,WAAW;GACX,OAAO;GACP,MAAM;EACR;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;EACR;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAEA,SAAS,OAAO,EACd,WACA,SACA,MACA,UAAU,OACV,GAAG,SAIA;CAGH,OACE,oBAHW,UAAU,OAAO,UAG5B;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;EAAU,CAAC,CAAC;EAC1D,GAAI;CACL,CAAA;AAEL;AAYA,SAAS,iBAAiB,SAAgC;CACxD,IACE,YAAY,aACZ,YAAY,iBACZ,YAAY,aACZ,YAAY,eACZ,YAAY,WACZ,YAAY,QAEZ,OAAO;CAGT,OAAO;AACT;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,QAAQ,cAAc,KAAK,OAAO,SAAS,QAAQ;CACzD,MAAM,UAAU,iBAAiB,cAAc,KAAK,OAAO,WAAW,SAAS,CAAC;CAEhF,IAAI,MACF,OACE,oBAAC,QAAD;EAAQ,SAAA;EAAiB;EAAS,MAAK;YACrC,oBAAC,MAAD;GAAY;aAAO;EAAY,CAAA;CACzB,CAAA;CAIZ,OACE,oBAAC,QAAD;EAAiB;EAAS,MAAK;YAC5B;CACK,CAAA;AAEZ"}
1
+ {"version":3,"file":"button.js","names":[],"sources":["../../../resources/js/core/components/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport type { ButtonVariant } from \"@lattice/lattice/types/generated\";\n\nexport type { ButtonVariant };\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n variant: {\n default: \"bg-lt-primary text-lt-primary-fg shadow-xs hover:bg-lt-primary/90\",\n destructive:\n \"bg-lt-danger text-lt-danger-fg shadow-xs hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40\",\n success: \"bg-lt-success text-lt-success-fg shadow-xs hover:bg-lt-success/90\",\n info: \"bg-lt-info text-lt-info-fg shadow-xs hover:bg-lt-info/90\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-xs hover:bg-lt-accent hover:text-lt-accent-fg\",\n secondary: \"bg-lt-secondary text-lt-secondary-fg shadow-xs hover:bg-lt-secondary/80\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg\",\n link: \"text-lt-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const { href, label } = node.props;\n const variant = node.props.variant ?? \"default\";\n\n if (href) {\n return (\n <Button asChild variant={variant} size=\"lg\">\n <Link href={href}>{label}</Link>\n </Button>\n );\n }\n\n return (\n <Button type={node.props.buttonType} variant={variant} size=\"lg\">\n {label}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;;AAUA,IAAM,iBAAiB,IACrB,idACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SAAS;GACT,MAAM;GACN,SACE;GACF,WAAW;GACX,OAAO;GACP,MAAM;EACR;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;EACR;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAEA,SAAS,OAAO,EACd,WACA,SACA,MACA,UAAU,OACV,GAAG,SAIA;CAGH,OACE,oBAHW,UAAU,OAAO,UAG5B;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;EAAU,CAAC,CAAC;EAC1D,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,EAAE,MAAM,UAAU,KAAK;CAC7B,MAAM,UAAU,KAAK,MAAM,WAAW;CAEtC,IAAI,MACF,OACE,oBAAC,QAAD;EAAQ,SAAA;EAAiB;EAAS,MAAK;YACrC,oBAAC,MAAD;GAAY;aAAO;EAAY,CAAA;CACzB,CAAA;CAIZ,OACE,oBAAC,QAAD;EAAQ,MAAM,KAAK,MAAM;EAAqB;EAAS,MAAK;YACzD;CACK,CAAA;AAEZ"}
@@ -1,13 +1,5 @@
1
- import { RendererComponent } from '../../../../core/types';
1
+ import { RendererComponent } from '../types';
2
2
  import * as React from "react";
3
- declare module '../../../../core/types' {
4
- interface ComponentProps {
5
- card: {
6
- description?: string;
7
- title?: string;
8
- };
9
- }
10
- }
11
3
  declare function Card({ className, ...props }: React.ComponentProps<"article">): React.JSX.Element;
12
4
  declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
5
  declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
@@ -1,5 +1,4 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getStringProp } from "../props.js";
3
2
  import "react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
5
4
  //#region resources/js/core/components/card.tsx
@@ -46,8 +45,7 @@ function CardFooter({ className, ...props }) {
46
45
  });
47
46
  }
48
47
  var CardComponent = ({ children, node }) => {
49
- const title = getStringProp(node.props, "title");
50
- const description = getStringProp(node.props, "description");
48
+ const { title, description } = node.props;
51
49
  return /* @__PURE__ */ jsxs(Card, {
52
50
  "data-lattice-component": node.id,
53
51
  children: [(title || description) && /* @__PURE__ */ jsxs(CardHeader, { children: [title && /* @__PURE__ */ jsx(CardTitle, { children: title }), description && /* @__PURE__ */ jsx(CardDescription, { children: description })] }), children && /* @__PURE__ */ jsx(CardContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","names":[],"sources":["../../../resources/js/core/components/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport { 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 card: {\n description?: string;\n title?: string;\n };\n }\n}\n\nfunction Card({ className, ...props }: React.ComponentProps<\"article\">) {\n return (\n <article\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 px-6\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-lt-muted-fg\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"px-6\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-footer\" className={cn(\"flex items-center px-6\", className)} {...props} />\n );\n}\n\nconst CardComponent: RendererComponent<\"card\"> = ({ children, node }) => {\n const title = getStringProp(node.props, \"title\");\n const description = getStringProp(node.props, \"description\");\n\n return (\n <Card data-lattice-component={node.id}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n {children && <CardContent className=\"flex flex-col gap-6\">{children}</CardContent>}\n </Card>\n );\n};\n\nexport default CardComponent;\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":";;;;;AAcA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0C;CACtE,OACE,oBAAC,WAAD;EACE,aAAU;EACV,WAAW,GACT,0GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,QAAQ,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrF;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,0BAA0B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEjG;AAEA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,QAAQ,cAAc,KAAK,OAAO,OAAO;CAC/C,MAAM,cAAc,cAAc,KAAK,OAAO,aAAa;CAE3D,OACE,qBAAC,MAAD;EAAM,0BAAwB,KAAK;YAAnC,EACI,SAAS,gBACT,qBAAC,YAAD,EAAA,UAAA,CACG,SAAS,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GACtC,eAAe,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,CACrD,EAAA,CAAA,GAEb,YAAY,oBAAC,aAAD;GAAa,WAAU;GAAuB;EAAsB,CAAA,CAC7E;;AAEV"}
1
+ {"version":3,"file":"card.js","names":[],"sources":["../../../resources/js/core/components/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"article\">) {\n return (\n <article\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-6 text-lt-surface-fg shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 px-6\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-lt-muted-fg\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"px-6\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-footer\" className={cn(\"flex items-center px-6\", className)} {...props} />\n );\n}\n\nconst CardComponent: RendererComponent<\"card\"> = ({ children, node }) => {\n const { title, description } = node.props;\n\n return (\n <Card data-lattice-component={node.id}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\n </CardHeader>\n )}\n {children && <CardContent className=\"flex flex-col gap-6\">{children}</CardContent>}\n </Card>\n );\n};\n\nexport default CardComponent;\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":";;;;AAIA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0C;CACtE,OACE,oBAAC,WAAD;EACE,aAAU;EACV,WAAW,GACT,0GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,QAAQ,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrF;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,0BAA0B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEjG;AAEA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,EAAE,OAAO,gBAAgB,KAAK;CAEpC,OACE,qBAAC,MAAD;EAAM,0BAAwB,KAAK;YAAnC,EACI,SAAS,gBACT,qBAAC,YAAD,EAAA,UAAA,CACG,SAAS,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GACtC,eAAe,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,CACrD,EAAA,CAAA,GAEb,YAAY,oBAAC,aAAD;GAAa,WAAU;GAAuB;EAAsB,CAAA,CAC7E;;AAEV"}
@@ -1,11 +1,10 @@
1
- import { ComponentProps } from 'react';
2
- import { Button } from './button';
1
+ import { ButtonVariant } from '../../types/generated';
3
2
  export declare function ConfirmDialog({ title, description, confirmLabel, cancelLabel, confirmVariant, processing, confirmDisabled, onConfirm, onCancel, }: {
4
3
  title: string;
5
4
  description?: string;
6
5
  confirmLabel: string;
7
6
  cancelLabel?: string;
8
- confirmVariant?: ComponentProps<typeof Button>["variant"];
7
+ confirmVariant?: ButtonVariant;
9
8
  processing?: boolean;
10
9
  confirmDisabled?: boolean;
11
10
  onConfirm: () => void;
@@ -1,24 +1,28 @@
1
1
  import { Button } from "./button.js";
2
2
  import { Spinner } from "./spinner.js";
3
- import { useId } from "react";
4
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
+ import * as Dialog from "@radix-ui/react-dialog";
5
5
  //#region resources/js/core/components/confirm-dialog.tsx
6
6
  function ConfirmDialog({ title, description, confirmLabel, cancelLabel = "Cancel", confirmVariant = "default", processing = false, confirmDisabled = false, onConfirm, onCancel }) {
7
- const titleId = useId();
8
- return /* @__PURE__ */ jsx("div", {
9
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
10
- children: /* @__PURE__ */ jsxs("div", {
11
- "aria-labelledby": titleId,
12
- "aria-modal": "true",
13
- className: "w-full max-w-md rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg",
14
- role: "dialog",
7
+ const blockWhileProcessing = (event) => {
8
+ if (processing) event.preventDefault();
9
+ };
10
+ return /* @__PURE__ */ jsx(Dialog.Root, {
11
+ open: true,
12
+ onOpenChange: (open) => {
13
+ if (!open) onCancel();
14
+ },
15
+ children: /* @__PURE__ */ jsxs(Dialog.Portal, { children: [/* @__PURE__ */ jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }), /* @__PURE__ */ jsxs(Dialog.Content, {
16
+ ...description ? {} : { "aria-describedby": void 0 },
17
+ className: "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg",
18
+ onEscapeKeyDown: blockWhileProcessing,
19
+ onInteractOutside: blockWhileProcessing,
15
20
  children: [/* @__PURE__ */ jsxs("div", {
16
21
  className: "grid gap-2",
17
- children: [/* @__PURE__ */ jsx("h2", {
22
+ children: [/* @__PURE__ */ jsx(Dialog.Title, {
18
23
  className: "text-lg font-semibold leading-none tracking-tight",
19
- id: titleId,
20
24
  children: title
21
- }), description && /* @__PURE__ */ jsx("p", {
25
+ }), description && /* @__PURE__ */ jsx(Dialog.Description, {
22
26
  className: "text-sm text-lt-muted-fg",
23
27
  children: description
24
28
  })]
@@ -27,18 +31,20 @@ function ConfirmDialog({ title, description, confirmLabel, cancelLabel = "Cancel
27
31
  children: [/* @__PURE__ */ jsx(Button, {
28
32
  type: "button",
29
33
  variant: "outline",
34
+ "data-test": "confirm-cancel",
30
35
  disabled: processing,
31
36
  onClick: onCancel,
32
37
  children: cancelLabel
33
38
  }), /* @__PURE__ */ jsxs(Button, {
34
39
  type: "button",
35
40
  variant: confirmVariant,
41
+ "data-test": "confirm-accept",
36
42
  disabled: processing || confirmDisabled,
37
43
  onClick: onConfirm,
38
44
  children: [processing && /* @__PURE__ */ jsx(Spinner, {}), confirmLabel]
39
45
  })]
40
46
  })]
41
- })
47
+ })] })
42
48
  });
43
49
  }
44
50
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-dialog.js","names":[],"sources":["../../../resources/js/core/components/confirm-dialog.tsx"],"sourcesContent":["import { type ComponentProps, useId } from \"react\";\nimport { Button } from \"./button\";\nimport { Spinner } from \"./spinner\";\n\nexport function ConfirmDialog({\n title,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n confirmVariant = \"default\",\n processing = false,\n confirmDisabled = false,\n onConfirm,\n onCancel,\n}: {\n title: string;\n description?: string;\n confirmLabel: string;\n cancelLabel?: string;\n confirmVariant?: ComponentProps<typeof Button>[\"variant\"];\n processing?: boolean;\n confirmDisabled?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const titleId = useId();\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-labelledby={titleId}\n aria-modal=\"true\"\n className=\"w-full max-w-md rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg\"\n role=\"dialog\"\n >\n <div className=\"grid gap-2\">\n <h2 className=\"text-lg font-semibold leading-none tracking-tight\" id={titleId}>\n {title}\n </h2>\n {description && <p className=\"text-sm text-lt-muted-fg\">{description}</p>}\n </div>\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\" disabled={processing} onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button\n type=\"button\"\n variant={confirmVariant}\n disabled={processing || confirmDisabled}\n onClick={onConfirm}\n >\n {processing && <Spinner />}\n {confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAIA,SAAgB,cAAc,EAC5B,OACA,aACA,cACA,cAAc,UACd,iBAAiB,WACjB,aAAa,OACb,kBAAkB,OAClB,WACA,YAWC;CACD,MAAM,UAAU,MAAM;CAEtB,OACE,oBAAC,OAAD;EAAK,WAAU;YACb,qBAAC,OAAD;GACE,mBAAiB;GACjB,cAAW;GACX,WAAU;GACV,MAAK;aAJP,CAME,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,MAAD;KAAI,WAAU;KAAoD,IAAI;eACnE;IACC,CAAA,GACH,eAAe,oBAAC,KAAD;KAAG,WAAU;eAA4B;IAAe,CAAA,CACrE;OACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KAAQ,MAAK;KAAS,SAAQ;KAAU,UAAU;KAAY,SAAS;eACpE;IACK,CAAA,GACR,qBAAC,QAAD;KACE,MAAK;KACL,SAAS;KACT,UAAU,cAAc;KACxB,SAAS;eAJX,CAMG,cAAc,oBAAC,SAAD,CAAU,CAAA,GACxB,YACK;MACL;KACF;;CACF,CAAA;AAET"}
1
+ {"version":3,"file":"confirm-dialog.js","names":[],"sources":["../../../resources/js/core/components/confirm-dialog.tsx"],"sourcesContent":["import * as Dialog from \"@radix-ui/react-dialog\";\nimport type { ButtonVariant } from \"@lattice/lattice/types/generated\";\nimport { Button } from \"./button\";\nimport { Spinner } from \"./spinner\";\n\nexport function ConfirmDialog({\n title,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n confirmVariant = \"default\",\n processing = false,\n confirmDisabled = false,\n onConfirm,\n onCancel,\n}: {\n title: string;\n description?: string;\n confirmLabel: string;\n cancelLabel?: string;\n confirmVariant?: ButtonVariant;\n processing?: boolean;\n confirmDisabled?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const blockWhileProcessing = (event: Event): void => {\n if (processing) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n open\n onOpenChange={(open) => {\n if (!open) {\n onCancel();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50\" />\n <Dialog.Content\n {...(description ? {} : { \"aria-describedby\": undefined })}\n className=\"fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg\"\n onEscapeKeyDown={blockWhileProcessing}\n onInteractOutside={blockWhileProcessing}\n >\n <div className=\"grid gap-2\">\n <Dialog.Title className=\"text-lg font-semibold leading-none tracking-tight\">\n {title}\n </Dialog.Title>\n {description && (\n <Dialog.Description className=\"text-sm text-lt-muted-fg\">\n {description}\n </Dialog.Description>\n )}\n </div>\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n data-test=\"confirm-cancel\"\n disabled={processing}\n onClick={onCancel}\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"button\"\n variant={confirmVariant}\n data-test=\"confirm-accept\"\n disabled={processing || confirmDisabled}\n onClick={onConfirm}\n >\n {processing && <Spinner />}\n {confirmLabel}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,cAAc,EAC5B,OACA,aACA,cACA,cAAc,UACd,iBAAiB,WACjB,aAAa,OACb,kBAAkB,OAClB,WACA,YAWC;CACD,MAAM,wBAAwB,UAAuB;EACnD,IAAI,YACF,MAAM,eAAe;CAEzB;CAEA,OACE,oBAAC,OAAO,MAAR;EACE,MAAA;EACA,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,SAAS;EAEb;YAEA,qBAAC,OAAO,QAAR,EAAA,UAAA,CACE,oBAAC,OAAO,SAAR,EAAgB,WAAU,iCAAkC,CAAA,GAC5D,qBAAC,OAAO,SAAR;GACE,GAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,KAAA,EAAU;GACxD,WAAU;GACV,iBAAiB;GACjB,mBAAmB;aAJrB,CAME,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,OAAO,OAAR;KAAc,WAAU;eACrB;IACW,CAAA,GACb,eACC,oBAAC,OAAO,aAAR;KAAoB,WAAU;eAC3B;IACiB,CAAA,CAEnB;OACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,aAAU;KACV,UAAU;KACV,SAAS;eAER;IACK,CAAA,GACR,qBAAC,QAAD;KACE,MAAK;KACL,SAAS;KACT,aAAU;KACV,UAAU,cAAc;KACxB,SAAS;eALX,CAOG,cAAc,oBAAC,SAAD,CAAU,CAAA,GACxB,YACK;MACL;KACS;IACH,EAAA,CAAA;CACJ,CAAA;AAEjB"}
@@ -1,12 +1,3 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare module '../../../../core/types' {
3
- interface ComponentProps {
4
- fragment: {
5
- endpoint?: string;
6
- ref?: string;
7
- lazy?: boolean;
8
- };
9
- }
10
- }
1
+ import { RendererComponent } from '../types';
11
2
  declare const FragmentComponent: RendererComponent<"fragment">;
12
3
  export default FragmentComponent;
@@ -1,5 +1,4 @@
1
1
  import { withRefHeader } from "../component-ref.js";
2
- import { getStringProp } from "../props.js";
3
2
  import { LATTICE_EVENT } from "../../events/event-names.js";
4
3
  import { Renderer, useRendererContext } from "../renderer.js";
5
4
  import { useCallback, useEffect, useState } from "react";
@@ -10,10 +9,10 @@ function getComponents(value) {
10
9
  return value.filter((node) => typeof node === "object" && node !== null && "type" in node && typeof node.type === "string");
11
10
  }
12
11
  var FragmentComponent = ({ node }) => {
13
- const endpoint = getStringProp(node.props, "endpoint");
14
- const isLazy = node.props?.lazy === true;
15
- const componentRef = getStringProp(node.props, "ref");
16
- const [components, setComponents] = useState(() => node.children ?? []);
12
+ const endpoint = node.props.endpoint ?? "";
13
+ const isLazy = node.props.lazy === true;
14
+ const componentRef = node.props.ref ?? "";
15
+ const [components, setComponents] = useState(() => node.schema ?? []);
17
16
  const [hasLoaded, setHasLoaded] = useState(!isLazy);
18
17
  const [processing, setProcessing] = useState(isLazy && endpoint !== "");
19
18
  const { fallback, missingComponent, registry } = useRendererContext();
@@ -24,7 +23,7 @@ var FragmentComponent = ({ node }) => {
24
23
  setComponents(getComponents((await (await fetch(endpoint, { headers: {
25
24
  Accept: "application/json",
26
25
  ...withRefHeader(componentRef)
27
- } })).json()).components));
26
+ } })).json()).schema));
28
27
  setHasLoaded(true);
29
28
  } finally {
30
29
  setProcessing(false);
@@ -1 +1 @@
1
- {"version":3,"file":"fragment.js","names":[],"sources":["../../../resources/js/core/components/fragment.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport { Renderer, useRendererContext } from \"@lattice/lattice/core/renderer\";\nimport type { Node, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { LATTICE_EVENT, type ReloadComponentEvent } from \"@lattice/lattice/events/event-names\";\n\ntype FragmentResponse = {\n components?: Node[];\n};\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n fragment: {\n endpoint?: string;\n ref?: string;\n lazy?: boolean;\n };\n }\n}\n\nfunction getComponents(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 FragmentComponent: RendererComponent<\"fragment\"> = ({ node }) => {\n const endpoint = getStringProp(node.props, \"endpoint\");\n const isLazy = node.props?.lazy === true;\n const componentRef = getStringProp(node.props, \"ref\");\n const [components, setComponents] = useState(() => node.children ?? []);\n const [hasLoaded, setHasLoaded] = useState(!isLazy);\n const [processing, setProcessing] = useState(isLazy && endpoint !== \"\");\n const { fallback, missingComponent, registry } = useRendererContext();\n\n const load = useCallback(async (): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n setProcessing(true);\n\n try {\n const response = await fetch(endpoint, {\n headers: {\n Accept: \"application/json\",\n ...withRefHeader(componentRef),\n },\n });\n const result = (await response.json()) as FragmentResponse;\n\n setComponents(getComponents(result.components));\n setHasLoaded(true);\n } finally {\n setProcessing(false);\n }\n }, [endpoint, componentRef]);\n\n useEffect(() => {\n if (!isLazy || hasLoaded) {\n return;\n }\n\n void load();\n }, [hasLoaded, isLazy, load]);\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();\n }\n\n window.addEventListener(LATTICE_EVENT.reloadComponent, reload);\n\n return () => window.removeEventListener(LATTICE_EVENT.reloadComponent, reload);\n }, [load, node.id]);\n\n return (\n <div data-lattice-fragment={node.id}>\n {processing && components.length === 0 ? (\n <div className=\"h-16 animate-pulse rounded-lt-sm bg-lt-muted\" />\n ) : (\n <Renderer\n fallback={fallback}\n missingComponent={missingComponent}\n nodes={components}\n registry={registry}\n />\n )}\n </div>\n );\n};\n\nexport default FragmentComponent;\n"],"mappings":";;;;;;;AAqBA,SAAS,cAAc,OAAwB;CAC7C,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,qBAAoD,EAAE,WAAW;CACrE,MAAM,WAAW,cAAc,KAAK,OAAO,UAAU;CACrD,MAAM,SAAS,KAAK,OAAO,SAAS;CACpC,MAAM,eAAe,cAAc,KAAK,OAAO,KAAK;CACpD,MAAM,CAAC,YAAY,iBAAiB,eAAe,KAAK,YAAY,CAAC,CAAC;CACtE,MAAM,CAAC,WAAW,gBAAgB,SAAS,CAAC,MAAM;CAClD,MAAM,CAAC,YAAY,iBAAiB,SAAS,UAAU,aAAa,EAAE;CACtE,MAAM,EAAE,UAAU,kBAAkB,aAAa,mBAAmB;CAEpE,MAAM,OAAO,YAAY,YAA2B;EAClD,IAAI,CAAC,UACH;EAGF,cAAc,IAAI;EAElB,IAAI;GASF,cAAc,eAAc,OAFN,MANC,MAAM,UAAU,EACrC,SAAS;IACP,QAAQ;IACR,GAAG,cAAc,YAAY;GAC/B,EACF,CAAC,GAC8B,KAAK,GAED,UAAU,CAAC;GAC9C,aAAa,IAAI;EACnB,UAAU;GACR,cAAc,KAAK;EACrB;CACF,GAAG,CAAC,UAAU,YAAY,CAAC;CAE3B,gBAAgB;EACd,IAAI,CAAC,UAAU,WACb;EAGF,KAAU;CACZ,GAAG;EAAC;EAAW;EAAQ;CAAI,CAAC;CAE5B,gBAAgB;EACd,SAAS,OAAO,OAAoB;GAGlC,IAFgB,MAA+B,QAEnC,cAAc,KAAK,IAC7B;GAGF,KAAU;EACZ;EAEA,OAAO,iBAAiB,cAAc,iBAAiB,MAAM;EAE7D,aAAa,OAAO,oBAAoB,cAAc,iBAAiB,MAAM;CAC/E,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC;CAElB,OACE,oBAAC,OAAD;EAAK,yBAAuB,KAAK;YAC9B,cAAc,WAAW,WAAW,IACnC,oBAAC,OAAD,EAAK,WAAU,+CAAgD,CAAA,IAE/D,oBAAC,UAAD;GACY;GACQ;GAClB,OAAO;GACG;EACX,CAAA;CAEA,CAAA;AAET"}
1
+ {"version":3,"file":"fragment.js","names":[],"sources":["../../../resources/js/core/components/fragment.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { Renderer, useRendererContext } from \"@lattice/lattice/core/renderer\";\nimport type { Node, RendererComponent, Schema } from \"@lattice/lattice/core/types\";\nimport { LATTICE_EVENT, type ReloadComponentEvent } from \"@lattice/lattice/events/event-names\";\n\ntype FragmentResponse = {\n schema?: Schema;\n};\n\nfunction getComponents(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 FragmentComponent: RendererComponent<\"fragment\"> = ({ node }) => {\n const endpoint = node.props.endpoint ?? \"\";\n const isLazy = node.props.lazy === true;\n const componentRef = node.props.ref ?? \"\";\n const [components, setComponents] = useState(() => node.schema ?? []);\n const [hasLoaded, setHasLoaded] = useState(!isLazy);\n const [processing, setProcessing] = useState(isLazy && endpoint !== \"\");\n const { fallback, missingComponent, registry } = useRendererContext();\n\n const load = useCallback(async (): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n setProcessing(true);\n\n try {\n const response = await fetch(endpoint, {\n headers: {\n Accept: \"application/json\",\n ...withRefHeader(componentRef),\n },\n });\n const result = (await response.json()) as FragmentResponse;\n\n setComponents(getComponents(result.schema));\n setHasLoaded(true);\n } finally {\n setProcessing(false);\n }\n }, [endpoint, componentRef]);\n\n useEffect(() => {\n if (!isLazy || hasLoaded) {\n return;\n }\n\n void load();\n }, [hasLoaded, isLazy, load]);\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();\n }\n\n window.addEventListener(LATTICE_EVENT.reloadComponent, reload);\n\n return () => window.removeEventListener(LATTICE_EVENT.reloadComponent, reload);\n }, [load, node.id]);\n\n return (\n <div data-lattice-fragment={node.id}>\n {processing && components.length === 0 ? (\n <div className=\"h-16 animate-pulse rounded-lt-sm bg-lt-muted\" />\n ) : (\n <Renderer\n fallback={fallback}\n missingComponent={missingComponent}\n nodes={components}\n registry={registry}\n />\n )}\n </div>\n );\n};\n\nexport default FragmentComponent;\n"],"mappings":";;;;;;AAUA,SAAS,cAAc,OAAwB;CAC7C,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,qBAAoD,EAAE,WAAW;CACrE,MAAM,WAAW,KAAK,MAAM,YAAY;CACxC,MAAM,SAAS,KAAK,MAAM,SAAS;CACnC,MAAM,eAAe,KAAK,MAAM,OAAO;CACvC,MAAM,CAAC,YAAY,iBAAiB,eAAe,KAAK,UAAU,CAAC,CAAC;CACpE,MAAM,CAAC,WAAW,gBAAgB,SAAS,CAAC,MAAM;CAClD,MAAM,CAAC,YAAY,iBAAiB,SAAS,UAAU,aAAa,EAAE;CACtE,MAAM,EAAE,UAAU,kBAAkB,aAAa,mBAAmB;CAEpE,MAAM,OAAO,YAAY,YAA2B;EAClD,IAAI,CAAC,UACH;EAGF,cAAc,IAAI;EAElB,IAAI;GASF,cAAc,eAAc,OAFN,MANC,MAAM,UAAU,EACrC,SAAS;IACP,QAAQ;IACR,GAAG,cAAc,YAAY;GAC/B,EACF,CAAC,GAC8B,KAAK,GAED,MAAM,CAAC;GAC1C,aAAa,IAAI;EACnB,UAAU;GACR,cAAc,KAAK;EACrB;CACF,GAAG,CAAC,UAAU,YAAY,CAAC;CAE3B,gBAAgB;EACd,IAAI,CAAC,UAAU,WACb;EAGF,KAAU;CACZ,GAAG;EAAC;EAAW;EAAQ;CAAI,CAAC;CAE5B,gBAAgB;EACd,SAAS,OAAO,OAAoB;GAGlC,IAFgB,MAA+B,QAEnC,cAAc,KAAK,IAC7B;GAGF,KAAU;EACZ;EAEA,OAAO,iBAAiB,cAAc,iBAAiB,MAAM;EAE7D,aAAa,OAAO,oBAAoB,cAAc,iBAAiB,MAAM;CAC/E,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC;CAElB,OACE,oBAAC,OAAD;EAAK,yBAAuB,KAAK;YAC9B,cAAc,WAAW,WAAW,IACnC,oBAAC,OAAD,EAAK,WAAU,+CAAgD,CAAA,IAE/D,oBAAC,UAAD;GACY;GACQ;GAClB,OAAO;GACG;EACX,CAAA;CAEA,CAAA;AAET"}
@@ -1,10 +1,3 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare module '../../../../core/types' {
3
- interface ComponentProps {
4
- grid: {
5
- columns?: number;
6
- };
7
- }
8
- }
1
+ import { RendererComponent } from '../types';
9
2
  declare const GridComponent: RendererComponent<"grid">;
10
3
  export default GridComponent;
@@ -1,9 +1,8 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getNumberProp } from "../props.js";
3
2
  import { jsx } from "react/jsx-runtime";
4
3
  //#region resources/js/core/components/grid.tsx
5
4
  var GridComponent = ({ children, node }) => {
6
- const columns = Math.min(Math.max(getNumberProp(node.props, "columns", 1), 1), 4);
5
+ const columns = Math.min(Math.max(node.props.columns ?? 1, 1), 4);
7
6
  return /* @__PURE__ */ jsx("div", {
8
7
  "data-lattice-component": node.id,
9
8
  className: cn("grid gap-x-4 gap-y-6", columns >= 2 && "md:grid-cols-2", columns >= 3 && "lg:grid-cols-3", columns >= 4 && "xl:grid-cols-4"),
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","names":[],"sources":["../../../resources/js/core/components/grid.tsx"],"sourcesContent":["import { getNumberProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n grid: {\n columns?: number;\n };\n }\n}\n\nconst GridComponent: RendererComponent<\"grid\"> = ({ children, node }) => {\n const columns = Math.min(Math.max(getNumberProp(node.props, \"columns\", 1), 1), 4);\n\n return (\n <div\n data-lattice-component={node.id}\n className={cn(\n \"grid gap-x-4 gap-y-6\",\n columns >= 2 && \"md:grid-cols-2\",\n columns >= 3 && \"lg:grid-cols-3\",\n columns >= 4 && \"xl:grid-cols-4\",\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default GridComponent;\n"],"mappings":";;;;AAYA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,cAAc,KAAK,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;CAEhF,OACE,oBAAC,OAAD;EACE,0BAAwB,KAAK;EAC7B,WAAW,GACT,wBACA,WAAW,KAAK,kBAChB,WAAW,KAAK,kBAChB,WAAW,KAAK,gBAClB;EAEC;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"grid.js","names":[],"sources":["../../../resources/js/core/components/grid.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nconst GridComponent: RendererComponent<\"grid\"> = ({ children, node }) => {\n const columns = Math.min(Math.max(node.props.columns ?? 1, 1), 4);\n\n return (\n <div\n data-lattice-component={node.id}\n className={cn(\n \"grid gap-x-4 gap-y-6\",\n columns >= 2 && \"md:grid-cols-2\",\n columns >= 3 && \"lg:grid-cols-3\",\n columns >= 4 && \"xl:grid-cols-4\",\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default GridComponent;\n"],"mappings":";;;AAGA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC;CAEhE,OACE,oBAAC,OAAD;EACE,0BAAwB,KAAK;EAC7B,WAAW,GACT,wBACA,WAAW,KAAK,kBAChB,WAAW,KAAK,kBAChB,WAAW,KAAK,gBAClB;EAEC;CACE,CAAA;AAET"}
@@ -1,11 +1,3 @@
1
- import { RendererComponent } from '../../../../core/types';
2
- declare module '../../../../core/types' {
3
- interface ComponentProps {
4
- heading: {
5
- level?: number;
6
- text?: string;
7
- };
8
- }
9
- }
1
+ import { RendererComponent } from '../types';
10
2
  declare const HeadingComponent: RendererComponent<"heading">;
11
3
  export default HeadingComponent;
@@ -1,10 +1,9 @@
1
1
  import { cn } from "../../lib/utils.js";
2
- import { getNumberProp, getStringProp } from "../props.js";
3
2
  import { jsx } from "react/jsx-runtime";
4
3
  //#region resources/js/core/components/heading.tsx
5
4
  var HeadingComponent = ({ node }) => {
6
- const text = getStringProp(node.props, "text");
7
- const level = Math.min(Math.max(getNumberProp(node.props, "level", 1), 1), 6);
5
+ const { text } = node.props;
6
+ const level = Math.min(Math.max(node.props.level, 1), 6);
8
7
  const className = cn("max-w-3xl font-semibold tracking-normal text-balance text-lt-fg", level === 1 && "text-4xl leading-tight sm:text-5xl", level === 2 && "text-2xl", level > 2 && "text-lg");
9
8
  switch (level) {
10
9
  case 1: return /* @__PURE__ */ jsx("h1", {
@@ -1 +1 @@
1
- {"version":3,"file":"heading.js","names":[],"sources":["../../../resources/js/core/components/heading.tsx"],"sourcesContent":["import { getNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n heading: {\n level?: number;\n text?: string;\n };\n }\n}\n\nconst HeadingComponent: RendererComponent<\"heading\"> = ({ node }) => {\n const text = getStringProp(node.props, \"text\");\n const level = Math.min(Math.max(getNumberProp(node.props, \"level\", 1), 1), 6);\n const className = cn(\n \"max-w-3xl font-semibold tracking-normal text-balance text-lt-fg\",\n level === 1 && \"text-4xl leading-tight sm:text-5xl\",\n level === 2 && \"text-2xl\",\n level > 2 && \"text-lg\",\n );\n\n switch (level) {\n case 1:\n return <h1 className={className}>{text}</h1>;\n case 2:\n return <h2 className={className}>{text}</h2>;\n case 3:\n return <h3 className={className}>{text}</h3>;\n case 4:\n return <h4 className={className}>{text}</h4>;\n case 5:\n return <h5 className={className}>{text}</h5>;\n default:\n return <h6 className={className}>{text}</h6>;\n }\n};\n\nexport default HeadingComponent;\n"],"mappings":";;;;AAaA,IAAM,oBAAkD,EAAE,WAAW;CACnE,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,cAAc,KAAK,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;CAC5E,MAAM,YAAY,GAChB,mEACA,UAAU,KAAK,sCACf,UAAU,KAAK,YACf,QAAQ,KAAK,SACf;CAEA,QAAQ,OAAR;EACE,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,SACE,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;CAC/C;AACF"}
1
+ {"version":3,"file":"heading.js","names":[],"sources":["../../../resources/js/core/components/heading.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nconst HeadingComponent: RendererComponent<\"heading\"> = ({ node }) => {\n const { text } = node.props;\n const level = Math.min(Math.max(node.props.level, 1), 6);\n const className = cn(\n \"max-w-3xl font-semibold tracking-normal text-balance text-lt-fg\",\n level === 1 && \"text-4xl leading-tight sm:text-5xl\",\n level === 2 && \"text-2xl\",\n level > 2 && \"text-lg\",\n );\n\n switch (level) {\n case 1:\n return <h1 className={className}>{text}</h1>;\n case 2:\n return <h2 className={className}>{text}</h2>;\n case 3:\n return <h3 className={className}>{text}</h3>;\n case 4:\n return <h4 className={className}>{text}</h4>;\n case 5:\n return <h5 className={className}>{text}</h5>;\n default:\n return <h6 className={className}>{text}</h6>;\n }\n};\n\nexport default HeadingComponent;\n"],"mappings":";;;AAGA,IAAM,oBAAkD,EAAE,WAAW;CACnE,MAAM,EAAE,SAAS,KAAK;CACtB,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,OAAO,CAAC,GAAG,CAAC;CACvD,MAAM,YAAY,GAChB,mEACA,UAAU,KAAK,sCACf,UAAU,KAAK,YACf,QAAQ,KAAK,SACf;CAEA,QAAQ,OAAR;EACE,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;EAC7C,SACE,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAS,CAAA;CAC/C;AACF"}
@@ -0,0 +1,3 @@
1
+ import { RendererComponent } from '../types';
2
+ declare const IconComponent: RendererComponent<"icon">;
3
+ export default IconComponent;