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.
- package/README.md +378 -64
- package/dist/ThemeContext-BIvs8Kw-.js +758 -0
- package/dist/TreegeEditor-BSPfQQk3.js +2151 -0
- package/dist/TreegeRenderer-D3EvsEfJ.js +1413 -0
- package/dist/_name_.css +1 -0
- package/dist/editor/components/data-display/logo.d.ts +5 -0
- package/dist/editor/components/input/ComboboxWithCreate.d.ts +21 -0
- package/dist/editor/constants/defaultNode.d.ts +11 -0
- package/dist/editor/constants/edgeTypes.d.ts +3 -0
- package/dist/editor/constants/nodeTypes.d.ts +6 -0
- package/dist/editor/context/TreegeEditorContext.d.ts +12 -0
- package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +3 -0
- package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/forms/GroupNodeForm.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/forms/HttpConfigForm.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/forms/InputNodeForm.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/forms/UINodeForm.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/inputs/SelectLanguage.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/inputs/SelectNodeType.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/sheets/NodeActionsSheet.d.ts +2 -0
- package/dist/editor/hooks/useAvailableParentFields.d.ts +7 -0
- package/dist/editor/hooks/useEdgesSelection.d.ts +11 -0
- package/dist/editor/hooks/useFlowActions.d.ts +12 -0
- package/dist/editor/hooks/useFlowConnections.d.ts +15 -0
- package/dist/editor/hooks/useNodesSelection.d.ts +54 -0
- package/dist/editor/hooks/useTranslate.d.ts +19 -0
- package/dist/editor/index.d.ts +4 -0
- package/dist/editor/types/editor.d.ts +37 -0
- package/dist/editor.d.ts +2 -0
- package/dist/editor.js +7 -0
- package/dist/favicon.svg +12 -0
- package/dist/main.d.ts +7 -4
- package/dist/main.js +50 -7672
- package/dist/renderer/context/TreegeConfigContext.d.ts +39 -0
- package/dist/renderer/context/TreegeRendererContext.d.ts +25 -0
- package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +13 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultHttpInput.d.ts +15 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +15 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +50 -0
- package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +6 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +6 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputs.d.ts +20 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +9 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButtonWrapper.d.ts +10 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultUI.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
- package/dist/renderer/hooks/useTranslate.d.ts +24 -0
- package/dist/renderer/index.d.ts +17 -0
- package/dist/renderer/types/renderer.d.ts +187 -0
- package/dist/renderer/utils/conditions.d.ts +14 -0
- package/dist/renderer/utils/file.d.ts +22 -0
- package/dist/renderer/utils/flow.d.ts +91 -0
- package/dist/renderer/utils/form.d.ts +26 -0
- package/dist/renderer/utils/node.d.ts +16 -0
- package/dist/renderer.d.ts +2 -0
- package/dist/renderer.js +45 -0
- package/dist/shared/components/ui/badge.d.ts +9 -0
- package/dist/shared/components/ui/button.d.ts +10 -0
- package/dist/shared/components/ui/calendar.d.ts +8 -0
- package/dist/shared/components/ui/checkbox.d.ts +4 -0
- package/dist/shared/components/ui/collapsible.d.ts +5 -0
- package/dist/shared/components/ui/command.d.ts +18 -0
- package/dist/shared/components/ui/dialog.d.ts +15 -0
- package/dist/shared/components/ui/dropdown-menu.d.ts +25 -0
- package/dist/shared/components/ui/form.d.ts +5 -0
- package/dist/shared/components/ui/input.d.ts +3 -0
- package/dist/shared/components/ui/label.d.ts +4 -0
- package/dist/shared/components/ui/popover.d.ts +7 -0
- package/dist/shared/components/ui/radio-group.d.ts +5 -0
- package/dist/shared/components/ui/scroll-area.d.ts +5 -0
- package/dist/shared/components/ui/select.d.ts +15 -0
- package/dist/shared/components/ui/separator.d.ts +4 -0
- package/dist/shared/components/ui/sheet.d.ts +13 -0
- package/dist/shared/components/ui/sonner.d.ts +3 -0
- package/dist/shared/components/ui/switch.d.ts +4 -0
- package/dist/shared/components/ui/textarea.d.ts +3 -0
- package/dist/shared/components/ui/tooltip.d.ts +7 -0
- package/dist/shared/constants/inputType.d.ts +19 -0
- package/dist/shared/constants/languages.d.ts +10 -0
- package/dist/shared/constants/node.d.ts +6 -0
- package/dist/shared/constants/operator.d.ts +4 -0
- package/dist/shared/constants/pattern.d.ts +7 -0
- package/dist/shared/constants/uiType.d.ts +4 -0
- package/dist/shared/context/ThemeContext.d.ts +15 -0
- package/dist/shared/hooks/useTranslate.d.ts +23 -0
- package/dist/shared/lib/utils.d.ts +2 -0
- package/dist/shared/locales/ar.json.d.ts +229 -0
- package/dist/shared/locales/de.json.d.ts +229 -0
- package/dist/shared/locales/en.json.d.ts +229 -0
- package/dist/shared/locales/es.json.d.ts +229 -0
- package/dist/shared/locales/fr.json.d.ts +229 -0
- package/dist/shared/locales/it.json.d.ts +229 -0
- package/dist/shared/locales/pt.json.d.ts +229 -0
- package/dist/shared/types/edge.d.ts +34 -0
- package/dist/shared/types/languages.d.ts +5 -0
- package/dist/shared/types/node.d.ts +171 -0
- package/dist/shared/types/operator.d.ts +9 -0
- package/dist/shared/types/translate.d.ts +9 -0
- package/dist/shared/utils/nodeTypeGuards.d.ts +22 -0
- package/dist/shared/utils/translations.d.ts +30 -0
- package/package.json +69 -41
- package/CHANGELOG.md +0 -7
- package/dist/components/DataDisplay/Icons/TreePlusIcon.d.ts +0 -7
- package/dist/components/DataDisplay/Logo/Logo.d.ts +0 -2
- package/dist/components/DataDisplay/Tree/Tree.d.ts +0 -14
- package/dist/components/DataDisplay/Tree/useTree.d.ts +0 -12
- package/dist/components/DataDisplay/TreeCard/TreeCard.d.ts +0 -14
- package/dist/components/DataDisplay/ViewerJSON/ViewerJSON.d.ts +0 -6
- package/dist/components/DataDisplay/ViewerJSON/useViewerJSON.d.ts +0 -4
- package/dist/components/DataDisplay/ViewerJSONAction/ViewerJSONAction.d.ts +0 -6
- package/dist/components/DataDisplay/ViewerJSONAction/useViewerJSONAction.d.ts +0 -11
- package/dist/components/FeedBack/MainModal/MainModal.d.ts +0 -10
- package/dist/components/FeedBack/TreeModal/TreeModal.d.ts +0 -13
- package/dist/components/Layouts/Action/Action.d.ts +0 -6
- package/dist/components/Layouts/Header/Header.d.ts +0 -6
- package/dist/components/Layouts/Main/Main.d.ts +0 -6
- package/dist/components/Layouts/MosaicLayout/MosaicLayout.d.ts +0 -6
- package/dist/components/Layouts/Sidebar/Sidebar.d.ts +0 -6
- package/dist/components/Theme/DarkTheme/DarkTheme.d.ts +0 -6
- package/dist/config/i18n.config.d.ts +0 -2
- package/dist/config/query.config.d.ts +0 -3
- package/dist/config/test.config.d.ts +0 -0
- package/dist/config/theme.config.d.ts +0 -3
- package/dist/constants/colors.d.ts +0 -10
- package/dist/constants/fields.d.ts +0 -152
- package/dist/context/Auth/AuthContext.d.ts +0 -7
- package/dist/context/Auth/AuthProvider.d.ts +0 -7
- package/dist/features/Treege/Treege.d.ts +0 -24
- package/dist/features/Treege/components/Feedback/EndPointWarning.d.ts +0 -8
- package/dist/features/Treege/components/Forms/AssignValueToChildren/AssignValueToChildren.d.ts +0 -8
- package/dist/features/Treege/components/Forms/AssignValueToChildren/Examples/ObjectMappingExample.d.ts +0 -2
- package/dist/features/Treege/components/Forms/FormTreeCardDelete/FormTreeCardDelete.d.ts +0 -5
- package/dist/features/Treege/components/Forms/FormTreeCardDelete/useFormTreeCardDelete.d.ts +0 -5
- package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/ApiFieldsConfigAccordion.d.ts +0 -32
- package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/ExtraField.d.ts +0 -15
- package/dist/features/Treege/components/Forms/FormTreeCardMutation/Fields/FillerFieldAccordion.d.ts +0 -14
- package/dist/features/Treege/components/Forms/FormTreeCardMutation/FormTreeCardMutation.d.ts +0 -6
- package/dist/features/Treege/components/Forms/FormTreeCardMutation/useFormTreeCardMutation.d.ts +0 -110
- package/dist/features/Treege/components/Inputs/AutocompleteSelectType/AutocompleteSelectType.d.ts +0 -12
- package/dist/features/Treege/components/Inputs/AutocompleteSelectType/index.d.ts +0 -3
- package/dist/features/Treege/components/Inputs/AutocompleteSelectType/useAutocompleteSelectType.d.ts +0 -305
- package/dist/features/Treege/components/Inputs/ButtonCreateTree/ButtonCreateTree.d.ts +0 -2
- package/dist/features/Treege/components/Inputs/ButtonCreateTree/useButtonCreateTree.d.ts +0 -4
- package/dist/features/Treege/components/Inputs/FieldSelectAutocompleteCreatable.d.ts +0 -12
- package/dist/features/Treege/components/TreeCardContainer/TreeCardContainer.d.ts +0 -8
- package/dist/features/Treege/components/TreeCardContainer/useTreeCardContainer.d.ts +0 -10
- package/dist/features/Treege/components/TreeGrid/TreeGrid.d.ts +0 -2
- package/dist/features/Treege/components/TreeGrid/useTreeGrid.d.ts +0 -9
- package/dist/features/Treege/components/TreeNameTextField/TreeNameTextField.d.ts +0 -2
- package/dist/features/Treege/components/TreeNameTextField/index.d.ts +0 -2
- package/dist/features/Treege/components/TreeNameTextField/useTreeNameTextField.d.ts +0 -9
- package/dist/features/Treege/components/TreeSelect/TreeSelect.d.ts +0 -12
- package/dist/features/Treege/components/TreeSelect/index.d.ts +0 -2
- package/dist/features/Treege/components/TreeSelect/useTreeSelect.d.ts +0 -16
- package/dist/features/Treege/context/TreegeProvider.d.ts +0 -90
- package/dist/features/Treege/reducer/treeReducer.d.ts +0 -35
- package/dist/hooks/useTreegeContext/index.d.ts +0 -3
- package/dist/hooks/useTreegeContext/useTreegeContext.d.ts +0 -2
- package/dist/locales/en/button-en.d.ts +0 -11
- package/dist/locales/en/form-en.d.ts +0 -93
- package/dist/locales/en/modal-en.d.ts +0 -9
- package/dist/locales/en/snackMessage-en.d.ts +0 -13
- package/dist/locales/en/translation-en.d.ts +0 -30
- package/dist/locales/fr/button-fr.d.ts +0 -11
- package/dist/locales/fr/form-fr.d.ts +0 -93
- package/dist/locales/fr/modal-fr.d.ts +0 -9
- package/dist/locales/fr/snackMessage-fr.d.ts +0 -13
- package/dist/locales/fr/translation-fr.d.ts +0 -30
- package/dist/main.umd.cjs +0 -97
- package/dist/services/workflows/mutation/usePatchWorkflowsMutation.d.ts +0 -12
- package/dist/services/workflows/mutation/usePostWorkflowMutation.d.ts +0 -11
- package/dist/services/workflows/query/useWorkflowQuery.d.ts +0 -10
- package/dist/services/workflows/query/useWorkflowsQuery.d.ts +0 -10
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/tree/appendNode/appendNode.d.ts +0 -83
- package/dist/utils/tree/appendNode/test/mock.d.ts +0 -16
- package/dist/utils/tree/findNodeByUUIDInTree/findNodeByUUIDInTree.d.ts +0 -8
- package/dist/utils/tree/findNodeByUUIDInTree/test/mock.d.ts +0 -12
- package/dist/utils/tree/findParentNodeByUUIDInTree/findParentNodeByUUIDInTree.d.ts +0 -9
- package/dist/utils/tree/findParentNodeByUUIDInTree/test/mock.d.ts +0 -11
- package/dist/utils/tree/getAllAncestorFromTree/getAllAncestorFromTree.d.ts +0 -12
- package/dist/utils/tree/getAllAncestorFromTree/test/mock.d.ts +0 -3
- package/dist/utils/tree/getNode/getNode.d.ts +0 -9
- package/dist/utils/tree/getNode/test/mock.d.ts +0 -12
- package/dist/utils/tree/getTree/getTree.d.ts +0 -9
- package/dist/utils/tree/getTree/test/mock.d.ts +0 -13
- package/dist/utils/tree/getUniqueTagsInTree/getUniqueTagsInTree.d.ts +0 -7
- package/dist/utils/tree/getUniqueTagsInTree/test/getUniqueTagsInTree.d.ts +0 -1
- package/dist/utils/tree/getUniqueTagsInTree/test/mock.d.ts +0 -10
- package/dist/utils/tree/index.d.ts +0 -9
- package/dist/utils/tree/removeNode/removeNode.d.ts +0 -14
- package/dist/utils/tree/removeNode/test/mock.d.ts +0 -14
- package/dist/utils/tree/updateNodeInTree/test/mock.d.ts +0 -14
- package/dist/utils/tree/updateNodeInTree/updateNodeInTree.d.ts +0 -16
- 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,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,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 { 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,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[]>;
|