@lattice-php/lattice 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +3 -1
  2. package/dist/action/components/action-form.d.ts +24 -0
  3. package/dist/action/components/action-form.js +238 -0
  4. package/dist/action/components/action-form.js.map +1 -0
  5. package/dist/action/components/action-group.d.ts +1 -8
  6. package/dist/action/components/action-group.js +34 -64
  7. package/dist/action/components/action-group.js.map +1 -1
  8. package/dist/action/components/action-menu-context.d.ts +6 -0
  9. package/dist/action/components/action-menu-context.js +18 -0
  10. package/dist/action/components/action-menu-context.js.map +1 -0
  11. package/dist/action/components/action.d.ts +1 -24
  12. package/dist/action/components/action.js +73 -51
  13. package/dist/action/components/action.js.map +1 -1
  14. package/dist/action/index.d.ts +1 -1
  15. package/dist/action/index.js.map +1 -1
  16. package/dist/appearance/index.js +7 -2
  17. package/dist/appearance/index.js.map +1 -1
  18. package/dist/chat/components/chat-box.d.ts +3 -0
  19. package/dist/chat/components/chat-box.js +53 -0
  20. package/dist/chat/components/chat-box.js.map +1 -0
  21. package/dist/chat/components/message-list.d.ts +5 -0
  22. package/dist/chat/components/message-list.js +22 -0
  23. package/dist/chat/components/message-list.js.map +1 -0
  24. package/dist/chat/components/message.d.ts +5 -0
  25. package/dist/chat/components/message.js +20 -0
  26. package/dist/chat/components/message.js.map +1 -0
  27. package/dist/chat/components/prompt-input.d.ts +8 -0
  28. package/dist/chat/components/prompt-input.js +49 -0
  29. package/dist/chat/components/prompt-input.js.map +1 -0
  30. package/dist/chat/index.d.ts +1 -0
  31. package/dist/chat/index.js +15 -0
  32. package/dist/chat/index.js.map +1 -0
  33. package/dist/chat/parts/text.d.ts +3 -0
  34. package/dist/chat/parts/text.js +12 -0
  35. package/dist/chat/parts/text.js.map +1 -0
  36. package/dist/chat/parts/tool-call.d.ts +3 -0
  37. package/dist/chat/parts/tool-call.js +20 -0
  38. package/dist/chat/parts/tool-call.js.map +1 -0
  39. package/dist/chat/transport.d.ts +2 -0
  40. package/dist/chat/transport.js +47 -0
  41. package/dist/chat/transport.js.map +1 -0
  42. package/dist/chat/types.d.ts +39 -0
  43. package/dist/chat/use-chat.d.ts +15 -0
  44. package/dist/chat/use-chat.js +161 -0
  45. package/dist/chat/use-chat.js.map +1 -0
  46. package/dist/core/api.d.ts +18 -0
  47. package/dist/core/api.js +51 -0
  48. package/dist/core/api.js.map +1 -0
  49. package/dist/core/collapsed-context.d.ts +2 -0
  50. package/dist/core/collapsed-context.js +10 -0
  51. package/dist/core/collapsed-context.js.map +1 -0
  52. package/dist/core/column-sizing.d.ts +17 -0
  53. package/dist/core/column-sizing.js +61 -0
  54. package/dist/core/column-sizing.js.map +1 -0
  55. package/dist/core/components/badge.d.ts +1 -8
  56. package/dist/core/components/badge.js +2 -3
  57. package/dist/core/components/badge.js.map +1 -1
  58. package/dist/core/components/button.d.ts +5 -13
  59. package/dist/core/components/button.js +10 -9
  60. package/dist/core/components/button.js.map +1 -1
  61. package/dist/core/components/card.d.ts +1 -9
  62. package/dist/core/components/card.js +1 -3
  63. package/dist/core/components/card.js.map +1 -1
  64. package/dist/core/components/chart.d.ts +3 -0
  65. package/dist/core/components/chart.js +175 -0
  66. package/dist/core/components/chart.js.map +1 -0
  67. package/dist/{form/components/base → core/components}/checkbox.js +7 -4
  68. package/dist/core/components/checkbox.js.map +1 -0
  69. package/dist/core/components/combobox.d.ts +33 -0
  70. package/dist/core/components/combobox.js +99 -0
  71. package/dist/core/components/combobox.js.map +1 -0
  72. package/dist/core/components/confirm-dialog.d.ts +2 -3
  73. package/dist/core/components/confirm-dialog.js +17 -17
  74. package/dist/core/components/confirm-dialog.js.map +1 -1
  75. package/dist/core/components/control.d.ts +13 -0
  76. package/dist/core/components/control.js +27 -0
  77. package/dist/core/components/control.js.map +1 -0
  78. package/dist/core/components/dialog.d.ts +19 -0
  79. package/dist/core/components/dialog.js +75 -0
  80. package/dist/core/components/dialog.js.map +1 -0
  81. package/dist/core/components/dropdown-menu.d.ts +14 -0
  82. package/dist/core/components/dropdown-menu.js +42 -0
  83. package/dist/core/components/dropdown-menu.js.map +1 -0
  84. package/dist/core/components/floating-panel.d.ts +3 -0
  85. package/dist/core/components/floating-panel.js +65 -0
  86. package/dist/core/components/floating-panel.js.map +1 -0
  87. package/dist/core/components/fragment.d.ts +1 -10
  88. package/dist/core/components/fragment.js +29 -18
  89. package/dist/core/components/fragment.js.map +1 -1
  90. package/dist/core/components/grid.d.ts +1 -8
  91. package/dist/core/components/grid.js +1 -2
  92. package/dist/core/components/grid.js.map +1 -1
  93. package/dist/core/components/heading.d.ts +1 -9
  94. package/dist/core/components/heading.js +2 -3
  95. package/dist/core/components/heading.js.map +1 -1
  96. package/dist/core/components/icon.d.ts +3 -0
  97. package/dist/core/components/icon.js +31 -0
  98. package/dist/core/components/icon.js.map +1 -0
  99. package/dist/core/components/index.d.ts +1 -1
  100. package/dist/core/components/index.js +12 -1
  101. package/dist/core/components/index.js.map +1 -1
  102. package/dist/core/components/info-tooltip.d.ts +3 -0
  103. package/dist/core/components/info-tooltip.js +26 -0
  104. package/dist/core/components/info-tooltip.js.map +1 -0
  105. package/dist/core/components/link.d.ts +1 -12
  106. package/dist/core/components/link.js +12 -11
  107. package/dist/core/components/link.js.map +1 -1
  108. package/dist/core/components/modal.d.ts +1 -11
  109. package/dist/core/components/modal.js +16 -42
  110. package/dist/core/components/modal.js.map +1 -1
  111. package/dist/core/components/popover.d.ts +8 -0
  112. package/dist/core/components/popover.js +37 -0
  113. package/dist/core/components/popover.js.map +1 -0
  114. package/dist/core/components/raw-block.d.ts +3 -0
  115. package/dist/core/components/raw-block.js +10 -0
  116. package/dist/core/components/raw-block.js.map +1 -0
  117. package/dist/core/components/section.d.ts +3 -0
  118. package/dist/core/components/section.js +75 -0
  119. package/dist/core/components/section.js.map +1 -0
  120. package/dist/core/components/segmented-control.d.ts +1 -14
  121. package/dist/core/components/segmented-control.js +4 -7
  122. package/dist/core/components/segmented-control.js.map +1 -1
  123. package/dist/core/components/segmented-pills.d.ts +4 -2
  124. package/dist/core/components/segmented-pills.js +10 -1
  125. package/dist/core/components/segmented-pills.js.map +1 -1
  126. package/dist/core/components/skeleton.d.ts +3 -0
  127. package/dist/core/components/skeleton.js +16 -0
  128. package/dist/core/components/skeleton.js.map +1 -0
  129. package/dist/core/components/spinner.js +8 -4
  130. package/dist/core/components/spinner.js.map +1 -1
  131. package/dist/core/components/stack.d.ts +1 -11
  132. package/dist/core/components/stack.js +24 -13
  133. package/dist/core/components/stack.js.map +1 -1
  134. package/dist/core/components/tabs.d.ts +1 -19
  135. package/dist/core/components/tabs.js +45 -21
  136. package/dist/core/components/tabs.js.map +1 -1
  137. package/dist/core/components/text.d.ts +1 -9
  138. package/dist/core/components/text.js +18 -3
  139. package/dist/core/components/text.js.map +1 -1
  140. package/dist/core/headers.d.ts +1 -0
  141. package/dist/core/headers.js +14 -0
  142. package/dist/core/headers.js.map +1 -0
  143. package/dist/core/registry-context.d.ts +21 -0
  144. package/dist/core/registry-context.js +40 -0
  145. package/dist/core/registry-context.js.map +1 -0
  146. package/dist/core/registry.d.ts +12 -3
  147. package/dist/core/registry.js +30 -5
  148. package/dist/core/registry.js.map +1 -1
  149. package/dist/core/renderer.d.ts +8 -14
  150. package/dist/core/renderer.js +20 -36
  151. package/dist/core/renderer.js.map +1 -1
  152. package/dist/core/test-id.d.ts +8 -0
  153. package/dist/core/test-id.js +21 -0
  154. package/dist/core/test-id.js.map +1 -0
  155. package/dist/core/types.d.ts +68 -26
  156. package/dist/core/use-column-resizing.d.ts +27 -0
  157. package/dist/core/use-column-resizing.js +228 -0
  158. package/dist/core/use-column-resizing.js.map +1 -0
  159. package/dist/effects/dispatch.d.ts +20 -0
  160. package/dist/effects/dispatch.js +39 -0
  161. package/dist/effects/dispatch.js.map +1 -0
  162. package/dist/effects/registry.d.ts +38 -0
  163. package/dist/effects/registry.js +51 -0
  164. package/dist/effects/registry.js.map +1 -0
  165. package/dist/effects/use-effect-dispatcher.d.ts +8 -0
  166. package/dist/effects/use-effect-dispatcher.js +20 -0
  167. package/dist/effects/use-effect-dispatcher.js.map +1 -0
  168. package/dist/effects/use-flash-effects.d.ts +5 -0
  169. package/dist/effects/use-flash-effects.js +22 -0
  170. package/dist/effects/use-flash-effects.js.map +1 -0
  171. package/dist/events/event-bridge.d.ts +3 -7
  172. package/dist/events/event-bridge.js +17 -47
  173. package/dist/events/event-bridge.js.map +1 -1
  174. package/dist/events/event-names.d.ts +3 -1
  175. package/dist/events/event-names.js +3 -1
  176. package/dist/events/event-names.js.map +1 -1
  177. package/dist/form/components/base/field.d.ts +3 -1
  178. package/dist/form/components/base/field.js +21 -2
  179. package/dist/form/components/base/field.js.map +1 -1
  180. package/dist/form/components/base/input-error.js +1 -1
  181. package/dist/form/components/base/input-error.js.map +1 -1
  182. package/dist/form/components/base/input.js +2 -1
  183. package/dist/form/components/base/input.js.map +1 -1
  184. package/dist/form/components/base/label.js.map +1 -1
  185. package/dist/form/components/base/password-input.js +9 -2
  186. package/dist/form/components/base/password-input.js.map +1 -1
  187. package/dist/form/components/base/submit-button.d.ts +4 -4
  188. package/dist/form/components/base/submit-button.js +5 -3
  189. package/dist/form/components/base/submit-button.js.map +1 -1
  190. package/dist/form/components/base/textarea.js +2 -1
  191. package/dist/form/components/base/textarea.js.map +1 -1
  192. package/dist/form/components/conditions.d.ts +6 -9
  193. package/dist/form/components/conditions.js +10 -2
  194. package/dist/form/components/conditions.js.map +1 -1
  195. package/dist/form/components/context.d.ts +1 -4
  196. package/dist/form/components/context.js +2 -5
  197. package/dist/form/components/context.js.map +1 -1
  198. package/dist/form/components/field-props.d.ts +28 -0
  199. package/dist/form/components/field-props.js +15 -0
  200. package/dist/form/components/field-props.js.map +1 -0
  201. package/dist/form/components/field-scope.d.ts +21 -0
  202. package/dist/form/components/field-scope.js +54 -0
  203. package/dist/form/components/field-scope.js.map +1 -0
  204. package/dist/form/components/fields/block-add-menu.d.ts +9 -0
  205. package/dist/form/components/fields/block-add-menu.js +27 -0
  206. package/dist/form/components/fields/block-add-menu.js.map +1 -0
  207. package/dist/form/components/fields/builder.d.ts +2 -0
  208. package/dist/form/components/fields/builder.js +124 -0
  209. package/dist/form/components/fields/builder.js.map +1 -0
  210. package/dist/form/components/fields/checkbox.d.ts +2 -16
  211. package/dist/form/components/fields/checkbox.js +28 -30
  212. package/dist/form/components/fields/checkbox.js.map +1 -1
  213. package/dist/form/components/fields/choice.d.ts +2 -14
  214. package/dist/form/components/fields/choice.js +14 -20
  215. package/dist/form/components/fields/choice.js.map +1 -1
  216. package/dist/form/components/fields/date-input.d.ts +2 -20
  217. package/dist/form/components/fields/date-input.js +12 -16
  218. package/dist/form/components/fields/date-input.js.map +1 -1
  219. package/dist/form/components/fields/file-upload.d.ts +2 -0
  220. package/dist/form/components/fields/file-upload.js +250 -0
  221. package/dist/form/components/fields/file-upload.js.map +1 -0
  222. package/dist/form/components/fields/hidden-input.d.ts +2 -10
  223. package/dist/form/components/fields/hidden-input.js +11 -6
  224. package/dist/form/components/fields/hidden-input.js.map +1 -1
  225. package/dist/form/components/fields/number-input.d.ts +2 -23
  226. package/dist/form/components/fields/number-input.js +40 -41
  227. package/dist/form/components/fields/number-input.js.map +1 -1
  228. package/dist/form/components/fields/password-input.d.ts +2 -29
  229. package/dist/form/components/fields/password-input.js +41 -41
  230. package/dist/form/components/fields/password-input.js.map +1 -1
  231. package/dist/form/components/fields/repeater-rows.d.ts +12 -0
  232. package/dist/form/components/fields/repeater-rows.js +46 -0
  233. package/dist/form/components/fields/repeater-rows.js.map +1 -0
  234. package/dist/form/components/fields/repeater.d.ts +2 -0
  235. package/dist/form/components/fields/repeater.js +97 -0
  236. package/dist/form/components/fields/repeater.js.map +1 -0
  237. package/dist/form/components/fields/rich-editor.d.ts +2 -17
  238. package/dist/form/components/fields/rich-editor.js +90 -52
  239. package/dist/form/components/fields/rich-editor.js.map +1 -1
  240. package/dist/form/components/fields/row-action-menu.d.ts +17 -0
  241. package/dist/form/components/fields/row-action-menu.js +61 -0
  242. package/dist/form/components/fields/row-action-menu.js.map +1 -0
  243. package/dist/form/components/fields/row-actions.d.ts +10 -0
  244. package/dist/form/components/fields/row-actions.js +45 -0
  245. package/dist/form/components/fields/row-actions.js.map +1 -0
  246. package/dist/form/components/fields/row-item.d.ts +27 -0
  247. package/dist/form/components/fields/row-item.js +69 -0
  248. package/dist/form/components/fields/row-item.js.map +1 -0
  249. package/dist/form/components/fields/select.d.ts +2 -23
  250. package/dist/form/components/fields/select.js +97 -121
  251. package/dist/form/components/fields/select.js.map +1 -1
  252. package/dist/form/components/fields/simple-field.d.ts +9 -0
  253. package/dist/form/components/fields/simple-field.js +23 -0
  254. package/dist/form/components/fields/simple-field.js.map +1 -0
  255. package/dist/form/components/fields/table-rows.d.ts +32 -0
  256. package/dist/form/components/fields/table-rows.js +188 -0
  257. package/dist/form/components/fields/table-rows.js.map +1 -0
  258. package/dist/form/components/fields/text-input.d.ts +2 -21
  259. package/dist/form/components/fields/text-input.js +13 -17
  260. package/dist/form/components/fields/text-input.js.map +1 -1
  261. package/dist/form/components/fields/textarea.d.ts +2 -20
  262. package/dist/form/components/fields/textarea.js +12 -16
  263. package/dist/form/components/fields/textarea.js.map +1 -1
  264. package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
  265. package/dist/form/components/fields/use-flip-reorder.js +51 -0
  266. package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
  267. package/dist/form/components/fields/use-row-collection.d.ts +11 -0
  268. package/dist/form/components/fields/use-row-collection.js +44 -0
  269. package/dist/form/components/fields/use-row-collection.js.map +1 -0
  270. package/dist/form/components/form-path.d.ts +5 -0
  271. package/dist/form/components/form-path.js +40 -0
  272. package/dist/form/components/form-path.js.map +1 -0
  273. package/dist/form/components/form-transport.d.ts +3 -4
  274. package/dist/form/components/form-transport.js +17 -18
  275. package/dist/form/components/form-transport.js.map +1 -1
  276. package/dist/form/components/form.d.ts +1 -20
  277. package/dist/form/components/form.js +47 -48
  278. package/dist/form/components/form.js.map +1 -1
  279. package/dist/form/components/index.d.ts +3 -1
  280. package/dist/form/components/index.js +4 -2
  281. package/dist/form/components/override-keys.d.ts +2 -0
  282. package/dist/form/components/override-keys.js +12 -0
  283. package/dist/form/components/override-keys.js.map +1 -0
  284. package/dist/form/components/prefill-context.d.ts +5 -0
  285. package/dist/form/components/prefill-context.js +11 -0
  286. package/dist/form/components/prefill-context.js.map +1 -0
  287. package/dist/form/components/prefill-targets.d.ts +17 -0
  288. package/dist/form/components/prefill-targets.js +73 -0
  289. package/dist/form/components/prefill-targets.js.map +1 -0
  290. package/dist/form/components/resolved-nodes.d.ts +1 -1
  291. package/dist/form/components/resolved-nodes.js +6 -3
  292. package/dist/form/components/resolved-nodes.js.map +1 -1
  293. package/dist/form/components/row-layout-context.d.ts +5 -0
  294. package/dist/form/components/row-layout-context.js +18 -0
  295. package/dist/form/components/row-layout-context.js.map +1 -0
  296. package/dist/form/components/types.d.ts +1 -0
  297. package/dist/form/components/use-controlled-field.d.ts +5 -9
  298. package/dist/form/components/use-controlled-field.js +17 -13
  299. package/dist/form/components/use-controlled-field.js.map +1 -1
  300. package/dist/form/components/use-dependent-field.d.ts +1 -1
  301. package/dist/form/components/use-dependent-field.js +14 -8
  302. package/dist/form/components/use-dependent-field.js.map +1 -1
  303. package/dist/form/components/use-field-commit.d.ts +4 -0
  304. package/dist/form/components/use-field-commit.js +21 -7
  305. package/dist/form/components/use-field-commit.js.map +1 -1
  306. package/dist/form/components/use-form-resolver.d.ts +7 -2
  307. package/dist/form/components/use-form-resolver.js +57 -17
  308. package/dist/form/components/use-form-resolver.js.map +1 -1
  309. package/dist/form/components/use-seed-default.d.ts +5 -0
  310. package/dist/form/components/use-seed-default.js +28 -0
  311. package/dist/form/components/use-seed-default.js.map +1 -0
  312. package/dist/form/components/values.js +20 -5
  313. package/dist/form/components/values.js.map +1 -1
  314. package/dist/form/index.d.ts +1 -1
  315. package/dist/form/index.js +13 -11
  316. package/dist/form/index.js.map +1 -1
  317. package/dist/form/skeleton.d.ts +1 -1
  318. package/dist/form/skeleton.js +5 -4
  319. package/dist/form/skeleton.js.map +1 -1
  320. package/dist/i18n/backend.d.ts +26 -0
  321. package/dist/i18n/backend.js +54 -0
  322. package/dist/i18n/backend.js.map +1 -0
  323. package/dist/i18n/config.d.ts +6 -0
  324. package/dist/i18n/config.js +36 -0
  325. package/dist/i18n/config.js.map +1 -0
  326. package/dist/i18n/index.d.ts +9 -0
  327. package/dist/i18n/index.js +7 -0
  328. package/dist/i18n/instance.d.ts +27 -0
  329. package/dist/i18n/instance.js +95 -0
  330. package/dist/i18n/instance.js.map +1 -0
  331. package/dist/i18n/locale-reload.d.ts +3 -0
  332. package/dist/i18n/locale-reload.js +17 -0
  333. package/dist/i18n/locale-reload.js.map +1 -0
  334. package/dist/i18n/locale-switcher.d.ts +21 -0
  335. package/dist/i18n/locale-switcher.js +25 -0
  336. package/dist/i18n/locale-switcher.js.map +1 -0
  337. package/dist/i18n/locale.d.ts +9 -0
  338. package/dist/i18n/locale.js +93 -0
  339. package/dist/i18n/locale.js.map +1 -0
  340. package/dist/i18n/page-props.d.ts +3 -0
  341. package/dist/i18n/page-props.js +24 -0
  342. package/dist/i18n/page-props.js.map +1 -0
  343. package/dist/icons/icon-renderer.js +30 -5
  344. package/dist/icons/icon-renderer.js.map +1 -1
  345. package/dist/icons/index.d.ts +2 -0
  346. package/dist/icons/index.js +2 -1
  347. package/dist/icons/sprite.d.ts +30 -0
  348. package/dist/icons/sprite.js +40 -0
  349. package/dist/icons/sprite.js.map +1 -0
  350. package/dist/index.d.ts +23 -9
  351. package/dist/index.js +22 -7
  352. package/dist/inertia.d.ts +3 -7
  353. package/dist/inertia.js +13 -10
  354. package/dist/inertia.js.map +1 -1
  355. package/dist/lattice.css +172 -15
  356. package/dist/layout/breadcrumbs.d.ts +3 -0
  357. package/dist/layout/breadcrumbs.js +34 -0
  358. package/dist/layout/breadcrumbs.js.map +1 -0
  359. package/dist/layout/callouts.d.ts +3 -0
  360. package/dist/layout/callouts.js +67 -0
  361. package/dist/layout/callouts.js.map +1 -0
  362. package/dist/layout/components.d.ts +1 -0
  363. package/dist/layout/components.js +25 -0
  364. package/dist/layout/components.js.map +1 -0
  365. package/dist/layout/context.d.ts +4 -0
  366. package/dist/layout/context.js +8 -0
  367. package/dist/layout/context.js.map +1 -0
  368. package/dist/layout/dropdown.d.ts +3 -0
  369. package/dist/layout/dropdown.js +23 -0
  370. package/dist/layout/dropdown.js.map +1 -0
  371. package/dist/layout/index.d.ts +4 -0
  372. package/dist/layout/index.js +6 -0
  373. package/dist/layout/menu-item.d.ts +3 -0
  374. package/dist/layout/menu-item.js +101 -0
  375. package/dist/layout/menu-item.js.map +1 -0
  376. package/dist/layout/menu.d.ts +3 -0
  377. package/dist/layout/menu.js +13 -0
  378. package/dist/layout/menu.js.map +1 -0
  379. package/dist/layout/outlet.d.ts +6 -0
  380. package/dist/layout/outlet.js +14 -0
  381. package/dist/layout/outlet.js.map +1 -0
  382. package/dist/layout/popover.d.ts +17 -0
  383. package/dist/layout/popover.js +46 -0
  384. package/dist/layout/popover.js.map +1 -0
  385. package/dist/layout/schema-layout.d.ts +10 -0
  386. package/dist/layout/schema-layout.js +23 -0
  387. package/dist/layout/schema-layout.js.map +1 -0
  388. package/dist/layout/sidebar.d.ts +3 -0
  389. package/dist/layout/sidebar.js +48 -0
  390. package/dist/layout/sidebar.js.map +1 -0
  391. package/dist/lib/utils.d.ts +0 -2
  392. package/dist/lib/utils.js +1 -4
  393. package/dist/lib/utils.js.map +1 -1
  394. package/dist/page.d.ts +1 -1
  395. package/dist/page.js +4 -10
  396. package/dist/page.js.map +1 -1
  397. package/dist/provider.d.ts +7 -4
  398. package/dist/provider.js +15 -11
  399. package/dist/provider.js.map +1 -1
  400. package/dist/registry.d.ts +1 -1
  401. package/dist/registry.js +3 -1
  402. package/dist/registry.js.map +1 -1
  403. package/dist/svg-sprite-client/index.d.ts +1 -0
  404. package/dist/svg-sprite-client/index.js +0 -0
  405. package/dist/svg-sprite-client.d.ts +1 -0
  406. package/dist/table/align.d.ts +4 -0
  407. package/dist/table/align.js +23 -0
  408. package/dist/table/align.js.map +1 -0
  409. package/dist/table/bulk.d.ts +6 -10
  410. package/dist/table/bulk.js +13 -35
  411. package/dist/table/bulk.js.map +1 -1
  412. package/dist/table/components/bulk-bar.js +40 -6
  413. package/dist/table/components/bulk-bar.js.map +1 -1
  414. package/dist/table/components/cells/badge-cell.d.ts +2 -0
  415. package/dist/table/components/cells/badge-cell.js +16 -0
  416. package/dist/table/components/cells/badge-cell.js.map +1 -0
  417. package/dist/table/components/cells/boolean-cell.d.ts +3 -0
  418. package/dist/table/components/cells/boolean-cell.js +23 -0
  419. package/dist/table/components/cells/boolean-cell.js.map +1 -0
  420. package/dist/table/components/cells/icon-cell.d.ts +2 -0
  421. package/dist/table/components/cells/icon-cell.js +21 -0
  422. package/dist/table/components/cells/icon-cell.js.map +1 -0
  423. package/dist/table/components/cells/image-cell.d.ts +2 -0
  424. package/dist/table/components/cells/image-cell.js +23 -0
  425. package/dist/table/components/cells/image-cell.js.map +1 -0
  426. package/dist/table/components/cells/money-cell.d.ts +2 -0
  427. package/dist/table/components/cells/money-cell.js +28 -0
  428. package/dist/table/components/cells/money-cell.js.map +1 -0
  429. package/dist/table/components/cells/number-cell.d.ts +2 -0
  430. package/dist/table/components/cells/number-cell.js +25 -0
  431. package/dist/table/components/cells/number-cell.js.map +1 -0
  432. package/dist/table/components/cells/numeric.d.ts +2 -0
  433. package/dist/table/components/cells/numeric.js +10 -0
  434. package/dist/table/components/cells/numeric.js.map +1 -0
  435. package/dist/table/components/cells/stack-cell.d.ts +3 -0
  436. package/dist/table/components/cells/stack-cell.js +17 -0
  437. package/dist/table/components/cells/stack-cell.js.map +1 -0
  438. package/dist/table/components/cells/text-cell.d.ts +2 -0
  439. package/dist/table/components/cells/text-cell.js +49 -0
  440. package/dist/table/components/cells/text-cell.js.map +1 -0
  441. package/dist/table/components/column-filter-control.d.ts +3 -1
  442. package/dist/table/components/column-filter-control.js +125 -100
  443. package/dist/table/components/column-filter-control.js.map +1 -1
  444. package/dist/table/components/column-header.d.ts +3 -1
  445. package/dist/table/components/column-header.js +28 -14
  446. package/dist/table/components/column-header.js.map +1 -1
  447. package/dist/table/components/filter-bar.d.ts +15 -0
  448. package/dist/table/components/filter-bar.js +81 -0
  449. package/dist/table/components/filter-bar.js.map +1 -0
  450. package/dist/table/components/filter-controls.d.ts +18 -0
  451. package/dist/table/components/filter-controls.js +256 -0
  452. package/dist/table/components/filter-controls.js.map +1 -0
  453. package/dist/table/components/filter-stack-bar.d.ts +2 -2
  454. package/dist/table/components/filter-stack-bar.js +10 -8
  455. package/dist/table/components/filter-stack-bar.js.map +1 -1
  456. package/dist/table/components/filter-value-input.d.ts +6 -3
  457. package/dist/table/components/filter-value-input.js +27 -17
  458. package/dist/table/components/filter-value-input.js.map +1 -1
  459. package/dist/table/components/pagination.d.ts +1 -1
  460. package/dist/table/components/pagination.js +20 -8
  461. package/dist/table/components/pagination.js.map +1 -1
  462. package/dist/table/components/sort-bar.d.ts +2 -2
  463. package/dist/table/components/sort-bar.js +12 -10
  464. package/dist/table/components/sort-bar.js.map +1 -1
  465. package/dist/table/components/table-action-node.d.ts +1 -1
  466. package/dist/table/components/table-action-node.js +1 -1
  467. package/dist/table/components/table-action-node.js.map +1 -1
  468. package/dist/table/components/table-cell.js +23 -52
  469. package/dist/table/components/table-cell.js.map +1 -1
  470. package/dist/table/components/table.d.ts +6 -2
  471. package/dist/table/components/table.js +198 -136
  472. package/dist/table/components/table.js.map +1 -1
  473. package/dist/table/filter-values.d.ts +13 -0
  474. package/dist/table/filter-values.js +30 -0
  475. package/dist/table/filter-values.js.map +1 -0
  476. package/dist/table/format.js +5 -3
  477. package/dist/table/format.js.map +1 -1
  478. package/dist/table/index.d.ts +1 -1
  479. package/dist/table/index.js.map +1 -1
  480. package/dist/table/payload.d.ts +1 -1
  481. package/dist/table/payload.js +24 -3
  482. package/dist/table/payload.js.map +1 -1
  483. package/dist/table/query.d.ts +10 -2
  484. package/dist/table/query.js +64 -11
  485. package/dist/table/query.js.map +1 -1
  486. package/dist/table/registry.d.ts +19 -0
  487. package/dist/table/registry.js +14 -0
  488. package/dist/table/registry.js.map +1 -0
  489. package/dist/table/types.d.ts +43 -57
  490. package/dist/table/use-table.d.ts +9 -5
  491. package/dist/table/use-table.js +66 -27
  492. package/dist/table/use-table.js.map +1 -1
  493. package/dist/toast/callout.d.ts +6 -0
  494. package/dist/toast/callout.js +31 -0
  495. package/dist/toast/callout.js.map +1 -0
  496. package/dist/toast/index.d.ts +5 -0
  497. package/dist/toast/index.js +4 -0
  498. package/dist/toast/toast.d.ts +14 -0
  499. package/dist/toast/toast.js +51 -0
  500. package/dist/toast/toast.js.map +1 -0
  501. package/dist/toast/toaster.d.ts +3 -0
  502. package/dist/toast/toaster.js +62 -0
  503. package/dist/toast/toaster.js.map +1 -0
  504. package/dist/toast/variant-styles.d.ts +6 -0
  505. package/dist/toast/variant-styles.js +37 -0
  506. package/dist/toast/variant-styles.js.map +1 -0
  507. package/dist/types/generated.d.ts +1037 -0
  508. package/dist/types/generated.js +0 -0
  509. package/dist/types/index.d.ts +1 -1
  510. package/dist/types/vite-env.d.ts +1 -0
  511. package/dist/vite.d.ts +25 -0
  512. package/dist/vite.js +72 -0
  513. package/dist/vite.js.map +1 -0
  514. package/package.json +125 -12
  515. package/resources/icons/align-center.svg +17 -0
  516. package/resources/icons/align-justify.svg +17 -0
  517. package/resources/icons/align-left.svg +17 -0
  518. package/resources/icons/align-right.svg +17 -0
  519. package/resources/icons/arrow-down.svg +16 -0
  520. package/resources/icons/arrow-up.svg +16 -0
  521. package/resources/icons/bold.svg +15 -0
  522. package/resources/icons/check.svg +15 -0
  523. package/resources/icons/chevron-down.svg +15 -0
  524. package/resources/icons/chevron-right.svg +15 -0
  525. package/resources/icons/chevrons-up-down.svg +16 -0
  526. package/resources/icons/circle-alert.svg +17 -0
  527. package/resources/icons/circle-check.svg +16 -0
  528. package/resources/icons/circle-help.svg +17 -0
  529. package/resources/icons/circle-x.svg +17 -0
  530. package/resources/icons/code.svg +16 -0
  531. package/resources/icons/columns-3.svg +17 -0
  532. package/resources/icons/copy.svg +16 -0
  533. package/resources/icons/external-link.svg +17 -0
  534. package/resources/icons/eye-off.svg +18 -0
  535. package/resources/icons/eye.svg +16 -0
  536. package/resources/icons/filter.svg +15 -0
  537. package/resources/icons/heading-1.svg +18 -0
  538. package/resources/icons/heading-2.svg +18 -0
  539. package/resources/icons/heading-3.svg +19 -0
  540. package/resources/icons/highlighter.svg +16 -0
  541. package/resources/icons/info.svg +17 -0
  542. package/resources/icons/italic.svg +17 -0
  543. package/resources/icons/layout-dashboard.svg +18 -0
  544. package/resources/icons/link.svg +16 -0
  545. package/resources/icons/list-ordered.svg +20 -0
  546. package/resources/icons/list.svg +20 -0
  547. package/resources/icons/loader-2.svg +15 -0
  548. package/resources/icons/minus.svg +15 -0
  549. package/resources/icons/more-horizontal.svg +17 -0
  550. package/resources/icons/panel-left.svg +16 -0
  551. package/resources/icons/pencil-line.svg +17 -0
  552. package/resources/icons/pencil.svg +16 -0
  553. package/resources/icons/plus.svg +16 -0
  554. package/resources/icons/quote.svg +16 -0
  555. package/resources/icons/rotate-ccw.svg +16 -0
  556. package/resources/icons/rows-3.svg +17 -0
  557. package/resources/icons/search.svg +16 -0
  558. package/resources/icons/send.svg +16 -0
  559. package/resources/icons/settings.svg +16 -0
  560. package/resources/icons/smile.svg +18 -0
  561. package/resources/icons/strikethrough.svg +17 -0
  562. package/resources/icons/table.svg +18 -0
  563. package/resources/icons/trash-2.svg +19 -0
  564. package/resources/icons/underline.svg +16 -0
  565. package/resources/icons/x.svg +16 -0
  566. package/dist/action/effects.d.ts +0 -30
  567. package/dist/action/effects.js +0 -44
  568. package/dist/action/effects.js.map +0 -1
  569. package/dist/core/props.d.ts +0 -14
  570. package/dist/core/props.js +0 -30
  571. package/dist/core/props.js.map +0 -1
  572. package/dist/form/components/base/checkbox.js.map +0 -1
  573. package/dist/form/components/fields/submit-button.d.ts +0 -10
  574. package/dist/form/components/fields/submit-button.js +0 -14
  575. package/dist/form/components/fields/submit-button.js.map +0 -1
  576. package/dist/generated/types.d.ts +0 -17
  577. package/dist/icons/default-icons.d.ts +0 -3
  578. package/dist/icons/default-icons.js +0 -44
  579. package/dist/icons/default-icons.js.map +0 -1
  580. package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
  581. package/dist/icons/dynamic-lucide-renderer.js +0 -18
  582. package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
  583. package/dist/menu/index.d.ts +0 -1
  584. package/dist/menu/index.js +0 -2
  585. package/dist/menu/use-menu.d.ts +0 -2
  586. package/dist/menu/use-menu.js +0 -9
  587. package/dist/menu/use-menu.js.map +0 -1
  588. /package/dist/{generated → chat}/types.js +0 -0
  589. /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
@@ -1 +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-php/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice-php/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"}
@@ -0,0 +1,3 @@
1
+ import { RendererComponent } from '../types';
2
+ declare const ChartComponent: RendererComponent<"chart">;
3
+ export default ChartComponent;
@@ -0,0 +1,175 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, ComposedChart, Legend, Line, LineChart, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
3
+ //#region resources/js/core/components/chart.tsx
4
+ var chartMargin = {
5
+ bottom: 0,
6
+ left: 0,
7
+ right: 16,
8
+ top: 8
9
+ };
10
+ var compactLegendProps = {
11
+ align: "center",
12
+ height: 24,
13
+ iconSize: 7,
14
+ verticalAlign: "top",
15
+ wrapperStyle: {
16
+ fontSize: 11,
17
+ lineHeight: "14px",
18
+ paddingBottom: 6
19
+ }
20
+ };
21
+ var axisTick = { fontSize: 10 };
22
+ var palette = [
23
+ "var(--lt-primary)",
24
+ "var(--lt-success)",
25
+ "var(--lt-info)",
26
+ "var(--lt-warning)",
27
+ "var(--lt-danger)",
28
+ "var(--lt-muted-fg)"
29
+ ];
30
+ function colorAt(index) {
31
+ return palette[index % palette.length] ?? "var(--lt-primary)";
32
+ }
33
+ function isRecord(value) {
34
+ return typeof value === "object" && value !== null && !Array.isArray(value);
35
+ }
36
+ function datumColor(datum, series, index) {
37
+ if (isRecord(datum) && typeof datum.color === "string") return datum.color;
38
+ return series.color ?? colorAt(index);
39
+ }
40
+ function isCartesianSeries(series) {
41
+ return series.type === "area" || series.type === "bar" || series.type === "line";
42
+ }
43
+ function cartesianChartFor(series) {
44
+ const types = new Set(series.map((item) => item.type));
45
+ const firstSeries = series[0];
46
+ if (firstSeries === void 0 || types.size !== 1) return ComposedChart;
47
+ switch (firstSeries.type) {
48
+ case "area": return AreaChart;
49
+ case "bar": return BarChart;
50
+ case "line": return LineChart;
51
+ }
52
+ }
53
+ function ChartFrame({ children, description, id, title }) {
54
+ return /* @__PURE__ */ jsxs("div", {
55
+ className: "flex flex-col gap-3 rounded-lt border border-lt-border bg-lt-surface p-4 text-lt-surface-fg shadow-xs",
56
+ "data-lattice-component": id,
57
+ children: [(title !== null || description !== null) && /* @__PURE__ */ jsxs("div", {
58
+ className: "flex min-w-0 flex-col gap-1.5",
59
+ children: [title !== null && /* @__PURE__ */ jsx("div", {
60
+ className: "text-sm font-semibold leading-tight",
61
+ children: title
62
+ }), description !== null && /* @__PURE__ */ jsx("div", {
63
+ className: "text-xs leading-5 text-lt-muted-fg",
64
+ children: description
65
+ })]
66
+ }), children]
67
+ });
68
+ }
69
+ function CartesianChart({ props }) {
70
+ const series = props.series.filter(isCartesianSeries);
71
+ const RechartsChart = cartesianChartFor(series);
72
+ return /* @__PURE__ */ jsx(ResponsiveContainer, {
73
+ width: "100%",
74
+ height: props.height,
75
+ children: /* @__PURE__ */ jsxs(RechartsChart, {
76
+ data: props.data,
77
+ margin: chartMargin,
78
+ children: [
79
+ props.grid && /* @__PURE__ */ jsx(CartesianGrid, {
80
+ strokeDasharray: "3 3",
81
+ stroke: "var(--lt-border)"
82
+ }),
83
+ props.xAxis && props.categoryKey !== null && /* @__PURE__ */ jsx(XAxis, {
84
+ dataKey: props.categoryKey,
85
+ stroke: "var(--lt-muted-fg)",
86
+ tick: axisTick,
87
+ tickLine: false
88
+ }),
89
+ props.yAxis && /* @__PURE__ */ jsx(YAxis, {
90
+ stroke: "var(--lt-muted-fg)",
91
+ tick: axisTick,
92
+ tickLine: false,
93
+ width: 42
94
+ }),
95
+ props.tooltip && /* @__PURE__ */ jsx(Tooltip, {}),
96
+ props.legend && /* @__PURE__ */ jsx(Legend, { ...compactLegendProps }),
97
+ series.map((item, index) => {
98
+ const color = item.color ?? colorAt(index);
99
+ const key = `${item.type}:${item.dataKey}`;
100
+ if (item.type === "area") return /* @__PURE__ */ jsx(Area, {
101
+ dataKey: item.dataKey,
102
+ fill: color,
103
+ fillOpacity: .16,
104
+ name: item.name ?? void 0,
105
+ stackId: item.stackId ?? void 0,
106
+ stroke: color,
107
+ type: "monotone"
108
+ }, key);
109
+ if (item.type === "bar") return /* @__PURE__ */ jsx(Bar, {
110
+ dataKey: item.dataKey,
111
+ fill: color,
112
+ name: item.name ?? void 0,
113
+ radius: [
114
+ 4,
115
+ 4,
116
+ 0,
117
+ 0
118
+ ],
119
+ stackId: item.stackId ?? void 0
120
+ }, key);
121
+ return /* @__PURE__ */ jsx(Line, {
122
+ dataKey: item.dataKey,
123
+ dot: false,
124
+ name: item.name ?? void 0,
125
+ stroke: color,
126
+ strokeWidth: 2,
127
+ type: "monotone"
128
+ }, key);
129
+ })
130
+ ]
131
+ })
132
+ });
133
+ }
134
+ function PieChartView({ props, series }) {
135
+ return /* @__PURE__ */ jsx(ResponsiveContainer, {
136
+ width: "100%",
137
+ height: props.height,
138
+ children: /* @__PURE__ */ jsxs(PieChart, {
139
+ margin: chartMargin,
140
+ children: [
141
+ props.tooltip && /* @__PURE__ */ jsx(Tooltip, {}),
142
+ props.legend && /* @__PURE__ */ jsx(Legend, { ...compactLegendProps }),
143
+ /* @__PURE__ */ jsx(Pie, {
144
+ data: props.data,
145
+ dataKey: series.dataKey,
146
+ name: series.name ?? void 0,
147
+ nameKey: series.nameKey ?? void 0,
148
+ outerRadius: "68%",
149
+ children: props.data.map((datum, index) => /* @__PURE__ */ jsx(Cell, { fill: datumColor(datum, series, index) }, index))
150
+ })
151
+ ]
152
+ })
153
+ });
154
+ }
155
+ var ChartComponent = ({ node }) => {
156
+ const props = node.props;
157
+ const pieSeries = props.series.find((series) => series.type === "pie");
158
+ const hasCartesianSeries = props.series.some(isCartesianSeries);
159
+ return /* @__PURE__ */ jsx(ChartFrame, {
160
+ description: props.description,
161
+ id: node.id,
162
+ title: props.title,
163
+ children: /* @__PURE__ */ jsx("div", {
164
+ className: "min-h-0 w-full",
165
+ children: pieSeries && !hasCartesianSeries ? /* @__PURE__ */ jsx(PieChartView, {
166
+ props,
167
+ series: pieSeries
168
+ }) : /* @__PURE__ */ jsx(CartesianChart, { props })
169
+ })
170
+ });
171
+ };
172
+ //#endregion
173
+ export { ChartComponent as default };
174
+
175
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","names":[],"sources":["../../../resources/js/core/components/chart.tsx"],"sourcesContent":["import {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ComposedChart,\n Legend,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport type { PropsOf, RendererComponent } from \"@lattice-php/lattice/core/types\";\n\ntype ChartProps = PropsOf<\"chart\">;\ntype ChartSeries = ChartProps[\"series\"][number];\ntype ChartDatum = ChartProps[\"data\"][number];\ntype CartesianSeries = ChartSeries & { type: \"area\" | \"bar\" | \"line\" };\ntype ChartMargin = { bottom: number; left: number; right: number; top: number };\ntype CartesianChartComponent = ComponentType<{\n children: ReactNode;\n data: ChartProps[\"data\"];\n margin?: ChartMargin;\n}>;\n\nconst chartMargin: ChartMargin = { bottom: 0, left: 0, right: 16, top: 8 };\nconst compactLegendProps = {\n align: \"center\" as const,\n height: 24,\n iconSize: 7,\n verticalAlign: \"top\" as const,\n wrapperStyle: { fontSize: 11, lineHeight: \"14px\", paddingBottom: 6 },\n};\nconst axisTick = { fontSize: 10 };\n\nconst palette = [\n \"var(--lt-primary)\",\n \"var(--lt-success)\",\n \"var(--lt-info)\",\n \"var(--lt-warning)\",\n \"var(--lt-danger)\",\n \"var(--lt-muted-fg)\",\n];\n\nfunction colorAt(index: number): string {\n return palette[index % palette.length] ?? \"var(--lt-primary)\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction datumColor(datum: ChartDatum, series: ChartSeries, index: number): string {\n if (isRecord(datum) && typeof datum.color === \"string\") {\n return datum.color;\n }\n\n return series.color ?? colorAt(index);\n}\n\nfunction isCartesianSeries(series: ChartSeries): series is CartesianSeries {\n return series.type === \"area\" || series.type === \"bar\" || series.type === \"line\";\n}\n\nfunction cartesianChartFor(series: CartesianSeries[]): CartesianChartComponent {\n const types = new Set(series.map((item) => item.type));\n const firstSeries = series[0];\n\n if (firstSeries === undefined || types.size !== 1) {\n return ComposedChart;\n }\n\n switch (firstSeries.type) {\n case \"area\":\n return AreaChart;\n case \"bar\":\n return BarChart;\n case \"line\":\n return LineChart;\n }\n}\n\nfunction ChartFrame({\n children,\n description,\n id,\n title,\n}: {\n children: ReactNode;\n description: string | null;\n id?: string;\n title: string | null;\n}) {\n const hasHeader = title !== null || description !== null;\n\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lt border border-lt-border bg-lt-surface p-4 text-lt-surface-fg shadow-xs\"\n data-lattice-component={id}\n >\n {hasHeader && (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title !== null && <div className=\"text-sm font-semibold leading-tight\">{title}</div>}\n {description !== null && (\n <div className=\"text-xs leading-5 text-lt-muted-fg\">{description}</div>\n )}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nfunction CartesianChart({ props }: { props: ChartProps }) {\n const series = props.series.filter(isCartesianSeries);\n const RechartsChart = cartesianChartFor(series);\n\n return (\n <ResponsiveContainer width=\"100%\" height={props.height}>\n <RechartsChart data={props.data} margin={chartMargin}>\n {props.grid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--lt-border)\" />}\n {props.xAxis && props.categoryKey !== null && (\n <XAxis\n dataKey={props.categoryKey}\n stroke=\"var(--lt-muted-fg)\"\n tick={axisTick}\n tickLine={false}\n />\n )}\n {props.yAxis && (\n <YAxis stroke=\"var(--lt-muted-fg)\" tick={axisTick} tickLine={false} width={42} />\n )}\n {props.tooltip && <Tooltip />}\n {props.legend && <Legend {...compactLegendProps} />}\n {series.map((item, index) => {\n const color = item.color ?? colorAt(index);\n const key = `${item.type}:${item.dataKey}`;\n\n if (item.type === \"area\") {\n return (\n <Area\n key={key}\n dataKey={item.dataKey}\n fill={color}\n fillOpacity={0.16}\n name={item.name ?? undefined}\n stackId={item.stackId ?? undefined}\n stroke={color}\n type=\"monotone\"\n />\n );\n }\n\n if (item.type === \"bar\") {\n return (\n <Bar\n key={key}\n dataKey={item.dataKey}\n fill={color}\n name={item.name ?? undefined}\n radius={[4, 4, 0, 0]}\n stackId={item.stackId ?? undefined}\n />\n );\n }\n\n return (\n <Line\n key={key}\n dataKey={item.dataKey}\n dot={false}\n name={item.name ?? undefined}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n );\n })}\n </RechartsChart>\n </ResponsiveContainer>\n );\n}\n\nfunction PieChartView({ props, series }: { props: ChartProps; series: ChartSeries }) {\n return (\n <ResponsiveContainer width=\"100%\" height={props.height}>\n <PieChart margin={chartMargin}>\n {props.tooltip && <Tooltip />}\n {props.legend && <Legend {...compactLegendProps} />}\n <Pie\n data={props.data}\n dataKey={series.dataKey}\n name={series.name ?? undefined}\n nameKey={series.nameKey ?? undefined}\n outerRadius=\"68%\"\n >\n {props.data.map((datum, index) => (\n <Cell key={index} fill={datumColor(datum, series, index)} />\n ))}\n </Pie>\n </PieChart>\n </ResponsiveContainer>\n );\n}\n\nconst ChartComponent: RendererComponent<\"chart\"> = ({ node }) => {\n const props = node.props;\n const pieSeries = props.series.find((series) => series.type === \"pie\");\n const hasCartesianSeries = props.series.some(isCartesianSeries);\n\n return (\n <ChartFrame description={props.description} id={node.id} title={props.title}>\n <div className=\"min-h-0 w-full\">\n {pieSeries && !hasCartesianSeries ? (\n <PieChartView props={props} series={pieSeries} />\n ) : (\n <CartesianChart props={props} />\n )}\n </div>\n </ChartFrame>\n );\n};\n\nexport default ChartComponent;\n"],"mappings":";;;AAgCA,IAAM,cAA2B;CAAE,QAAQ;CAAG,MAAM;CAAG,OAAO;CAAI,KAAK;AAAE;AACzE,IAAM,qBAAqB;CACzB,OAAO;CACP,QAAQ;CACR,UAAU;CACV,eAAe;CACf,cAAc;EAAE,UAAU;EAAI,YAAY;EAAQ,eAAe;CAAE;AACrE;AACA,IAAM,WAAW,EAAE,UAAU,GAAG;AAEhC,IAAM,UAAU;CACd;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,QAAQ,OAAuB;CACtC,OAAO,QAAQ,QAAQ,QAAQ,WAAW;AAC5C;AAEA,SAAS,SAAS,OAAkD;CAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAmB,QAAqB,OAAuB;CACjF,IAAI,SAAS,KAAK,KAAK,OAAO,MAAM,UAAU,UAC5C,OAAO,MAAM;CAGf,OAAO,OAAO,SAAS,QAAQ,KAAK;AACtC;AAEA,SAAS,kBAAkB,QAAgD;CACzE,OAAO,OAAO,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS;AAC5E;AAEA,SAAS,kBAAkB,QAAoD;CAC7E,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,SAAS,KAAK,IAAI,CAAC;CACrD,MAAM,cAAc,OAAO;CAE3B,IAAI,gBAAgB,KAAA,KAAa,MAAM,SAAS,GAC9C,OAAO;CAGT,QAAQ,YAAY,MAApB;EACE,KAAK,QACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,QACH,OAAO;CACX;AACF;AAEA,SAAS,WAAW,EAClB,UACA,aACA,IACA,SAMC;CAGD,OACE,qBAAC,OAAD;EACE,WAAU;EACV,0BAAwB;YAF1B,EAHgB,UAAU,QAAQ,gBAAgB,SAQ9C,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,UAAU,QAAQ,oBAAC,OAAD;IAAK,WAAU;cAAuC;GAAW,CAAA,GACnF,gBAAgB,QACf,oBAAC,OAAD;IAAK,WAAU;cAAsC;GAAiB,CAAA,CAErE;MAEN,QACE;;AAET;AAEA,SAAS,eAAe,EAAE,SAAgC;CACxD,MAAM,SAAS,MAAM,OAAO,OAAO,iBAAiB;CACpD,MAAM,gBAAgB,kBAAkB,MAAM;CAE9C,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;YAC9C,qBAAC,eAAD;GAAe,MAAM,MAAM;GAAM,QAAQ;aAAzC;IACG,MAAM,QAAQ,oBAAC,eAAD;KAAe,iBAAgB;KAAM,QAAO;IAAoB,CAAA;IAC9E,MAAM,SAAS,MAAM,gBAAgB,QACpC,oBAAC,OAAD;KACE,SAAS,MAAM;KACf,QAAO;KACP,MAAM;KACN,UAAU;IACX,CAAA;IAEF,MAAM,SACL,oBAAC,OAAD;KAAO,QAAO;KAAqB,MAAM;KAAU,UAAU;KAAO,OAAO;IAAK,CAAA;IAEjF,MAAM,WAAW,oBAAC,SAAD,CAAU,CAAA;IAC3B,MAAM,UAAU,oBAAC,QAAD,EAAQ,GAAI,mBAAqB,CAAA;IACjD,OAAO,KAAK,MAAM,UAAU;KAC3B,MAAM,QAAQ,KAAK,SAAS,QAAQ,KAAK;KACzC,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,KAAK;KAEjC,IAAI,KAAK,SAAS,QAChB,OACE,oBAAC,MAAD;MAEE,SAAS,KAAK;MACd,MAAM;MACN,aAAa;MACb,MAAM,KAAK,QAAQ,KAAA;MACnB,SAAS,KAAK,WAAW,KAAA;MACzB,QAAQ;MACR,MAAK;KACN,GARM,GAQN;KAIL,IAAI,KAAK,SAAS,OAChB,OACE,oBAAC,KAAD;MAEE,SAAS,KAAK;MACd,MAAM;MACN,MAAM,KAAK,QAAQ,KAAA;MACnB,QAAQ;OAAC;OAAG;OAAG;OAAG;MAAC;MACnB,SAAS,KAAK,WAAW,KAAA;KAC1B,GANM,GAMN;KAIL,OACE,oBAAC,MAAD;MAEE,SAAS,KAAK;MACd,KAAK;MACL,MAAM,KAAK,QAAQ,KAAA;MACnB,QAAQ;MACR,aAAa;MACb,MAAK;KACN,GAPM,GAON;IAEL,CAAC;GACY;;CACI,CAAA;AAEzB;AAEA,SAAS,aAAa,EAAE,OAAO,UAAsD;CACnF,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;YAC9C,qBAAC,UAAD;GAAU,QAAQ;aAAlB;IACG,MAAM,WAAW,oBAAC,SAAD,CAAU,CAAA;IAC3B,MAAM,UAAU,oBAAC,QAAD,EAAQ,GAAI,mBAAqB,CAAA;IAClD,oBAAC,KAAD;KACE,MAAM,MAAM;KACZ,SAAS,OAAO;KAChB,MAAM,OAAO,QAAQ,KAAA;KACrB,SAAS,OAAO,WAAW,KAAA;KAC3B,aAAY;eAEX,MAAM,KAAK,KAAK,OAAO,UACtB,oBAAC,MAAD,EAAkB,MAAM,WAAW,OAAO,QAAQ,KAAK,EAAI,GAAhD,KAAgD,CAC5D;IACE,CAAA;GACG;;CACS,CAAA;AAEzB;AAEA,IAAM,kBAA8C,EAAE,WAAW;CAC/D,MAAM,QAAQ,KAAK;CACnB,MAAM,YAAY,MAAM,OAAO,MAAM,WAAW,OAAO,SAAS,KAAK;CACrE,MAAM,qBAAqB,MAAM,OAAO,KAAK,iBAAiB;CAE9D,OACE,oBAAC,YAAD;EAAY,aAAa,MAAM;EAAa,IAAI,KAAK;EAAI,OAAO,MAAM;YACpE,oBAAC,OAAD;GAAK,WAAU;aACZ,aAAa,CAAC,qBACb,oBAAC,cAAD;IAAqB;IAAO,QAAQ;GAAY,CAAA,IAEhD,oBAAC,gBAAD,EAAuB,MAAQ,CAAA;EAE9B,CAAA;CACK,CAAA;AAEhB"}
@@ -1,9 +1,9 @@
1
- import { cn } from "../../../lib/utils.js";
1
+ import { cn } from "../../lib/utils.js";
2
+ import { Icon } from "../../icons/sprite.js";
2
3
  import "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
- import { CheckIcon } from "lucide-react";
5
5
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
6
- //#region resources/js/form/components/base/checkbox.tsx
6
+ //#region resources/js/core/components/checkbox.tsx
7
7
  function Checkbox({ className, ...props }) {
8
8
  return /* @__PURE__ */ jsx(CheckboxPrimitive.Root, {
9
9
  "data-slot": "checkbox",
@@ -12,7 +12,10 @@ function Checkbox({ className, ...props }) {
12
12
  children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, {
13
13
  "data-slot": "checkbox-indicator",
14
14
  className: "flex items-center justify-center text-current transition-none",
15
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
15
+ children: /* @__PURE__ */ jsx(Icon, {
16
+ name: "check",
17
+ className: "size-lt-icon-sm"
18
+ })
16
19
  })
17
20
  });
18
21
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","names":[],"sources":["../../../resources/js/core/components/checkbox.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as React from \"react\";\n\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-lt-input data-[state=checked]:bg-lt-primary data-[state=checked]:text-lt-primary-fg data-[state=checked]:border-lt-primary focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger size-4 shrink-0 rounded-lt-xs border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <Icon name=\"check\" className=\"size-lt-icon-sm\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n"],"mappings":";;;;;;AAMA,SAAS,SAAS,EAAE,WAAW,GAAG,SAA8D;CAC9F,OACE,oBAAC,kBAAkB,MAAnB;EACE,aAAU;EACV,WAAW,GACT,6bACA,SACF;EACA,GAAI;YAEJ,oBAAC,kBAAkB,WAAnB;GACE,aAAU;GACV,WAAU;aAEV,oBAAC,MAAD;IAAM,MAAK;IAAQ,WAAU;GAAmB,CAAA;EACrB,CAAA;CACP,CAAA;AAE5B"}
@@ -0,0 +1,33 @@
1
+ import { Option } from '../types';
2
+ import * as React from "react";
3
+ /**
4
+ * A popover select list with an optional search box and single/multi selection.
5
+ *
6
+ * Selection state is controlled by the consumer (`selected` + `onSelect`); the
7
+ * consumer also owns option fetching. Pass `onSearch` for remote search (the
8
+ * combobox debounces the query and renders `options` as given); omit it to
9
+ * filter the provided `options` locally by label. The combobox closes itself
10
+ * after a single-select.
11
+ */
12
+ declare function Combobox({ contentClassName, emptyLabel, loading, multiple, onSearch, onSelect, open, onOpenChange, options, searchLabel, searchPlaceholder, selected, showSearch, testId, trigger, triggerClassName, triggerProps, }: {
13
+ contentClassName?: string;
14
+ emptyLabel?: string;
15
+ loading?: boolean;
16
+ multiple?: boolean;
17
+ onSearch?: (query: string) => void;
18
+ onSelect: (value: string) => void;
19
+ open: boolean;
20
+ onOpenChange: (open: boolean) => void;
21
+ options: Option[];
22
+ searchLabel?: string;
23
+ searchPlaceholder?: string;
24
+ selected: string[];
25
+ showSearch?: boolean;
26
+ testId?: string;
27
+ trigger: React.ReactNode;
28
+ triggerClassName?: string;
29
+ triggerProps?: React.ComponentProps<"button"> & {
30
+ "data-test"?: string;
31
+ };
32
+ }): React.JSX.Element;
33
+ export { Combobox };
@@ -0,0 +1,99 @@
1
+ import { cn } from "../../lib/utils.js";
2
+ import { Icon } from "../../icons/sprite.js";
3
+ import { useT } from "../../i18n/instance.js";
4
+ import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
5
+ import { useEffect, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region resources/js/core/components/combobox.tsx
8
+ var SEARCH_DEBOUNCE_MS = 250;
9
+ /**
10
+ * A popover select list with an optional search box and single/multi selection.
11
+ *
12
+ * Selection state is controlled by the consumer (`selected` + `onSelect`); the
13
+ * consumer also owns option fetching. Pass `onSearch` for remote search (the
14
+ * combobox debounces the query and renders `options` as given); omit it to
15
+ * filter the provided `options` locally by label. The combobox closes itself
16
+ * after a single-select.
17
+ */
18
+ function Combobox({ contentClassName, emptyLabel, loading = false, multiple = false, onSearch, onSelect, open, onOpenChange, options, searchLabel, searchPlaceholder, selected, showSearch = true, testId, trigger, triggerClassName, triggerProps }) {
19
+ const { t } = useT("lattice");
20
+ const [query, setQuery] = useState("");
21
+ useEffect(() => {
22
+ if (!onSearch || !open) return;
23
+ const timer = window.setTimeout(() => onSearch(query), SEARCH_DEBOUNCE_MS);
24
+ return () => window.clearTimeout(timer);
25
+ }, [
26
+ query,
27
+ onSearch,
28
+ open
29
+ ]);
30
+ const visibleOptions = onSearch ? options : options.filter((option) => option.label.toLowerCase().includes(query.toLowerCase()));
31
+ function close() {
32
+ setQuery("");
33
+ onOpenChange(false);
34
+ }
35
+ function choose(value) {
36
+ onSelect(value);
37
+ if (!multiple) close();
38
+ }
39
+ return /* @__PURE__ */ jsxs(Popover, {
40
+ open,
41
+ onOpenChange: (next) => next ? onOpenChange(true) : close(),
42
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
43
+ asChild: true,
44
+ children: /* @__PURE__ */ jsx("button", {
45
+ type: "button",
46
+ className: triggerClassName,
47
+ ...triggerProps,
48
+ children: trigger
49
+ })
50
+ }), /* @__PURE__ */ jsxs(PopoverContent, {
51
+ align: "start",
52
+ className: cn("w-[var(--radix-popover-trigger-width)] overflow-hidden p-0", contentClassName),
53
+ children: [showSearch && /* @__PURE__ */ jsxs("div", {
54
+ className: "flex items-center gap-2 border-b border-lt-border px-3 py-2",
55
+ children: [/* @__PURE__ */ jsx("input", {
56
+ "aria-label": searchLabel ?? t("a11y.searchOptions", "Search options"),
57
+ "data-slot": "combobox-search",
58
+ "data-test": testId ? `${testId}-search` : void 0,
59
+ className: "w-full bg-transparent text-sm outline-none placeholder:text-lt-muted-fg",
60
+ onChange: (event) => setQuery(event.target.value),
61
+ placeholder: searchPlaceholder,
62
+ value: query
63
+ }), loading && /* @__PURE__ */ jsx(Icon, {
64
+ name: "loader-2",
65
+ "aria-hidden": "true",
66
+ className: "size-lt-icon-md shrink-0 animate-spin text-lt-muted-fg"
67
+ })]
68
+ }), /* @__PURE__ */ jsx("div", {
69
+ className: "max-h-60 overflow-y-auto p-1",
70
+ role: "listbox",
71
+ children: visibleOptions.length === 0 ? /* @__PURE__ */ jsx("p", {
72
+ className: "px-3 py-2 text-sm text-lt-muted-fg",
73
+ children: emptyLabel
74
+ }) : visibleOptions.map((option) => {
75
+ const isSelected = selected.includes(option.value);
76
+ return /* @__PURE__ */ jsxs("button", {
77
+ "aria-selected": isSelected,
78
+ className: cn("flex w-full items-center justify-between gap-2 rounded-lt-sm px-3 py-1.5 text-left text-sm transition-colors hover:bg-lt-accent hover:text-lt-accent-fg", isSelected && "bg-lt-accent/60"),
79
+ "data-slot": "combobox-option",
80
+ "data-test": testId ? `${testId}-option-${option.value}` : void 0,
81
+ "data-value": option.value,
82
+ onClick: () => choose(option.value),
83
+ role: "option",
84
+ type: "button",
85
+ children: [option.label, isSelected && /* @__PURE__ */ jsx(Icon, {
86
+ name: "check",
87
+ "aria-hidden": "true",
88
+ className: "size-lt-icon-md shrink-0"
89
+ })]
90
+ }, option.value);
91
+ })
92
+ })]
93
+ })]
94
+ });
95
+ }
96
+ //#endregion
97
+ export { Combobox };
98
+
99
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox.js","names":[],"sources":["../../../resources/js/core/components/combobox.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { Option } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nconst SEARCH_DEBOUNCE_MS = 250;\n\n/**\n * A popover select list with an optional search box and single/multi selection.\n *\n * Selection state is controlled by the consumer (`selected` + `onSelect`); the\n * consumer also owns option fetching. Pass `onSearch` for remote search (the\n * combobox debounces the query and renders `options` as given); omit it to\n * filter the provided `options` locally by label. The combobox closes itself\n * after a single-select.\n */\nfunction Combobox({\n contentClassName,\n emptyLabel,\n loading = false,\n multiple = false,\n onSearch,\n onSelect,\n open,\n onOpenChange,\n options,\n searchLabel,\n searchPlaceholder,\n selected,\n showSearch = true,\n testId,\n trigger,\n triggerClassName,\n triggerProps,\n}: {\n contentClassName?: string;\n emptyLabel?: string;\n loading?: boolean;\n multiple?: boolean;\n onSearch?: (query: string) => void;\n onSelect: (value: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n options: Option[];\n searchLabel?: string;\n searchPlaceholder?: string;\n selected: string[];\n showSearch?: boolean;\n testId?: string;\n trigger: React.ReactNode;\n triggerClassName?: string;\n triggerProps?: React.ComponentProps<\"button\"> & { \"data-test\"?: string };\n}) {\n const { t } = useT(\"lattice\");\n const [query, setQuery] = useState(\"\");\n\n useEffect(() => {\n if (!onSearch || !open) {\n return;\n }\n\n const timer = window.setTimeout(() => onSearch(query), SEARCH_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timer);\n }, [query, onSearch, open]);\n\n const visibleOptions = onSearch\n ? options\n : options.filter((option) => option.label.toLowerCase().includes(query.toLowerCase()));\n\n function close(): void {\n setQuery(\"\");\n onOpenChange(false);\n }\n\n function choose(value: string): void {\n onSelect(value);\n\n if (!multiple) {\n close();\n }\n }\n\n return (\n <Popover open={open} onOpenChange={(next) => (next ? onOpenChange(true) : close())}>\n <PopoverTrigger asChild>\n <button type=\"button\" className={triggerClassName} {...triggerProps}>\n {trigger}\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"w-[var(--radix-popover-trigger-width)] overflow-hidden p-0\",\n contentClassName,\n )}\n >\n {showSearch && (\n <div className=\"flex items-center gap-2 border-b border-lt-border px-3 py-2\">\n <input\n aria-label={searchLabel ?? t(\"a11y.searchOptions\", \"Search options\")}\n data-slot=\"combobox-search\"\n data-test={testId ? `${testId}-search` : undefined}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-lt-muted-fg\"\n onChange={(event) => setQuery(event.target.value)}\n placeholder={searchPlaceholder}\n value={query}\n />\n {loading && (\n <Icon\n name=\"loader-2\"\n aria-hidden=\"true\"\n className=\"size-lt-icon-md shrink-0 animate-spin text-lt-muted-fg\"\n />\n )}\n </div>\n )}\n\n <div className=\"max-h-60 overflow-y-auto p-1\" role=\"listbox\">\n {visibleOptions.length === 0 ? (\n <p className=\"px-3 py-2 text-sm text-lt-muted-fg\">{emptyLabel}</p>\n ) : (\n visibleOptions.map((option) => {\n const isSelected = selected.includes(option.value);\n\n return (\n <button\n aria-selected={isSelected}\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-lt-sm px-3 py-1.5 text-left text-sm transition-colors hover:bg-lt-accent hover:text-lt-accent-fg\",\n isSelected && \"bg-lt-accent/60\",\n )}\n data-slot=\"combobox-option\"\n data-test={testId ? `${testId}-option-${option.value}` : undefined}\n data-value={option.value}\n key={option.value}\n onClick={() => choose(option.value)}\n role=\"option\"\n type=\"button\"\n >\n {option.label}\n {isSelected && (\n <Icon name=\"check\" aria-hidden=\"true\" className=\"size-lt-icon-md shrink-0\" />\n )}\n </button>\n );\n })\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n"],"mappings":";;;;;;;AAQA,IAAM,qBAAqB;;;;;;;;;;AAW3B,SAAS,SAAS,EAChB,kBACA,YACA,UAAU,OACV,WAAW,OACX,UACA,UACA,MACA,cACA,SACA,aACA,mBACA,UACA,aAAa,MACb,QACA,SACA,kBACA,gBAmBC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CAErC,gBAAgB;EACd,IAAI,CAAC,YAAY,CAAC,MAChB;EAGF,MAAM,QAAQ,OAAO,iBAAiB,SAAS,KAAK,GAAG,kBAAkB;EAEzE,aAAa,OAAO,aAAa,KAAK;CACxC,GAAG;EAAC;EAAO;EAAU;CAAI,CAAC;CAE1B,MAAM,iBAAiB,WACnB,UACA,QAAQ,QAAQ,WAAW,OAAO,MAAM,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,CAAC;CAEvF,SAAS,QAAc;EACrB,SAAS,EAAE;EACX,aAAa,KAAK;CACpB;CAEA,SAAS,OAAO,OAAqB;EACnC,SAAS,KAAK;EAEd,IAAI,CAAC,UACH,MAAM;CAEV;CAEA,OACE,qBAAC,SAAD;EAAe;EAAM,eAAe,SAAU,OAAO,aAAa,IAAI,IAAI,MAAM;YAAhF,CACE,oBAAC,gBAAD;GAAgB,SAAA;aACd,oBAAC,UAAD;IAAQ,MAAK;IAAS,WAAW;IAAkB,GAAI;cACpD;GACK,CAAA;EACM,CAAA,GAEhB,qBAAC,gBAAD;GACE,OAAM;GACN,WAAW,GACT,8DACA,gBACF;aALF,CAOG,cACC,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,SAAD;KACE,cAAY,eAAe,EAAE,sBAAsB,gBAAgB;KACnE,aAAU;KACV,aAAW,SAAS,GAAG,OAAO,WAAW,KAAA;KACzC,WAAU;KACV,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;KAChD,aAAa;KACb,OAAO;IACR,CAAA,GACA,WACC,oBAAC,MAAD;KACE,MAAK;KACL,eAAY;KACZ,WAAU;IACX,CAAA,CAEA;OAGP,oBAAC,OAAD;IAAK,WAAU;IAA+B,MAAK;cAChD,eAAe,WAAW,IACzB,oBAAC,KAAD;KAAG,WAAU;eAAsC;IAAc,CAAA,IAEjE,eAAe,KAAK,WAAW;KAC7B,MAAM,aAAa,SAAS,SAAS,OAAO,KAAK;KAEjD,OACE,qBAAC,UAAD;MACE,iBAAe;MACf,WAAW,GACT,2JACA,cAAc,iBAChB;MACA,aAAU;MACV,aAAW,SAAS,GAAG,OAAO,UAAU,OAAO,UAAU,KAAA;MACzD,cAAY,OAAO;MAEnB,eAAe,OAAO,OAAO,KAAK;MAClC,MAAK;MACL,MAAK;gBAZP,CAcG,OAAO,OACP,cACC,oBAAC,MAAD;OAAM,MAAK;OAAQ,eAAY;OAAO,WAAU;MAA4B,CAAA,CAExE;QATD,OAAO,KASN;IAEZ,CAAC;GAEA,CAAA,CACS;IACT;;AAEb"}
@@ -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,38 +1,38 @@
1
1
  import { Button } from "./button.js";
2
+ import { Dialog, DialogContent, DialogDescription, DialogTitle } from "./dialog.js";
2
3
  import { Spinner } from "./spinner.js";
3
- import { useId } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
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, {
11
+ open: true,
12
+ onOpenChange: (open) => {
13
+ if (!open) onCancel();
14
+ },
15
+ children: /* @__PURE__ */ jsxs(DialogContent, {
16
+ ...description ? {} : { "aria-describedby": void 0 },
17
+ className: "w-full max-w-md",
18
+ onEscapeKeyDown: blockWhileProcessing,
19
+ onInteractOutside: blockWhileProcessing,
15
20
  children: [/* @__PURE__ */ jsxs("div", {
16
21
  className: "grid gap-2",
17
- children: [/* @__PURE__ */ jsx("h2", {
18
- className: "text-lg font-semibold leading-none tracking-tight",
19
- id: titleId,
20
- children: title
21
- }), description && /* @__PURE__ */ jsx("p", {
22
- className: "text-sm text-lt-muted-fg",
23
- children: description
24
- })]
22
+ children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), description && /* @__PURE__ */ jsx(DialogDescription, { children: description })]
25
23
  }), /* @__PURE__ */ jsxs("div", {
26
24
  className: "mt-6 flex justify-end gap-2",
27
25
  children: [/* @__PURE__ */ jsx(Button, {
28
26
  type: "button",
29
27
  variant: "outline",
28
+ "data-test": "confirm-cancel",
30
29
  disabled: processing,
31
30
  onClick: onCancel,
32
31
  children: cancelLabel
33
32
  }), /* @__PURE__ */ jsxs(Button, {
34
33
  type: "button",
35
34
  variant: confirmVariant,
35
+ "data-test": "confirm-accept",
36
36
  disabled: processing || confirmDisabled,
37
37
  onClick: onConfirm,
38
38
  children: [processing && /* @__PURE__ */ jsx(Spinner, {}), confirmLabel]
@@ -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 type { ButtonVariant } from \"@lattice-php/lattice/types/generated\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"./dialog\";\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\n open\n onOpenChange={(open) => {\n if (!open) {\n onCancel();\n }\n }}\n >\n <DialogContent\n {...(description ? {} : { \"aria-describedby\": undefined })}\n className=\"w-full max-w-md\"\n onEscapeKeyDown={blockWhileProcessing}\n onInteractOutside={blockWhileProcessing}\n >\n <div className=\"grid gap-2\">\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\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 </DialogContent>\n </Dialog>\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,QAAD;EACE,MAAA;EACA,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,SAAS;EAEb;YAEA,qBAAC,eAAD;GACE,GAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,KAAA,EAAU;GACxD,WAAU;GACV,iBAAiB;GACjB,mBAAmB;aAJrB,CAME,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,aAAD,EAAA,UAAc,MAAmB,CAAA,GAChC,eAAe,oBAAC,mBAAD,EAAA,UAAoB,YAA+B,CAAA,CAChE;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;KACQ;;CACT,CAAA;AAEZ"}
@@ -0,0 +1,13 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ /** The focus-visible ring shared by every interactive control surface. */
3
+ export declare const FOCUS_RING = "focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px]";
4
+ /**
5
+ * The shared chrome for single-line form/table controls (text inputs, native
6
+ * selects, and the Select/filter trigger buttons). `density` is the only axis
7
+ * that differs between forms (comfortable) and table filters (compact); the
8
+ * border, focus ring, invalid, and disabled treatment are unified.
9
+ */
10
+ export declare const controlSurface: (props?: ({
11
+ density?: "comfortable" | "compact" | null | undefined;
12
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
13
+ export type ControlSurfaceVariants = VariantProps<typeof controlSurface>;
@@ -0,0 +1,27 @@
1
+ import { cva } from "class-variance-authority";
2
+ //#region resources/js/core/components/control.ts
3
+ /** The focus-visible ring shared by every interactive control surface. */
4
+ var FOCUS_RING = "focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px]";
5
+ /**
6
+ * The shared chrome for single-line form/table controls (text inputs, native
7
+ * selects, and the Select/filter trigger buttons). `density` is the only axis
8
+ * that differs between forms (comfortable) and table filters (compact); the
9
+ * border, focus ring, invalid, and disabled treatment are unified.
10
+ */
11
+ var controlSurface = cva([
12
+ "w-full min-w-0 rounded-lt-sm border border-lt-input shadow-xs outline-none transition-[color,box-shadow]",
13
+ "placeholder:text-lt-muted-fg",
14
+ FOCUS_RING,
15
+ "aria-invalid:border-lt-danger aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40",
16
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50"
17
+ ], {
18
+ variants: { density: {
19
+ comfortable: "h-9 bg-transparent px-3 py-1 text-base md:text-sm",
20
+ compact: "h-9 bg-lt-bg px-2 text-sm font-normal"
21
+ } },
22
+ defaultVariants: { density: "comfortable" }
23
+ });
24
+ //#endregion
25
+ export { FOCUS_RING, controlSurface };
26
+
27
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","names":[],"sources":["../../../resources/js/core/components/control.ts"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\n\n/** The focus-visible ring shared by every interactive control surface. */\nexport const FOCUS_RING =\n \"focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px]\";\n\n/**\n * The shared chrome for single-line form/table controls (text inputs, native\n * selects, and the Select/filter trigger buttons). `density` is the only axis\n * that differs between forms (comfortable) and table filters (compact); the\n * border, focus ring, invalid, and disabled treatment are unified.\n */\nexport const controlSurface = cva(\n [\n \"w-full min-w-0 rounded-lt-sm border border-lt-input shadow-xs outline-none transition-[color,box-shadow]\",\n \"placeholder:text-lt-muted-fg\",\n FOCUS_RING,\n \"aria-invalid:border-lt-danger aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n density: {\n comfortable: \"h-9 bg-transparent px-3 py-1 text-base md:text-sm\",\n compact: \"h-9 bg-lt-bg px-2 text-sm font-normal\",\n },\n },\n defaultVariants: { density: \"comfortable\" },\n },\n);\n\nexport type ControlSurfaceVariants = VariantProps<typeof controlSurface>;\n"],"mappings":";;;AAGA,IAAa,aACX;;;;;;;AAQF,IAAa,iBAAiB,IAC5B;CACE;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,SAAS;EACP,aAAa;EACb,SAAS;CACX,EACF;CACA,iBAAiB,EAAE,SAAS,cAAc;AAC5C,CACF"}
@@ -0,0 +1,19 @@
1
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
2
+ import * as React from "react";
3
+ export declare const DIALOG_SURFACE = "fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2 rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lg";
4
+ declare function Dialog(props: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
5
+ declare function DialogClose(props: React.ComponentProps<typeof DialogPrimitive.Close>): React.JSX.Element;
6
+ declare function DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.JSX.Element;
7
+ declare function DialogDescription({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.JSX.Element;
8
+ declare function DialogContent({ children, className, ...props }: React.ComponentProps<typeof DialogPrimitive.Content>): React.JSX.Element;
9
+ /**
10
+ * The shared dialog header: a title with an optional description and a ghost
11
+ * close button. Pass `description` as `undefined` to suppress the description
12
+ * and the matching `aria-describedby` wiring on the content.
13
+ */
14
+ declare function DialogHeader({ closeLabel, description, title, }: {
15
+ closeLabel?: string;
16
+ description?: React.ReactNode;
17
+ title: React.ReactNode;
18
+ }): React.JSX.Element;
19
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogHeader, DialogTitle };