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.
- package/LICENSE +18 -12
- package/README.md +598 -79
- package/dist/DefaultSubmitButton-NeSDqyzv.js +1909 -0
- package/dist/ThemeContext-CPsC8QIP.js +1008 -0
- package/dist/editor/components/input/ComboboxWithCreate.d.ts +2 -1
- package/dist/editor/components/styles/EditorStyles.d.ts +2 -0
- package/dist/editor/constants/defaultNode.d.ts +1 -1
- package/dist/editor/constants/edgeTypes.d.ts +3 -2
- package/dist/editor/constants/inputTypeIcons.d.ts +3 -0
- package/dist/editor/constants/nodeSpacing.d.ts +25 -0
- package/dist/editor/constants/nodeTypes.d.ts +4 -5
- package/dist/editor/context/OpenApiContext.d.ts +79 -0
- package/dist/editor/context/TreegeEditorRuntimeProvider.d.ts +78 -0
- package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +1 -1
- package/dist/editor/features/TreegeEditor/controls/MiniMapControl.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/dialogs/AuthorizeDialog.d.ts +20 -0
- package/dist/editor/features/TreegeEditor/dialogs/ChangeNodeTypeDialog.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/dialogs/DeleteNodeDialog.d.ts +2 -0
- package/dist/editor/features/TreegeEditor/dialogs/HeadersDialog.d.ts +19 -0
- package/dist/editor/features/TreegeEditor/dialogs/OpenApiDialog.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +2 -2
- package/dist/editor/features/TreegeEditor/edges/DefaultEdge.d.ts +3 -0
- package/dist/editor/features/TreegeEditor/forms/HttpConfigForm.d.ts +4 -1
- package/dist/editor/features/TreegeEditor/forms/JsonTemplateEditor.d.ts +13 -0
- package/dist/editor/features/TreegeEditor/forms/OptionsMappingFields.d.ts +34 -0
- package/dist/editor/features/TreegeEditor/forms/OptionsSourceForm.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/forms/SensitiveHeaderWarning.d.ts +13 -0
- package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/inputs/ApiUrlCombobox.d.ts +20 -0
- package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
- package/dist/editor/features/TreegeEditor/inputs/DefaultFileValueField.d.ts +14 -0
- package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +22 -1
- package/dist/editor/features/TreegeEditor/inputs/TranslatableInput.d.ts +20 -0
- package/dist/editor/features/TreegeEditor/layout/AutoLayout.d.ts +15 -0
- package/dist/editor/features/TreegeEditor/listeners/FlowChangeEmitter.d.ts +19 -0
- package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +5 -0
- package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +25 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeGroupBadge.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeImage.d.ts +5 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeImageButton.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +12 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +10 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeRequiredButton.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeStackOrderButtons.d.ts +6 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
- package/dist/editor/features/TreegeEditor/nodes/components/NodeTypePickerMenuContent.d.ts +12 -0
- package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +4 -2
- package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
- package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -2
- package/dist/editor/features/TreegeEditor/panel/MultiSelectionPanel.d.ts +7 -0
- package/dist/editor/hooks/useAvailableParentFields.d.ts +13 -0
- package/dist/editor/hooks/useFlowActions.d.ts +6 -2
- package/dist/editor/hooks/useFlowConnections.d.ts +14 -0
- package/dist/editor/hooks/useFlowContent.d.ts +16 -0
- package/dist/editor/hooks/useHistoryStore.d.ts +26 -0
- package/dist/editor/hooks/useIsStackedEdge.d.ts +8 -0
- package/dist/editor/hooks/useKeyValueRows.d.ts +15 -0
- package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
- package/dist/editor/hooks/useStackPosition.d.ts +14 -0
- package/dist/editor/hooks/useTranslate.d.ts +1 -1
- package/dist/editor/hooks/useUndoRedo.d.ts +31 -0
- package/dist/editor/types/ai.d.ts +65 -0
- package/dist/editor/types/editor.d.ts +106 -10
- package/dist/editor/types/openapi.d.ts +106 -0
- package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
- package/dist/editor/utils/cleanEmptyData.d.ts +18 -0
- package/dist/editor/utils/cleanNodeConfig.d.ts +5 -0
- package/dist/editor/utils/dagreLayout.d.ts +8 -0
- package/dist/editor/utils/edge.d.ts +50 -0
- package/dist/editor/utils/groupColor.d.ts +14 -0
- package/dist/editor/utils/image.d.ts +7 -0
- package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
- package/dist/editor/utils/jsonBindTarget.d.ts +15 -0
- package/dist/editor/utils/openApiPayload.d.ts +12 -0
- package/dist/editor/utils/openapi.d.ts +35 -0
- package/dist/editor/utils/sensitiveHeaders.d.ts +20 -0
- package/dist/editor/utils/stackPositionIndex.d.ts +9 -0
- package/dist/editor-D3EmQ-8C.js +6485 -0
- package/dist/editor.js +3 -7
- package/dist/main.js +6 -52
- package/dist/renderer/context/TreegeRenderRuntimeProvider.d.ts +135 -0
- package/dist/renderer/context/TreegeRendererProvider.d.ts +15 -0
- package/dist/renderer/context/TreegeViewerProvider.d.ts +28 -0
- package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputLabel.d.ts +10 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputWrapper.d.ts +9 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +20 -15
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultLoadingSkeleton.d.ts +8 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
- package/dist/renderer/features/TreegeRenderer/native/components/DependencyHint.d.ts +15 -0
- package/dist/renderer/features/TreegeRenderer/native/components/OptionItemContent.d.ts +17 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +97 -24
- package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +3 -2
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputLabel.d.ts +9 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputWrapper.d.ts +9 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultLoadingSkeleton.d.ts +7 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +3 -0
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +5 -1
- package/dist/renderer/features/TreegeRenderer/web/components/DependencyHint.d.ts +22 -0
- package/dist/renderer/features/TreegeRenderer/web/components/OptionItemContent.d.ts +17 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +11 -0
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
- package/dist/renderer/features/TreegeRenderer/web/components/styles/RendererStyles.d.ts +2 -0
- package/dist/renderer/features/TreegeViewer/utils/viewerFields.d.ts +102 -0
- package/dist/renderer/features/TreegeViewer/web/TreegeViewer.d.ts +94 -0
- package/dist/renderer/hooks/useInputOptions.d.ts +28 -0
- package/dist/renderer/hooks/useRenderNode.d.ts +62 -0
- package/dist/renderer/hooks/useSubmitHandler.d.ts +37 -0
- package/dist/renderer/hooks/useTranslate.d.ts +7 -5
- package/dist/renderer/index.d.ts +10 -2
- package/dist/renderer/index.native.d.ts +20 -0
- package/dist/renderer/types/renderer.d.ts +332 -49
- package/dist/renderer/utils/extraPayload.d.ts +21 -0
- package/dist/renderer/utils/file.d.ts +24 -10
- package/dist/renderer/utils/flow.d.ts +1 -18
- package/dist/renderer/utils/form.d.ts +54 -2
- package/dist/renderer/utils/http.d.ts +177 -0
- package/dist/renderer/utils/jsonTemplate.d.ts +30 -0
- package/dist/renderer/utils/node.d.ts +29 -1
- package/dist/renderer/utils/sanitize.d.ts +85 -0
- package/dist/renderer/utils/sanitize.native.d.ts +69 -0
- package/dist/renderer/utils/step.d.ts +27 -0
- package/dist/renderer/utils/submit.d.ts +50 -0
- package/dist/renderer/utils/templateDependencies.d.ts +17 -0
- package/dist/renderer-CNbSt_QW.js +446 -0
- package/dist/renderer-native.d.ts +2 -0
- package/dist/renderer-native.js +3692 -0
- package/dist/renderer.js +5 -45
- package/dist/shared/components/ui/badge.d.ts +2 -2
- package/dist/shared/components/ui/button.d.ts +3 -3
- package/dist/shared/components/ui/collapsible.d.ts +1 -1
- package/dist/shared/components/ui/command.d.ts +1 -1
- package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
- package/dist/shared/components/ui/field.d.ts +24 -0
- package/dist/shared/components/ui/form.d.ts +1 -1
- package/dist/shared/components/ui/item.d.ts +23 -0
- package/dist/shared/components/ui/popover.d.ts +10 -2
- package/dist/shared/components/ui/select.d.ts +3 -1
- package/dist/shared/components/ui/sheet.d.ts +1 -1
- package/dist/shared/components/ui/skeleton.d.ts +3 -0
- package/dist/shared/components/ui/toggle-group.d.ts +7 -0
- package/dist/shared/components/ui/toggle.d.ts +9 -0
- package/dist/shared/components/ui/tooltip.d.ts +1 -1
- package/dist/shared/constants/colors.d.ts +45 -0
- package/dist/shared/constants/inputType.d.ts +6 -0
- package/dist/shared/constants/node.d.ts +0 -1
- package/dist/shared/context/PortalContainerContext.d.ts +5 -0
- package/dist/shared/context/ThemeContext.d.ts +2 -0
- package/dist/shared/context/ThemeContext.native.d.ts +22 -0
- package/dist/shared/hooks/useMediaQuery.d.ts +12 -0
- package/dist/shared/hooks/useThemeColors.d.ts +37 -0
- package/dist/shared/locales/ar.json.d.ts +259 -19
- package/dist/shared/locales/de.json.d.ts +260 -20
- package/dist/shared/locales/en.json.d.ts +261 -21
- package/dist/shared/locales/es.json.d.ts +260 -20
- package/dist/shared/locales/fr.json.d.ts +260 -20
- package/dist/shared/locales/it.json.d.ts +260 -20
- package/dist/shared/locales/pt.json.d.ts +260 -20
- package/dist/shared/types/edge.d.ts +6 -0
- package/dist/shared/types/file.d.ts +14 -0
- package/dist/shared/types/node.d.ts +155 -19
- package/dist/shared/utils/httpRecord.d.ts +20 -0
- package/dist/shared/utils/inputTypeGuards.d.ts +7 -0
- package/dist/shared/utils/nodeTypeGuards.d.ts +1 -6
- package/dist/shared/utils/normalizeLabel.d.ts +22 -0
- package/dist/shared/utils/translations.d.ts +21 -1
- package/dist/useRenderNode-CG466pNk.js +538 -0
- package/package.json +54 -22
- package/dist/ThemeContext-BIvs8Kw-.js +0 -758
- package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
- package/dist/TreegeRenderer-BVaqgInZ.js +0 -1405
- package/dist/editor/context/TreegeEditorContext.d.ts +0 -12
- package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +0 -2
- package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
- package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
- package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +0 -6
- package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
- package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
- package/dist/editor/hooks/useEdgesSelection.d.ts +0 -11
- package/dist/renderer/context/TreegeConfigContext.d.ts +0 -39
- package/dist/renderer/context/TreegeRendererContext.d.ts +0 -25
- package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +0 -7
- package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +0 -6
- /package/dist/editor/components/{data-display/logo.d.ts → branding/Logo.d.ts} +0 -0
|
@@ -1,43 +1,111 @@
|
|
|
1
1
|
import { Node } from '@xyflow/react';
|
|
2
|
-
import { FormValues } from '../../types/renderer';
|
|
3
|
-
import {
|
|
2
|
+
import { FormValues, TreegeRendererProps } from '../../types/renderer';
|
|
3
|
+
import { GroupNodeData, TreegeNodeData } from '../../../shared/types/node';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Main TreegeRenderer hook
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* All state is keyed by nodeId for uniqueness.
|
|
7
|
+
* Manages all form state, configuration, validation, and submission logic.
|
|
8
|
+
* Can be used directly in custom components for headless mode.
|
|
10
9
|
*
|
|
11
10
|
* Responsibilities:
|
|
11
|
+
* - Config merging (props + global provider)
|
|
12
12
|
* - Form values state (keyed by nodeId)
|
|
13
13
|
* - Errors state
|
|
14
14
|
* - Node visibility calculation (progressive rendering)
|
|
15
|
-
* - Form validation (built-in: required, pattern)
|
|
16
|
-
* - Submit
|
|
15
|
+
* - Form validation (built-in: required, pattern + custom validation)
|
|
16
|
+
* - Submit handling (with HTTP integration support)
|
|
17
|
+
* - Side effects (onChange callbacks, validation modes, reference field sync)
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* - Side effects like onChange callbacks (done in component)
|
|
21
|
-
* - Custom validation (passed to component)
|
|
19
|
+
* @param props - Configuration props (flow, initialValues, callbacks, etc.)
|
|
20
|
+
* @returns Complete form state and control methods
|
|
22
21
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
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) => {
|
|
22
|
+
export declare const useTreegeRenderer: ({ baseUrl, components, extraPayload, flow, googleApiKey, headers, language, onChange, onSubmit, showPoweredBy, theme, validate, validationMode, initialValues, }: Pick<TreegeRendererProps, "baseUrl" | "components" | "extraPayload" | "flow" | "googleApiKey" | "headers" | "initialValues" | "language" | "onChange" | "onSubmit" | "showPoweredBy" | "theme" | "validate" | "validationMode">) => {
|
|
23
|
+
canContinueStep: boolean;
|
|
32
24
|
canSubmit: boolean;
|
|
25
|
+
clearSubmitMessage: () => void;
|
|
26
|
+
config: {
|
|
27
|
+
baseUrl: string | undefined;
|
|
28
|
+
components: {
|
|
29
|
+
form: ((props: {
|
|
30
|
+
children: import('react').ReactNode;
|
|
31
|
+
id?: string;
|
|
32
|
+
onSubmit: (e: import('react').FormEvent<HTMLFormElement>) => void;
|
|
33
|
+
}) => import('react').ReactNode) | undefined;
|
|
34
|
+
inputs: {
|
|
35
|
+
number?: import('../../types/renderer').InputRenderer<"number"> | undefined;
|
|
36
|
+
checkbox?: import('../../types/renderer').InputRenderer<"checkbox"> | undefined;
|
|
37
|
+
radio?: import('../../types/renderer').InputRenderer<"radio"> | undefined;
|
|
38
|
+
switch?: import('../../types/renderer').InputRenderer<"switch"> | undefined;
|
|
39
|
+
address?: import('../../types/renderer').InputRenderer<"address"> | undefined;
|
|
40
|
+
autocomplete?: import('../../types/renderer').InputRenderer<"autocomplete"> | undefined;
|
|
41
|
+
date?: import('../../types/renderer').InputRenderer<"date"> | undefined;
|
|
42
|
+
daterange?: import('../../types/renderer').InputRenderer<"daterange"> | undefined;
|
|
43
|
+
file?: import('../../types/renderer').InputRenderer<"file"> | undefined;
|
|
44
|
+
hidden?: import('../../types/renderer').InputRenderer<"hidden"> | undefined;
|
|
45
|
+
http?: import('../../types/renderer').InputRenderer<"http"> | undefined;
|
|
46
|
+
password?: import('../../types/renderer').InputRenderer<"password"> | undefined;
|
|
47
|
+
select?: import('../../types/renderer').InputRenderer<"select"> | undefined;
|
|
48
|
+
submit?: import('../../types/renderer').InputRenderer<"submit"> | undefined;
|
|
49
|
+
text?: import('../../types/renderer').InputRenderer<"text"> | undefined;
|
|
50
|
+
textarea?: import('../../types/renderer').InputRenderer<"textarea"> | undefined;
|
|
51
|
+
time?: import('../../types/renderer').InputRenderer<"time"> | undefined;
|
|
52
|
+
timerange?: import('../../types/renderer').InputRenderer<"timerange"> | undefined;
|
|
53
|
+
};
|
|
54
|
+
loadingSkeleton: (() => import('react').ReactNode) | undefined;
|
|
55
|
+
step: ((props: import('../../types/renderer').StepRenderProps) => import('react').ReactNode) | undefined;
|
|
56
|
+
submitButton: ((props: {
|
|
57
|
+
label?: string;
|
|
58
|
+
disabled?: boolean;
|
|
59
|
+
isSubmitting?: boolean;
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
} | {
|
|
62
|
+
children?: import('react').ReactNode;
|
|
63
|
+
disabled?: boolean;
|
|
64
|
+
isSubmitting?: boolean;
|
|
65
|
+
onPress?: () => void;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
}) => import('react').ReactNode) | undefined;
|
|
68
|
+
submitButtonWrapper: ((props: {
|
|
69
|
+
children: import('react').ReactNode;
|
|
70
|
+
missingFields?: string[];
|
|
71
|
+
}) => import('react').ReactNode) | undefined;
|
|
72
|
+
ui: {
|
|
73
|
+
divider?: ((props: import('../../types/renderer').NodeRenderProps) => import('react').ReactNode) | undefined;
|
|
74
|
+
title?: ((props: import('../../types/renderer').NodeRenderProps) => import('react').ReactNode) | undefined;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
googleApiKey: string | undefined;
|
|
78
|
+
headers: import('../../../shared/types/node').HttpHeaders;
|
|
79
|
+
language: string;
|
|
80
|
+
showPoweredBy: boolean;
|
|
81
|
+
theme: "dark" | "light";
|
|
82
|
+
validationMode: "onChange" | "onSubmit";
|
|
83
|
+
};
|
|
84
|
+
currentStep: import('../../utils/step').FlowStep;
|
|
85
|
+
currentStepGroupNode: Node<GroupNodeData> | undefined;
|
|
86
|
+
currentStepIndex: number;
|
|
87
|
+
firstErrorFieldId: string | undefined;
|
|
33
88
|
formErrors: Record<string, string>;
|
|
34
89
|
formValues: FormValues;
|
|
90
|
+
goToNextStep: () => void;
|
|
91
|
+
goToPreviousStep: () => void;
|
|
92
|
+
handleSubmit: () => Promise<boolean>;
|
|
93
|
+
hasSubmitInput: boolean;
|
|
35
94
|
inputNodes: Node<import('../../../shared/types/node').InputNodeData>[];
|
|
36
|
-
|
|
95
|
+
isFirstStep: boolean;
|
|
96
|
+
isLastStep: boolean;
|
|
97
|
+
isSubmitting: boolean;
|
|
37
98
|
missingRequiredFields: string[];
|
|
99
|
+
prevFormValuesRef: import('react').RefObject<FormValues>;
|
|
100
|
+
setFieldErrors: import('react').Dispatch<import('react').SetStateAction<Record<string, string>>>;
|
|
38
101
|
setFieldValue: (fieldName: string, value: unknown) => void;
|
|
39
|
-
|
|
40
|
-
|
|
102
|
+
setMultipleFieldValues: (updates: FormValues) => void;
|
|
103
|
+
steps: import('../../utils/step').FlowStep[];
|
|
104
|
+
submitMessage: {
|
|
105
|
+
type: "success" | "error";
|
|
106
|
+
message: string;
|
|
107
|
+
} | null;
|
|
108
|
+
t: (key?: import('../../../main').Translatable | string) => string;
|
|
41
109
|
validateForm: (customValidate?: (values: FormValues, visibleNodesList: Node<TreegeNodeData>[]) => Record<string, string>) => {
|
|
42
110
|
errors: {
|
|
43
111
|
[x: string]: string;
|
|
@@ -48,3 +116,8 @@ export declare const useTreegeRenderer: (flows: Flow | Flow[] | null | undefined
|
|
|
48
116
|
visibleNodes: Node<TreegeNodeData>[];
|
|
49
117
|
visibleRootNodes: Node<TreegeNodeData>[];
|
|
50
118
|
};
|
|
119
|
+
/**
|
|
120
|
+
* Type for the return value of useTreegeRenderer
|
|
121
|
+
* Useful for TypeScript users building custom components
|
|
122
|
+
*/
|
|
123
|
+
export type UseTreegeRendererReturn = ReturnType<typeof useTreegeRenderer>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TreegeRendererProps } from '../../../types/renderer';
|
|
2
|
-
declare const TreegeRenderer: ({ components,
|
|
2
|
+
declare const TreegeRenderer: ({ baseUrl, components, className, extraPayload, flow, formId, googleApiKey, headers, language, onBack, onChange, onSubmit, showPoweredBy, theme, validate, validationMode, initialValues, isLoading, isSubmitting: isSubmittingProp, }: TreegeRendererProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default TreegeRenderer;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FormEvent, ReactNode } from 'react';
|
|
2
|
-
declare const DefaultFormWrapper: ({ children, onSubmit }: {
|
|
2
|
+
declare const DefaultFormWrapper: ({ children, id, onSubmit, }: {
|
|
3
3
|
children: ReactNode;
|
|
4
|
-
|
|
4
|
+
id?: string;
|
|
5
|
+
onSubmit: (e: FormEvent<HTMLFormElement>) => void;
|
|
5
6
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
7
|
export default DefaultFormWrapper;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InputLabelRenderProps } from '../../../../types/renderer';
|
|
2
|
+
/**
|
|
3
|
+
* Default input label (web). Renders nothing when no end-user label is
|
|
4
|
+
* configured, so the technical node key (`node.data.name`) never leaks into the
|
|
5
|
+
* rendered form. Inputs keep an accessible name through an `aria-label` fallback
|
|
6
|
+
* on the field itself. Override globally via `components.inputLabel`.
|
|
7
|
+
*/
|
|
8
|
+
declare const DefaultInputLabel: ({ label, required, htmlFor, id, className }: InputLabelRenderProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
export default DefaultInputLabel;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Node } from '@xyflow/react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { InputNodeData } from '../../../../../shared/types/node';
|
|
4
|
+
interface DefaultInputWrapperProps {
|
|
5
|
+
node: Node<InputNodeData>;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const DefaultInputWrapper: ({ node, children }: DefaultInputWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default DefaultInputWrapper;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default loading skeleton displayed by `TreegeRenderer` while `isLoading` is
|
|
3
|
+
* true. Mimics the visual structure of a step (title, a few fields and the
|
|
4
|
+
* navigation buttons) so the layout doesn't shift once the real form renders.
|
|
5
|
+
*/
|
|
6
|
+
declare const DefaultLoadingSkeleton: () => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default DefaultLoadingSkeleton;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { StepRenderProps } from '../../../../types/renderer';
|
|
2
|
+
declare const DefaultStep: ({ step, label, children, canGoBack, isLastStep, canContinue, isSubmitting, onBack, onContinue, missingFields, }: StepRenderProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export default DefaultStep;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { ButtonHTMLAttributes } from 'react';
|
|
2
2
|
export interface SubmitButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
3
3
|
label?: string;
|
|
4
|
+
/**
|
|
5
|
+
* When true, shows a spinner inside the button (and keeps it disabled).
|
|
6
|
+
*/
|
|
7
|
+
isSubmitting?: boolean;
|
|
4
8
|
}
|
|
5
9
|
/**
|
|
6
10
|
* Default submit button
|
|
7
11
|
*/
|
|
8
|
-
declare const DefaultSubmitButton: (
|
|
12
|
+
declare const DefaultSubmitButton: import('react').ForwardRefExoticComponent<SubmitButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
9
13
|
export default DefaultSubmitButton;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { MissingDependency } from '../../../../types/renderer';
|
|
3
|
+
interface MissingProps {
|
|
4
|
+
/** Unfilled fields the input depends on (from `extra.missingDependencies`). */
|
|
5
|
+
missing: MissingDependency[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a disabled input control with a tooltip listing the fields the user
|
|
9
|
+
* must fill before the input's dynamic options can load. Renders children
|
|
10
|
+
* untouched when there are no missing dependencies, so it's safe to wrap any
|
|
11
|
+
* trigger-based dynamic input (select, autocomplete, http) unconditionally.
|
|
12
|
+
*/
|
|
13
|
+
declare const DependencyHint: ({ missing, children }: MissingProps & {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
/**
|
|
17
|
+
* Inline variant for inputs that have no single trigger to hover (radio,
|
|
18
|
+
* checkbox): renders the same hint as always-visible muted text. Renders
|
|
19
|
+
* nothing when there are no missing dependencies.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DependencyHintMessage: ({ missing }: MissingProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
22
|
+
export default DependencyHint;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface OptionItemContentProps {
|
|
2
|
+
/** Already-translated option label. */
|
|
3
|
+
label: string;
|
|
4
|
+
/** Already-translated option description (optional). */
|
|
5
|
+
description?: string;
|
|
6
|
+
/** Option image — base64 data URL or remote URL (optional). */
|
|
7
|
+
image?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Shared content for an option row in a dropdown/combobox/select, built from the
|
|
11
|
+
* shadcn `Item` primitives: an optional leading image, the label, and an
|
|
12
|
+
* optional muted description underneath. Rendered as a fragment — the enclosing
|
|
13
|
+
* `CommandItem`/`SelectItem` already provides the flex row. The selection
|
|
14
|
+
* indicator (check) is left to the caller so it can sit outside this block.
|
|
15
|
+
*/
|
|
16
|
+
declare const OptionItemContent: ({ label, description, image }: OptionItemContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export default OptionItemContent;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultAddressInput: ({
|
|
2
|
+
declare const DefaultAddressInput: ({ field, extra }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultAddressInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultAutocompleteInput: ({
|
|
2
|
+
declare const DefaultAutocompleteInput: ({ field, extra }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultAutocompleteInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultCheckboxInput: ({
|
|
2
|
+
declare const DefaultCheckboxInput: ({ field, extra }: InputRenderProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultCheckboxInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultDateInput: ({
|
|
2
|
+
declare const DefaultDateInput: ({ field, extra }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultDateInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultDateRangeInput: ({
|
|
2
|
+
declare const DefaultDateRangeInput: ({ field, extra }: InputRenderProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultDateRangeInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultFileInput: ({
|
|
2
|
+
declare const DefaultFileInput: ({ field, extra }: InputRenderProps<"file">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultFileInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultHiddenInput: ({
|
|
2
|
+
declare const DefaultHiddenInput: ({ field }: InputRenderProps<"hidden">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultHiddenInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultHttpInput: ({
|
|
2
|
+
declare const DefaultHttpInput: ({ field, extra }: InputRenderProps<"http">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultHttpInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultNumberInput: ({
|
|
2
|
+
declare const DefaultNumberInput: ({ field, extra }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultNumberInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultPasswordInput: ({
|
|
2
|
+
declare const DefaultPasswordInput: ({ field, extra }: InputRenderProps<"password">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultPasswordInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultRadioInput: ({
|
|
2
|
+
declare const DefaultRadioInput: ({ field, extra }: InputRenderProps<"radio">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultRadioInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultSelectInput: ({
|
|
2
|
+
declare const DefaultSelectInput: ({ field, extra }: InputRenderProps<"select">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultSelectInput;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
+
/**
|
|
3
|
+
* The `submit` input node is declarative only: it marks where the flow submits
|
|
4
|
+
* and carries the optional custom label / `submitConfig`. The actual submit
|
|
5
|
+
* button is rendered once by the step (in its action row, next to Back) — see
|
|
6
|
+
* `DefaultStep` — so the node itself renders nothing. This guarantees a single,
|
|
7
|
+
* consistently-placed button whether submission comes from an explicit submit
|
|
8
|
+
* node, the default "Submit", or a "Continue" step.
|
|
9
|
+
*/
|
|
10
|
+
declare const DefaultSubmitInput: (_props: InputRenderProps<"submit">) => null;
|
|
11
|
+
export default DefaultSubmitInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultSwitchInput: ({
|
|
2
|
+
declare const DefaultSwitchInput: ({ field, extra }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultSwitchInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultTextAreaInput: ({
|
|
2
|
+
declare const DefaultTextAreaInput: ({ field, extra }: InputRenderProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultTextAreaInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultTextInput: ({
|
|
2
|
+
declare const DefaultTextInput: ({ field, extra }: InputRenderProps<"text">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultTextInput;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultTimeInput: ({
|
|
2
|
+
declare const DefaultTimeInput: ({ field, extra }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultTimeInput;
|
package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InputRenderProps } from '../../../../../types/renderer';
|
|
2
|
-
declare const DefaultTimeRangeInput: ({
|
|
2
|
+
declare const DefaultTimeRangeInput: ({ field, extra }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export default DefaultTimeRangeInput;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Node } from '@xyflow/react';
|
|
2
|
+
import { FormValues } from '../../../types/renderer';
|
|
3
|
+
import { SerializableFile } from '../../../../shared/types/file';
|
|
4
|
+
import { Flow, InputNodeData, InputType } from '../../../../shared/types/node';
|
|
5
|
+
import { Translatable } from '../../../../shared/types/translate';
|
|
6
|
+
/**
|
|
7
|
+
* Display-ready representation of a submitted field value, normalized per input
|
|
8
|
+
* type so a viewer can render it without re-deriving formatting rules:
|
|
9
|
+
* - `text` free-form string (text, number, date, ranges, resolved option label…)
|
|
10
|
+
* - `boolean` a yes/no value (switch) — render as a read-only toggle/checkbox
|
|
11
|
+
* - `tags` a list of labels (multi-select checkbox) — render as chips
|
|
12
|
+
* - `files` uploaded documents — render names or thumbnails (often overridden)
|
|
13
|
+
* - `empty` no value was submitted for this field
|
|
14
|
+
*/
|
|
15
|
+
export type ViewerFieldDisplay = {
|
|
16
|
+
kind: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "boolean";
|
|
20
|
+
checked: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
kind: "tags";
|
|
23
|
+
tags: string[];
|
|
24
|
+
} | {
|
|
25
|
+
kind: "files";
|
|
26
|
+
files: SerializableFile[];
|
|
27
|
+
} | {
|
|
28
|
+
kind: "empty";
|
|
29
|
+
};
|
|
30
|
+
/** A single resolved field of a submitted form, ready for read-only rendering. */
|
|
31
|
+
export interface ViewerField {
|
|
32
|
+
/** The flow node id. */
|
|
33
|
+
id: string;
|
|
34
|
+
/** The submission key (name > translated label > id), as used in `onSubmit`. */
|
|
35
|
+
name: string;
|
|
36
|
+
/** The input type (`text`, `select`, `daterange`, `file`, …). */
|
|
37
|
+
type: InputType;
|
|
38
|
+
/** The translated field label (falls back to `name`, then node id). */
|
|
39
|
+
label: string;
|
|
40
|
+
/** The raw submitted value, untouched. */
|
|
41
|
+
rawValue: unknown;
|
|
42
|
+
/** Normalized, render-ready representation of the value. */
|
|
43
|
+
display: ViewerFieldDisplay;
|
|
44
|
+
/** The originating flow node — present only in flow-based resolution (escape hatch for custom rendering). */
|
|
45
|
+
node?: Node<InputNodeData>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A self-describing stored value, used to render a viewer **without** a `flow`
|
|
49
|
+
* (e.g. a persisted `WorkflowValue[]`). Each entry carries its own metadata so
|
|
50
|
+
* the value can be formatted by type and labelled without a flow definition.
|
|
51
|
+
*/
|
|
52
|
+
export interface FlowResponseEntry {
|
|
53
|
+
name?: string;
|
|
54
|
+
type?: string;
|
|
55
|
+
value?: unknown;
|
|
56
|
+
label?: Translatable | string;
|
|
57
|
+
}
|
|
58
|
+
export interface GetViewerFieldsOptions {
|
|
59
|
+
/** Language used to resolve translatable labels/options (defaults to `en`). */
|
|
60
|
+
language?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Base URL used to resolve relative file paths (e.g. `uploads/x.png`) into
|
|
63
|
+
* absolute URLs — same role as on `TreegeRenderer`/`TreegeEditor`. Absolute,
|
|
64
|
+
* `data:` and `blob:` URLs are left untouched.
|
|
65
|
+
*/
|
|
66
|
+
baseUrl?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether a file should be previewed inline as an image — detected by MIME type
|
|
70
|
+
* (`image/*`), a `data:image/` data-URL, or a recognized image URL extension.
|
|
71
|
+
*/
|
|
72
|
+
export declare const isImageFile: (file: SerializableFile) => boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Resolve a submitted form into a flat, render-ready list of fields.
|
|
75
|
+
*
|
|
76
|
+
* Mirrors what the renderer would show for the same values: the submission is
|
|
77
|
+
* normalized to node-id keys (accepting both `name`- and `id`-keyed input, like
|
|
78
|
+
* `initialValues`), then run through the same branch-visibility logic so only
|
|
79
|
+
* the fields that were actually reachable for these values are returned —
|
|
80
|
+
* inactive branches and `hidden`/`submit` nodes are excluded.
|
|
81
|
+
*
|
|
82
|
+
* This is the headless core behind {@link TreegeViewer}: consumers wanting a
|
|
83
|
+
* custom layout can render straight from this list.
|
|
84
|
+
*
|
|
85
|
+
* @param flow - The flow definition the values were submitted against
|
|
86
|
+
* @param values - The submitted values (`name`- or `id`-keyed)
|
|
87
|
+
* @param options - Resolution options (language, baseUrl)
|
|
88
|
+
* @returns The ordered, visible, display-ready fields
|
|
89
|
+
*/
|
|
90
|
+
export declare const getViewerFields: (flow: Flow | null | undefined, values: FormValues | null | undefined, options?: GetViewerFieldsOptions) => ViewerField[];
|
|
91
|
+
/**
|
|
92
|
+
* Build a render-ready field list straight from a self-describing response —
|
|
93
|
+
* each entry supplies its own `name`/`type`/`value`/`label`, so no `flow` is
|
|
94
|
+
* needed. Used by {@link TreegeViewer} in its flow-less mode. Option values are
|
|
95
|
+
* shown as-is (there's no flow to resolve their labels), and `hidden`/`submit`
|
|
96
|
+
* entries are skipped.
|
|
97
|
+
*
|
|
98
|
+
* @param response - The self-describing stored values
|
|
99
|
+
* @param options - Resolution options (language, baseUrl)
|
|
100
|
+
* @returns The ordered, display-ready fields
|
|
101
|
+
*/
|
|
102
|
+
export declare const viewerFieldsFromResponse: (response: readonly FlowResponseEntry[] | null | undefined, options?: GetViewerFieldsOptions) => ViewerField[];
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FlowResponseEntry, ViewerField } from '../utils/viewerFields';
|
|
3
|
+
import { FormValues } from '../../../types/renderer';
|
|
4
|
+
import { Flow, InputType } from '../../../../shared/types/node';
|
|
5
|
+
/** Per-type override map: `{ file: (field) => <Thumbnails /> }`. */
|
|
6
|
+
export type ViewerFieldRenderers = Partial<Record<InputType, (field: ViewerField) => ReactNode>>;
|
|
7
|
+
interface TreegeViewerBaseProps {
|
|
8
|
+
/**
|
|
9
|
+
* Language used to resolve translatable labels/options (defaults to the provider config, then `en`).
|
|
10
|
+
*/
|
|
11
|
+
language?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Light/dark theme. Falls back to the `TreegeRendererProvider` config, then `"dark"`.
|
|
14
|
+
*/
|
|
15
|
+
theme?: "light" | "dark";
|
|
16
|
+
/**
|
|
17
|
+
* Base URL to resolve relative file paths into absolute URLs. `data:`/`blob:`/absolute URLs are left untouched.
|
|
18
|
+
*/
|
|
19
|
+
baseUrl?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Field names (or ids) to hide from the view.
|
|
22
|
+
*/
|
|
23
|
+
excludedFields?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Hide fields that have no submitted value (instead of showing `emptyText`).
|
|
26
|
+
*/
|
|
27
|
+
excludeEmptyFields?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* When `true`, only the first `collapsedVisibleCount` fields are rendered.
|
|
30
|
+
*/
|
|
31
|
+
collapsed?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Number of fields kept visible while `collapsed` (defaults to all).
|
|
34
|
+
*/
|
|
35
|
+
collapsedVisibleCount?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Text shown when a field has no submitted value (defaults to `"—"`).
|
|
38
|
+
*/
|
|
39
|
+
emptyText?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Extra class names on the root element.
|
|
42
|
+
*/
|
|
43
|
+
className?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Per-type rendering overrides for the value cell. Use this for app-specific
|
|
46
|
+
* cases — typically `file` (e.g. render thumbnails from your own storage)
|
|
47
|
+
* while every other type keeps its built-in rendering.
|
|
48
|
+
*/
|
|
49
|
+
renderField?: ViewerFieldRenderers;
|
|
50
|
+
/**
|
|
51
|
+
* Wrap or replace a whole field row (label + value). Receives the resolved
|
|
52
|
+
* field and the default row node; return your own layout or the default.
|
|
53
|
+
*/
|
|
54
|
+
renderRow?: (field: ViewerField, defaultRow: ReactNode) => ReactNode;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* `flowResponse` is typed conditionally on `flow`:
|
|
58
|
+
* - **with** a `flow` → the renderer's `FormValues` (`name`- or `id`-keyed), resolved against the flow;
|
|
59
|
+
* - **without** a `flow` → a self-describing `FlowResponseEntry[]` (each carries its own
|
|
60
|
+
* `name`/`type`/`value`/`label`), rendered as-is.
|
|
61
|
+
*/
|
|
62
|
+
export type TreegeViewerProps = TreegeViewerBaseProps & ({
|
|
63
|
+
/**
|
|
64
|
+
* The flow the values were submitted against.
|
|
65
|
+
*/
|
|
66
|
+
flow: Flow;
|
|
67
|
+
/** The submitted values as the renderer's `FormValues` (`name`- or `id`-keyed). */
|
|
68
|
+
flowResponse: FormValues;
|
|
69
|
+
} | {
|
|
70
|
+
flow?: undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Self-describing stored values rendered without a flow.
|
|
73
|
+
*/
|
|
74
|
+
flowResponse: FlowResponseEntry[];
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Read-only viewer for a submitted Treege form. Given the `flow` and the
|
|
78
|
+
* submitted `values`, it renders every reachable field as a label/value pair —
|
|
79
|
+
* resolving option labels, formatting dates/ranges and i18n labels the same way
|
|
80
|
+
* the renderer does, scoped to the active branch.
|
|
81
|
+
*
|
|
82
|
+
* Styling matches the renderer (shadcn/Tailwind, `tg:` prefix). For values that
|
|
83
|
+
* need app-specific rendering (chiefly uploaded `file`s) pass `renderField`; to
|
|
84
|
+
* change the whole row layout pass `renderRow`.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* // With a flow — `flowResponse` is the renderer's FormValues:
|
|
88
|
+
* <TreegeViewer flow={flow} flowResponse={submitted} language="fr" excludeEmptyFields />
|
|
89
|
+
*
|
|
90
|
+
* // Without a flow — `flowResponse` is a self-describing list:
|
|
91
|
+
* <TreegeViewer flowResponse={[{ name: "city", type: "text", value: "Paris", label: { en: "City" } }]} />
|
|
92
|
+
*/
|
|
93
|
+
declare const TreegeViewer: ({ flow, flowResponse, baseUrl, theme, excludedFields, excludeEmptyFields, collapsed, collapsedVisibleCount, className, renderField, renderRow, language, emptyText, }: TreegeViewerProps) => import("react/jsx-runtime").JSX.Element;
|
|
94
|
+
export default TreegeViewer;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Node } from '@xyflow/react';
|
|
2
|
+
import { InputNodeData, InputOption } from '../../shared/types/node';
|
|
3
|
+
interface UseInputOptionsResult {
|
|
4
|
+
/**
|
|
5
|
+
* Resolved options for the input. When the node has an `optionsSource`,
|
|
6
|
+
* these are the fetched options (or the static fallback while loading or
|
|
7
|
+
* if the fetch errors). Otherwise the static `options` from the node data.
|
|
8
|
+
*/
|
|
9
|
+
options: InputOption[];
|
|
10
|
+
/** True while a remote fetch is in flight. */
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
/** Error message if the latest remote fetch failed; otherwise `null`. */
|
|
13
|
+
error: string | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the options for an option-based input (radio, checkbox, select,
|
|
17
|
+
* autocomplete). If the node declares an `optionsSource`, options are fetched
|
|
18
|
+
* from that API at runtime, with `{{templateVar}}` substitution from form
|
|
19
|
+
* values and merging of global + field-level headers. While loading, before
|
|
20
|
+
* the first successful fetch, or on error, falls back to the static
|
|
21
|
+
* `options` array (if any).
|
|
22
|
+
*
|
|
23
|
+
* The fetch plan is computed once and serialized to JSON. The fetch effect
|
|
24
|
+
* keys off this string: changes that don't affect the actual request (e.g.
|
|
25
|
+
* an unrelated form field) produce the same JSON and don't re-trigger.
|
|
26
|
+
*/
|
|
27
|
+
export declare const useInputOptions: (node: Node<InputNodeData>) => UseInputOptionsResult;
|
|
28
|
+
export {};
|