treege 3.0.0-beta.8 → 3.0.0-beta.80

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 (216) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +448 -79
  3. package/dist/DefaultSubmitButton-Bk5U_6Qm.js +1819 -0
  4. package/dist/ThemeContext-DeWmeqHK.js +978 -0
  5. package/dist/editor/components/input/ComboboxWithCreate.d.ts +2 -1
  6. package/dist/editor/components/styles/EditorStyles.d.ts +2 -0
  7. package/dist/editor/constants/defaultNode.d.ts +1 -1
  8. package/dist/editor/constants/edgeTypes.d.ts +3 -2
  9. package/dist/editor/constants/inputTypeIcons.d.ts +3 -0
  10. package/dist/editor/constants/nodeSpacing.d.ts +25 -0
  11. package/dist/editor/constants/nodeTypes.d.ts +4 -5
  12. package/dist/editor/context/OpenApiContext.d.ts +79 -0
  13. package/dist/editor/context/TreegeEditorRuntimeProvider.d.ts +78 -0
  14. package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +1 -1
  15. package/dist/editor/features/TreegeEditor/controls/MiniMapControl.d.ts +6 -0
  16. package/dist/editor/features/TreegeEditor/dialogs/AuthorizeDialog.d.ts +20 -0
  17. package/dist/editor/features/TreegeEditor/dialogs/ChangeNodeTypeDialog.d.ts +2 -0
  18. package/dist/editor/features/TreegeEditor/dialogs/DeleteNodeDialog.d.ts +2 -0
  19. package/dist/editor/features/TreegeEditor/dialogs/HeadersDialog.d.ts +19 -0
  20. package/dist/editor/features/TreegeEditor/dialogs/OpenApiDialog.d.ts +6 -0
  21. package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +2 -2
  22. package/dist/editor/features/TreegeEditor/edges/DefaultEdge.d.ts +3 -0
  23. package/dist/editor/features/TreegeEditor/forms/HttpConfigForm.d.ts +4 -1
  24. package/dist/editor/features/TreegeEditor/forms/JsonTemplateEditor.d.ts +13 -0
  25. package/dist/editor/features/TreegeEditor/forms/OptionsMappingFields.d.ts +34 -0
  26. package/dist/editor/features/TreegeEditor/forms/OptionsSourceForm.d.ts +7 -0
  27. package/dist/editor/features/TreegeEditor/forms/SensitiveHeaderWarning.d.ts +13 -0
  28. package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
  29. package/dist/editor/features/TreegeEditor/inputs/ApiUrlCombobox.d.ts +20 -0
  30. package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
  31. package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
  32. package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +22 -1
  33. package/dist/editor/features/TreegeEditor/layout/AutoLayout.d.ts +15 -0
  34. package/dist/editor/features/TreegeEditor/listeners/FlowChangeEmitter.d.ts +19 -0
  35. package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +5 -0
  36. package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +25 -0
  37. package/dist/editor/features/TreegeEditor/nodes/components/NodeGroupBadge.d.ts +6 -0
  38. package/dist/editor/features/TreegeEditor/nodes/components/NodeImage.d.ts +5 -0
  39. package/dist/editor/features/TreegeEditor/nodes/components/NodeImageButton.d.ts +6 -0
  40. package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +12 -0
  41. package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +10 -0
  42. package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
  43. package/dist/editor/features/TreegeEditor/nodes/components/NodeRequiredButton.d.ts +6 -0
  44. package/dist/editor/features/TreegeEditor/nodes/components/NodeStackOrderButtons.d.ts +6 -0
  45. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
  46. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypePickerMenuContent.d.ts +12 -0
  47. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +4 -2
  48. package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
  49. package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -2
  50. package/dist/editor/features/TreegeEditor/panel/MultiSelectionPanel.d.ts +7 -0
  51. package/dist/editor/hooks/useAvailableParentFields.d.ts +13 -0
  52. package/dist/editor/hooks/useFlowActions.d.ts +6 -2
  53. package/dist/editor/hooks/useFlowConnections.d.ts +14 -0
  54. package/dist/editor/hooks/useFlowContent.d.ts +16 -0
  55. package/dist/editor/hooks/useHistoryStore.d.ts +26 -0
  56. package/dist/editor/hooks/useIsStackedEdge.d.ts +8 -0
  57. package/dist/editor/hooks/useKeyValueRows.d.ts +15 -0
  58. package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
  59. package/dist/editor/hooks/useStackPosition.d.ts +14 -0
  60. package/dist/editor/hooks/useTranslate.d.ts +1 -1
  61. package/dist/editor/hooks/useUndoRedo.d.ts +31 -0
  62. package/dist/editor/types/ai.d.ts +65 -0
  63. package/dist/editor/types/editor.d.ts +106 -10
  64. package/dist/editor/types/openapi.d.ts +106 -0
  65. package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
  66. package/dist/editor/utils/cleanEmptyData.d.ts +18 -0
  67. package/dist/editor/utils/cleanNodeConfig.d.ts +5 -0
  68. package/dist/editor/utils/dagreLayout.d.ts +8 -0
  69. package/dist/editor/utils/edge.d.ts +50 -0
  70. package/dist/editor/utils/groupColor.d.ts +14 -0
  71. package/dist/editor/utils/image.d.ts +7 -0
  72. package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
  73. package/dist/editor/utils/jsonBindTarget.d.ts +15 -0
  74. package/dist/editor/utils/openApiPayload.d.ts +12 -0
  75. package/dist/editor/utils/openapi.d.ts +35 -0
  76. package/dist/editor/utils/sensitiveHeaders.d.ts +20 -0
  77. package/dist/editor/utils/stackPositionIndex.d.ts +9 -0
  78. package/dist/editor-Dw_ODEe1.js +6507 -0
  79. package/dist/editor.js +3 -7
  80. package/dist/main.js +6 -52
  81. package/dist/renderer/context/TreegeRenderRuntimeProvider.d.ts +135 -0
  82. package/dist/renderer/context/TreegeRendererProvider.d.ts +15 -0
  83. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
  84. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
  85. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputLabel.d.ts +10 -0
  86. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputWrapper.d.ts +9 -0
  87. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +20 -15
  88. package/dist/renderer/features/TreegeRenderer/native/components/DefaultLoadingSkeleton.d.ts +8 -0
  89. package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +3 -0
  90. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
  91. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
  92. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
  93. package/dist/renderer/features/TreegeRenderer/native/components/DependencyHint.d.ts +15 -0
  94. package/dist/renderer/features/TreegeRenderer/native/components/OptionItemContent.d.ts +17 -0
  95. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
  96. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  97. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  98. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
  99. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  100. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
  101. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
  102. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
  103. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
  104. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
  105. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
  106. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
  107. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
  108. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
  109. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
  110. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
  111. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
  112. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  113. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +97 -24
  114. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  115. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +3 -2
  116. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputLabel.d.ts +9 -0
  117. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputWrapper.d.ts +9 -0
  118. package/dist/renderer/features/TreegeRenderer/web/components/DefaultLoadingSkeleton.d.ts +7 -0
  119. package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +3 -0
  120. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +5 -1
  121. package/dist/renderer/features/TreegeRenderer/web/components/DependencyHint.d.ts +22 -0
  122. package/dist/renderer/features/TreegeRenderer/web/components/OptionItemContent.d.ts +17 -0
  123. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
  124. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
  125. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
  126. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
  127. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
  128. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
  129. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
  130. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
  131. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
  132. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
  133. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
  134. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
  135. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +11 -0
  136. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
  137. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
  138. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
  139. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
  140. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
  141. package/dist/renderer/features/TreegeRenderer/web/components/styles/RendererStyles.d.ts +2 -0
  142. package/dist/renderer/hooks/useInputOptions.d.ts +28 -0
  143. package/dist/renderer/hooks/useRenderNode.d.ts +62 -0
  144. package/dist/renderer/hooks/useSubmitHandler.d.ts +36 -0
  145. package/dist/renderer/hooks/useTranslate.d.ts +7 -5
  146. package/dist/renderer/index.d.ts +5 -2
  147. package/dist/renderer/index.native.d.ts +20 -0
  148. package/dist/renderer/types/renderer.d.ts +316 -42
  149. package/dist/renderer/utils/flow.d.ts +1 -18
  150. package/dist/renderer/utils/form.d.ts +54 -2
  151. package/dist/renderer/utils/http.d.ts +177 -0
  152. package/dist/renderer/utils/jsonTemplate.d.ts +30 -0
  153. package/dist/renderer/utils/node.d.ts +29 -1
  154. package/dist/renderer/utils/sanitize.d.ts +85 -0
  155. package/dist/renderer/utils/sanitize.native.d.ts +69 -0
  156. package/dist/renderer/utils/step.d.ts +27 -0
  157. package/dist/renderer/utils/submit.d.ts +49 -0
  158. package/dist/renderer/utils/templateDependencies.d.ts +17 -0
  159. package/dist/renderer-CN83AtIp.js +256 -0
  160. package/dist/renderer-native.d.ts +2 -0
  161. package/dist/renderer-native.js +3703 -0
  162. package/dist/renderer.js +5 -45
  163. package/dist/shared/components/ui/badge.d.ts +2 -2
  164. package/dist/shared/components/ui/button.d.ts +3 -3
  165. package/dist/shared/components/ui/collapsible.d.ts +1 -1
  166. package/dist/shared/components/ui/command.d.ts +1 -1
  167. package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
  168. package/dist/shared/components/ui/field.d.ts +24 -0
  169. package/dist/shared/components/ui/form.d.ts +1 -1
  170. package/dist/shared/components/ui/item.d.ts +23 -0
  171. package/dist/shared/components/ui/popover.d.ts +10 -2
  172. package/dist/shared/components/ui/select.d.ts +3 -1
  173. package/dist/shared/components/ui/sheet.d.ts +1 -1
  174. package/dist/shared/components/ui/skeleton.d.ts +3 -0
  175. package/dist/shared/components/ui/toggle-group.d.ts +7 -0
  176. package/dist/shared/components/ui/toggle.d.ts +9 -0
  177. package/dist/shared/components/ui/tooltip.d.ts +1 -1
  178. package/dist/shared/constants/colors.d.ts +45 -0
  179. package/dist/shared/constants/inputType.d.ts +6 -0
  180. package/dist/shared/constants/node.d.ts +0 -1
  181. package/dist/shared/context/PortalContainerContext.d.ts +5 -0
  182. package/dist/shared/context/ThemeContext.d.ts +2 -0
  183. package/dist/shared/context/ThemeContext.native.d.ts +22 -0
  184. package/dist/shared/hooks/useMediaQuery.d.ts +12 -0
  185. package/dist/shared/hooks/useThemeColors.d.ts +37 -0
  186. package/dist/shared/locales/ar.json.d.ts +258 -19
  187. package/dist/shared/locales/de.json.d.ts +259 -20
  188. package/dist/shared/locales/en.json.d.ts +260 -21
  189. package/dist/shared/locales/es.json.d.ts +259 -20
  190. package/dist/shared/locales/fr.json.d.ts +259 -20
  191. package/dist/shared/locales/it.json.d.ts +259 -20
  192. package/dist/shared/locales/pt.json.d.ts +259 -20
  193. package/dist/shared/types/edge.d.ts +6 -0
  194. package/dist/shared/types/node.d.ts +153 -18
  195. package/dist/shared/utils/httpRecord.d.ts +20 -0
  196. package/dist/shared/utils/inputTypeGuards.d.ts +7 -0
  197. package/dist/shared/utils/nodeTypeGuards.d.ts +1 -6
  198. package/dist/shared/utils/normalizeLabel.d.ts +21 -0
  199. package/dist/useRenderNode-BZ7fZJxT.js +527 -0
  200. package/package.json +54 -22
  201. package/dist/ThemeContext-BIvs8Kw-.js +0 -758
  202. package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
  203. package/dist/TreegeRenderer-D3EvsEfJ.js +0 -1413
  204. package/dist/editor/context/TreegeEditorContext.d.ts +0 -12
  205. package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +0 -2
  206. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
  207. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
  208. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +0 -6
  209. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
  210. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
  211. package/dist/editor/hooks/useEdgesSelection.d.ts +0 -11
  212. package/dist/renderer/context/TreegeConfigContext.d.ts +0 -39
  213. package/dist/renderer/context/TreegeRendererContext.d.ts +0 -25
  214. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +0 -7
  215. package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +0 -6
  216. /package/dist/editor/components/{data-display/logo.d.ts → branding/Logo.d.ts} +0 -0
@@ -0,0 +1,527 @@
1
+ import { B as e, D as t, E as n, H as r, I as i, L as a, M as o, O as s, T as c, U as l, V as u, a as d, c as f, d as p, f as m, i as h, j as g, k as _, l as v, o as y, p as b, s as x, u as S, w as C, y as ee } from "./ThemeContext-DeWmeqHK.js";
2
+ import { Fragment as w, createContext as T, useCallback as E, useContext as D, useEffect as O, useMemo as k, useRef as A, useState as j } from "react";
3
+ import { jsx as M } from "react/jsx-runtime";
4
+ //#region src/renderer/context/TreegeRendererProvider.tsx
5
+ var N = T(void 0), te = () => D(N), P = ({ children: e, ...t }) => /* @__PURE__ */ M(N.Provider, {
6
+ value: t,
7
+ children: e
8
+ }), F = async (e, r, i, a, o) => {
9
+ if (!e.url || e.url.trim() === "") return {
10
+ error: "No URL configured for submission",
11
+ success: !1
12
+ };
13
+ let l = _(t(e.url, r, { encode: !0 }), o);
14
+ if (!l || l.trim() === "") return {
15
+ error: "Invalid URL after template replacement",
16
+ success: !1
17
+ };
18
+ let u = e.payloadTemplate ? ee(e.payloadTemplate, r, i) : void 0, d = await C({
19
+ body: u === void 0 ? e.sendAllFormValues ? JSON.stringify(x(r, i)) : void 0 : JSON.stringify(u),
20
+ headers: c(s(a, r), s(e.headers, r)),
21
+ method: e.method || "POST",
22
+ queryParams: s(e.queryParams, r),
23
+ url: l
24
+ });
25
+ if (!d.success) return {
26
+ data: d.data,
27
+ error: d.error,
28
+ success: !1
29
+ };
30
+ let f = e.redirectUrl ? (() => {
31
+ let t = n(e.redirectUrl, d.data);
32
+ return t && t.trim() !== "" ? t : void 0;
33
+ })() : void 0;
34
+ return {
35
+ data: d.data,
36
+ redirectUrl: f,
37
+ success: !0
38
+ };
39
+ }, I = (e) => {
40
+ e && (e.startsWith("http://") || e.startsWith("https://") ? window.location.href = e : window.history?.pushState ? (window.history.pushState({}, "", e), window.dispatchEvent(new PopStateEvent("popstate"))) : window.location.href = e);
41
+ }, ne = (t, n, i, a, o, s) => {
42
+ let [c, l] = j(!1), [u, d] = j(null), f = k(() => {
43
+ let e = t.find((e) => r(e) && e.data?.type === "submit");
44
+ return e && r(e) ? e : null;
45
+ }, [t]), p = E(async (t) => {
46
+ if (!f?.data?.submitConfig) return null;
47
+ let r = f.data.submitConfig;
48
+ if (!r.url || r.url.trim() === "") return null;
49
+ d(null), r.showLoading !== !1 && l(!0);
50
+ try {
51
+ let c = await F(r, n, a, o, s);
52
+ if (c.success) {
53
+ let n = e(r.successMessage, i);
54
+ if (n && d({
55
+ message: n,
56
+ type: "success"
57
+ }), t && t(c.data), c.redirectUrl) {
58
+ let e = c.redirectUrl;
59
+ setTimeout(() => I(e), 1e3);
60
+ }
61
+ } else d({
62
+ message: e(r.errorMessage, i) || c.error || "An error occurred during submission",
63
+ type: "error"
64
+ });
65
+ return c;
66
+ } catch (t) {
67
+ let n = e(r.errorMessage, i) || (t instanceof Error ? t.message : "An unexpected error occurred");
68
+ return d({
69
+ message: n,
70
+ type: "error"
71
+ }), {
72
+ error: n,
73
+ success: !1
74
+ };
75
+ } finally {
76
+ l(!1);
77
+ }
78
+ }, [
79
+ f,
80
+ n,
81
+ i,
82
+ a,
83
+ o,
84
+ s
85
+ ]);
86
+ return {
87
+ clearSubmitMessage: E(() => {
88
+ d(null);
89
+ }, []),
90
+ handleSubmitWithConfig: p,
91
+ hasSubmitConfig: !!f?.data?.submitConfig,
92
+ isSubmitting: c,
93
+ submitButtonNode: f,
94
+ submitMessage: u
95
+ };
96
+ }, L = (e) => e == null ? null : typeof e == "boolean" || typeof e == "number" ? e : typeof e == "string" ? e === "" ? null : e : typeof e == "object" ? JSON.stringify(e) : String(e), R = (e, t, n) => {
97
+ let r = L(e), i = L(t);
98
+ if (r === null || i === null) switch (n) {
99
+ case "===": return r === i;
100
+ case "!==": return r !== i;
101
+ default: return !1;
102
+ }
103
+ if ([
104
+ ">",
105
+ "<",
106
+ ">=",
107
+ "<="
108
+ ].includes(n)) {
109
+ let e = Number(r), t = Number(i);
110
+ if (!(Number.isNaN(e) || Number.isNaN(t))) switch (n) {
111
+ case ">": return e > t;
112
+ case "<": return e < t;
113
+ case ">=": return e >= t;
114
+ case "<=": return e <= t;
115
+ default: return !1;
116
+ }
117
+ return !1;
118
+ }
119
+ switch (n) {
120
+ case "===": {
121
+ let e = Number(r), t = Number(i);
122
+ return Number.isNaN(e) || Number.isNaN(t) ? String(r) === String(i) : e === t;
123
+ }
124
+ case "!==": {
125
+ let e = Number(r), t = Number(i);
126
+ return Number.isNaN(e) || Number.isNaN(t) ? String(r) !== String(i) : e !== t;
127
+ }
128
+ default: return !1;
129
+ }
130
+ }, z = (e, t, n) => {
131
+ let { field: i, operator: a, value: o } = e;
132
+ if (!(i && a) || o === void 0) return !0;
133
+ let s = t[i], c = s === void 0 && n ? n.get(i) : void 0, l = c && r(c) ? t[c.id] : s;
134
+ return Array.isArray(l) ? a === "===" ? l.some((e) => R(e, o, "===")) || R(l, o, "===") : a === "!==" ? l.every((e) => R(e, o, "!==")) && R(l, o, "!==") : l.some((e) => R(e, o, a)) : R(l, o, a);
135
+ }, B = (e, t, n) => {
136
+ if (!e || e.length === 0) return !0;
137
+ if (e.length === 1) return z(e[0], t, n);
138
+ let r = z(e[0], t, n);
139
+ for (let i = 1; i < e.length; i += 1) {
140
+ let o = e[i], s = z(o, t, n), c = e[i - 1].logicalOperator || a.AND;
141
+ if (c === a.AND) {
142
+ if (r &&= s, !r) return !1;
143
+ } else if (c === a.OR && (r ||= s, r)) return !0;
144
+ }
145
+ return r;
146
+ }, V = (e) => {
147
+ let t = /* @__PURE__ */ new Map();
148
+ return e.forEach((e) => {
149
+ let n = t.get(e.source);
150
+ n ? n.push(e) : t.set(e.source, [e]);
151
+ }), t;
152
+ }, re = (e, t, n) => {
153
+ let i = [], a = [], o = [];
154
+ e.forEach((e) => {
155
+ let t = e.data?.isFallback, n = e.data?.conditions?.length;
156
+ t ? o.push(e) : n ? a.push(e) : i.push(e);
157
+ });
158
+ let s = [...i];
159
+ if (a.length === 0) return o.length > 0 && s.length === 0 && s.push(...o), {
160
+ edgesToFollow: s,
161
+ waitingForInput: !1
162
+ };
163
+ if (!a.every((e) => {
164
+ let i = e.data?.conditions;
165
+ return i ? i.every((e) => {
166
+ if (!e.field) return !0;
167
+ let i = n.get(e.field);
168
+ return y(r(i) ? i.id : e.field, t);
169
+ }) : !1;
170
+ })) return o.length > 0 && s.push(...o), {
171
+ edgesToFollow: s,
172
+ waitingForInput: s.length === 0
173
+ };
174
+ let c = a.filter((e) => B(e.data?.conditions, t, n));
175
+ return c.length > 0 ? (s.push(...c), {
176
+ edgesToFollow: s,
177
+ waitingForInput: !1
178
+ }) : (s.push(...o), {
179
+ edgesToFollow: s,
180
+ waitingForInput: !1
181
+ });
182
+ }, H = (e, t) => !t.some((t) => t.target === e), U = (e, t) => {
183
+ let n = e.filter((e) => H(e.id, t));
184
+ return n.find(r) || n[0];
185
+ }, W = (e, t, n = /* @__PURE__ */ new Set()) => !e || n.has(e) ? [] : (n.add(e), [e, ...W(t.get(e)?.parentId, t, n)]), G = (e, t, n, r) => {
186
+ e.forEach((e) => {
187
+ let i = n.get(e);
188
+ W(r.get(e)?.parentId, r).forEach((e) => {
189
+ t.add(e), !n.has(e) && i !== void 0 && n.set(e, i);
190
+ });
191
+ });
192
+ }, ie = (e, t, n) => {
193
+ let r = U(e, t);
194
+ if (!r) return {
195
+ endOfPathReached: !0,
196
+ visibleNodeIds: /* @__PURE__ */ new Set(),
197
+ visibleNodes: [],
198
+ visibleRootNodes: []
199
+ };
200
+ let i = new Map(e.map((e) => [e.id, e])), a = V(t), o = [], s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = !1, u = (e) => {
201
+ if (c.has(e)) return;
202
+ c.add(e);
203
+ let t = i.get(e);
204
+ if (!t) return;
205
+ s.add(e), o.push(t);
206
+ let { edgesToFollow: r, waitingForInput: d } = re(a.get(e) || [], n, i);
207
+ if (d) {
208
+ l = !0;
209
+ return;
210
+ }
211
+ r.forEach((e) => {
212
+ u(e.target);
213
+ });
214
+ };
215
+ u(r.id);
216
+ let d = new Map(o.map((e, t) => [e.id, t])), f = new Set(s);
217
+ G(s, f, d, i);
218
+ let p = e.filter((e) => f.has(e.id)).sort((e, t) => (d.get(e.id) ?? 2 ** 53 - 1) - (d.get(t.id) ?? 2 ** 53 - 1)), m = p.filter((e) => !(e.parentId && f.has(e.parentId)));
219
+ return {
220
+ endOfPathReached: !l,
221
+ visibleNodeIds: f,
222
+ visibleNodes: p,
223
+ visibleRootNodes: m
224
+ };
225
+ }, ae = (e) => e.filter((e) => !u(e)).reduce((e, t) => {
226
+ let n = t.parentId ?? null, r = e.at(-1);
227
+ return r && r.groupId === n ? [...e.slice(0, -1), {
228
+ ...r,
229
+ nodes: [...r.nodes, t]
230
+ }] : [...e, {
231
+ groupId: n,
232
+ nodes: [t]
233
+ }];
234
+ }, []), K = (e) => {
235
+ if (typeof e != "object" || !e) return JSON.stringify(e) ?? "null";
236
+ if (Array.isArray(e)) return `[${e.map(K).join(",")}]`;
237
+ let t = e;
238
+ return `{${Object.keys(t).sort().map((e) => `${JSON.stringify(e)}:${K(t[e])}`).join(",")}}`;
239
+ }, oe = ({ baseUrl: e, components: t, flow: n, googleApiKey: i, headers: a, language: o, onChange: s, onSubmit: l, showPoweredBy: p, theme: m, validate: _, validationMode: y, initialValues: b = {} }) => {
240
+ let C = te(), w = k(() => ({
241
+ baseUrl: e ?? C?.baseUrl,
242
+ components: {
243
+ form: t?.form ?? C?.components?.form,
244
+ inputs: {
245
+ ...C?.components?.inputs,
246
+ ...t?.inputs
247
+ },
248
+ loadingSkeleton: t?.loadingSkeleton ?? C?.components?.loadingSkeleton,
249
+ step: t?.step ?? C?.components?.step,
250
+ submitButton: t?.submitButton ?? C?.components?.submitButton,
251
+ submitButtonWrapper: t?.submitButtonWrapper ?? C?.components?.submitButtonWrapper,
252
+ ui: {
253
+ ...C?.components?.ui,
254
+ ...t?.ui
255
+ }
256
+ },
257
+ googleApiKey: i ?? C?.googleApiKey,
258
+ headers: c(C?.headers, a),
259
+ language: o ?? C?.language ?? "en",
260
+ showPoweredBy: p ?? C?.showPoweredBy ?? !0,
261
+ theme: m ?? C?.theme ?? "dark",
262
+ validationMode: y ?? C?.validationMode ?? "onSubmit"
263
+ }), [
264
+ e,
265
+ t,
266
+ C,
267
+ i,
268
+ a,
269
+ o,
270
+ p,
271
+ m,
272
+ y
273
+ ]), T = k(() => n?.nodes ?? [], [n]), D = k(() => n?.edges ?? [], [n]), M = k(() => S(T), [T]), N = g(w.language), P = A({}), F = A(null), [I, L] = j({}), [R, z] = j(() => h(b, M)), B = k(() => K(b), [b]), V = A(B), { endOfPathReached: re, visibleNodes: H, visibleRootNodes: U } = k(() => ie(T, D, R), [
274
+ T,
275
+ D,
276
+ R
277
+ ]), W = k(() => S(H), [H]), G = k(() => ae(H), [H]), oe = k(() => {
278
+ let e = /* @__PURE__ */ new Map();
279
+ return T.forEach((t) => {
280
+ u(t) && e.set(t.id, t);
281
+ }), e;
282
+ }, [T]), [q, J] = j(0), Y = G.length === 0 ? 0 : Math.min(q, G.length - 1), X = G[Y], se = X?.groupId ? oe.get(X.groupId) : void 0, ce = Y === 0, le = G.length === 0 || Y >= G.length - 1, { clearSubmitMessage: ue, handleSubmitWithConfig: de, hasSubmitConfig: fe, isSubmitting: pe, submitButtonNode: me, submitMessage: he } = ne(H, R, w.language, W, w.headers, w.baseUrl), ge = A(s), _e = A(_), Z = k(() => x(R, W), [R, W]), Q = k(() => {
283
+ let e = me?.data?.submitConfig?.payloadTemplate;
284
+ return e ? ee(e, R, W) ?? Z : Z;
285
+ }, [
286
+ me,
287
+ R,
288
+ W,
289
+ Z
290
+ ]), ve = E((e, t) => {
291
+ z((n) => ({
292
+ ...n,
293
+ [e]: t
294
+ })), L((t) => {
295
+ let n = { ...t };
296
+ return delete n[e], n;
297
+ });
298
+ }, []), ye = E((e) => {
299
+ Object.keys(e).length !== 0 && (z((t) => ({
300
+ ...t,
301
+ ...e
302
+ })), L((t) => {
303
+ let n = { ...t };
304
+ return Object.keys(e).forEach((e) => {
305
+ delete n[e];
306
+ }), n;
307
+ }));
308
+ }, []), $ = E((e) => {
309
+ let t = {};
310
+ H.forEach((e) => {
311
+ if (r(e)) {
312
+ let n = e.id, r = R[n];
313
+ if (e.data.required && f(r)) {
314
+ t[n] = N(e.data.errorMessage) || N("validation.required");
315
+ return;
316
+ }
317
+ if (!f(r) && e.data.pattern) try {
318
+ new RegExp(e.data.pattern).test(String(r)) || (t[n] = N(e.data.errorMessage) || N("validation.invalidFormat"));
319
+ } catch (e) {
320
+ console.error(`Invalid pattern for field ${n}:`, e);
321
+ }
322
+ }
323
+ });
324
+ let n = e ? e(R, H) : {}, i = {
325
+ ...t,
326
+ ...n
327
+ };
328
+ return L(i), {
329
+ errors: i,
330
+ hasCustomErrors: Object.keys(n).length > 0,
331
+ isValid: Object.keys(i).length === 0
332
+ };
333
+ }, [
334
+ H,
335
+ R,
336
+ N
337
+ ]), be = E(() => {
338
+ J((e) => e >= G.length - 1 ? e : e + 1);
339
+ }, [G.length]), xe = E(() => {
340
+ J((e) => Math.max(0, e - 1));
341
+ }, []), Se = E(async () => {
342
+ let { isValid: e } = $(_e.current);
343
+ if (!e) return !1;
344
+ if (fe) {
345
+ let e = await de((e) => {
346
+ l && l(Q, { httpResponse: e });
347
+ });
348
+ if (e === null) return l?.(Q), !0;
349
+ if (!e.success) return !0;
350
+ } else l && l(Q);
351
+ return !0;
352
+ }, [
353
+ $,
354
+ fe,
355
+ de,
356
+ l,
357
+ Q
358
+ ]), Ce = k(() => {
359
+ if (!X) return [];
360
+ let e = [];
361
+ return X.nodes.forEach((t) => {
362
+ r(t) && t.data.type !== "submit" && t.data.required && f(R[t.id]) && e.push(N(t.data.label) || t.id);
363
+ }), e;
364
+ }, [
365
+ X,
366
+ R,
367
+ N
368
+ ]), we = k(() => H.some((e) => r(e) && e.data.type === "submit"), [H]), Te = k(() => X ? X.nodes.every((e) => !r(e) || !e.data.required || e.data.type === "submit" ? !0 : !f(R[e.id])) : !1, [X, R]), Ee = k(() => {
369
+ let e = Object.keys(I);
370
+ return e.length > 0 ? e[0] : void 0;
371
+ }, [I]);
372
+ return O(() => {
373
+ if (G.length === 0) {
374
+ q !== 0 && J(0);
375
+ return;
376
+ }
377
+ q > G.length - 1 && J(G.length - 1);
378
+ }, [G.length, q]), O(() => {
379
+ ge.current = s;
380
+ }, [s]), O(() => {
381
+ _e.current = _;
382
+ }, [_]), O(() => {
383
+ ge.current?.(Z);
384
+ }, [Z]), O(() => {
385
+ w.validationMode === "onChange" && $(_e.current);
386
+ }, [w.validationMode, $]), O(() => {
387
+ let e = d(M, R, P.current);
388
+ Object.keys(e).length > 0 && ye(e), P.current = R;
389
+ }, [
390
+ R,
391
+ M,
392
+ ye
393
+ ]), O(() => {
394
+ let e = F.current, t = new Set(W.map((e) => e.id));
395
+ if (F.current = t, !e) return;
396
+ let n = [...e].filter((e) => !t.has(e)), r = {};
397
+ W.forEach((t) => {
398
+ if (e.has(t.id) || R[t.id] !== void 0) return;
399
+ let n = v(t, R);
400
+ n !== void 0 && (r[t.id] = n);
401
+ }), !(n.length === 0 && Object.keys(r).length === 0) && (z((e) => {
402
+ let t = {
403
+ ...e,
404
+ ...r
405
+ };
406
+ return n.forEach((e) => {
407
+ delete t[e];
408
+ }), t;
409
+ }), n.length > 0 && L((e) => {
410
+ let t = !1, r = { ...e };
411
+ return n.forEach((e) => {
412
+ e in r && (delete r[e], t = !0);
413
+ }), t ? r : e;
414
+ }));
415
+ }, [W, R]), O(() => {
416
+ V.current !== B && (V.current = B, z(h(b, M)), L({}), F.current = null);
417
+ }, [
418
+ B,
419
+ b,
420
+ M
421
+ ]), {
422
+ canContinueStep: Te,
423
+ canSubmit: (we || re) && T.length > 0,
424
+ clearSubmitMessage: ue,
425
+ config: w,
426
+ currentStep: X,
427
+ currentStepGroupNode: se,
428
+ currentStepIndex: Y,
429
+ firstErrorFieldId: Ee,
430
+ formErrors: I,
431
+ formValues: R,
432
+ goToNextStep: be,
433
+ goToPreviousStep: xe,
434
+ handleSubmit: Se,
435
+ hasSubmitInput: we,
436
+ inputNodes: M,
437
+ isFirstStep: ce,
438
+ isLastStep: le,
439
+ isSubmitting: pe,
440
+ missingRequiredFields: Ce,
441
+ prevFormValuesRef: P,
442
+ setFieldErrors: L,
443
+ setFieldValue: ve,
444
+ setMultipleFieldValues: ye,
445
+ steps: G,
446
+ submitMessage: he,
447
+ t: N,
448
+ validateForm: $,
449
+ visibleNodes: H,
450
+ visibleRootNodes: U
451
+ };
452
+ }, q = /\{\{([\w-]+)}}/g, J = (e) => e == null || e === "", Y = (...e) => {
453
+ let t = [];
454
+ for (let n of e) if (n) for (let e of n.matchAll(q)) t.includes(e[1]) || t.push(e[1]);
455
+ return t;
456
+ }, X = (e) => {
457
+ let t = e.data.httpConfig ?? e.data.optionsSource;
458
+ if (!t) return [];
459
+ let n = Object.values(t.queryParams ?? {});
460
+ return Y(t.url, t.body, ...n);
461
+ }, se = (e, t, n, r) => X(e).filter((e) => J(t[e])).map((e) => {
462
+ let t = n.find((t) => t.id === e);
463
+ return {
464
+ id: e,
465
+ label: t ? b(t, r) : e
466
+ };
467
+ }), ce = ({ DefaultFormWrapper: t, DefaultInputLabel: n, DefaultInputWrapper: a, DefaultSubmitButton: s, DefaultSubmitButtonWrapper: c, config: u, defaultInputRenderers: d, defaultUI: f, formErrors: h, formValues: g, inputNodes: _, isSubmitting: v, missingRequiredFields: y, setFieldValue: b }) => {
468
+ let x = k(() => u.components.form || t, [u.components.form, t]), S = k(() => u.components.submitButton || s, [u.components.submitButton, s]), C = k(() => u.components.submitButtonWrapper || c || w, [u.components.submitButtonWrapper, c]), ee = k(() => u.components.inputLabel || n, [u.components.inputLabel, n]);
469
+ return {
470
+ FormWrapper: x,
471
+ renderNode: E(function(t) {
472
+ let { type: n } = t;
473
+ switch (n) {
474
+ case i.input: {
475
+ if (!r(t)) return null;
476
+ let n = t.data, i = n.type || "text", s = u.components.inputs?.[i], c = d[i], l = s || c, f = t.id, x = (e) => b(f, e), S = g[f], C = h[f], w = e(n.label, u.language), T = p(n, u.language), E = e(n.helperText, u.language), D = m(t), O = o(w), k = o(T), A = o(E);
477
+ return l ? /* @__PURE__ */ M(a, {
478
+ node: t,
479
+ children: /* @__PURE__ */ M(l, {
480
+ field: {
481
+ "aria-invalid": C ? !0 : void 0,
482
+ id: t.id,
483
+ name: D,
484
+ placeholder: k,
485
+ required: n.required,
486
+ value: S
487
+ },
488
+ extra: {
489
+ error: C,
490
+ helperText: A,
491
+ InputLabel: ee,
492
+ isSubmitting: v,
493
+ label: O,
494
+ missingDependencies: se(t, g, _, u.language),
495
+ missingRequiredFields: y,
496
+ node: t,
497
+ setValue: x
498
+ }
499
+ }, i)
500
+ }, t.id) : (console.warn("No renderer found for input type:", i), null);
501
+ }
502
+ case i.group: return null;
503
+ case i.ui: {
504
+ if (!l(t)) return null;
505
+ let e = t.data.type || "title", n = u.components.ui?.[e], r = f[e], i = n || r;
506
+ return i ? /* @__PURE__ */ M(i, { node: t }, t.id) : null;
507
+ }
508
+ default: return console.warn("Unknown node type:", n), null;
509
+ }
510
+ }, [
511
+ u,
512
+ g,
513
+ h,
514
+ b,
515
+ v,
516
+ y,
517
+ _,
518
+ d,
519
+ f,
520
+ a
521
+ ]),
522
+ SubmitButton: S,
523
+ SubmitButtonWrapper: C
524
+ };
525
+ };
526
+ //#endregion
527
+ export { H as a, P as c, ie as i, te as l, oe as n, z as o, U as r, B as s, ce as t };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "treege",
3
3
  "description": "Powerful form generator",
4
4
  "license": "ISC",
5
- "version": "3.0.0-beta.8",
5
+ "version": "3.0.0-beta.80",
6
6
  "type": "module",
7
7
  "types": "./dist/main.d.ts",
8
8
  "module": "./dist/main.js",
@@ -24,14 +24,19 @@
24
24
  "./renderer": {
25
25
  "types": "./dist/renderer.d.ts",
26
26
  "import": "./dist/renderer.js"
27
+ },
28
+ "./renderer-native": {
29
+ "types": "./dist/renderer-native.d.ts",
30
+ "import": "./dist/renderer-native.js",
31
+ "react-native": "./dist/renderer-native.js"
27
32
  }
28
33
  },
29
- "repository": "git@github.com:Tracktor/treege.git",
34
+ "repository": "git@github.com:MickaelAustoni/treege.git",
30
35
  "author": "Mickaël Austoni",
31
36
  "bugs": {
32
- "url": "https://github.com/Tracktor/treege/issues"
37
+ "url": "https://github.com/MickaelAustoni/treege/issues"
33
38
  },
34
- "homepage": "https://github.com/Tracktor/treege#readme",
39
+ "homepage": "https://github.com/MickaelAustoni/treege",
35
40
  "scripts": {
36
41
  "dev": "vite",
37
42
  "build": "vite build",
@@ -40,10 +45,17 @@
40
45
  "preview": "vite preview",
41
46
  "prepare": "vite build && husky install",
42
47
  "example": "vite --open /example",
48
+ "example:native": "cd example/native && bun start",
43
49
  "test": "vitest run",
44
50
  "test:watch": "vitest"
45
51
  },
46
52
  "dependencies": {
53
+ "@codemirror/autocomplete": "^6.20.3",
54
+ "@codemirror/lang-json": "^6.0.2",
55
+ "@codemirror/language": "^6.12.3",
56
+ "@codemirror/state": "^6.6.0",
57
+ "@codemirror/view": "^6.43.1",
58
+ "@dagrejs/dagre": "^3.0.0",
47
59
  "@radix-ui/react-checkbox": "^1.3.3",
48
60
  "@radix-ui/react-collapsible": "^1.1.12",
49
61
  "@radix-ui/react-dialog": "^1.1.15",
@@ -54,55 +66,75 @@
54
66
  "@radix-ui/react-scroll-area": "^1.2.10",
55
67
  "@radix-ui/react-select": "^2.2.6",
56
68
  "@radix-ui/react-separator": "^1.1.7",
57
- "@radix-ui/react-slot": "^1.2.3",
69
+ "@radix-ui/react-slot": "^1.2.4",
58
70
  "@radix-ui/react-switch": "^1.2.6",
71
+ "@radix-ui/react-toggle": "^1.1.10",
72
+ "@radix-ui/react-toggle-group": "^1.1.11",
59
73
  "@radix-ui/react-tooltip": "^1.2.8",
60
- "@tanstack/react-form": "^1.23.5",
74
+ "@tanstack/react-form": "^1.29.1",
75
+ "@uiw/react-codemirror": "^4.25.10",
61
76
  "@uiw/react-textarea-code-editor": "^3.1.1",
62
- "@xyflow/react": "^12.8.6",
77
+ "@xyflow/react": "12.10.2",
63
78
  "class-variance-authority": "^0.7.1",
64
79
  "clsx": "^2.1.1",
65
80
  "cmdk": "^1.1.1",
66
81
  "date-fns": "^4.1.0",
67
- "lucide-react": "^0.544.0",
68
- "nanoid": "^5.1.6",
82
+ "dompurify": "^3.4.2",
83
+ "lucide-react": "^0.577.0",
84
+ "nanoid": "^5.1.11",
69
85
  "next-themes": "^0.4.6",
70
- "react-day-picker": "^9.11.1",
86
+ "react-day-picker": "^9.14.0",
71
87
  "sonner": "^2.0.7",
72
- "tailwind-merge": "^3.3.1",
73
- "zustand": "^5.0.8"
88
+ "tailwind-merge": "^3.5.0",
89
+ "zustand": "^5.0.13"
74
90
  },
75
91
  "devDependencies": {
76
92
  "@babel/runtime": "^7.28.4",
77
- "@tailwindcss/vite": "^4.1.13",
93
+ "@biomejs/biome": "^2.4.13",
94
+ "@tailwindcss/vite": "^4.2.4",
78
95
  "@testing-library/dom": "^10.4.1",
79
96
  "@testing-library/jest-dom": "^6.9.1",
80
97
  "@testing-library/react": "^16.3.0",
81
98
  "@testing-library/react-hooks": "^8.0.1",
82
- "@tracktor/biome-config-react": "^1.3.0",
99
+ "@types/dompurify": "^3.2.0",
83
100
  "@types/google.maps": "^3.58.1",
84
101
  "@types/node": "^24.5.2",
85
102
  "@types/react": "^19.1.0",
86
103
  "@types/react-dom": "^19.1.0",
87
- "@vitejs/plugin-react": "^4.7.0",
88
- "ajv": "^8.17.1",
89
- "happy-dom": "^20.0.8",
104
+ "@vitejs/plugin-react": "^6.0.1",
105
+ "happy-dom": "^20.9.0",
90
106
  "husky": "^8.0.3",
91
107
  "react": "^19.1.0",
92
108
  "react-dom": "^19.1.0",
93
- "tailwindcss": "^4.1.13",
109
+ "react-native": "^0.76.0",
110
+ "tailwindcss": "^4.2.4",
94
111
  "tw-animate-css": "^1.4.0",
95
112
  "typescript": "^5.9.2",
96
- "vite": "^7.1.7",
97
- "vite-plugin-css-injected-by-js": "^3.5.2",
98
- "vite-plugin-dts": "^4.5.4",
99
- "vitest": "^4.0.2"
113
+ "unplugin-dts": "^1.0.0",
114
+ "vite": "^8.0.11",
115
+ "vitest": "^4.1.5"
100
116
  },
101
117
  "peerDependencies": {
102
118
  "react": "^18.0.0 || ^19.0.0",
103
119
  "react-dom": "^18.0.0 || ^19.0.0",
120
+ "react-native": ">=0.71.0",
121
+ "react-native-document-picker": "^9.0.0",
104
122
  "tailwindcss": "^4.0.0"
105
123
  },
124
+ "peerDependenciesMeta": {
125
+ "react-dom": {
126
+ "optional": true
127
+ },
128
+ "react-native": {
129
+ "optional": true
130
+ },
131
+ "react-native-document-picker": {
132
+ "optional": true
133
+ },
134
+ "tailwindcss": {
135
+ "optional": true
136
+ }
137
+ },
106
138
  "keywords": [
107
139
  "react",
108
140
  "treege"