treege 3.0.0-beta.9 → 3.0.0-beta.90

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