treege 2.1.0 → 3.0.0-beta.2

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 (226) hide show
  1. package/README.md +378 -64
  2. package/dist/ThemeContext-BIvs8Kw-.js +758 -0
  3. package/dist/TreegeEditor-BSPfQQk3.js +2151 -0
  4. package/dist/TreegeRenderer-D3EvsEfJ.js +1413 -0
  5. package/dist/_name_.css +1 -0
  6. package/dist/editor/components/data-display/logo.d.ts +5 -0
  7. package/dist/editor/components/input/ComboboxWithCreate.d.ts +21 -0
  8. package/dist/editor/constants/defaultNode.d.ts +11 -0
  9. package/dist/editor/constants/edgeTypes.d.ts +3 -0
  10. package/dist/editor/constants/nodeTypes.d.ts +6 -0
  11. package/dist/editor/context/TreegeEditorContext.d.ts +12 -0
  12. package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +3 -0
  13. package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +6 -0
  14. package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +2 -0
  15. package/dist/editor/features/TreegeEditor/forms/GroupNodeForm.d.ts +2 -0
  16. package/dist/editor/features/TreegeEditor/forms/HttpConfigForm.d.ts +7 -0
  17. package/dist/editor/features/TreegeEditor/forms/InputNodeForm.d.ts +2 -0
  18. package/dist/editor/features/TreegeEditor/forms/UINodeForm.d.ts +2 -0
  19. package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +6 -0
  20. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +7 -0
  21. package/dist/editor/features/TreegeEditor/inputs/SelectLanguage.d.ts +7 -0
  22. package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +2 -0
  23. package/dist/editor/features/TreegeEditor/inputs/SelectNodeType.d.ts +2 -0
  24. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +6 -0
  25. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +6 -0
  26. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +6 -0
  27. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +6 -0
  28. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +6 -0
  29. package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -0
  30. package/dist/editor/features/TreegeEditor/sheets/NodeActionsSheet.d.ts +2 -0
  31. package/dist/editor/hooks/useAvailableParentFields.d.ts +7 -0
  32. package/dist/editor/hooks/useEdgesSelection.d.ts +11 -0
  33. package/dist/editor/hooks/useFlowActions.d.ts +12 -0
  34. package/dist/editor/hooks/useFlowConnections.d.ts +15 -0
  35. package/dist/editor/hooks/useNodesSelection.d.ts +54 -0
  36. package/dist/editor/hooks/useTranslate.d.ts +19 -0
  37. package/dist/editor/index.d.ts +4 -0
  38. package/dist/editor/types/editor.d.ts +37 -0
  39. package/dist/editor.d.ts +2 -0
  40. package/dist/editor.js +7 -0
  41. package/dist/favicon.svg +12 -0
  42. package/dist/main.d.ts +7 -4
  43. package/dist/main.js +50 -7672
  44. package/dist/renderer/context/TreegeConfigContext.d.ts +39 -0
  45. package/dist/renderer/context/TreegeRendererContext.d.ts +25 -0
  46. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +13 -0
  47. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -0
  48. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +7 -0
  49. package/dist/renderer/features/TreegeRenderer/native/components/DefaultHttpInput.d.ts +15 -0
  50. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +15 -0
  51. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +7 -0
  52. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +7 -0
  53. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +50 -0
  54. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +3 -0
  55. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +6 -0
  56. package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +6 -0
  57. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputs.d.ts +20 -0
  58. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +9 -0
  59. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButtonWrapper.d.ts +10 -0
  60. package/dist/renderer/features/TreegeRenderer/web/components/DefaultUI.d.ts +7 -0
  61. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +3 -0
  62. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  63. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  64. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +3 -0
  65. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  66. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +3 -0
  67. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +3 -0
  68. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +3 -0
  69. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +3 -0
  70. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +3 -0
  71. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +3 -0
  72. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +3 -0
  73. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +3 -0
  74. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +3 -0
  75. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +3 -0
  76. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +3 -0
  77. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  78. package/dist/renderer/hooks/useTranslate.d.ts +24 -0
  79. package/dist/renderer/index.d.ts +17 -0
  80. package/dist/renderer/types/renderer.d.ts +187 -0
  81. package/dist/renderer/utils/conditions.d.ts +14 -0
  82. package/dist/renderer/utils/file.d.ts +22 -0
  83. package/dist/renderer/utils/flow.d.ts +91 -0
  84. package/dist/renderer/utils/form.d.ts +26 -0
  85. package/dist/renderer/utils/node.d.ts +16 -0
  86. package/dist/renderer.d.ts +2 -0
  87. package/dist/renderer.js +45 -0
  88. package/dist/shared/components/ui/badge.d.ts +9 -0
  89. package/dist/shared/components/ui/button.d.ts +10 -0
  90. package/dist/shared/components/ui/calendar.d.ts +8 -0
  91. package/dist/shared/components/ui/checkbox.d.ts +4 -0
  92. package/dist/shared/components/ui/collapsible.d.ts +5 -0
  93. package/dist/shared/components/ui/command.d.ts +18 -0
  94. package/dist/shared/components/ui/dialog.d.ts +15 -0
  95. package/dist/shared/components/ui/dropdown-menu.d.ts +25 -0
  96. package/dist/shared/components/ui/form.d.ts +5 -0
  97. package/dist/shared/components/ui/input.d.ts +3 -0
  98. package/dist/shared/components/ui/label.d.ts +4 -0
  99. package/dist/shared/components/ui/popover.d.ts +7 -0
  100. package/dist/shared/components/ui/radio-group.d.ts +5 -0
  101. package/dist/shared/components/ui/scroll-area.d.ts +5 -0
  102. package/dist/shared/components/ui/select.d.ts +15 -0
  103. package/dist/shared/components/ui/separator.d.ts +4 -0
  104. package/dist/shared/components/ui/sheet.d.ts +13 -0
  105. package/dist/shared/components/ui/sonner.d.ts +3 -0
  106. package/dist/shared/components/ui/switch.d.ts +4 -0
  107. package/dist/shared/components/ui/textarea.d.ts +3 -0
  108. package/dist/shared/components/ui/tooltip.d.ts +7 -0
  109. package/dist/shared/constants/inputType.d.ts +19 -0
  110. package/dist/shared/constants/languages.d.ts +10 -0
  111. package/dist/shared/constants/node.d.ts +6 -0
  112. package/dist/shared/constants/operator.d.ts +4 -0
  113. package/dist/shared/constants/pattern.d.ts +7 -0
  114. package/dist/shared/constants/uiType.d.ts +4 -0
  115. package/dist/shared/context/ThemeContext.d.ts +15 -0
  116. package/dist/shared/hooks/useTranslate.d.ts +23 -0
  117. package/dist/shared/lib/utils.d.ts +2 -0
  118. package/dist/shared/locales/ar.json.d.ts +229 -0
  119. package/dist/shared/locales/de.json.d.ts +229 -0
  120. package/dist/shared/locales/en.json.d.ts +229 -0
  121. package/dist/shared/locales/es.json.d.ts +229 -0
  122. package/dist/shared/locales/fr.json.d.ts +229 -0
  123. package/dist/shared/locales/it.json.d.ts +229 -0
  124. package/dist/shared/locales/pt.json.d.ts +229 -0
  125. package/dist/shared/types/edge.d.ts +34 -0
  126. package/dist/shared/types/languages.d.ts +5 -0
  127. package/dist/shared/types/node.d.ts +171 -0
  128. package/dist/shared/types/operator.d.ts +9 -0
  129. package/dist/shared/types/translate.d.ts +9 -0
  130. package/dist/shared/utils/nodeTypeGuards.d.ts +22 -0
  131. package/dist/shared/utils/translations.d.ts +30 -0
  132. package/package.json +69 -41
  133. package/CHANGELOG.md +0 -7
  134. package/dist/components/DataDisplay/Icons/TreePlusIcon.d.ts +0 -7
  135. package/dist/components/DataDisplay/Logo/Logo.d.ts +0 -2
  136. package/dist/components/DataDisplay/Tree/Tree.d.ts +0 -14
  137. package/dist/components/DataDisplay/Tree/useTree.d.ts +0 -12
  138. package/dist/components/DataDisplay/TreeCard/TreeCard.d.ts +0 -14
  139. package/dist/components/DataDisplay/ViewerJSON/ViewerJSON.d.ts +0 -6
  140. package/dist/components/DataDisplay/ViewerJSON/useViewerJSON.d.ts +0 -4
  141. package/dist/components/DataDisplay/ViewerJSONAction/ViewerJSONAction.d.ts +0 -6
  142. package/dist/components/DataDisplay/ViewerJSONAction/useViewerJSONAction.d.ts +0 -11
  143. package/dist/components/FeedBack/MainModal/MainModal.d.ts +0 -10
  144. package/dist/components/FeedBack/TreeModal/TreeModal.d.ts +0 -13
  145. package/dist/components/Layouts/Action/Action.d.ts +0 -6
  146. package/dist/components/Layouts/Header/Header.d.ts +0 -6
  147. package/dist/components/Layouts/Main/Main.d.ts +0 -6
  148. package/dist/components/Layouts/MosaicLayout/MosaicLayout.d.ts +0 -6
  149. package/dist/components/Layouts/Sidebar/Sidebar.d.ts +0 -6
  150. package/dist/components/Theme/DarkTheme/DarkTheme.d.ts +0 -6
  151. package/dist/config/i18n.config.d.ts +0 -2
  152. package/dist/config/query.config.d.ts +0 -3
  153. package/dist/config/test.config.d.ts +0 -0
  154. package/dist/config/theme.config.d.ts +0 -3
  155. package/dist/constants/colors.d.ts +0 -10
  156. package/dist/constants/fields.d.ts +0 -152
  157. package/dist/context/Auth/AuthContext.d.ts +0 -7
  158. package/dist/context/Auth/AuthProvider.d.ts +0 -7
  159. package/dist/features/Treege/Treege.d.ts +0 -24
  160. package/dist/features/Treege/components/Feedback/EndPointWarning.d.ts +0 -8
  161. package/dist/features/Treege/components/Forms/AssignValueToChildren/AssignValueToChildren.d.ts +0 -8
  162. package/dist/features/Treege/components/Forms/AssignValueToChildren/Examples/ObjectMappingExample.d.ts +0 -2
  163. package/dist/features/Treege/components/Forms/FormTreeCardDelete/FormTreeCardDelete.d.ts +0 -5
  164. package/dist/features/Treege/components/Forms/FormTreeCardDelete/useFormTreeCardDelete.d.ts +0 -5
  165. package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/ApiFieldsConfigAccordion.d.ts +0 -32
  166. package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/ExtraField.d.ts +0 -15
  167. package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/FillerFieldAccordion.d.ts +0 -14
  168. package/dist/features/Treege/components/Forms/FormTreeCardMutation/FormTreeCardMutation.d.ts +0 -6
  169. package/dist/features/Treege/components/Forms/FormTreeCardMutation/useFormTreeCardMutation.d.ts +0 -110
  170. package/dist/features/Treege/components/Inputs/AutocompleteSelectType/AutocompleteSelectType.d.ts +0 -12
  171. package/dist/features/Treege/components/Inputs/AutocompleteSelectType/index.d.ts +0 -3
  172. package/dist/features/Treege/components/Inputs/AutocompleteSelectType/useAutocompleteSelectType.d.ts +0 -305
  173. package/dist/features/Treege/components/Inputs/ButtonCreateTree/ButtonCreateTree.d.ts +0 -2
  174. package/dist/features/Treege/components/Inputs/ButtonCreateTree/useButtonCreateTree.d.ts +0 -4
  175. package/dist/features/Treege/components/Inputs/FieldSelectAutocompleteCreatable.d.ts +0 -12
  176. package/dist/features/Treege/components/TreeCardContainer/TreeCardContainer.d.ts +0 -8
  177. package/dist/features/Treege/components/TreeCardContainer/useTreeCardContainer.d.ts +0 -10
  178. package/dist/features/Treege/components/TreeGrid/TreeGrid.d.ts +0 -2
  179. package/dist/features/Treege/components/TreeGrid/useTreeGrid.d.ts +0 -9
  180. package/dist/features/Treege/components/TreeNameTextField/TreeNameTextField.d.ts +0 -2
  181. package/dist/features/Treege/components/TreeNameTextField/index.d.ts +0 -2
  182. package/dist/features/Treege/components/TreeNameTextField/useTreeNameTextField.d.ts +0 -9
  183. package/dist/features/Treege/components/TreeSelect/TreeSelect.d.ts +0 -12
  184. package/dist/features/Treege/components/TreeSelect/index.d.ts +0 -2
  185. package/dist/features/Treege/components/TreeSelect/useTreeSelect.d.ts +0 -16
  186. package/dist/features/Treege/context/TreegeProvider.d.ts +0 -90
  187. package/dist/features/Treege/reducer/treeReducer.d.ts +0 -35
  188. package/dist/hooks/useTreegeContext/index.d.ts +0 -3
  189. package/dist/hooks/useTreegeContext/useTreegeContext.d.ts +0 -2
  190. package/dist/locales/en/button-en.d.ts +0 -11
  191. package/dist/locales/en/form-en.d.ts +0 -93
  192. package/dist/locales/en/modal-en.d.ts +0 -9
  193. package/dist/locales/en/snackMessage-en.d.ts +0 -13
  194. package/dist/locales/en/translation-en.d.ts +0 -30
  195. package/dist/locales/fr/button-fr.d.ts +0 -11
  196. package/dist/locales/fr/form-fr.d.ts +0 -93
  197. package/dist/locales/fr/modal-fr.d.ts +0 -9
  198. package/dist/locales/fr/snackMessage-fr.d.ts +0 -13
  199. package/dist/locales/fr/translation-fr.d.ts +0 -30
  200. package/dist/main.umd.cjs +0 -97
  201. package/dist/services/workflows/mutation/usePatchWorkflowsMutation.d.ts +0 -12
  202. package/dist/services/workflows/mutation/usePostWorkflowMutation.d.ts +0 -11
  203. package/dist/services/workflows/query/useWorkflowQuery.d.ts +0 -10
  204. package/dist/services/workflows/query/useWorkflowsQuery.d.ts +0 -10
  205. package/dist/utils/index.d.ts +0 -3
  206. package/dist/utils/tree/appendNode/appendNode.d.ts +0 -83
  207. package/dist/utils/tree/appendNode/test/mock.d.ts +0 -16
  208. package/dist/utils/tree/findNodeByUUIDInTree/findNodeByUUIDInTree.d.ts +0 -8
  209. package/dist/utils/tree/findNodeByUUIDInTree/test/mock.d.ts +0 -12
  210. package/dist/utils/tree/findParentNodeByUUIDInTree/findParentNodeByUUIDInTree.d.ts +0 -9
  211. package/dist/utils/tree/findParentNodeByUUIDInTree/test/mock.d.ts +0 -11
  212. package/dist/utils/tree/getAllAncestorFromTree/getAllAncestorFromTree.d.ts +0 -12
  213. package/dist/utils/tree/getAllAncestorFromTree/test/mock.d.ts +0 -3
  214. package/dist/utils/tree/getNode/getNode.d.ts +0 -9
  215. package/dist/utils/tree/getNode/test/mock.d.ts +0 -12
  216. package/dist/utils/tree/getTree/getTree.d.ts +0 -9
  217. package/dist/utils/tree/getTree/test/mock.d.ts +0 -13
  218. package/dist/utils/tree/getUniqueTagsInTree/getUniqueTagsInTree.d.ts +0 -7
  219. package/dist/utils/tree/getUniqueTagsInTree/test/getUniqueTagsInTree.d.ts +0 -1
  220. package/dist/utils/tree/getUniqueTagsInTree/test/mock.d.ts +0 -10
  221. package/dist/utils/tree/index.d.ts +0 -9
  222. package/dist/utils/tree/removeNode/removeNode.d.ts +0 -14
  223. package/dist/utils/tree/removeNode/test/mock.d.ts +0 -14
  224. package/dist/utils/tree/updateNodeInTree/test/mock.d.ts +0 -14
  225. package/dist/utils/tree/updateNodeInTree/updateNodeInTree.d.ts +0 -16
  226. package/dist/utils/uuid/getUUID.d.ts +0 -5
@@ -0,0 +1,39 @@
1
+ import { ReactNode } from 'react';
2
+ import { TreegeRendererComponents, TreegeRendererConfig } from '../types/renderer';
3
+ /**
4
+ * Hook to access the global Treege configuration
5
+ * Returns undefined if used outside of TreegeConfigProvider
6
+ */
7
+ export declare const useTreegeConfig: () => TreegeRendererConfig | undefined;
8
+ export type TreegeConfigProviderProps = {
9
+ children: ReactNode;
10
+ /**
11
+ * Custom component renderers (can be overridden per TreegeRenderer instance)
12
+ */
13
+ components?: TreegeRendererComponents;
14
+ /**
15
+ * Google Maps API key for address autocomplete
16
+ * If not provided, falls back to free Nominatim (OpenStreetMap)
17
+ */
18
+ googleApiKey?: string;
19
+ /**
20
+ * Default language for translations
21
+ * @default "en"
22
+ */
23
+ language?: string;
24
+ /**
25
+ * Default theme for all renderers
26
+ * @default "dark"
27
+ */
28
+ theme?: "dark" | "light";
29
+ /**
30
+ * Default validation mode
31
+ * @default "onSubmit"
32
+ */
33
+ validationMode?: "onChange" | "onSubmit";
34
+ };
35
+ /**
36
+ * Provider for global Treege configuration
37
+ * Wrap your app with this provider to set default options for all TreegeRenderer instances
38
+ */
39
+ export declare const TreegeConfigProvider: ({ children, components, googleApiKey, language, theme, validationMode, }: TreegeConfigProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { FormValues } from '../types/renderer';
3
+ import { Flow } from '../../shared/types/node';
4
+ export interface TreegeRendererContextValue {
5
+ flows?: Flow | null;
6
+ formErrors: Record<string, string>;
7
+ formValues: FormValues;
8
+ googleApiKey?: string;
9
+ language: string;
10
+ setFieldValue: (fieldName: string, value: unknown) => void;
11
+ }
12
+ export interface TreegeRendererProviderProps extends PropsWithChildren {
13
+ value: TreegeRendererContextValue;
14
+ }
15
+ export declare const TreegeRendererContext: import('react').Context<TreegeRendererContextValue | null>;
16
+ export declare const TreegeRendererProvider: ({ children, value }: TreegeRendererProviderProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const useTreegeRendererContext: () => {
18
+ edges: import('@xyflow/react').Edge[];
19
+ flows?: Flow | null;
20
+ formErrors: Record<string, string>;
21
+ formValues: FormValues;
22
+ googleApiKey?: string;
23
+ language: string;
24
+ setFieldValue: (fieldName: string, value: unknown) => void;
25
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TreegeRenderer for React Native
3
+ *
4
+ * TODO: Implement React Native version of TreegeRenderer
5
+ * This will use React Native components (View, Text, TextInput, etc.) instead of HTML elements
6
+ *
7
+ * The implementation should:
8
+ * - Import and use useTreegeRenderer hook (platform-agnostic)
9
+ * - Import and use utils from @/renderer/utils (platform-agnostic)
10
+ * - Use React Native UI components instead of web components
11
+ * - Share the same props interface (TreegeRendererProps)
12
+ */
13
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default Form Wrapper for React Native
3
+ *
4
+ * TODO: Implement React Native version of FormWrapper
5
+ * Should use View component and handle form submission with native patterns
6
+ */
7
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default Group Component for React Native
3
+ *
4
+ * TODO: Implement React Native version of Group component
5
+ * Should use View component with proper styling for grouping
6
+ */
7
+ export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Default Input Components for React Native
3
+ *
4
+ * TODO: Implement React Native versions of all input renderers
5
+ * This should mirror the web version but use React Native components:
6
+ * - TextInput instead of <input>
7
+ * - Picker instead of <select>
8
+ * - Switch instead of <input type="checkbox">
9
+ * - etc.
10
+ *
11
+ * Should export:
12
+ * - defaultInputRenderers object with all input types
13
+ * - Individual input components (DefaultTextInput, DefaultNumberInput, etc.)
14
+ */
15
+ export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Default Input Components for React Native
3
+ *
4
+ * TODO: Implement React Native versions of all input renderers
5
+ * This should mirror the web version but use React Native components:
6
+ * - TextInput instead of <input>
7
+ * - Picker instead of <select>
8
+ * - Switch instead of <input type="checkbox">
9
+ * - etc.
10
+ *
11
+ * Should export:
12
+ * - defaultInputRenderers object with all input types
13
+ * - Individual input components (DefaultTextInput, DefaultNumberInput, etc.)
14
+ */
15
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default Submit Button for React Native
3
+ *
4
+ * TODO: Implement React Native version of SubmitButton
5
+ * Should use Pressable or TouchableOpacity component
6
+ */
7
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Default UI Components for React Native
3
+ *
4
+ * TODO: Implement React Native versions of UI components (Title, Description, Divider, etc.)
5
+ * Should use Text, View and other React Native components
6
+ */
7
+ export {};
@@ -0,0 +1,50 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormValues } from '../../types/renderer';
3
+ import { Flow, TreegeNodeData } from '../../../shared/types/node';
4
+ /**
5
+ * PURE STATE LOGIC HOOK
6
+ *
7
+ * This hook manages the internal form state and visibility logic.
8
+ * It contains NO side effects (no useEffect).
9
+ * All state is keyed by nodeId for uniqueness.
10
+ *
11
+ * Responsibilities:
12
+ * - Form values state (keyed by nodeId)
13
+ * - Errors state
14
+ * - Node visibility calculation (progressive rendering)
15
+ * - Form validation (built-in: required, pattern)
16
+ * - Submit button state (combines end-of-path detection + form validity)
17
+ *
18
+ * NOT responsible for:
19
+ * - Export/conversion to external format (done in component)
20
+ * - Side effects like onChange callbacks (done in component)
21
+ * - Custom validation (passed to component)
22
+ */
23
+ /**
24
+ * Custom hook for TreegeRenderer - Pure state logic only
25
+ *
26
+ * @param flows - Flow or array of flows (can be null/undefined)
27
+ * @param initialValues - Initial form values (will be merged with node defaults)
28
+ * @param language - Preferred language for translations (defaults to 'en')
29
+ * @returns Pure state and computed values (no side effects)
30
+ */
31
+ export declare const useTreegeRenderer: (flows: Flow | Flow[] | null | undefined, initialValues?: FormValues, language?: string) => {
32
+ canSubmit: boolean;
33
+ formErrors: Record<string, string>;
34
+ formValues: FormValues;
35
+ inputNodes: Node<import('../../../shared/types/node').InputNodeData>[];
36
+ mergedFlow: Flow;
37
+ missingRequiredFields: string[];
38
+ setFieldValue: (fieldName: string, value: unknown) => void;
39
+ setFormErrors: import('react').Dispatch<import('react').SetStateAction<Record<string, string>>>;
40
+ t: (key?: import('../../../main').Translatable | import('../../../main').TranslationKey | string) => string;
41
+ validateForm: (customValidate?: (values: FormValues, visibleNodesList: Node<TreegeNodeData>[]) => Record<string, string>) => {
42
+ errors: {
43
+ [x: string]: string;
44
+ };
45
+ hasCustomErrors: boolean;
46
+ isValid: boolean;
47
+ };
48
+ visibleNodes: Node<TreegeNodeData>[];
49
+ visibleRootNodes: Node<TreegeNodeData>[];
50
+ };
@@ -0,0 +1,3 @@
1
+ import { TreegeRendererProps } from '../../../types/renderer';
2
+ declare const TreegeRenderer: ({ components, flows, googleApiKey, initialValues, language, onChange, onSubmit, theme, validate, validationMode, }: TreegeRendererProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default TreegeRenderer;
@@ -0,0 +1,6 @@
1
+ import { FormEvent, ReactNode } from 'react';
2
+ declare const DefaultFormWrapper: ({ children, onSubmit }: {
3
+ children: ReactNode;
4
+ onSubmit: (e: FormEvent) => void;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export default DefaultFormWrapper;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ import { NodeRenderProps } from '../../../../types/renderer';
3
+ export declare const DefaultGroup: ({ node, children }: NodeRenderProps & {
4
+ children: ReactNode;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export default DefaultGroup;
@@ -0,0 +1,20 @@
1
+ import { default as DefaultAddressInput } from './inputs/DefaultAddressInput';
2
+ import { default as DefaultAutocompleteInput } from './inputs/DefaultAutocompleteInput';
3
+ import { default as DefaultCheckboxInput } from './inputs/DefaultCheckboxInput';
4
+ import { default as DefaultDateInput } from './inputs/DefaultDateInput';
5
+ import { default as DefaultDateRangeInput } from './inputs/DefaultDateRangeInput';
6
+ import { default as DefaultFileInput } from './inputs/DefaultFileInput';
7
+ import { default as DefaultHiddenInput } from './inputs/DefaultHiddenInput';
8
+ import { default as DefaultHttpInput } from './inputs/DefaultHttpInput';
9
+ import { default as DefaultNumberInput } from './inputs/DefaultNumberInput';
10
+ import { default as DefaultPasswordInput } from './inputs/DefaultPasswordInput';
11
+ import { default as DefaultRadioInput } from './inputs/DefaultRadioInput';
12
+ import { default as DefaultSelectInput } from './inputs/DefaultSelectInput';
13
+ import { default as DefaultSwitchInput } from './inputs/DefaultSwitchInput';
14
+ import { default as DefaultTextAreaInput } from './inputs/DefaultTextAreaInput';
15
+ import { default as DefaultTextInput } from './inputs/DefaultTextInput';
16
+ import { default as DefaultTimeInput } from './inputs/DefaultTimeInput';
17
+ import { default as DefaultTimeRangeInput } from './inputs/DefaultTimeRangeInput';
18
+ import { InputRenderers } from '../../../../types/renderer';
19
+ export { DefaultAddressInput, DefaultAutocompleteInput, DefaultCheckboxInput, DefaultDateInput, DefaultDateRangeInput, DefaultFileInput, DefaultHiddenInput, DefaultHttpInput, DefaultNumberInput, DefaultPasswordInput, DefaultRadioInput, DefaultSelectInput, DefaultSwitchInput, DefaultTextAreaInput, DefaultTextInput, DefaultTimeInput, DefaultTimeRangeInput, };
20
+ export declare const defaultInputRenderers: InputRenderers;
@@ -0,0 +1,9 @@
1
+ import { ButtonHTMLAttributes } from 'react';
2
+ export interface SubmitButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
+ label?: string;
4
+ }
5
+ /**
6
+ * Default submit button
7
+ */
8
+ declare const DefaultSubmitButton: ({ label, ...props }: SubmitButtonProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default DefaultSubmitButton;
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ export interface SubmitButtonWrapperProps {
3
+ children: ReactNode;
4
+ missingFields?: string[];
5
+ }
6
+ /**
7
+ * Default submit button wrapper with tooltip for missing fields
8
+ */
9
+ declare const DefaultSubmitButtonWrapper: ({ children, missingFields }: SubmitButtonWrapperProps) => string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null | undefined;
10
+ export default DefaultSubmitButtonWrapper;
@@ -0,0 +1,7 @@
1
+ import { UiRenderProps } from '../../../../types/renderer';
2
+ export declare const Divider: ({ node }: UiRenderProps) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const Title: ({ node }: UiRenderProps) => import("react/jsx-runtime").JSX.Element;
4
+ export declare const defaultUI: {
5
+ divider: ({ node }: UiRenderProps) => import("react/jsx-runtime").JSX.Element;
6
+ title: ({ node }: UiRenderProps) => import("react/jsx-runtime").JSX.Element;
7
+ };
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAddressInput: ({ node, value, setValue, error }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultAddressInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAutocompleteInput: ({ node, value, setValue, error }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultAutocompleteInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultCheckboxInput: ({ node, value, setValue, error }: InputRenderProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultCheckboxInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateInput: ({ node, value, setValue, error }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultDateInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateRangeInput: ({ node, value, setValue, error }: InputRenderProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultDateRangeInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultFileInput: ({ node, setValue, error }: InputRenderProps<"file">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultFileInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHiddenInput: ({ node, value }: InputRenderProps<"hidden">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultHiddenInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHttpInput: ({ node, value, setValue, error }: InputRenderProps<"http">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultHttpInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultNumberInput: ({ node, value, setValue, error }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultNumberInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultPasswordInput: ({ node, value, setValue, error }: InputRenderProps<"password">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultPasswordInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultRadioInput: ({ node, value, setValue, error }: InputRenderProps<"radio">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultRadioInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSelectInput: ({ node, value, setValue, error }: InputRenderProps<"select">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultSelectInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSwitchInput: ({ node, value, setValue, error }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultSwitchInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextAreaInput: ({ node, value, setValue, error }: InputRenderProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultTextAreaInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextInput: ({ node, value, setValue, error }: InputRenderProps<"text">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultTextInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeInput: ({ node, value, setValue, error }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultTimeInput;
@@ -0,0 +1,3 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeRangeInput: ({ node, value, setValue, error }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
3
+ export default DefaultTimeRangeInput;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Hook for translating text in the renderer with context-aware language preference.
3
+ *
4
+ * This hook uses the language from TreegeRendererContext (or explicit override) and delegates to the shared useTranslate hook.
5
+ *
6
+ * @param language - Optional language override. If not provided, uses language from context.
7
+ * @returns A function that translates either a translation key or a Translatable object
8
+ *
9
+ * @example
10
+ * // Static translation (from translation files)
11
+ * const t = useTranslate();
12
+ * const errorMsg = t("validation.required"); // "This field is required"
13
+ *
14
+ * @example
15
+ * // Dynamic translation (from node data)
16
+ * const t = useTranslate();
17
+ * const label = t(node.data.label); // Translates user-defined content
18
+ *
19
+ * @example
20
+ * // With explicit language
21
+ * const t = useTranslate("fr");
22
+ * const errorMsg = t("validation.required"); // "Ce champ est requis"
23
+ */
24
+ export declare const useTranslate: (language?: string) => (key?: import('../../main').Translatable | import('../../main').TranslationKey | string) => string;
@@ -0,0 +1,17 @@
1
+ export { TreegeConfigProvider, useTreegeConfig } from './context/TreegeConfigContext';
2
+ export { useTreegeRenderer } from './features/TreegeRenderer/useTreegeRenderer';
3
+ export * from './features/TreegeRenderer/web/components/DefaultFormWrapper';
4
+ export * from './features/TreegeRenderer/web/components/DefaultGroup';
5
+ export * from './features/TreegeRenderer/web/components/DefaultInputs';
6
+ export * from './features/TreegeRenderer/web/components/DefaultSubmitButton';
7
+ export * from './features/TreegeRenderer/web/components/DefaultUI';
8
+ export * from './features/TreegeRenderer/web/TreegeRenderer';
9
+ export { default as TreegeRenderer } from './features/TreegeRenderer/web/TreegeRenderer';
10
+ export type { TreegeRendererConfig } from './types/renderer';
11
+ export * from './types/renderer';
12
+ export * from './utils/conditions';
13
+ export * from './utils/file';
14
+ export * from './utils/flow';
15
+ export * from './utils/form';
16
+ export { ThemeProvider, useTheme } from '../shared/context/ThemeContext';
17
+ export { getTranslatedText } from '../shared/utils/translations';
@@ -0,0 +1,187 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormEvent, ReactNode } from 'react';
3
+ import { SerializableFile } from '../utils/file';
4
+ import { Flow, InputNodeData, InputType, TreegeNodeData, UINodeData, UIType } from '../../shared/types/node';
5
+ /**
6
+ * Type mapping for input values based on input type
7
+ */
8
+ export type InputValueTypeMap = {
9
+ address: string;
10
+ autocomplete: string;
11
+ checkbox: boolean | string[];
12
+ date: string;
13
+ daterange: [string, string] | [string | undefined, string | undefined] | null;
14
+ file: SerializableFile | SerializableFile[] | null;
15
+ hidden: string;
16
+ http: string | string[];
17
+ number: number | null;
18
+ password: string;
19
+ radio: string;
20
+ select: string | string[];
21
+ switch: boolean;
22
+ text: string;
23
+ textarea: string;
24
+ time: string;
25
+ timerange: [string, string] | [string | undefined, string | undefined] | null;
26
+ };
27
+ /**
28
+ * Form values stored during rendering
29
+ */
30
+ export type FormValues = Record<string, any>;
31
+ /**
32
+ * Union of all possible input value types
33
+ */
34
+ export type InputValue = string | number | boolean | string[] | SerializableFile | SerializableFile[] | [string, string] | [string | undefined, string | undefined] | null;
35
+ /**
36
+ * Props for input components with dynamic value typing
37
+ * All form state is provided via props for easier custom component implementation
38
+ */
39
+ export type InputRenderProps<T extends InputType = InputType> = {
40
+ node: Node<InputNodeData>;
41
+ /**
42
+ * Current value of the input field (typed based on input type when T is specified)
43
+ */
44
+ value: InputValueTypeMap[T];
45
+ /**
46
+ * Function to update the input value
47
+ * @param value - The new value (typed based on input type when T is specified)
48
+ */
49
+ setValue: (value: InputValueTypeMap[T]) => void;
50
+ /**
51
+ * Validation error message for this field (if any)
52
+ */
53
+ error?: string;
54
+ };
55
+ export type UiRenderProps = {
56
+ node: Node<UINodeData>;
57
+ };
58
+ /**
59
+ * Props for UI/Group components (use useTreegeContext for state)
60
+ */
61
+ export type NodeRenderProps = {
62
+ node: Node<TreegeNodeData>;
63
+ };
64
+ /**
65
+ * Type-safe input renderers mapping
66
+ * Each input type gets its own properly typed InputRenderProps
67
+ */
68
+ export type InputRenderers = {
69
+ [K in InputType]?: (props: InputRenderProps<K>) => ReactNode;
70
+ };
71
+ /**
72
+ * Custom renderer components
73
+ */
74
+ export type TreegeRendererComponents = {
75
+ /**
76
+ * Custom input renderers by input type
77
+ * Each renderer receives properly typed value and setValue based on the input type
78
+ */
79
+ inputs?: InputRenderers;
80
+ /**
81
+ * Custom UI node renderers by UI type
82
+ */
83
+ ui?: Partial<Record<UIType, (props: NodeRenderProps) => ReactNode>>;
84
+ /**
85
+ * Custom group container renderer
86
+ */
87
+ group?: (props: NodeRenderProps) => ReactNode;
88
+ /**
89
+ * Custom form wrapper
90
+ */
91
+ form?: (props: {
92
+ children: ReactNode;
93
+ onSubmit: (e: FormEvent) => void;
94
+ }) => ReactNode;
95
+ /**
96
+ * Custom submit button (pure button without wrapper)
97
+ */
98
+ submitButton?: (props: {
99
+ label?: string;
100
+ }) => ReactNode;
101
+ /**
102
+ * Custom submit button wrapper (e.g., for tooltip with missing fields)
103
+ */
104
+ submitButtonWrapper?: (props: {
105
+ children: ReactNode;
106
+ missingFields?: string[];
107
+ }) => ReactNode;
108
+ };
109
+ /**
110
+ * Configuration options that can be set globally via TreegeConfigProvider
111
+ * or locally via TreegeRenderer config prop
112
+ */
113
+ export type TreegeRendererConfig = {
114
+ /**
115
+ * Custom component renderers
116
+ */
117
+ components?: TreegeRendererComponents;
118
+ /**
119
+ * Google Maps API key for address autocomplete
120
+ * If not provided, falls back to free Nominatim (OpenStreetMap)
121
+ */
122
+ googleApiKey?: string;
123
+ /**
124
+ * Current language for translations
125
+ * @default "en"
126
+ */
127
+ language?: string;
128
+ /**
129
+ * Theme for the renderer
130
+ * @default "dark"
131
+ */
132
+ theme?: "dark" | "light";
133
+ /**
134
+ * Validation mode
135
+ * @default "onSubmit"
136
+ */
137
+ validationMode?: "onChange" | "onSubmit";
138
+ };
139
+ /**
140
+ * Props for the TreegeRenderer component
141
+ */
142
+ export type TreegeRendererProps = {
143
+ /**
144
+ * Custom component renderers
145
+ */
146
+ components?: TreegeRendererComponents;
147
+ /**
148
+ * Flow or array of flows
149
+ * - If a single Flow: renders that flow
150
+ * - If an array: first flow is the main flow, others are sub-flows available for FlowNodes
151
+ */
152
+ flows?: Flow | Flow[] | null;
153
+ /**
154
+ * Google Maps API key for address autocomplete
155
+ * If not provided, falls back to free Nominatim (OpenStreetMap)
156
+ */
157
+ googleApiKey?: string;
158
+ /**
159
+ * Initial form values
160
+ */
161
+ initialValues?: FormValues;
162
+ /**
163
+ * Current language for translations
164
+ */
165
+ language?: string;
166
+ /**
167
+ * Callback when form values change
168
+ */
169
+ onChange?: (values: FormValues) => void;
170
+ /**
171
+ * Callback when form is submitted
172
+ */
173
+ onSubmit?: (values: FormValues) => void;
174
+ /**
175
+ * Theme for the renderer
176
+ * @default "dark"
177
+ */
178
+ theme?: "dark" | "light";
179
+ /**
180
+ * Custom validation function
181
+ */
182
+ validate?: (values: FormValues, nodes: Node<TreegeNodeData>[]) => Record<string, string>;
183
+ /**
184
+ * Validation mode
185
+ */
186
+ validationMode?: "onChange" | "onSubmit";
187
+ };
@@ -0,0 +1,14 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormValues } from '../types/renderer';
3
+ import { EdgeCondition } from '../../shared/types/edge';
4
+ import { TreegeNodeData } from '../../shared/types/node';
5
+ /**
6
+ * Evaluates a single condition against form values
7
+ * Note: The field parameter can be either a field name OR a node ID
8
+ */
9
+ export declare const evaluateCondition: (condition: EdgeCondition, formValues: FormValues, nodeMap?: Map<string, Node<TreegeNodeData>>) => boolean;
10
+ /**
11
+ * Evaluates multiple conditions with logical operators (AND/OR)
12
+ * Returns true if all conditions are met according to their logical operators
13
+ */
14
+ export declare const evaluateConditions: (conditions: EdgeCondition[] | undefined, formValues: FormValues, nodeMap?: Map<string, Node<TreegeNodeData>>) => boolean;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Represents a serializable file object with base64 data
3
+ */
4
+ export interface SerializableFile {
5
+ name: string;
6
+ size: number;
7
+ type: string;
8
+ lastModified: number;
9
+ data: string;
10
+ }
11
+ /**
12
+ * Converts a File object to a serializable format with base64 data
13
+ */
14
+ export declare const fileToSerializable: (file: File) => Promise<SerializableFile>;
15
+ /**
16
+ * Converts a SerializableFile back to a File object
17
+ */
18
+ export declare const serializableToFile: (serializable: SerializableFile) => File;
19
+ /**
20
+ * Converts multiple File objects to serializable format
21
+ */
22
+ export declare const filesToSerializable: (files: File[]) => Promise<SerializableFile[]>;