@lattice-php/lattice 0.1.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 (277) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +39 -0
  3. package/dist/action/components/action-group.d.ts +10 -0
  4. package/dist/action/components/action-group.js +79 -0
  5. package/dist/action/components/action-group.js.map +1 -0
  6. package/dist/action/components/action.d.ts +26 -0
  7. package/dist/action/components/action.js +87 -0
  8. package/dist/action/components/action.js.map +1 -0
  9. package/dist/action/effects.d.ts +30 -0
  10. package/dist/action/effects.js +44 -0
  11. package/dist/action/effects.js.map +1 -0
  12. package/dist/action/index.d.ts +1 -0
  13. package/dist/action/index.js +15 -0
  14. package/dist/action/index.js.map +1 -0
  15. package/dist/appearance/index.d.ts +9 -0
  16. package/dist/appearance/index.js +66 -0
  17. package/dist/appearance/index.js.map +1 -0
  18. package/dist/clipboard/index.d.ts +5 -0
  19. package/dist/clipboard/index.js +24 -0
  20. package/dist/clipboard/index.js.map +1 -0
  21. package/dist/core/component-ref.d.ts +8 -0
  22. package/dist/core/component-ref.js +15 -0
  23. package/dist/core/component-ref.js.map +1 -0
  24. package/dist/core/components/badge.d.ts +19 -0
  25. package/dist/core/components/badge.js +32 -0
  26. package/dist/core/components/badge.js.map +1 -0
  27. package/dist/core/components/button.d.ts +23 -0
  28. package/dist/core/components/button.js +68 -0
  29. package/dist/core/components/button.js.map +1 -0
  30. package/dist/core/components/card.d.ts +19 -0
  31. package/dist/core/components/card.js +62 -0
  32. package/dist/core/components/card.js.map +1 -0
  33. package/dist/core/components/confirm-dialog.d.ts +13 -0
  34. package/dist/core/components/confirm-dialog.js +47 -0
  35. package/dist/core/components/confirm-dialog.js.map +1 -0
  36. package/dist/core/components/fragment.d.ts +12 -0
  37. package/dist/core/components/fragment.js +62 -0
  38. package/dist/core/components/fragment.js.map +1 -0
  39. package/dist/core/components/grid.d.ts +10 -0
  40. package/dist/core/components/grid.js +16 -0
  41. package/dist/core/components/grid.js.map +1 -0
  42. package/dist/core/components/heading.d.ts +11 -0
  43. package/dist/core/components/heading.js +39 -0
  44. package/dist/core/components/heading.js.map +1 -0
  45. package/dist/core/components/index.d.ts +1 -0
  46. package/dist/core/components/index.js +36 -0
  47. package/dist/core/components/index.js.map +1 -0
  48. package/dist/core/components/link.d.ts +18 -0
  49. package/dist/core/components/link.js +26 -0
  50. package/dist/core/components/link.js.map +1 -0
  51. package/dist/core/components/modal.d.ts +13 -0
  52. package/dist/core/components/modal.js +75 -0
  53. package/dist/core/components/modal.js.map +1 -0
  54. package/dist/core/components/segmented-control.d.ts +16 -0
  55. package/dist/core/components/segmented-control.js +30 -0
  56. package/dist/core/components/segmented-control.js.map +1 -0
  57. package/dist/core/components/segmented-pills.d.ts +13 -0
  58. package/dist/core/components/segmented-pills.js +31 -0
  59. package/dist/core/components/segmented-pills.js.map +1 -0
  60. package/dist/core/components/spinner.d.ts +2 -0
  61. package/dist/core/components/spinner.js +16 -0
  62. package/dist/core/components/spinner.js.map +1 -0
  63. package/dist/core/components/stack.d.ts +13 -0
  64. package/dist/core/components/stack.js +47 -0
  65. package/dist/core/components/stack.js.map +1 -0
  66. package/dist/core/components/tabs.d.ts +22 -0
  67. package/dist/core/components/tabs.js +118 -0
  68. package/dist/core/components/tabs.js.map +1 -0
  69. package/dist/core/components/text.d.ts +11 -0
  70. package/dist/core/components/text.js +18 -0
  71. package/dist/core/components/text.js.map +1 -0
  72. package/dist/core/props.d.ts +14 -0
  73. package/dist/core/props.js +30 -0
  74. package/dist/core/props.js.map +1 -0
  75. package/dist/core/registry.d.ts +26 -0
  76. package/dist/core/registry.js +36 -0
  77. package/dist/core/registry.js.map +1 -0
  78. package/dist/core/renderer.d.ts +16 -0
  79. package/dist/core/renderer.js +61 -0
  80. package/dist/core/renderer.js.map +1 -0
  81. package/dist/core/types.d.ts +55 -0
  82. package/dist/core/types.js +0 -0
  83. package/dist/events/event-bridge.d.ts +14 -0
  84. package/dist/events/event-bridge.js +75 -0
  85. package/dist/events/event-bridge.js.map +1 -0
  86. package/dist/events/event-names.d.ts +21 -0
  87. package/dist/events/event-names.js +22 -0
  88. package/dist/events/event-names.js.map +1 -0
  89. package/dist/form/components/base/checkbox.d.ts +4 -0
  90. package/dist/form/components/base/checkbox.js +22 -0
  91. package/dist/form/components/base/checkbox.js.map +1 -0
  92. package/dist/form/components/base/field.d.ts +9 -0
  93. package/dist/form/components/base/field.js +38 -0
  94. package/dist/form/components/base/field.js.map +1 -0
  95. package/dist/form/components/base/input-error.d.ts +4 -0
  96. package/dist/form/components/base/input-error.js +14 -0
  97. package/dist/form/components/base/input-error.js.map +1 -0
  98. package/dist/form/components/base/input.d.ts +3 -0
  99. package/dist/form/components/base/input.js +16 -0
  100. package/dist/form/components/base/input.js.map +1 -0
  101. package/dist/form/components/base/label.d.ts +4 -0
  102. package/dist/form/components/base/label.js +16 -0
  103. package/dist/form/components/base/label.js.map +1 -0
  104. package/dist/form/components/base/password-input.d.ts +7 -0
  105. package/dist/form/components/base/password-input.js +29 -0
  106. package/dist/form/components/base/password-input.js.map +1 -0
  107. package/dist/form/components/base/submit-button.d.ts +6 -0
  108. package/dist/form/components/base/submit-button.js +46 -0
  109. package/dist/form/components/base/submit-button.js.map +1 -0
  110. package/dist/form/components/base/textarea.d.ts +3 -0
  111. package/dist/form/components/base/textarea.js +15 -0
  112. package/dist/form/components/base/textarea.js.map +1 -0
  113. package/dist/form/components/conditions.d.ts +25 -0
  114. package/dist/form/components/conditions.js +62 -0
  115. package/dist/form/components/conditions.js.map +1 -0
  116. package/dist/form/components/context.d.ts +20 -0
  117. package/dist/form/components/context.js +30 -0
  118. package/dist/form/components/context.js.map +1 -0
  119. package/dist/form/components/fields/checkbox.d.ts +16 -0
  120. package/dist/form/components/fields/checkbox.js +51 -0
  121. package/dist/form/components/fields/checkbox.js.map +1 -0
  122. package/dist/form/components/fields/choice.d.ts +14 -0
  123. package/dist/form/components/fields/choice.js +49 -0
  124. package/dist/form/components/fields/choice.js.map +1 -0
  125. package/dist/form/components/fields/date-input.d.ts +20 -0
  126. package/dist/form/components/fields/date-input.js +33 -0
  127. package/dist/form/components/fields/date-input.js.map +1 -0
  128. package/dist/form/components/fields/hidden-input.d.ts +10 -0
  129. package/dist/form/components/fields/hidden-input.js +12 -0
  130. package/dist/form/components/fields/hidden-input.js.map +1 -0
  131. package/dist/form/components/fields/number-input.d.ts +23 -0
  132. package/dist/form/components/fields/number-input.js +55 -0
  133. package/dist/form/components/fields/number-input.js.map +1 -0
  134. package/dist/form/components/fields/password-input.d.ts +29 -0
  135. package/dist/form/components/fields/password-input.js +73 -0
  136. package/dist/form/components/fields/password-input.js.map +1 -0
  137. package/dist/form/components/fields/rich-editor.d.ts +17 -0
  138. package/dist/form/components/fields/rich-editor.js +302 -0
  139. package/dist/form/components/fields/rich-editor.js.map +1 -0
  140. package/dist/form/components/fields/select.d.ts +23 -0
  141. package/dist/form/components/fields/select.js +182 -0
  142. package/dist/form/components/fields/select.js.map +1 -0
  143. package/dist/form/components/fields/submit-button.d.ts +10 -0
  144. package/dist/form/components/fields/submit-button.js +14 -0
  145. package/dist/form/components/fields/submit-button.js.map +1 -0
  146. package/dist/form/components/fields/text-input.d.ts +21 -0
  147. package/dist/form/components/fields/text-input.js +33 -0
  148. package/dist/form/components/fields/text-input.js.map +1 -0
  149. package/dist/form/components/fields/textarea.d.ts +20 -0
  150. package/dist/form/components/fields/textarea.js +32 -0
  151. package/dist/form/components/fields/textarea.js.map +1 -0
  152. package/dist/form/components/form-transport.d.ts +8 -0
  153. package/dist/form/components/form-transport.js +31 -0
  154. package/dist/form/components/form-transport.js.map +1 -0
  155. package/dist/form/components/form.d.ts +21 -0
  156. package/dist/form/components/form.js +126 -0
  157. package/dist/form/components/form.js.map +1 -0
  158. package/dist/form/components/index.d.ts +11 -0
  159. package/dist/form/components/index.js +12 -0
  160. package/dist/form/components/resolved-nodes.d.ts +6 -0
  161. package/dist/form/components/resolved-nodes.js +20 -0
  162. package/dist/form/components/resolved-nodes.js.map +1 -0
  163. package/dist/form/components/types.d.ts +7 -0
  164. package/dist/form/components/types.js +0 -0
  165. package/dist/form/components/use-controlled-field.d.ts +16 -0
  166. package/dist/form/components/use-controlled-field.js +33 -0
  167. package/dist/form/components/use-controlled-field.js.map +1 -0
  168. package/dist/form/components/use-dependent-field.d.ts +3 -0
  169. package/dist/form/components/use-dependent-field.js +18 -0
  170. package/dist/form/components/use-dependent-field.js.map +1 -0
  171. package/dist/form/components/use-field-commit.d.ts +14 -0
  172. package/dist/form/components/use-field-commit.js +30 -0
  173. package/dist/form/components/use-field-commit.js.map +1 -0
  174. package/dist/form/components/use-form-resolver.d.ts +2 -0
  175. package/dist/form/components/use-form-resolver.js +57 -0
  176. package/dist/form/components/use-form-resolver.js.map +1 -0
  177. package/dist/form/components/values.d.ts +7 -0
  178. package/dist/form/components/values.js +37 -0
  179. package/dist/form/components/values.js.map +1 -0
  180. package/dist/form/index.d.ts +1 -0
  181. package/dist/form/index.js +33 -0
  182. package/dist/form/index.js.map +1 -0
  183. package/dist/form/skeleton.d.ts +2 -0
  184. package/dist/form/skeleton.js +21 -0
  185. package/dist/form/skeleton.js.map +1 -0
  186. package/dist/generated/types.d.ts +17 -0
  187. package/dist/generated/types.js +0 -0
  188. package/dist/icons/default-icons.d.ts +3 -0
  189. package/dist/icons/default-icons.js +44 -0
  190. package/dist/icons/default-icons.js.map +1 -0
  191. package/dist/icons/dynamic-lucide-renderer.d.ts +2 -0
  192. package/dist/icons/dynamic-lucide-renderer.js +18 -0
  193. package/dist/icons/dynamic-lucide-renderer.js.map +1 -0
  194. package/dist/icons/icon-renderer.d.ts +14 -0
  195. package/dist/icons/icon-renderer.js +35 -0
  196. package/dist/icons/icon-renderer.js.map +1 -0
  197. package/dist/icons/index.d.ts +2 -0
  198. package/dist/icons/index.js +2 -0
  199. package/dist/index.d.ts +22 -0
  200. package/dist/index.js +14 -0
  201. package/dist/inertia.d.ts +17 -0
  202. package/dist/inertia.js +26 -0
  203. package/dist/inertia.js.map +1 -0
  204. package/dist/lattice.css +247 -0
  205. package/dist/lib/utils.d.ts +4 -0
  206. package/dist/lib/utils.js +13 -0
  207. package/dist/lib/utils.js.map +1 -0
  208. package/dist/menu/index.d.ts +1 -0
  209. package/dist/menu/index.js +2 -0
  210. package/dist/menu/use-menu.d.ts +2 -0
  211. package/dist/menu/use-menu.js +9 -0
  212. package/dist/menu/use-menu.js.map +1 -0
  213. package/dist/page.d.ts +6 -0
  214. package/dist/page.js +30 -0
  215. package/dist/page.js.map +1 -0
  216. package/dist/provider.d.ts +7 -0
  217. package/dist/provider.js +19 -0
  218. package/dist/provider.js.map +1 -0
  219. package/dist/registry.d.ts +1 -0
  220. package/dist/registry.js +11 -0
  221. package/dist/registry.js.map +1 -0
  222. package/dist/table/bulk.d.ts +18 -0
  223. package/dist/table/bulk.js +44 -0
  224. package/dist/table/bulk.js.map +1 -0
  225. package/dist/table/components/bulk-bar.d.ts +11 -0
  226. package/dist/table/components/bulk-bar.js +76 -0
  227. package/dist/table/components/bulk-bar.js.map +1 -0
  228. package/dist/table/components/column-filter-control.d.ts +14 -0
  229. package/dist/table/components/column-filter-control.js +244 -0
  230. package/dist/table/components/column-filter-control.js.map +1 -0
  231. package/dist/table/components/column-header.d.ts +7 -0
  232. package/dist/table/components/column-header.js +37 -0
  233. package/dist/table/components/column-header.js.map +1 -0
  234. package/dist/table/components/filter-stack-bar.d.ts +7 -0
  235. package/dist/table/components/filter-stack-bar.js +35 -0
  236. package/dist/table/components/filter-stack-bar.js.map +1 -0
  237. package/dist/table/components/filter-value-input.d.ts +11 -0
  238. package/dist/table/components/filter-value-input.js +82 -0
  239. package/dist/table/components/filter-value-input.js.map +1 -0
  240. package/dist/table/components/pagination.d.ts +14 -0
  241. package/dist/table/components/pagination.js +67 -0
  242. package/dist/table/components/pagination.js.map +1 -0
  243. package/dist/table/components/sort-bar.d.ts +7 -0
  244. package/dist/table/components/sort-bar.js +43 -0
  245. package/dist/table/components/sort-bar.js.map +1 -0
  246. package/dist/table/components/table-action-node.d.ts +4 -0
  247. package/dist/table/components/table-action-node.js +24 -0
  248. package/dist/table/components/table-action-node.js.map +1 -0
  249. package/dist/table/components/table-cell.d.ts +5 -0
  250. package/dist/table/components/table-cell.js +63 -0
  251. package/dist/table/components/table-cell.js.map +1 -0
  252. package/dist/table/components/table.d.ts +3 -0
  253. package/dist/table/components/table.js +189 -0
  254. package/dist/table/components/table.js.map +1 -0
  255. package/dist/table/format.d.ts +3 -0
  256. package/dist/table/format.js +41 -0
  257. package/dist/table/format.js.map +1 -0
  258. package/dist/table/index.d.ts +1 -0
  259. package/dist/table/index.js +10 -0
  260. package/dist/table/index.js.map +1 -0
  261. package/dist/table/payload.d.ts +9 -0
  262. package/dist/table/payload.js +46 -0
  263. package/dist/table/payload.js.map +1 -0
  264. package/dist/table/query.d.ts +12 -0
  265. package/dist/table/query.js +83 -0
  266. package/dist/table/query.js.map +1 -0
  267. package/dist/table/types.d.ts +67 -0
  268. package/dist/table/types.js +0 -0
  269. package/dist/table/use-table-selection.d.ts +12 -0
  270. package/dist/table/use-table-selection.js +46 -0
  271. package/dist/table/use-table-selection.js.map +1 -0
  272. package/dist/table/use-table.d.ts +19 -0
  273. package/dist/table/use-table.js +157 -0
  274. package/dist/table/use-table.js.map +1 -0
  275. package/dist/types/index.d.ts +2 -0
  276. package/dist/types/index.js +0 -0
  277. package/package.json +151 -0
@@ -0,0 +1,37 @@
1
+ import { createContext, useCallback, useContext, useMemo, useState } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region resources/js/form/components/values.tsx
4
+ var FormValuesContext = createContext({
5
+ values: {},
6
+ setValue: () => {}
7
+ });
8
+ function FormValuesProvider({ initial, children }) {
9
+ const [values, setValues] = useState(initial);
10
+ const setValue = useCallback((name, value) => {
11
+ setValues((current) => Object.is(current[name], value) ? current : {
12
+ ...current,
13
+ [name]: value
14
+ });
15
+ }, []);
16
+ const contextValue = useMemo(() => ({
17
+ values,
18
+ setValue
19
+ }), [values, setValue]);
20
+ return /* @__PURE__ */ jsx(FormValuesContext.Provider, {
21
+ value: contextValue,
22
+ children
23
+ });
24
+ }
25
+ function useFormValues() {
26
+ return useContext(FormValuesContext).values;
27
+ }
28
+ function useFormValue(name) {
29
+ return useContext(FormValuesContext).values[name];
30
+ }
31
+ function useSetFormValue() {
32
+ return useContext(FormValuesContext).setValue;
33
+ }
34
+ //#endregion
35
+ export { FormValuesProvider, useFormValue, useFormValues, useSetFormValue };
36
+
37
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","names":[],"sources":["../../../resources/js/form/components/values.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useMemo, useState } from \"react\";\n\ntype FormValuesContextValue = {\n values: Record<string, unknown>;\n setValue: (name: string, value: unknown) => void;\n};\n\nconst FormValuesContext = createContext<FormValuesContextValue>({\n values: {},\n setValue: () => {},\n});\n\nexport function FormValuesProvider({\n initial,\n children,\n}: {\n initial: Record<string, unknown>;\n children: React.ReactNode;\n}) {\n const [values, setValues] = useState<Record<string, unknown>>(initial);\n\n const setValue = useCallback((name: string, value: unknown) => {\n setValues((current) =>\n Object.is(current[name], value) ? current : { ...current, [name]: value },\n );\n }, []);\n\n const contextValue = useMemo(() => ({ values, setValue }), [values, setValue]);\n\n return <FormValuesContext.Provider value={contextValue}>{children}</FormValuesContext.Provider>;\n}\n\nexport function useFormValues(): Record<string, unknown> {\n return useContext(FormValuesContext).values;\n}\n\nexport function useFormValue(name: string): unknown {\n return useContext(FormValuesContext).values[name];\n}\n\nexport function useSetFormValue(): (name: string, value: unknown) => void {\n return useContext(FormValuesContext).setValue;\n}\n"],"mappings":";;;AAOA,IAAM,oBAAoB,cAAsC;CAC9D,QAAQ,CAAC;CACT,gBAAgB,CAAC;AACnB,CAAC;AAED,SAAgB,mBAAmB,EACjC,SACA,YAIC;CACD,MAAM,CAAC,QAAQ,aAAa,SAAkC,OAAO;CAErE,MAAM,WAAW,aAAa,MAAc,UAAmB;EAC7D,WAAW,YACT,OAAO,GAAG,QAAQ,OAAO,KAAK,IAAI,UAAU;GAAE,GAAG;IAAU,OAAO;EAAM,CAC1E;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,eAAe;EAAE;EAAQ;CAAS,IAAI,CAAC,QAAQ,QAAQ,CAAC;CAE7E,OAAO,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO;EAAe;CAAqC,CAAA;AAChG;AAEA,SAAgB,gBAAyC;CACvD,OAAO,WAAW,iBAAiB,EAAE;AACvC;AAEA,SAAgB,aAAa,MAAuB;CAClD,OAAO,WAAW,iBAAiB,EAAE,OAAO;AAC9C;AAEA,SAAgB,kBAA0D;CACxE,OAAO,WAAW,iBAAiB,EAAE;AACvC"}
@@ -0,0 +1 @@
1
+ export declare const formComponents: import('../../../core/registry').Plugin;
@@ -0,0 +1,33 @@
1
+ import { createPlugin, lazyComponent } from "../core/registry.js";
2
+ import { FormSkeletonComponent } from "./skeleton.js";
3
+ //#region resources/js/form/index.ts
4
+ var loadFormComponents = () => import("./components/index.js");
5
+ function loadFormComponent(name) {
6
+ return async () => {
7
+ return { default: (await loadFormComponents())[name] };
8
+ };
9
+ }
10
+ var formComponents = createPlugin({
11
+ components: {
12
+ form: lazyComponent(loadFormComponent("FormComponent"), { fallback: FormSkeletonComponent }),
13
+ "form.checkbox": lazyComponent(loadFormComponent("CheckboxComponent")),
14
+ "form.choice": lazyComponent(loadFormComponent("ChoiceComponent")),
15
+ "form.date-input": lazyComponent(loadFormComponent("DateInputComponent")),
16
+ "form.hidden-input": lazyComponent(loadFormComponent("HiddenInputComponent")),
17
+ "form.number-input": lazyComponent(loadFormComponent("NumberInputComponent")),
18
+ "form.password-input": lazyComponent(loadFormComponent("PasswordInputComponent")),
19
+ "form.rich-editor": lazyComponent(async () => {
20
+ const { RichEditorComponent } = await import("./components/fields/rich-editor.js");
21
+ return { default: RichEditorComponent };
22
+ }),
23
+ "form.select": lazyComponent(loadFormComponent("SelectComponent")),
24
+ "form.submit-button": lazyComponent(loadFormComponent("SubmitButtonComponent")),
25
+ "form.textarea": lazyComponent(loadFormComponent("TextareaComponent")),
26
+ "form.text-input": lazyComponent(loadFormComponent("TextInputComponent"))
27
+ },
28
+ name: "lattice/form"
29
+ });
30
+ //#endregion
31
+ export { formComponents };
32
+
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../resources/js/form/index.ts"],"sourcesContent":["import { createPlugin, lazyComponent } from \"@lattice/lattice/core/registry\";\nimport type { RendererComponent, RendererComponentModule } from \"@lattice/lattice/core/types\";\nimport { FormSkeletonComponent } from \"./skeleton\";\n\ntype FormComponentName =\n | \"CheckboxComponent\"\n | \"ChoiceComponent\"\n | \"DateInputComponent\"\n | \"FormComponent\"\n | \"HiddenInputComponent\"\n | \"NumberInputComponent\"\n | \"PasswordInputComponent\"\n | \"SelectComponent\"\n | \"SubmitButtonComponent\"\n | \"TextareaComponent\"\n | \"TextInputComponent\";\n\nconst loadFormComponents = () => import(\"./components\");\n\nfunction loadFormComponent<TType extends string>(\n name: FormComponentName,\n): () => Promise<RendererComponentModule<TType>> {\n return async () => {\n const components = await loadFormComponents();\n\n return {\n default: components[name] as RendererComponent<TType>,\n };\n };\n}\n\nexport const formComponents = createPlugin({\n components: {\n form: lazyComponent(loadFormComponent(\"FormComponent\"), {\n fallback: FormSkeletonComponent,\n }),\n \"form.checkbox\": lazyComponent(loadFormComponent(\"CheckboxComponent\")),\n \"form.choice\": lazyComponent(loadFormComponent(\"ChoiceComponent\")),\n \"form.date-input\": lazyComponent(loadFormComponent(\"DateInputComponent\")),\n \"form.hidden-input\": lazyComponent(loadFormComponent(\"HiddenInputComponent\")),\n \"form.number-input\": lazyComponent(loadFormComponent(\"NumberInputComponent\")),\n \"form.password-input\": lazyComponent(loadFormComponent(\"PasswordInputComponent\")),\n // Loaded from its own module so TipTap is split into a separate chunk,\n // only fetched on pages that actually render a rich editor.\n \"form.rich-editor\": lazyComponent<\"form.rich-editor\">(async () => {\n const { RichEditorComponent } = await import(\"./components/fields/rich-editor\");\n\n return { default: RichEditorComponent };\n }),\n \"form.select\": lazyComponent(loadFormComponent(\"SelectComponent\")),\n \"form.submit-button\": lazyComponent(loadFormComponent(\"SubmitButtonComponent\")),\n \"form.textarea\": lazyComponent(loadFormComponent(\"TextareaComponent\")),\n \"form.text-input\": lazyComponent(loadFormComponent(\"TextInputComponent\")),\n },\n name: \"lattice/form\",\n});\n"],"mappings":";;;AAiBA,IAAM,2BAA2B,OAAO;AAExC,SAAS,kBACP,MAC+C;CAC/C,OAAO,YAAY;EAGjB,OAAO,EACL,UAAS,MAHc,mBAAmB,GAGtB,MACtB;CACF;AACF;AAEA,IAAa,iBAAiB,aAAa;CACzC,YAAY;EACV,MAAM,cAAc,kBAAkB,eAAe,GAAG,EACtD,UAAU,sBACZ,CAAC;EACD,iBAAiB,cAAc,kBAAkB,mBAAmB,CAAC;EACrE,eAAe,cAAc,kBAAkB,iBAAiB,CAAC;EACjE,mBAAmB,cAAc,kBAAkB,oBAAoB,CAAC;EACxE,qBAAqB,cAAc,kBAAkB,sBAAsB,CAAC;EAC5E,qBAAqB,cAAc,kBAAkB,sBAAsB,CAAC;EAC5E,uBAAuB,cAAc,kBAAkB,wBAAwB,CAAC;EAGhF,oBAAoB,cAAkC,YAAY;GAChE,MAAM,EAAE,wBAAwB,MAAM,OAAO;GAE7C,OAAO,EAAE,SAAS,oBAAoB;EACxC,CAAC;EACD,eAAe,cAAc,kBAAkB,iBAAiB,CAAC;EACjE,sBAAsB,cAAc,kBAAkB,uBAAuB,CAAC;EAC9E,iBAAiB,cAAc,kBAAkB,mBAAmB,CAAC;EACrE,mBAAmB,cAAc,kBAAkB,oBAAoB,CAAC;CAC1E;CACA,MAAM;AACR,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { RendererComponent } from '../../../core/types';
2
+ export declare const FormSkeletonComponent: RendererComponent<"form">;
@@ -0,0 +1,21 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ //#region resources/js/form/skeleton.tsx
3
+ var FormSkeletonComponent = ({ node }) => {
4
+ const fieldCount = Math.max(1, Math.min(4, node.children?.find((child) => child.type === "grid")?.children?.filter((child) => child.type !== "form.hidden-input").length ?? 2));
5
+ return /* @__PURE__ */ jsx("div", {
6
+ "aria-hidden": "true",
7
+ className: "mx-auto flex w-full max-w-md animate-pulse flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface p-6 shadow-xs",
8
+ "data-lattice-skeleton": node.id ?? node.type,
9
+ children: /* @__PURE__ */ jsxs("div", {
10
+ className: "grid gap-6",
11
+ children: [Array.from({ length: fieldCount }).map((_, index) => /* @__PURE__ */ jsxs("div", {
12
+ className: "grid gap-2",
13
+ children: [/* @__PURE__ */ jsx("div", { className: "h-4 w-28 rounded bg-lt-muted" }), /* @__PURE__ */ jsx("div", { className: "h-10 rounded-lt-sm bg-lt-muted" })]
14
+ }, index)), /* @__PURE__ */ jsx("div", { className: "mt-4 h-10 rounded-lt-sm bg-lt-muted" })]
15
+ })
16
+ });
17
+ };
18
+ //#endregion
19
+ export { FormSkeletonComponent };
20
+
21
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","names":[],"sources":["../../resources/js/form/skeleton.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nexport const FormSkeletonComponent: RendererComponent<\"form\"> = ({ node }) => {\n const fieldCount = Math.max(\n 1,\n Math.min(\n 4,\n node.children\n ?.find((child) => child.type === \"grid\")\n ?.children?.filter((child) => child.type !== \"form.hidden-input\").length ?? 2,\n ),\n );\n\n return (\n <div\n aria-hidden=\"true\"\n className=\"mx-auto flex w-full max-w-md animate-pulse flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface p-6 shadow-xs\"\n data-lattice-skeleton={node.id ?? node.type}\n >\n <div className=\"grid gap-6\">\n {Array.from({ length: fieldCount }).map((_, index) => (\n <div className=\"grid gap-2\" key={index}>\n <div className=\"h-4 w-28 rounded bg-lt-muted\" />\n <div className=\"h-10 rounded-lt-sm bg-lt-muted\" />\n </div>\n ))}\n\n <div className=\"mt-4 h-10 rounded-lt-sm bg-lt-muted\" />\n </div>\n </div>\n );\n};\n"],"mappings":";;AAEA,IAAa,yBAAoD,EAAE,WAAW;CAC5E,MAAM,aAAa,KAAK,IACtB,GACA,KAAK,IACH,GACA,KAAK,UACD,MAAM,UAAU,MAAM,SAAS,MAAM,GACrC,UAAU,QAAQ,UAAU,MAAM,SAAS,mBAAmB,EAAE,UAAU,CAChF,CACF;CAEA,OACE,oBAAC,OAAD;EACE,eAAY;EACZ,WAAU;EACV,yBAAuB,KAAK,MAAM,KAAK;YAEvC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,MAAM,KAAK,EAAE,QAAQ,WAAW,CAAC,EAAE,KAAK,GAAG,UAC1C,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,OAAD,EAAK,WAAU,+BAAgC,CAAA,GAC/C,oBAAC,OAAD,EAAK,WAAU,iCAAkC,CAAA,CAC9C;MAH4B,KAG5B,CACN,GAED,oBAAC,OAAD,EAAK,WAAU,sCAAuC,CAAA,CACnD;;CACF,CAAA;AAET"}
@@ -0,0 +1,17 @@
1
+ export type Align = 'center' | 'left' | 'start' | 'stretch';
2
+ export type ConditionOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in' | 'empty' | 'filled';
3
+ export type ControlType = 'text' | 'number' | 'date' | 'boolean';
4
+ export type EffectType = 'toast' | 'reloadComponent' | 'reloadPage' | 'redirect' | 'download' | 'openModal' | 'closeModal' | 'resetForm';
5
+ export type FilterOperator = 'contains' | 'starts_with' | 'ends_with' | 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'before' | 'after' | 'empty' | 'filled';
6
+ export type Gap = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
7
+ export type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
8
+ export type PageContainer = 'centered' | 'default';
9
+ export type PageLayout = 'app' | 'auth' | 'none';
10
+ export type PaginationType = 'none' | 'simple' | 'table' | 'infinite';
11
+ export type SortDirection = 'asc' | 'desc';
12
+ export type TableSort = {
13
+ readonly key: string;
14
+ readonly direction: SortDirection;
15
+ };
16
+ export type ToastVariant = 'success' | 'info' | 'warning' | 'error';
17
+ export type Width = 'full' | 'sm' | 'md' | 'lg';
File without changes
@@ -0,0 +1,3 @@
1
+ import { IconRendererProps } from '../../..';
2
+ export declare function renderBundledIcon({ className, icon }: IconRendererProps): import("react").JSX.Element | null;
3
+ export declare function renderMissingIcon({ className }: IconRendererProps): import("react").JSX.Element;
@@ -0,0 +1,44 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { ArrowDown, ArrowUp, Check, ChevronsUpDown, CircleHelp, Copy, ExternalLink, EyeOff, LayoutDashboard, Link, MoreHorizontal, Pencil, PencilLine, Send, Settings, Trash2, X } from "lucide-react";
4
+ //#region resources/js/icons/default-icons.tsx
5
+ var bundledIcons = {
6
+ "arrow-down": ArrowDown,
7
+ "arrow-up": ArrowUp,
8
+ check: Check,
9
+ "chevrons-up-down": ChevronsUpDown,
10
+ copy: Copy,
11
+ delete: Trash2,
12
+ edit: PencilLine,
13
+ "external-link": ExternalLink,
14
+ "eye-off": EyeOff,
15
+ "layout-dashboard": LayoutDashboard,
16
+ link: Link,
17
+ "more-horizontal": MoreHorizontal,
18
+ pencil: Pencil,
19
+ "pencil-line": PencilLine,
20
+ send: Send,
21
+ settings: Settings,
22
+ trash: Trash2,
23
+ "trash-2": Trash2,
24
+ x: X
25
+ };
26
+ function renderBundledIcon({ className, icon }) {
27
+ const Icon = bundledIcons[icon];
28
+ if (!Icon) return null;
29
+ return /* @__PURE__ */ jsx(Icon, {
30
+ "aria-hidden": "true",
31
+ className: cn("size-4", className)
32
+ });
33
+ }
34
+ function renderMissingIcon({ className }) {
35
+ return /* @__PURE__ */ jsx(CircleHelp, {
36
+ "aria-hidden": "true",
37
+ className: cn("size-4 text-lt-muted-fg", className),
38
+ "data-lattice-missing-icon": ""
39
+ });
40
+ }
41
+ //#endregion
42
+ export { renderBundledIcon, renderMissingIcon };
43
+
44
+ //# sourceMappingURL=default-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-icons.js","names":[],"sources":["../../resources/js/icons/default-icons.tsx"],"sourcesContent":["import {\n ArrowDown,\n ArrowUp,\n Check,\n ChevronsUpDown,\n CircleHelp,\n Copy,\n ExternalLink,\n EyeOff,\n LayoutDashboard,\n Link,\n MoreHorizontal,\n Pencil,\n PencilLine,\n Send,\n Settings,\n Trash2,\n X,\n} from \"lucide-react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { IconRendererProps } from \"@lattice/lattice\";\n\nconst bundledIcons = {\n \"arrow-down\": ArrowDown,\n \"arrow-up\": ArrowUp,\n check: Check,\n \"chevrons-up-down\": ChevronsUpDown,\n copy: Copy,\n delete: Trash2,\n edit: PencilLine,\n \"external-link\": ExternalLink,\n \"eye-off\": EyeOff,\n \"layout-dashboard\": LayoutDashboard,\n link: Link,\n \"more-horizontal\": MoreHorizontal,\n pencil: Pencil,\n \"pencil-line\": PencilLine,\n send: Send,\n settings: Settings,\n trash: Trash2,\n \"trash-2\": Trash2,\n x: X,\n};\n\nexport function renderBundledIcon({ className, icon }: IconRendererProps) {\n const Icon = bundledIcons[icon as keyof typeof bundledIcons];\n\n if (!Icon) {\n return null;\n }\n\n return <Icon aria-hidden=\"true\" className={cn(\"size-4\", className)} />;\n}\n\nexport function renderMissingIcon({ className }: IconRendererProps) {\n return (\n <CircleHelp\n aria-hidden=\"true\"\n className={cn(\"size-4 text-lt-muted-fg\", className)}\n data-lattice-missing-icon=\"\"\n />\n );\n}\n"],"mappings":";;;;AAsBA,IAAM,eAAe;CACnB,cAAc;CACd,YAAY;CACZ,OAAO;CACP,oBAAoB;CACpB,MAAM;CACN,QAAQ;CACR,MAAM;CACN,iBAAiB;CACjB,WAAW;CACX,oBAAoB;CACpB,MAAM;CACN,mBAAmB;CACnB,QAAQ;CACR,eAAe;CACf,MAAM;CACN,UAAU;CACV,OAAO;CACP,WAAW;CACX,GAAG;AACL;AAEA,SAAgB,kBAAkB,EAAE,WAAW,QAA2B;CACxE,MAAM,OAAO,aAAa;CAE1B,IAAI,CAAC,MACH,OAAO;CAGT,OAAO,oBAAC,MAAD;EAAM,eAAY;EAAO,WAAW,GAAG,UAAU,SAAS;CAAI,CAAA;AACvE;AAEA,SAAgB,kBAAkB,EAAE,aAAgC;CAClE,OACE,oBAAC,YAAD;EACE,eAAY;EACZ,WAAW,GAAG,2BAA2B,SAAS;EAClD,6BAA0B;CAC3B,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { IconRendererProps } from '../../..';
2
+ export declare function renderDynamicLucideIcon({ className, icon }: IconRendererProps): import("react").JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { DynamicIcon, iconNames } from "lucide-react/dynamic";
4
+ //#region resources/js/icons/dynamic-lucide-renderer.tsx
5
+ var lucideIconNames = new Set(iconNames);
6
+ function renderDynamicLucideIcon({ className, icon }) {
7
+ if (!lucideIconNames.has(icon)) return null;
8
+ return /* @__PURE__ */ jsx(DynamicIcon, {
9
+ "aria-hidden": "true",
10
+ className: cn("size-4", className),
11
+ fallback: () => null,
12
+ name: icon
13
+ });
14
+ }
15
+ //#endregion
16
+ export { renderDynamicLucideIcon };
17
+
18
+ //# sourceMappingURL=dynamic-lucide-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-lucide-renderer.js","names":[],"sources":["../../resources/js/icons/dynamic-lucide-renderer.tsx"],"sourcesContent":["import { DynamicIcon, iconNames } from \"lucide-react/dynamic\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { IconRendererProps } from \"@lattice/lattice\";\n\ntype LucideIconName = (typeof iconNames)[number];\n\nconst lucideIconNames = new Set<string>(iconNames);\n\nexport function renderDynamicLucideIcon({ className, icon }: IconRendererProps) {\n if (!lucideIconNames.has(icon)) {\n return null;\n }\n\n return (\n <DynamicIcon\n aria-hidden=\"true\"\n className={cn(\"size-4\", className)}\n fallback={() => null}\n name={icon as LucideIconName}\n />\n );\n}\n"],"mappings":";;;;AAMA,IAAM,kBAAkB,IAAI,IAAY,SAAS;AAEjD,SAAgB,wBAAwB,EAAE,WAAW,QAA2B;CAC9E,IAAI,CAAC,gBAAgB,IAAI,IAAI,GAC3B,OAAO;CAGT,OACE,oBAAC,aAAD;EACE,eAAY;EACZ,WAAW,GAAG,UAAU,SAAS;EACjC,gBAAgB;EAChB,MAAM;CACP,CAAA;AAEL"}
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ export type IconRendererProps = {
3
+ className?: string;
4
+ icon: string;
5
+ };
6
+ export type IconRendererFunction = (props: IconRendererProps) => ReactNode;
7
+ type IconRendererProviderProps = {
8
+ children: ReactNode;
9
+ mode?: "replace" | "stack";
10
+ renderer: IconRendererFunction;
11
+ };
12
+ export declare function IconRendererProvider({ children, mode, renderer, }: IconRendererProviderProps): import("react").JSX.Element;
13
+ export declare function IconRenderer({ className, icon }: IconRendererProps): string | number | bigint | true | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element;
14
+ export {};
@@ -0,0 +1,35 @@
1
+ import { renderBundledIcon, renderMissingIcon } from "./default-icons.js";
2
+ import { createContext, useContext, useMemo } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region resources/js/icons/icon-renderer.tsx
5
+ var IconRenderersContext = createContext([renderBundledIcon]);
6
+ function IconRendererProvider({ children, mode = "stack", renderer }) {
7
+ const parentRenderers = useContext(IconRenderersContext);
8
+ const renderers = useMemo(() => mode === "replace" ? [renderer] : [renderer, ...parentRenderers], [
9
+ mode,
10
+ parentRenderers,
11
+ renderer
12
+ ]);
13
+ return /* @__PURE__ */ jsx(IconRenderersContext.Provider, {
14
+ value: renderers,
15
+ children
16
+ });
17
+ }
18
+ function IconRenderer({ className, icon }) {
19
+ const renderers = useContext(IconRenderersContext);
20
+ for (const renderer of renderers) {
21
+ const rendered = renderer({
22
+ className,
23
+ icon
24
+ });
25
+ if (rendered !== null && rendered !== void 0 && rendered !== false) return rendered;
26
+ }
27
+ return renderMissingIcon({
28
+ className,
29
+ icon
30
+ });
31
+ }
32
+ //#endregion
33
+ export { IconRenderer, IconRendererProvider };
34
+
35
+ //# sourceMappingURL=icon-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-renderer.js","names":[],"sources":["../../resources/js/icons/icon-renderer.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { renderBundledIcon, renderMissingIcon } from \"./default-icons\";\n\nexport type IconRendererProps = {\n className?: string;\n icon: string;\n};\n\nexport type IconRendererFunction = (props: IconRendererProps) => ReactNode;\n\ntype IconRendererProviderProps = {\n children: ReactNode;\n mode?: \"replace\" | \"stack\";\n renderer: IconRendererFunction;\n};\n\nconst IconRenderersContext = createContext<IconRendererFunction[]>([renderBundledIcon]);\nconst loggedMissingIcons = new Set<string>();\n\nexport function IconRendererProvider({\n children,\n mode = \"stack\",\n renderer,\n}: IconRendererProviderProps) {\n const parentRenderers = useContext(IconRenderersContext);\n const renderers = useMemo(\n () => (mode === \"replace\" ? [renderer] : [renderer, ...parentRenderers]),\n [mode, parentRenderers, renderer],\n );\n\n return (\n <IconRenderersContext.Provider value={renderers}>{children}</IconRenderersContext.Provider>\n );\n}\n\nexport function IconRenderer({ className, icon }: IconRendererProps) {\n const renderers = useContext(IconRenderersContext);\n\n for (const renderer of renderers) {\n const rendered = renderer({ className, icon });\n\n if (rendered !== null && rendered !== undefined && rendered !== false) {\n return rendered;\n }\n }\n\n logMissingIcon(icon);\n\n return renderMissingIcon({ className, icon });\n}\n\nfunction logMissingIcon(icon: string): void {\n if (!import.meta.env.DEV || loggedMissingIcons.has(icon)) {\n return;\n }\n\n loggedMissingIcons.add(icon);\n console.log(`[Lattice] Missing icon renderer for \"${icon}\".`);\n}\n"],"mappings":";;;;AAiBA,IAAM,uBAAuB,cAAsC,CAAC,iBAAiB,CAAC;AAGtF,SAAgB,qBAAqB,EACnC,UACA,OAAO,SACP,YAC4B;CAC5B,MAAM,kBAAkB,WAAW,oBAAoB;CACvD,MAAM,YAAY,cACT,SAAS,YAAY,CAAC,QAAQ,IAAI,CAAC,UAAU,GAAG,eAAe,GACtE;EAAC;EAAM;EAAiB;CAAQ,CAClC;CAEA,OACE,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAY;CAAwC,CAAA;AAE9F;AAEA,SAAgB,aAAa,EAAE,WAAW,QAA2B;CACnE,MAAM,YAAY,WAAW,oBAAoB;CAEjD,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,WAAW,SAAS;GAAE;GAAW;EAAK,CAAC;EAE7C,IAAI,aAAa,QAAQ,aAAa,KAAA,KAAa,aAAa,OAC9D,OAAO;CAEX;CAIA,OAAO,kBAAkB;EAAE;EAAW;CAAK,CAAC;AAC9C"}
@@ -0,0 +1,2 @@
1
+ export { IconRenderer, IconRendererProvider } from './icon-renderer';
2
+ export type { IconRendererFunction, IconRendererProps } from './icon-renderer';
@@ -0,0 +1,2 @@
1
+ import { IconRenderer, IconRendererProvider } from "./icon-renderer.js";
2
+ export { IconRenderer, IconRendererProvider };
@@ -0,0 +1,22 @@
1
+ export { registry } from './registry';
2
+ export { dispatchActionEffects, dispatchActionError, getActionEffects, isActionEffect, } from './action/effects';
3
+ export { initializeTheme, useAppearance } from './appearance';
4
+ export { copyToClipboard, useClipboard } from './clipboard';
5
+ export { EventBridge } from './events/event-bridge';
6
+ export { IconRenderer, IconRendererProvider } from './icons';
7
+ export { createLayoutResolver, createPageResolver, pageComponentName } from './inertia';
8
+ export { useMenu } from './menu';
9
+ export { Provider, useRegistry } from './provider';
10
+ export { createPlugin, createRegistry, eagerComponent, extendRegistry, lazyComponent, } from './core/registry';
11
+ export { Renderer } from './core/renderer';
12
+ export { LATTICE_REF_HEADER, withRefHeader } from './core/component-ref';
13
+ export { LATTICE_EVENT } from './events/event-names';
14
+ export type { ButtonVariant } from './core/components/button';
15
+ export type { ReloadComponentEvent } from './events/event-names';
16
+ export type { ComponentProps, ComponentType, KnownPageContainer, MenuGroup, MenuItem, MenuPayload, Node, NodeProps, PageContainer, PageBreadcrumb, PagePayload, RendererComponent, RendererComponentModule, RendererComponentProps, UnknownComponent, } from './core/types';
17
+ export type { Method } from '@inertiajs/core';
18
+ export type { ActionEffect } from './action/effects';
19
+ export type { ResolvedAppearance, UseAppearanceReturn } from './appearance';
20
+ export type { CopiedValue, CopyFn, UseClipboardReturn } from './clipboard';
21
+ export type { Appearance, ToastMessage, ToastVariant } from './events/event-bridge';
22
+ export type { IconRendererFunction, IconRendererProps } from './icons';
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ import { createPlugin, createRegistry, eagerComponent, extendRegistry, lazyComponent } from "./core/registry.js";
2
+ import { LATTICE_REF_HEADER, withRefHeader } from "./core/component-ref.js";
3
+ import { IconRenderer, IconRendererProvider } from "./icons/icon-renderer.js";
4
+ import { LATTICE_EVENT } from "./events/event-names.js";
5
+ import { dispatchActionEffects, dispatchActionError, getActionEffects, isActionEffect } from "./action/effects.js";
6
+ import { Renderer } from "./core/renderer.js";
7
+ import { registry } from "./registry.js";
8
+ import { initializeTheme, useAppearance } from "./appearance/index.js";
9
+ import { copyToClipboard, useClipboard } from "./clipboard/index.js";
10
+ import { EventBridge } from "./events/event-bridge.js";
11
+ import { Provider, useRegistry } from "./provider.js";
12
+ import { createLayoutResolver, createPageResolver, pageComponentName } from "./inertia.js";
13
+ import { useMenu } from "./menu/use-menu.js";
14
+ export { EventBridge, IconRenderer, IconRendererProvider, LATTICE_EVENT, LATTICE_REF_HEADER, Provider, Renderer, copyToClipboard, createLayoutResolver, createPageResolver, createPlugin, createRegistry, dispatchActionEffects, dispatchActionError, eagerComponent, extendRegistry, getActionEffects, initializeTheme, isActionEffect, lazyComponent, pageComponentName, registry, useAppearance, useClipboard, useMenu, useRegistry, withRefHeader };
@@ -0,0 +1,17 @@
1
+ import { Page as InertiaPage } from '@inertiajs/core';
2
+ import { ResolvedComponent } from '@inertiajs/react';
3
+ export declare const pageComponentName = "lattice/page";
4
+ export type ResolvedPage = ResolvedComponent | Promise<ResolvedComponent> | {
5
+ default: ResolvedComponent;
6
+ };
7
+ export type PageModules = Record<string, () => Promise<ResolvedComponent>>;
8
+ export type Layouts = {
9
+ app: unknown;
10
+ auth: unknown;
11
+ };
12
+ export type CreateLayoutResolverOptions = {
13
+ defaultLayout?: (name: string, page: InertiaPage) => unknown;
14
+ layouts: Layouts;
15
+ };
16
+ export declare function createPageResolver(pages: PageModules): (name: string) => ResolvedPage;
17
+ export declare function createLayoutResolver({ defaultLayout, layouts }: CreateLayoutResolverOptions): (name: string, page: InertiaPage) => unknown;
@@ -0,0 +1,26 @@
1
+ import Page from "./page.js";
2
+ //#region resources/js/inertia.ts
3
+ var pageComponentName = "lattice/page";
4
+ function createPageResolver(pages) {
5
+ return (name) => {
6
+ if (name === "lattice/page") return { default: Page };
7
+ const resolvedPage = pages[`./pages/${name}.tsx`];
8
+ if (resolvedPage) return resolvedPage();
9
+ throw new Error(`Page not found: ${name}`);
10
+ };
11
+ }
12
+ function createLayoutResolver({ defaultLayout, layouts }) {
13
+ return (name, page) => {
14
+ if (name === "lattice/page") {
15
+ const lattice = page.props.lattice;
16
+ if (lattice?.layout === "app") return [layouts.app, { breadcrumbs: lattice.breadcrumbs }];
17
+ if (lattice?.layout === "auth") return layouts.auth;
18
+ return null;
19
+ }
20
+ return defaultLayout?.(name, page) ?? layouts.app;
21
+ };
22
+ }
23
+ //#endregion
24
+ export { createLayoutResolver, createPageResolver, pageComponentName };
25
+
26
+ //# sourceMappingURL=inertia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inertia.js","names":[],"sources":["../resources/js/inertia.ts"],"sourcesContent":["import type { Page as InertiaPage } from \"@inertiajs/core\";\nimport type { ResolvedComponent } from \"@inertiajs/react\";\nimport Page from \"./page\";\nimport type { PagePayload } from \"./core/types\";\n\nexport const pageComponentName = \"lattice/page\";\n\nexport type ResolvedPage =\n | ResolvedComponent\n | Promise<ResolvedComponent>\n | { default: ResolvedComponent };\nexport type PageModules = Record<string, () => Promise<ResolvedComponent>>;\n\nexport type Layouts = {\n app: unknown;\n auth: unknown;\n};\n\nexport type CreateLayoutResolverOptions = {\n defaultLayout?: (name: string, page: InertiaPage) => unknown;\n layouts: Layouts;\n};\n\nexport function createPageResolver(pages: PageModules) {\n return (name: string): ResolvedPage => {\n if (name === pageComponentName) {\n return { default: Page };\n }\n\n const resolvedPage = pages[`./pages/${name}.tsx`];\n\n if (resolvedPage) {\n return resolvedPage();\n }\n\n throw new Error(`Page not found: ${name}`);\n };\n}\n\nexport function createLayoutResolver({ defaultLayout, layouts }: CreateLayoutResolverOptions) {\n return (name: string, page: InertiaPage): unknown => {\n if (name === pageComponentName) {\n const lattice = page.props.lattice as PagePayload | undefined;\n\n if (lattice?.layout === \"app\") {\n return [layouts.app, { breadcrumbs: lattice.breadcrumbs }];\n }\n\n if (lattice?.layout === \"auth\") {\n return layouts.auth;\n }\n\n return null;\n }\n\n return defaultLayout?.(name, page) ?? layouts.app;\n };\n}\n"],"mappings":";;AAKA,IAAa,oBAAoB;AAkBjC,SAAgB,mBAAmB,OAAoB;CACrD,QAAQ,SAA+B;EACrC,IAAI,SAAA,gBACF,OAAO,EAAE,SAAS,KAAK;EAGzB,MAAM,eAAe,MAAM,WAAW,KAAK;EAE3C,IAAI,cACF,OAAO,aAAa;EAGtB,MAAM,IAAI,MAAM,mBAAmB,MAAM;CAC3C;AACF;AAEA,SAAgB,qBAAqB,EAAE,eAAe,WAAwC;CAC5F,QAAQ,MAAc,SAA+B;EACnD,IAAI,SAAA,gBAA4B;GAC9B,MAAM,UAAU,KAAK,MAAM;GAE3B,IAAI,SAAS,WAAW,OACtB,OAAO,CAAC,QAAQ,KAAK,EAAE,aAAa,QAAQ,YAAY,CAAC;GAG3D,IAAI,SAAS,WAAW,QACtB,OAAO,QAAQ;GAGjB,OAAO;EACT;EAEA,OAAO,gBAAgB,MAAM,IAAI,KAAK,QAAQ;CAChD;AACF"}
@@ -0,0 +1,247 @@
1
+ /*
2
+ * Register Lattice's component sources with Tailwind. Consumers import this
3
+ * stylesheet from the Composer-installed package, so the path resolves into
4
+ * vendor and Tailwind generates the utilities the components use.
5
+ */
6
+ @source "./**/*.js";
7
+
8
+ :root,
9
+ [data-theme="light"] {
10
+ --lt-bg: var(--background, oklch(1 0 0));
11
+ --lt-fg: var(--foreground, oklch(0.145 0 0));
12
+ --lt-surface: var(--card, oklch(1 0 0));
13
+ --lt-surface-fg: var(--card-foreground, oklch(0.145 0 0));
14
+ --lt-popover: var(--popover, oklch(1 0 0));
15
+ --lt-popover-fg: var(--popover-foreground, oklch(0.145 0 0));
16
+ --lt-primary: var(--primary, oklch(0.205 0 0));
17
+ --lt-primary-fg: var(--primary-foreground, oklch(0.985 0 0));
18
+ --lt-secondary: var(--secondary, oklch(0.97 0 0));
19
+ --lt-secondary-fg: var(--secondary-foreground, oklch(0.205 0 0));
20
+ --lt-muted: var(--muted, oklch(0.97 0 0));
21
+ --lt-muted-fg: var(--muted-foreground, oklch(0.556 0 0));
22
+ --lt-accent: var(--accent, oklch(0.97 0 0));
23
+ --lt-accent-fg: var(--accent-foreground, oklch(0.205 0 0));
24
+ --lt-danger: var(--destructive, oklch(0.577 0.245 27.325));
25
+ --lt-danger-fg: var(--destructive-foreground, oklch(0.985 0 0));
26
+ --lt-border: var(--border, oklch(0.922 0 0));
27
+ --lt-input: var(--input, oklch(0.922 0 0));
28
+ --lt-ring: var(--ring, oklch(0.87 0 0));
29
+ --lt-radius: var(--radius, 0.625rem);
30
+ --lt-radius-sm: calc(var(--lt-radius) - 2px);
31
+ --lt-radius-xs: calc(var(--lt-radius) - 4px);
32
+
33
+ color-scheme: light;
34
+ }
35
+
36
+ [data-theme="dark"],
37
+ .dark {
38
+ --lt-bg: var(--background, oklch(0.145 0 0));
39
+ --lt-fg: var(--foreground, oklch(0.985 0 0));
40
+ --lt-surface: var(--card, oklch(0.145 0 0));
41
+ --lt-surface-fg: var(--card-foreground, oklch(0.985 0 0));
42
+ --lt-popover: var(--popover, oklch(0.145 0 0));
43
+ --lt-popover-fg: var(--popover-foreground, oklch(0.985 0 0));
44
+ --lt-primary: var(--primary, oklch(0.985 0 0));
45
+ --lt-primary-fg: var(--primary-foreground, oklch(0.205 0 0));
46
+ --lt-secondary: var(--secondary, oklch(0.269 0 0));
47
+ --lt-secondary-fg: var(--secondary-foreground, oklch(0.985 0 0));
48
+ --lt-muted: var(--muted, oklch(0.269 0 0));
49
+ --lt-muted-fg: var(--muted-foreground, oklch(0.708 0 0));
50
+ --lt-accent: var(--accent, oklch(0.269 0 0));
51
+ --lt-accent-fg: var(--accent-foreground, oklch(0.985 0 0));
52
+ --lt-danger: var(--destructive, oklch(0.396 0.141 25.723));
53
+ --lt-danger-fg: var(--destructive-foreground, oklch(0.985 0 0));
54
+ --lt-border: var(--border, oklch(0.269 0 0));
55
+ --lt-input: var(--input, oklch(0.269 0 0));
56
+ --lt-ring: var(--ring, oklch(0.439 0 0));
57
+
58
+ color-scheme: dark;
59
+ }
60
+
61
+ @theme inline {
62
+ --color-lt-bg: var(--lt-bg);
63
+ --color-lt-fg: var(--lt-fg);
64
+ --color-lt-surface: var(--lt-surface);
65
+ --color-lt-surface-fg: var(--lt-surface-fg);
66
+ --color-lt-popover: var(--lt-popover);
67
+ --color-lt-popover-fg: var(--lt-popover-fg);
68
+ --color-lt-primary: var(--lt-primary);
69
+ --color-lt-primary-fg: var(--lt-primary-fg);
70
+ --color-lt-secondary: var(--lt-secondary);
71
+ --color-lt-secondary-fg: var(--lt-secondary-fg);
72
+ --color-lt-muted: var(--lt-muted);
73
+ --color-lt-muted-fg: var(--lt-muted-fg);
74
+ --color-lt-accent: var(--lt-accent);
75
+ --color-lt-accent-fg: var(--lt-accent-fg);
76
+ --color-lt-danger: var(--lt-danger);
77
+ --color-lt-danger-fg: var(--lt-danger-fg);
78
+ --color-lt-border: var(--lt-border);
79
+ --color-lt-input: var(--lt-input);
80
+ --color-lt-ring: var(--lt-ring);
81
+ --radius-lt: var(--lt-radius);
82
+ --radius-lt-sm: var(--lt-radius-sm);
83
+ --radius-lt-xs: var(--lt-radius-xs);
84
+ }
85
+
86
+ /*
87
+ * Rich text content styling. Applied to the rich editor and reusable for rendered
88
+ * output (wrap stored HTML in `.lattice-prose`). Restores the element styles that
89
+ * Tailwind's preflight resets, using the theme tokens so it adapts to dark mode.
90
+ * `:where()` keeps specificity low so consumers can override freely.
91
+ */
92
+ .lattice-prose :where(h1) {
93
+ font-size: 1.5rem;
94
+ line-height: 2rem;
95
+ font-weight: 700;
96
+ margin: 1rem 0 0.5rem;
97
+ }
98
+
99
+ .lattice-prose :where(h2) {
100
+ font-size: 1.25rem;
101
+ line-height: 1.75rem;
102
+ font-weight: 700;
103
+ margin: 1rem 0 0.5rem;
104
+ }
105
+
106
+ .lattice-prose :where(h3) {
107
+ font-size: 1.125rem;
108
+ line-height: 1.5rem;
109
+ font-weight: 600;
110
+ margin: 0.75rem 0 0.5rem;
111
+ }
112
+
113
+ .lattice-prose :where(p) {
114
+ margin: 0.5rem 0;
115
+ }
116
+
117
+ .lattice-prose :where(ul) {
118
+ list-style: disc;
119
+ padding-left: 1.5rem;
120
+ margin: 0.5rem 0;
121
+ }
122
+
123
+ .lattice-prose :where(ol) {
124
+ list-style: decimal;
125
+ padding-left: 1.5rem;
126
+ margin: 0.5rem 0;
127
+ }
128
+
129
+ .lattice-prose :where(li) {
130
+ margin: 0.25rem 0;
131
+ }
132
+
133
+ .lattice-prose :where(li p) {
134
+ margin: 0;
135
+ }
136
+
137
+ .lattice-prose :where(blockquote) {
138
+ border-left: 3px solid var(--lt-border);
139
+ padding-left: 1rem;
140
+ margin: 0.75rem 0;
141
+ color: var(--lt-muted-fg);
142
+ font-style: italic;
143
+ }
144
+
145
+ .lattice-prose :where(strong) {
146
+ font-weight: 700;
147
+ }
148
+
149
+ .lattice-prose :where(em) {
150
+ font-style: italic;
151
+ }
152
+
153
+ .lattice-prose :where(s) {
154
+ text-decoration: line-through;
155
+ }
156
+
157
+ .lattice-prose :where(u) {
158
+ text-decoration: underline;
159
+ text-underline-offset: 2px;
160
+ }
161
+
162
+ .lattice-prose :where(mark) {
163
+ background: var(--lt-warning, #fef08a);
164
+ color: inherit;
165
+ border-radius: var(--lt-radius-sm);
166
+ padding: 0.05em 0.15em;
167
+ }
168
+
169
+ .lattice-prose :where(a) {
170
+ color: var(--lt-primary);
171
+ text-decoration: underline;
172
+ text-underline-offset: 2px;
173
+ }
174
+
175
+ .lattice-prose :where(code) {
176
+ background: var(--lt-muted);
177
+ border-radius: var(--lt-radius-sm);
178
+ padding: 0.125rem 0.25rem;
179
+ font-family: ui-monospace, "SFMono-Regular", "Menlo", monospace;
180
+ font-size: 0.875em;
181
+ }
182
+
183
+ .lattice-prose :where(pre) {
184
+ background: var(--lt-muted);
185
+ border-radius: var(--lt-radius-sm);
186
+ padding: 0.75rem 1rem;
187
+ margin: 0.75rem 0;
188
+ overflow-x: auto;
189
+ font-family: ui-monospace, "SFMono-Regular", "Menlo", monospace;
190
+ font-size: 0.875rem;
191
+ }
192
+
193
+ .lattice-prose :where(pre code) {
194
+ background: transparent;
195
+ padding: 0;
196
+ font-size: inherit;
197
+ }
198
+
199
+ .lattice-prose :where(hr) {
200
+ border: none;
201
+ border-top: 1px solid var(--lt-border);
202
+ margin: 1rem 0;
203
+ }
204
+
205
+ .lattice-prose :where(table) {
206
+ border-collapse: collapse;
207
+ width: 100%;
208
+ margin: 0.75rem 0;
209
+ table-layout: fixed;
210
+ overflow: hidden;
211
+ }
212
+
213
+ .lattice-prose :where(th, td) {
214
+ border: 1px solid var(--lt-border);
215
+ padding: 0.375rem 0.5rem;
216
+ text-align: left;
217
+ vertical-align: top;
218
+ }
219
+
220
+ .lattice-prose :where(th) {
221
+ background: var(--lt-muted);
222
+ font-weight: 600;
223
+ }
224
+
225
+ .lattice-prose :where(.selectedCell) {
226
+ background: var(--lt-accent);
227
+ }
228
+
229
+ .lattice-prose :where(details) {
230
+ border: 1px solid var(--lt-border);
231
+ border-radius: var(--lt-radius-sm);
232
+ padding: 0.5rem 0.75rem;
233
+ margin: 0.75rem 0;
234
+ }
235
+
236
+ .lattice-prose :where(summary) {
237
+ cursor: pointer;
238
+ font-weight: 600;
239
+ }
240
+
241
+ .lattice-prose :where(:first-child) {
242
+ margin-top: 0;
243
+ }
244
+
245
+ .lattice-prose :where(:last-child) {
246
+ margin-bottom: 0;
247
+ }
@@ -0,0 +1,4 @@
1
+ import { InertiaLinkProps } from '@inertiajs/react';
2
+ import { ClassValue } from 'clsx';
3
+ export declare function cn(...inputs: ClassValue[]): string;
4
+ export declare function toUrl(url: NonNullable<InertiaLinkProps["href"]>): string;