treege 3.0.0-beta.9 → 3.0.0-beta.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +598 -79
  3. package/dist/DefaultSubmitButton-NeSDqyzv.js +1909 -0
  4. package/dist/ThemeContext-CPsC8QIP.js +1008 -0
  5. package/dist/editor/components/input/ComboboxWithCreate.d.ts +2 -1
  6. package/dist/editor/components/styles/EditorStyles.d.ts +2 -0
  7. package/dist/editor/constants/defaultNode.d.ts +1 -1
  8. package/dist/editor/constants/edgeTypes.d.ts +3 -2
  9. package/dist/editor/constants/inputTypeIcons.d.ts +3 -0
  10. package/dist/editor/constants/nodeSpacing.d.ts +25 -0
  11. package/dist/editor/constants/nodeTypes.d.ts +4 -5
  12. package/dist/editor/context/OpenApiContext.d.ts +79 -0
  13. package/dist/editor/context/TreegeEditorRuntimeProvider.d.ts +78 -0
  14. package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +1 -1
  15. package/dist/editor/features/TreegeEditor/controls/MiniMapControl.d.ts +6 -0
  16. package/dist/editor/features/TreegeEditor/dialogs/AuthorizeDialog.d.ts +20 -0
  17. package/dist/editor/features/TreegeEditor/dialogs/ChangeNodeTypeDialog.d.ts +2 -0
  18. package/dist/editor/features/TreegeEditor/dialogs/DeleteNodeDialog.d.ts +2 -0
  19. package/dist/editor/features/TreegeEditor/dialogs/HeadersDialog.d.ts +19 -0
  20. package/dist/editor/features/TreegeEditor/dialogs/OpenApiDialog.d.ts +6 -0
  21. package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +2 -2
  22. package/dist/editor/features/TreegeEditor/edges/DefaultEdge.d.ts +3 -0
  23. package/dist/editor/features/TreegeEditor/forms/HttpConfigForm.d.ts +4 -1
  24. package/dist/editor/features/TreegeEditor/forms/JsonTemplateEditor.d.ts +13 -0
  25. package/dist/editor/features/TreegeEditor/forms/OptionsMappingFields.d.ts +34 -0
  26. package/dist/editor/features/TreegeEditor/forms/OptionsSourceForm.d.ts +7 -0
  27. package/dist/editor/features/TreegeEditor/forms/SensitiveHeaderWarning.d.ts +13 -0
  28. package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
  29. package/dist/editor/features/TreegeEditor/inputs/ApiUrlCombobox.d.ts +20 -0
  30. package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
  31. package/dist/editor/features/TreegeEditor/inputs/DefaultFileValueField.d.ts +14 -0
  32. package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
  33. package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +22 -1
  34. package/dist/editor/features/TreegeEditor/inputs/TranslatableInput.d.ts +20 -0
  35. package/dist/editor/features/TreegeEditor/layout/AutoLayout.d.ts +15 -0
  36. package/dist/editor/features/TreegeEditor/listeners/FlowChangeEmitter.d.ts +19 -0
  37. package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +5 -0
  38. package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +25 -0
  39. package/dist/editor/features/TreegeEditor/nodes/components/NodeGroupBadge.d.ts +6 -0
  40. package/dist/editor/features/TreegeEditor/nodes/components/NodeImage.d.ts +5 -0
  41. package/dist/editor/features/TreegeEditor/nodes/components/NodeImageButton.d.ts +6 -0
  42. package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +12 -0
  43. package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +10 -0
  44. package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
  45. package/dist/editor/features/TreegeEditor/nodes/components/NodeRequiredButton.d.ts +6 -0
  46. package/dist/editor/features/TreegeEditor/nodes/components/NodeStackOrderButtons.d.ts +6 -0
  47. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
  48. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypePickerMenuContent.d.ts +12 -0
  49. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +4 -2
  50. package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
  51. package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -2
  52. package/dist/editor/features/TreegeEditor/panel/MultiSelectionPanel.d.ts +7 -0
  53. package/dist/editor/hooks/useAvailableParentFields.d.ts +13 -0
  54. package/dist/editor/hooks/useFlowActions.d.ts +6 -2
  55. package/dist/editor/hooks/useFlowConnections.d.ts +14 -0
  56. package/dist/editor/hooks/useFlowContent.d.ts +16 -0
  57. package/dist/editor/hooks/useHistoryStore.d.ts +26 -0
  58. package/dist/editor/hooks/useIsStackedEdge.d.ts +8 -0
  59. package/dist/editor/hooks/useKeyValueRows.d.ts +15 -0
  60. package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
  61. package/dist/editor/hooks/useStackPosition.d.ts +14 -0
  62. package/dist/editor/hooks/useTranslate.d.ts +1 -1
  63. package/dist/editor/hooks/useUndoRedo.d.ts +31 -0
  64. package/dist/editor/types/ai.d.ts +65 -0
  65. package/dist/editor/types/editor.d.ts +106 -10
  66. package/dist/editor/types/openapi.d.ts +106 -0
  67. package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
  68. package/dist/editor/utils/cleanEmptyData.d.ts +18 -0
  69. package/dist/editor/utils/cleanNodeConfig.d.ts +5 -0
  70. package/dist/editor/utils/dagreLayout.d.ts +8 -0
  71. package/dist/editor/utils/edge.d.ts +50 -0
  72. package/dist/editor/utils/groupColor.d.ts +14 -0
  73. package/dist/editor/utils/image.d.ts +7 -0
  74. package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
  75. package/dist/editor/utils/jsonBindTarget.d.ts +15 -0
  76. package/dist/editor/utils/openApiPayload.d.ts +12 -0
  77. package/dist/editor/utils/openapi.d.ts +35 -0
  78. package/dist/editor/utils/sensitiveHeaders.d.ts +20 -0
  79. package/dist/editor/utils/stackPositionIndex.d.ts +9 -0
  80. package/dist/editor-DJbNgLSF.js +6485 -0
  81. package/dist/editor.js +3 -7
  82. package/dist/main.js +6 -52
  83. package/dist/renderer/context/TreegeRenderRuntimeProvider.d.ts +135 -0
  84. package/dist/renderer/context/TreegeRendererProvider.d.ts +15 -0
  85. package/dist/renderer/context/TreegeViewerProvider.d.ts +28 -0
  86. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
  87. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
  88. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputLabel.d.ts +10 -0
  89. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputWrapper.d.ts +9 -0
  90. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +20 -15
  91. package/dist/renderer/features/TreegeRenderer/native/components/DefaultLoadingSkeleton.d.ts +8 -0
  92. package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +3 -0
  93. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
  94. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
  95. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
  96. package/dist/renderer/features/TreegeRenderer/native/components/DependencyHint.d.ts +15 -0
  97. package/dist/renderer/features/TreegeRenderer/native/components/OptionItemContent.d.ts +17 -0
  98. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
  99. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  100. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  101. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
  102. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  103. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
  104. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
  105. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
  106. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
  107. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
  108. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
  109. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
  110. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
  111. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
  112. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
  113. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
  114. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
  115. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  116. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +97 -24
  117. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  118. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +3 -2
  119. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputLabel.d.ts +9 -0
  120. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputWrapper.d.ts +9 -0
  121. package/dist/renderer/features/TreegeRenderer/web/components/DefaultLoadingSkeleton.d.ts +7 -0
  122. package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +3 -0
  123. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +5 -1
  124. package/dist/renderer/features/TreegeRenderer/web/components/DependencyHint.d.ts +22 -0
  125. package/dist/renderer/features/TreegeRenderer/web/components/OptionItemContent.d.ts +17 -0
  126. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
  127. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
  128. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
  129. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
  130. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
  131. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
  132. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
  133. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
  134. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
  135. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
  136. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
  137. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
  138. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +11 -0
  139. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
  140. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
  141. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
  142. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
  143. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
  144. package/dist/renderer/features/TreegeRenderer/web/components/styles/RendererStyles.d.ts +2 -0
  145. package/dist/renderer/features/TreegeViewer/utils/viewerFields.d.ts +102 -0
  146. package/dist/renderer/features/TreegeViewer/web/TreegeViewer.d.ts +94 -0
  147. package/dist/renderer/hooks/useInputOptions.d.ts +28 -0
  148. package/dist/renderer/hooks/useRenderNode.d.ts +62 -0
  149. package/dist/renderer/hooks/useSubmitHandler.d.ts +37 -0
  150. package/dist/renderer/hooks/useTranslate.d.ts +7 -5
  151. package/dist/renderer/index.d.ts +10 -2
  152. package/dist/renderer/index.native.d.ts +20 -0
  153. package/dist/renderer/types/renderer.d.ts +332 -49
  154. package/dist/renderer/utils/extraPayload.d.ts +21 -0
  155. package/dist/renderer/utils/file.d.ts +24 -10
  156. package/dist/renderer/utils/flow.d.ts +1 -18
  157. package/dist/renderer/utils/form.d.ts +54 -2
  158. package/dist/renderer/utils/http.d.ts +177 -0
  159. package/dist/renderer/utils/jsonTemplate.d.ts +30 -0
  160. package/dist/renderer/utils/node.d.ts +29 -1
  161. package/dist/renderer/utils/sanitize.d.ts +85 -0
  162. package/dist/renderer/utils/sanitize.native.d.ts +69 -0
  163. package/dist/renderer/utils/step.d.ts +27 -0
  164. package/dist/renderer/utils/submit.d.ts +50 -0
  165. package/dist/renderer/utils/templateDependencies.d.ts +17 -0
  166. package/dist/renderer-CNbSt_QW.js +446 -0
  167. package/dist/renderer-native.d.ts +2 -0
  168. package/dist/renderer-native.js +3696 -0
  169. package/dist/renderer.js +5 -45
  170. package/dist/shared/components/ui/badge.d.ts +2 -2
  171. package/dist/shared/components/ui/button.d.ts +3 -3
  172. package/dist/shared/components/ui/collapsible.d.ts +1 -1
  173. package/dist/shared/components/ui/command.d.ts +1 -1
  174. package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
  175. package/dist/shared/components/ui/field.d.ts +24 -0
  176. package/dist/shared/components/ui/form.d.ts +1 -1
  177. package/dist/shared/components/ui/item.d.ts +23 -0
  178. package/dist/shared/components/ui/popover.d.ts +10 -2
  179. package/dist/shared/components/ui/select.d.ts +3 -1
  180. package/dist/shared/components/ui/sheet.d.ts +1 -1
  181. package/dist/shared/components/ui/skeleton.d.ts +3 -0
  182. package/dist/shared/components/ui/toggle-group.d.ts +7 -0
  183. package/dist/shared/components/ui/toggle.d.ts +9 -0
  184. package/dist/shared/components/ui/tooltip.d.ts +1 -1
  185. package/dist/shared/constants/colors.d.ts +45 -0
  186. package/dist/shared/constants/inputType.d.ts +6 -0
  187. package/dist/shared/constants/node.d.ts +0 -1
  188. package/dist/shared/context/PortalContainerContext.d.ts +5 -0
  189. package/dist/shared/context/ThemeContext.d.ts +2 -0
  190. package/dist/shared/context/ThemeContext.native.d.ts +22 -0
  191. package/dist/shared/hooks/useMediaQuery.d.ts +12 -0
  192. package/dist/shared/hooks/useThemeColors.d.ts +37 -0
  193. package/dist/shared/locales/ar.json.d.ts +259 -19
  194. package/dist/shared/locales/de.json.d.ts +260 -20
  195. package/dist/shared/locales/en.json.d.ts +261 -21
  196. package/dist/shared/locales/es.json.d.ts +260 -20
  197. package/dist/shared/locales/fr.json.d.ts +260 -20
  198. package/dist/shared/locales/it.json.d.ts +260 -20
  199. package/dist/shared/locales/pt.json.d.ts +260 -20
  200. package/dist/shared/types/edge.d.ts +6 -0
  201. package/dist/shared/types/file.d.ts +14 -0
  202. package/dist/shared/types/node.d.ts +155 -19
  203. package/dist/shared/utils/httpRecord.d.ts +20 -0
  204. package/dist/shared/utils/inputTypeGuards.d.ts +7 -0
  205. package/dist/shared/utils/nodeTypeGuards.d.ts +1 -6
  206. package/dist/shared/utils/normalizeLabel.d.ts +22 -0
  207. package/dist/shared/utils/translations.d.ts +21 -1
  208. package/dist/useRenderNode-CG466pNk.js +538 -0
  209. package/package.json +54 -22
  210. package/dist/ThemeContext-BIvs8Kw-.js +0 -758
  211. package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
  212. package/dist/TreegeRenderer-BVaqgInZ.js +0 -1405
  213. package/dist/editor/context/TreegeEditorContext.d.ts +0 -12
  214. package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +0 -2
  215. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
  216. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
  217. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +0 -6
  218. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
  219. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
  220. package/dist/editor/hooks/useEdgesSelection.d.ts +0 -11
  221. package/dist/renderer/context/TreegeConfigContext.d.ts +0 -39
  222. package/dist/renderer/context/TreegeRendererContext.d.ts +0 -25
  223. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +0 -7
  224. package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +0 -6
  225. /package/dist/editor/components/{data-display/logo.d.ts → branding/Logo.d.ts} +0 -0
@@ -1,43 +1,111 @@
1
1
  import { Node } from '@xyflow/react';
2
- import { FormValues } from '../../types/renderer';
3
- import { Flow, TreegeNodeData } from '../../../shared/types/node';
2
+ import { FormValues, TreegeRendererProps } from '../../types/renderer';
3
+ import { GroupNodeData, TreegeNodeData } from '../../../shared/types/node';
4
4
  /**
5
- * PURE STATE LOGIC HOOK
5
+ * Main TreegeRenderer hook
6
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.
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 button state (combines end-of-path detection + form validity)
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
- * 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)
19
+ * @param props - Configuration props (flow, initialValues, callbacks, etc.)
20
+ * @returns Complete form state and control methods
22
21
  */
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) => {
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
- mergedFlow: Flow;
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
- setFormErrors: import('react').Dispatch<import('react').SetStateAction<Record<string, string>>>;
40
- t: (key?: import('../../../main').Translatable | import('../../../main').TranslationKey | string) => string;
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, flows, googleApiKey, initialValues, language, onChange, onSubmit, theme, validate, validationMode, }: TreegeRendererProps) => import("react/jsx-runtime").JSX.Element;
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
- onSubmit: (e: FormEvent) => void;
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: ({ label, ...props }: SubmitButtonProps) => import("react/jsx-runtime").JSX.Element;
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;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultAddressInput: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultAddressInput: ({ field, extra }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAddressInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultAutocompleteInput: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultAutocompleteInput: ({ field, extra }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAutocompleteInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultCheckboxInput: ({ node, value, setValue, error, label, helperText }: InputRenderProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultDateInput: ({ field, extra }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultDateInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultDateRangeInput: ({ node, value, setValue, error, label, helperText }: InputRenderProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, setValue, error, label, placeholder, helperText }: InputRenderProps<"file">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value }: InputRenderProps<"hidden">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"http">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultNumberInput: ({ field, extra }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultNumberInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultPasswordInput: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"password">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, helperText }: InputRenderProps<"radio">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"select">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, helperText }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultSwitchInput: ({ field, extra }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultSwitchInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultTextAreaInput: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"text">) => import("react/jsx-runtime").JSX.Element;
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: ({ node, value, setValue, error, label, placeholder, helperText }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultTimeInput: ({ field, extra }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeInput;
@@ -1,3 +1,3 @@
1
1
  import { InputRenderProps } from '../../../../../types/renderer';
2
- declare const DefaultTimeRangeInput: ({ node, value, setValue, error, label, helperText }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultTimeRangeInput: ({ field, extra }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeRangeInput;
@@ -0,0 +1,2 @@
1
+ declare const RendererStyles: () => import("react/jsx-runtime").JSX.Element;
2
+ export default RendererStyles;
@@ -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 {};