treege 3.0.0-beta.8 → 3.0.0-beta.81

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 (219) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +474 -79
  3. package/dist/DefaultSubmitButton-Dg9GPvh-.js +1853 -0
  4. package/dist/ThemeContext-BgTIhoK6.js +985 -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/DefaultFileValueField.d.ts +14 -0
  32. package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
  33. package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +22 -1
  34. package/dist/editor/features/TreegeEditor/layout/AutoLayout.d.ts +15 -0
  35. package/dist/editor/features/TreegeEditor/listeners/FlowChangeEmitter.d.ts +19 -0
  36. package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +5 -0
  37. package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +25 -0
  38. package/dist/editor/features/TreegeEditor/nodes/components/NodeGroupBadge.d.ts +6 -0
  39. package/dist/editor/features/TreegeEditor/nodes/components/NodeImage.d.ts +5 -0
  40. package/dist/editor/features/TreegeEditor/nodes/components/NodeImageButton.d.ts +6 -0
  41. package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +12 -0
  42. package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +10 -0
  43. package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
  44. package/dist/editor/features/TreegeEditor/nodes/components/NodeRequiredButton.d.ts +6 -0
  45. package/dist/editor/features/TreegeEditor/nodes/components/NodeStackOrderButtons.d.ts +6 -0
  46. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
  47. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypePickerMenuContent.d.ts +12 -0
  48. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +4 -2
  49. package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
  50. package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -2
  51. package/dist/editor/features/TreegeEditor/panel/MultiSelectionPanel.d.ts +7 -0
  52. package/dist/editor/hooks/useAvailableParentFields.d.ts +13 -0
  53. package/dist/editor/hooks/useFlowActions.d.ts +6 -2
  54. package/dist/editor/hooks/useFlowConnections.d.ts +14 -0
  55. package/dist/editor/hooks/useFlowContent.d.ts +16 -0
  56. package/dist/editor/hooks/useHistoryStore.d.ts +26 -0
  57. package/dist/editor/hooks/useIsStackedEdge.d.ts +8 -0
  58. package/dist/editor/hooks/useKeyValueRows.d.ts +15 -0
  59. package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
  60. package/dist/editor/hooks/useStackPosition.d.ts +14 -0
  61. package/dist/editor/hooks/useTranslate.d.ts +1 -1
  62. package/dist/editor/hooks/useUndoRedo.d.ts +31 -0
  63. package/dist/editor/types/ai.d.ts +65 -0
  64. package/dist/editor/types/editor.d.ts +106 -10
  65. package/dist/editor/types/openapi.d.ts +106 -0
  66. package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
  67. package/dist/editor/utils/cleanEmptyData.d.ts +18 -0
  68. package/dist/editor/utils/cleanNodeConfig.d.ts +5 -0
  69. package/dist/editor/utils/dagreLayout.d.ts +8 -0
  70. package/dist/editor/utils/edge.d.ts +50 -0
  71. package/dist/editor/utils/groupColor.d.ts +14 -0
  72. package/dist/editor/utils/image.d.ts +7 -0
  73. package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
  74. package/dist/editor/utils/jsonBindTarget.d.ts +15 -0
  75. package/dist/editor/utils/openApiPayload.d.ts +12 -0
  76. package/dist/editor/utils/openapi.d.ts +35 -0
  77. package/dist/editor/utils/sensitiveHeaders.d.ts +20 -0
  78. package/dist/editor/utils/stackPositionIndex.d.ts +9 -0
  79. package/dist/editor-h20-TVM8.js +6575 -0
  80. package/dist/editor.js +3 -7
  81. package/dist/main.js +6 -52
  82. package/dist/renderer/context/TreegeRenderRuntimeProvider.d.ts +135 -0
  83. package/dist/renderer/context/TreegeRendererProvider.d.ts +15 -0
  84. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
  85. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
  86. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputLabel.d.ts +10 -0
  87. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputWrapper.d.ts +9 -0
  88. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +20 -15
  89. package/dist/renderer/features/TreegeRenderer/native/components/DefaultLoadingSkeleton.d.ts +8 -0
  90. package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +3 -0
  91. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
  92. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
  93. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
  94. package/dist/renderer/features/TreegeRenderer/native/components/DependencyHint.d.ts +15 -0
  95. package/dist/renderer/features/TreegeRenderer/native/components/OptionItemContent.d.ts +17 -0
  96. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
  97. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  98. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  99. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
  100. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  101. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
  102. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
  103. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
  104. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
  105. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
  106. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
  107. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
  108. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
  109. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
  110. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
  111. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
  112. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
  113. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  114. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +97 -24
  115. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  116. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +3 -2
  117. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputLabel.d.ts +9 -0
  118. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputWrapper.d.ts +9 -0
  119. package/dist/renderer/features/TreegeRenderer/web/components/DefaultLoadingSkeleton.d.ts +7 -0
  120. package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +3 -0
  121. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +5 -1
  122. package/dist/renderer/features/TreegeRenderer/web/components/DependencyHint.d.ts +22 -0
  123. package/dist/renderer/features/TreegeRenderer/web/components/OptionItemContent.d.ts +17 -0
  124. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
  125. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
  126. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
  127. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
  128. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
  129. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
  130. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
  131. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
  132. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
  133. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
  134. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
  135. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
  136. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +11 -0
  137. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
  138. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
  139. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
  140. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
  141. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
  142. package/dist/renderer/features/TreegeRenderer/web/components/styles/RendererStyles.d.ts +2 -0
  143. package/dist/renderer/hooks/useInputOptions.d.ts +28 -0
  144. package/dist/renderer/hooks/useRenderNode.d.ts +62 -0
  145. package/dist/renderer/hooks/useSubmitHandler.d.ts +36 -0
  146. package/dist/renderer/hooks/useTranslate.d.ts +7 -5
  147. package/dist/renderer/index.d.ts +5 -2
  148. package/dist/renderer/index.native.d.ts +20 -0
  149. package/dist/renderer/types/renderer.d.ts +316 -42
  150. package/dist/renderer/utils/file.d.ts +11 -10
  151. package/dist/renderer/utils/flow.d.ts +1 -18
  152. package/dist/renderer/utils/form.d.ts +54 -2
  153. package/dist/renderer/utils/http.d.ts +177 -0
  154. package/dist/renderer/utils/jsonTemplate.d.ts +30 -0
  155. package/dist/renderer/utils/node.d.ts +29 -1
  156. package/dist/renderer/utils/sanitize.d.ts +85 -0
  157. package/dist/renderer/utils/sanitize.native.d.ts +69 -0
  158. package/dist/renderer/utils/step.d.ts +27 -0
  159. package/dist/renderer/utils/submit.d.ts +49 -0
  160. package/dist/renderer/utils/templateDependencies.d.ts +17 -0
  161. package/dist/renderer-DI6nF4St.js +256 -0
  162. package/dist/renderer-native.d.ts +2 -0
  163. package/dist/renderer-native.js +3704 -0
  164. package/dist/renderer.js +5 -45
  165. package/dist/shared/components/ui/badge.d.ts +2 -2
  166. package/dist/shared/components/ui/button.d.ts +3 -3
  167. package/dist/shared/components/ui/collapsible.d.ts +1 -1
  168. package/dist/shared/components/ui/command.d.ts +1 -1
  169. package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
  170. package/dist/shared/components/ui/field.d.ts +24 -0
  171. package/dist/shared/components/ui/form.d.ts +1 -1
  172. package/dist/shared/components/ui/item.d.ts +23 -0
  173. package/dist/shared/components/ui/popover.d.ts +10 -2
  174. package/dist/shared/components/ui/select.d.ts +3 -1
  175. package/dist/shared/components/ui/sheet.d.ts +1 -1
  176. package/dist/shared/components/ui/skeleton.d.ts +3 -0
  177. package/dist/shared/components/ui/toggle-group.d.ts +7 -0
  178. package/dist/shared/components/ui/toggle.d.ts +9 -0
  179. package/dist/shared/components/ui/tooltip.d.ts +1 -1
  180. package/dist/shared/constants/colors.d.ts +45 -0
  181. package/dist/shared/constants/inputType.d.ts +6 -0
  182. package/dist/shared/constants/node.d.ts +0 -1
  183. package/dist/shared/context/PortalContainerContext.d.ts +5 -0
  184. package/dist/shared/context/ThemeContext.d.ts +2 -0
  185. package/dist/shared/context/ThemeContext.native.d.ts +22 -0
  186. package/dist/shared/hooks/useMediaQuery.d.ts +12 -0
  187. package/dist/shared/hooks/useThemeColors.d.ts +37 -0
  188. package/dist/shared/locales/ar.json.d.ts +259 -19
  189. package/dist/shared/locales/de.json.d.ts +260 -20
  190. package/dist/shared/locales/en.json.d.ts +261 -21
  191. package/dist/shared/locales/es.json.d.ts +260 -20
  192. package/dist/shared/locales/fr.json.d.ts +260 -20
  193. package/dist/shared/locales/it.json.d.ts +260 -20
  194. package/dist/shared/locales/pt.json.d.ts +260 -20
  195. package/dist/shared/types/edge.d.ts +6 -0
  196. package/dist/shared/types/file.d.ts +14 -0
  197. package/dist/shared/types/node.d.ts +155 -19
  198. package/dist/shared/utils/httpRecord.d.ts +20 -0
  199. package/dist/shared/utils/inputTypeGuards.d.ts +7 -0
  200. package/dist/shared/utils/nodeTypeGuards.d.ts +1 -6
  201. package/dist/shared/utils/normalizeLabel.d.ts +21 -0
  202. package/dist/useRenderNode-B1sfwbia.js +527 -0
  203. package/package.json +54 -22
  204. package/dist/ThemeContext-BIvs8Kw-.js +0 -758
  205. package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
  206. package/dist/TreegeRenderer-D3EvsEfJ.js +0 -1413
  207. package/dist/editor/context/TreegeEditorContext.d.ts +0 -12
  208. package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +0 -2
  209. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
  210. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
  211. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +0 -6
  212. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
  213. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
  214. package/dist/editor/hooks/useEdgesSelection.d.ts +0 -11
  215. package/dist/renderer/context/TreegeConfigContext.d.ts +0 -39
  216. package/dist/renderer/context/TreegeRendererContext.d.ts +0 -25
  217. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +0 -7
  218. package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +0 -6
  219. /package/dist/editor/components/{data-display/logo.d.ts → branding/Logo.d.ts} +0 -0
@@ -0,0 +1,527 @@
1
+ import { A as e, D as t, E as n, G as r, H as i, N as a, O as o, P as s, R as c, U as l, W 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, x as C, z as w } from "./ThemeContext-BgTIhoK6.js";
2
+ import { Fragment as T, createContext as E, useCallback as D, useContext as O, useEffect as k, useMemo as A, useRef as j, useState as M } from "react";
3
+ import { jsx as N } from "react/jsx-runtime";
4
+ //#region src/renderer/context/TreegeRendererProvider.tsx
5
+ var P = E(void 0), ee = () => O(P), F = ({ children: e, ...t }) => /* @__PURE__ */ N(P.Provider, {
6
+ value: t,
7
+ children: e
8
+ }), I = async (r, i, a, s, c) => {
9
+ if (!r.url || r.url.trim() === "") return {
10
+ error: "No URL configured for submission",
11
+ success: !1
12
+ };
13
+ let l = g(_(r.url, i, { encode: !0 }), c);
14
+ if (!l || l.trim() === "") return {
15
+ error: "Invalid URL after template replacement",
16
+ success: !1
17
+ };
18
+ let u = r.payloadTemplate ? C(r.payloadTemplate, i, a) : void 0, d = await n({
19
+ body: u === void 0 ? r.sendAllFormValues ? JSON.stringify(x(i, a)) : void 0 : JSON.stringify(u),
20
+ headers: t(e(s, i), e(r.headers, i)),
21
+ method: r.method || "POST",
22
+ queryParams: e(r.queryParams, i),
23
+ url: l
24
+ });
25
+ if (!d.success) return {
26
+ data: d.data,
27
+ error: d.error,
28
+ success: !1
29
+ };
30
+ let f = r.redirectUrl ? (() => {
31
+ let e = o(r.redirectUrl, d.data);
32
+ return e && e.trim() !== "" ? e : void 0;
33
+ })() : void 0;
34
+ return {
35
+ data: d.data,
36
+ redirectUrl: f,
37
+ success: !0
38
+ };
39
+ }, L = (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
+ }, te = (e, t, n, r, a, o) => {
42
+ let [s, c] = M(!1), [l, d] = M(null), f = A(() => {
43
+ let t = e.find((e) => u(e) && e.data?.type === "submit");
44
+ return t && u(t) ? t : null;
45
+ }, [e]), p = D(async (e) => {
46
+ if (!f?.data?.submitConfig) return null;
47
+ let s = f.data.submitConfig;
48
+ if (!s.url || s.url.trim() === "") return null;
49
+ d(null), s.showLoading !== !1 && c(!0);
50
+ try {
51
+ let c = await I(s, t, r, a, o);
52
+ if (c.success) {
53
+ let t = i(s.successMessage, n);
54
+ if (t && d({
55
+ message: t,
56
+ type: "success"
57
+ }), e && e(c.data), c.redirectUrl) {
58
+ let e = c.redirectUrl;
59
+ setTimeout(() => L(e), 1e3);
60
+ }
61
+ } else d({
62
+ message: i(s.errorMessage, n) || c.error || "An error occurred during submission",
63
+ type: "error"
64
+ });
65
+ return c;
66
+ } catch (e) {
67
+ let t = i(s.errorMessage, n) || (e instanceof Error ? e.message : "An unexpected error occurred");
68
+ return d({
69
+ message: t,
70
+ type: "error"
71
+ }), {
72
+ error: t,
73
+ success: !1
74
+ };
75
+ } finally {
76
+ c(!1);
77
+ }
78
+ }, [
79
+ f,
80
+ t,
81
+ n,
82
+ r,
83
+ a,
84
+ o
85
+ ]);
86
+ return {
87
+ clearSubmitMessage: D(() => {
88
+ d(null);
89
+ }, []),
90
+ handleSubmitWithConfig: p,
91
+ hasSubmitConfig: !!f?.data?.submitConfig,
92
+ isSubmitting: s,
93
+ submitButtonNode: f,
94
+ submitMessage: l
95
+ };
96
+ }, R = (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), z = (e, t, n) => {
97
+ let r = R(e), i = R(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
+ }, B = (e, t, n) => {
131
+ let { field: r, operator: i, value: a } = e;
132
+ if (!(r && i) || a === void 0) return !0;
133
+ let o = t[r], s = o === void 0 && n ? n.get(r) : void 0, c = s && u(s) ? t[s.id] : o;
134
+ return Array.isArray(c) ? i === "===" ? c.some((e) => z(e, a, "===")) || z(c, a, "===") : i === "!==" ? c.every((e) => z(e, a, "!==")) && z(c, a, "!==") : c.some((e) => z(e, a, i)) : z(c, a, i);
135
+ }, V = (e, t, n) => {
136
+ if (!e || e.length === 0) return !0;
137
+ if (e.length === 1) return B(e[0], t, n);
138
+ let r = B(e[0], t, n);
139
+ for (let i = 1; i < e.length; i += 1) {
140
+ let a = e[i], o = B(a, t, n), s = e[i - 1].logicalOperator || w.AND;
141
+ if (s === w.AND) {
142
+ if (r &&= o, !r) return !1;
143
+ } else if (s === w.OR && (r ||= o, r)) return !0;
144
+ }
145
+ return r;
146
+ }, ne = (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 r = [], i = [], a = [];
154
+ e.forEach((e) => {
155
+ let t = e.data?.isFallback, n = e.data?.conditions?.length;
156
+ t ? a.push(e) : n ? i.push(e) : r.push(e);
157
+ });
158
+ let o = [...r];
159
+ if (i.length === 0) return a.length > 0 && o.length === 0 && o.push(...a), {
160
+ edgesToFollow: o,
161
+ waitingForInput: !1
162
+ };
163
+ if (!i.every((e) => {
164
+ let r = e.data?.conditions;
165
+ return r ? r.every((e) => {
166
+ if (!e.field) return !0;
167
+ let r = n.get(e.field);
168
+ return y(u(r) ? r.id : e.field, t);
169
+ }) : !1;
170
+ })) return a.length > 0 && o.push(...a), {
171
+ edgesToFollow: o,
172
+ waitingForInput: o.length === 0
173
+ };
174
+ let s = i.filter((e) => V(e.data?.conditions, t, n));
175
+ return s.length > 0 ? (o.push(...s), {
176
+ edgesToFollow: o,
177
+ waitingForInput: !1
178
+ }) : (o.push(...a), {
179
+ edgesToFollow: o,
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(u) || 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 = ne(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) => !l(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: n, flow: r, googleApiKey: i, headers: o, language: s, onChange: c, onSubmit: p, showPoweredBy: m, theme: g, validate: _, validationMode: y, initialValues: b = {} }) => {
240
+ let w = ee(), T = A(() => ({
241
+ baseUrl: e ?? w?.baseUrl,
242
+ components: {
243
+ form: n?.form ?? w?.components?.form,
244
+ inputs: {
245
+ ...w?.components?.inputs,
246
+ ...n?.inputs
247
+ },
248
+ loadingSkeleton: n?.loadingSkeleton ?? w?.components?.loadingSkeleton,
249
+ step: n?.step ?? w?.components?.step,
250
+ submitButton: n?.submitButton ?? w?.components?.submitButton,
251
+ submitButtonWrapper: n?.submitButtonWrapper ?? w?.components?.submitButtonWrapper,
252
+ ui: {
253
+ ...w?.components?.ui,
254
+ ...n?.ui
255
+ }
256
+ },
257
+ googleApiKey: i ?? w?.googleApiKey,
258
+ headers: t(w?.headers, o),
259
+ language: s ?? w?.language ?? "en",
260
+ showPoweredBy: m ?? w?.showPoweredBy ?? !0,
261
+ theme: g ?? w?.theme ?? "dark",
262
+ validationMode: y ?? w?.validationMode ?? "onSubmit"
263
+ }), [
264
+ e,
265
+ n,
266
+ w,
267
+ i,
268
+ o,
269
+ s,
270
+ m,
271
+ g,
272
+ y
273
+ ]), E = A(() => r?.nodes ?? [], [r]), O = A(() => r?.edges ?? [], [r]), N = A(() => S(E), [E]), P = a(T.language), F = j({}), I = j(null), [L, R] = M({}), [z, B] = M(() => h(b, N)), V = A(() => K(b), [b]), ne = j(V), { endOfPathReached: re, visibleNodes: H, visibleRootNodes: U } = A(() => ie(E, O, z), [
274
+ E,
275
+ O,
276
+ z
277
+ ]), W = A(() => S(H), [H]), G = A(() => ae(H), [H]), oe = A(() => {
278
+ let e = /* @__PURE__ */ new Map();
279
+ return E.forEach((t) => {
280
+ l(t) && e.set(t.id, t);
281
+ }), e;
282
+ }, [E]), [q, J] = M(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 } = te(H, z, T.language, W, T.headers, T.baseUrl), ge = j(c), _e = j(_), Z = A(() => x(z, W), [z, W]), Q = A(() => {
283
+ let e = me?.data?.submitConfig?.payloadTemplate;
284
+ return e ? C(e, z, W) ?? Z : Z;
285
+ }, [
286
+ me,
287
+ z,
288
+ W,
289
+ Z
290
+ ]), ve = D((e, t) => {
291
+ B((n) => ({
292
+ ...n,
293
+ [e]: t
294
+ })), R((t) => {
295
+ let n = { ...t };
296
+ return delete n[e], n;
297
+ });
298
+ }, []), ye = D((e) => {
299
+ Object.keys(e).length !== 0 && (B((t) => ({
300
+ ...t,
301
+ ...e
302
+ })), R((t) => {
303
+ let n = { ...t };
304
+ return Object.keys(e).forEach((e) => {
305
+ delete n[e];
306
+ }), n;
307
+ }));
308
+ }, []), $ = D((e) => {
309
+ let t = {};
310
+ H.forEach((e) => {
311
+ if (u(e)) {
312
+ let n = e.id, r = z[n];
313
+ if (e.data.required && f(r)) {
314
+ t[n] = P(e.data.errorMessage) || P("validation.required");
315
+ return;
316
+ }
317
+ if (!f(r) && e.data.pattern) try {
318
+ new RegExp(e.data.pattern).test(String(r)) || (t[n] = P(e.data.errorMessage) || P("validation.invalidFormat"));
319
+ } catch (e) {
320
+ console.error(`Invalid pattern for field ${n}:`, e);
321
+ }
322
+ }
323
+ });
324
+ let n = e ? e(z, H) : {}, r = {
325
+ ...t,
326
+ ...n
327
+ };
328
+ return R(r), {
329
+ errors: r,
330
+ hasCustomErrors: Object.keys(n).length > 0,
331
+ isValid: Object.keys(r).length === 0
332
+ };
333
+ }, [
334
+ H,
335
+ z,
336
+ P
337
+ ]), be = D(() => {
338
+ J((e) => e >= G.length - 1 ? e : e + 1);
339
+ }, [G.length]), xe = D(() => {
340
+ J((e) => Math.max(0, e - 1));
341
+ }, []), Se = D(async () => {
342
+ let { isValid: e } = $(_e.current);
343
+ if (!e) return !1;
344
+ if (fe) {
345
+ let e = await de((e) => {
346
+ p && p(Q, { httpResponse: e });
347
+ });
348
+ if (e === null) return p?.(Q), !0;
349
+ if (!e.success) return !0;
350
+ } else p && p(Q);
351
+ return !0;
352
+ }, [
353
+ $,
354
+ fe,
355
+ de,
356
+ p,
357
+ Q
358
+ ]), Ce = A(() => {
359
+ if (!X) return [];
360
+ let e = [];
361
+ return X.nodes.forEach((t) => {
362
+ u(t) && t.data.type !== "submit" && t.data.required && f(z[t.id]) && e.push(P(t.data.label) || t.id);
363
+ }), e;
364
+ }, [
365
+ X,
366
+ z,
367
+ P
368
+ ]), we = A(() => H.some((e) => u(e) && e.data.type === "submit"), [H]), Te = A(() => X ? X.nodes.every((e) => !u(e) || !e.data.required || e.data.type === "submit" ? !0 : !f(z[e.id])) : !1, [X, z]), Ee = A(() => {
369
+ let e = Object.keys(L);
370
+ return e.length > 0 ? e[0] : void 0;
371
+ }, [L]);
372
+ return k(() => {
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]), k(() => {
379
+ ge.current = c;
380
+ }, [c]), k(() => {
381
+ _e.current = _;
382
+ }, [_]), k(() => {
383
+ ge.current?.(Z);
384
+ }, [Z]), k(() => {
385
+ T.validationMode === "onChange" && $(_e.current);
386
+ }, [T.validationMode, $]), k(() => {
387
+ let e = d(N, z, F.current);
388
+ Object.keys(e).length > 0 && ye(e), F.current = z;
389
+ }, [
390
+ z,
391
+ N,
392
+ ye
393
+ ]), k(() => {
394
+ let e = I.current, t = new Set(W.map((e) => e.id));
395
+ if (I.current = t, !e) return;
396
+ let n = [...e].filter((e) => !t.has(e)), r = {};
397
+ W.forEach((t) => {
398
+ if (e.has(t.id) || z[t.id] !== void 0) return;
399
+ let n = v(t, z);
400
+ n !== void 0 && (r[t.id] = n);
401
+ }), !(n.length === 0 && Object.keys(r).length === 0) && (B((e) => {
402
+ let t = {
403
+ ...e,
404
+ ...r
405
+ };
406
+ return n.forEach((e) => {
407
+ delete t[e];
408
+ }), t;
409
+ }), n.length > 0 && R((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, z]), k(() => {
416
+ ne.current !== V && (ne.current = V, B(h(b, N)), R({}), I.current = null);
417
+ }, [
418
+ V,
419
+ b,
420
+ N
421
+ ]), {
422
+ canContinueStep: Te,
423
+ canSubmit: (we || re) && E.length > 0,
424
+ clearSubmitMessage: ue,
425
+ config: T,
426
+ currentStep: X,
427
+ currentStepGroupNode: se,
428
+ currentStepIndex: Y,
429
+ firstErrorFieldId: Ee,
430
+ formErrors: L,
431
+ formValues: z,
432
+ goToNextStep: be,
433
+ goToPreviousStep: xe,
434
+ handleSubmit: Se,
435
+ hasSubmitInput: we,
436
+ inputNodes: N,
437
+ isFirstStep: ce,
438
+ isLastStep: le,
439
+ isSubmitting: pe,
440
+ missingRequiredFields: Ce,
441
+ prevFormValuesRef: F,
442
+ setFieldErrors: R,
443
+ setFieldValue: ve,
444
+ setMultipleFieldValues: ye,
445
+ steps: G,
446
+ submitMessage: he,
447
+ t: P,
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: e, DefaultInputLabel: t, DefaultInputWrapper: n, DefaultSubmitButton: a, DefaultSubmitButtonWrapper: o, config: l, defaultInputRenderers: d, defaultUI: f, formErrors: h, formValues: g, inputNodes: _, isSubmitting: v, missingRequiredFields: y, setFieldValue: b }) => {
468
+ let x = A(() => l.components.form || e, [l.components.form, e]), S = A(() => l.components.submitButton || a, [l.components.submitButton, a]), C = A(() => l.components.submitButtonWrapper || o || T, [l.components.submitButtonWrapper, o]), w = A(() => l.components.inputLabel || t, [l.components.inputLabel, t]);
469
+ return {
470
+ FormWrapper: x,
471
+ renderNode: D(function(e) {
472
+ let { type: t } = e;
473
+ switch (t) {
474
+ case c.input: {
475
+ if (!u(e)) return null;
476
+ let t = e.data, r = t.type || "text", a = l.components.inputs?.[r], o = d[r], c = a || o, f = e.id, x = (e) => b(f, e), S = g[f], C = h[f], T = i(t.label, l.language), E = p(t, l.language), D = i(t.helperText, l.language), O = m(e), k = s(T), A = s(E), j = s(D);
477
+ return c ? /* @__PURE__ */ N(n, {
478
+ node: e,
479
+ children: /* @__PURE__ */ N(c, {
480
+ field: {
481
+ "aria-invalid": C ? !0 : void 0,
482
+ id: e.id,
483
+ name: O,
484
+ placeholder: A,
485
+ required: t.required,
486
+ value: S
487
+ },
488
+ extra: {
489
+ error: C,
490
+ helperText: j,
491
+ InputLabel: w,
492
+ isSubmitting: v,
493
+ label: k,
494
+ missingDependencies: se(e, g, _, l.language),
495
+ missingRequiredFields: y,
496
+ node: e,
497
+ setValue: x
498
+ }
499
+ }, r)
500
+ }, e.id) : (console.warn("No renderer found for input type:", r), null);
501
+ }
502
+ case c.group: return null;
503
+ case c.ui: {
504
+ if (!r(e)) return null;
505
+ let t = e.data.type || "title", n = l.components.ui?.[t], i = f[t], a = n || i;
506
+ return a ? /* @__PURE__ */ N(a, { node: e }, e.id) : null;
507
+ }
508
+ default: return console.warn("Unknown node type:", t), null;
509
+ }
510
+ }, [
511
+ l,
512
+ g,
513
+ h,
514
+ b,
515
+ v,
516
+ y,
517
+ _,
518
+ d,
519
+ f,
520
+ n
521
+ ]),
522
+ SubmitButton: S,
523
+ SubmitButtonWrapper: C
524
+ };
525
+ };
526
+ //#endregion
527
+ export { H as a, F as c, ie as i, ee as l, oe as n, B as o, U as r, V 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.81",
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"