treege 3.0.0-beta.7 → 3.0.0-beta.70

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 (209) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +476 -81
  3. package/dist/DefaultSubmitButton-PXs4TMgX.js +1766 -0
  4. package/dist/ThemeContext-CdHMLHiw.js +942 -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/JsonTemplateEditor.d.ts +13 -0
  24. package/dist/editor/features/TreegeEditor/forms/OptionsMappingFields.d.ts +34 -0
  25. package/dist/editor/features/TreegeEditor/forms/OptionsSourceForm.d.ts +7 -0
  26. package/dist/editor/features/TreegeEditor/forms/SensitiveHeaderWarning.d.ts +13 -0
  27. package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
  28. package/dist/editor/features/TreegeEditor/inputs/ApiUrlCombobox.d.ts +20 -0
  29. package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
  30. package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
  31. package/dist/editor/features/TreegeEditor/inputs/SelectNodeGroup.d.ts +22 -1
  32. package/dist/editor/features/TreegeEditor/layout/AutoLayout.d.ts +15 -0
  33. package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +5 -0
  34. package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +25 -0
  35. package/dist/editor/features/TreegeEditor/nodes/components/NodeGroupBadge.d.ts +6 -0
  36. package/dist/editor/features/TreegeEditor/nodes/components/NodeImage.d.ts +5 -0
  37. package/dist/editor/features/TreegeEditor/nodes/components/NodeImageButton.d.ts +6 -0
  38. package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +12 -0
  39. package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +10 -0
  40. package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
  41. package/dist/editor/features/TreegeEditor/nodes/components/NodeRequiredButton.d.ts +6 -0
  42. package/dist/editor/features/TreegeEditor/nodes/components/NodeStackOrderButtons.d.ts +6 -0
  43. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
  44. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypePickerMenuContent.d.ts +12 -0
  45. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +4 -2
  46. package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
  47. package/dist/editor/features/TreegeEditor/panel/ActionsPanel.d.ts +7 -2
  48. package/dist/editor/features/TreegeEditor/panel/MultiSelectionPanel.d.ts +7 -0
  49. package/dist/editor/hooks/useAvailableParentFields.d.ts +13 -0
  50. package/dist/editor/hooks/useFlowActions.d.ts +6 -2
  51. package/dist/editor/hooks/useFlowConnections.d.ts +14 -0
  52. package/dist/editor/hooks/useHistoryStore.d.ts +26 -0
  53. package/dist/editor/hooks/useIsStackedEdge.d.ts +8 -0
  54. package/dist/editor/hooks/useKeyValueRows.d.ts +15 -0
  55. package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
  56. package/dist/editor/hooks/useStackPosition.d.ts +14 -0
  57. package/dist/editor/hooks/useTranslate.d.ts +1 -1
  58. package/dist/editor/hooks/useUndoRedo.d.ts +31 -0
  59. package/dist/editor/types/ai.d.ts +65 -0
  60. package/dist/editor/types/editor.d.ts +97 -10
  61. package/dist/editor/types/openapi.d.ts +106 -0
  62. package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
  63. package/dist/editor/utils/cleanNodeConfig.d.ts +5 -0
  64. package/dist/editor/utils/dagreLayout.d.ts +8 -0
  65. package/dist/editor/utils/edge.d.ts +50 -0
  66. package/dist/editor/utils/groupColor.d.ts +14 -0
  67. package/dist/editor/utils/image.d.ts +7 -0
  68. package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
  69. package/dist/editor/utils/jsonBindTarget.d.ts +15 -0
  70. package/dist/editor/utils/openApiPayload.d.ts +12 -0
  71. package/dist/editor/utils/openapi.d.ts +35 -0
  72. package/dist/editor/utils/sensitiveHeaders.d.ts +20 -0
  73. package/dist/editor/utils/stackPositionIndex.d.ts +9 -0
  74. package/dist/editor-Bh4AR91O.js +6407 -0
  75. package/dist/editor.js +3 -7
  76. package/dist/main.js +6 -52
  77. package/dist/renderer/context/TreegeRenderRuntimeProvider.d.ts +135 -0
  78. package/dist/renderer/context/TreegeRendererProvider.d.ts +15 -0
  79. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
  80. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
  81. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputWrapper.d.ts +9 -0
  82. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +20 -15
  83. package/dist/renderer/features/TreegeRenderer/native/components/DefaultLoadingSkeleton.d.ts +8 -0
  84. package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +3 -0
  85. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
  86. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
  87. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
  88. package/dist/renderer/features/TreegeRenderer/native/components/DependencyHint.d.ts +15 -0
  89. package/dist/renderer/features/TreegeRenderer/native/components/OptionItemContent.d.ts +17 -0
  90. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
  91. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  92. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  93. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
  94. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  95. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
  96. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
  97. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
  98. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
  99. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
  100. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
  101. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
  102. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
  103. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
  104. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
  105. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
  106. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
  107. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  108. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +97 -24
  109. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  110. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +3 -2
  111. package/dist/renderer/features/TreegeRenderer/web/components/DefaultInputWrapper.d.ts +9 -0
  112. package/dist/renderer/features/TreegeRenderer/web/components/DefaultLoadingSkeleton.d.ts +7 -0
  113. package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +3 -0
  114. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +5 -1
  115. package/dist/renderer/features/TreegeRenderer/web/components/DependencyHint.d.ts +22 -0
  116. package/dist/renderer/features/TreegeRenderer/web/components/OptionItemContent.d.ts +17 -0
  117. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
  118. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
  119. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
  120. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
  121. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
  122. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
  123. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
  124. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
  125. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
  126. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
  127. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
  128. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
  129. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +11 -0
  130. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
  131. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
  132. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
  133. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
  134. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
  135. package/dist/renderer/features/TreegeRenderer/web/components/styles/RendererStyles.d.ts +2 -0
  136. package/dist/renderer/hooks/useInputOptions.d.ts +28 -0
  137. package/dist/renderer/hooks/useRenderNode.d.ts +61 -0
  138. package/dist/renderer/hooks/useSubmitHandler.d.ts +36 -0
  139. package/dist/renderer/hooks/useTranslate.d.ts +7 -5
  140. package/dist/renderer/index.d.ts +4 -2
  141. package/dist/renderer/index.native.d.ts +19 -0
  142. package/dist/renderer/types/renderer.d.ts +279 -42
  143. package/dist/renderer/utils/flow.d.ts +1 -18
  144. package/dist/renderer/utils/form.d.ts +38 -2
  145. package/dist/renderer/utils/http.d.ts +161 -0
  146. package/dist/renderer/utils/jsonTemplate.d.ts +30 -0
  147. package/dist/renderer/utils/node.d.ts +29 -1
  148. package/dist/renderer/utils/sanitize.d.ts +85 -0
  149. package/dist/renderer/utils/sanitize.native.d.ts +69 -0
  150. package/dist/renderer/utils/step.d.ts +27 -0
  151. package/dist/renderer/utils/submit.d.ts +49 -0
  152. package/dist/renderer/utils/templateDependencies.d.ts +17 -0
  153. package/dist/renderer-DFzpylQb.js +255 -0
  154. package/dist/renderer-native.d.ts +2 -0
  155. package/dist/renderer-native.js +3746 -0
  156. package/dist/renderer.js +5 -45
  157. package/dist/shared/components/ui/badge.d.ts +2 -2
  158. package/dist/shared/components/ui/button.d.ts +3 -3
  159. package/dist/shared/components/ui/collapsible.d.ts +1 -1
  160. package/dist/shared/components/ui/command.d.ts +1 -1
  161. package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
  162. package/dist/shared/components/ui/field.d.ts +24 -0
  163. package/dist/shared/components/ui/form.d.ts +1 -1
  164. package/dist/shared/components/ui/item.d.ts +23 -0
  165. package/dist/shared/components/ui/popover.d.ts +10 -2
  166. package/dist/shared/components/ui/select.d.ts +3 -1
  167. package/dist/shared/components/ui/sheet.d.ts +1 -1
  168. package/dist/shared/components/ui/skeleton.d.ts +3 -0
  169. package/dist/shared/components/ui/toggle-group.d.ts +7 -0
  170. package/dist/shared/components/ui/toggle.d.ts +9 -0
  171. package/dist/shared/components/ui/tooltip.d.ts +1 -1
  172. package/dist/shared/constants/colors.d.ts +45 -0
  173. package/dist/shared/constants/inputType.d.ts +6 -0
  174. package/dist/shared/constants/node.d.ts +0 -1
  175. package/dist/shared/context/PortalContainerContext.d.ts +5 -0
  176. package/dist/shared/context/ThemeContext.d.ts +2 -0
  177. package/dist/shared/context/ThemeContext.native.d.ts +22 -0
  178. package/dist/shared/hooks/useMediaQuery.d.ts +12 -0
  179. package/dist/shared/hooks/useThemeColors.d.ts +37 -0
  180. package/dist/shared/locales/ar.json.d.ts +253 -19
  181. package/dist/shared/locales/de.json.d.ts +254 -20
  182. package/dist/shared/locales/en.json.d.ts +255 -21
  183. package/dist/shared/locales/es.json.d.ts +254 -20
  184. package/dist/shared/locales/fr.json.d.ts +254 -20
  185. package/dist/shared/locales/it.json.d.ts +254 -20
  186. package/dist/shared/locales/pt.json.d.ts +254 -20
  187. package/dist/shared/types/edge.d.ts +6 -0
  188. package/dist/shared/types/node.d.ts +146 -18
  189. package/dist/shared/utils/httpRecord.d.ts +20 -0
  190. package/dist/shared/utils/inputTypeGuards.d.ts +7 -0
  191. package/dist/shared/utils/nodeTypeGuards.d.ts +1 -6
  192. package/dist/useRenderNode-DJGmt663.js +514 -0
  193. package/package.json +54 -22
  194. package/dist/ThemeContext-BIvs8Kw-.js +0 -758
  195. package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
  196. package/dist/TreegeRenderer-D3EvsEfJ.js +0 -1413
  197. package/dist/editor/context/TreegeEditorContext.d.ts +0 -12
  198. package/dist/editor/features/TreegeEditor/forms/FlowNodeForm.d.ts +0 -2
  199. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
  200. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
  201. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +0 -6
  202. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
  203. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
  204. package/dist/editor/hooks/useEdgesSelection.d.ts +0 -11
  205. package/dist/renderer/context/TreegeConfigContext.d.ts +0 -39
  206. package/dist/renderer/context/TreegeRendererContext.d.ts +0 -25
  207. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +0 -7
  208. package/dist/renderer/features/TreegeRenderer/web/components/DefaultGroup.d.ts +0 -6
  209. /package/dist/editor/components/{data-display/logo.d.ts → branding/Logo.d.ts} +0 -0
@@ -0,0 +1,30 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormValues } from '../types/renderer';
3
+ import { InputNodeData } from '../../shared/types/node';
4
+ /**
5
+ * Resolve a free-form JSON template into the actual payload.
6
+ *
7
+ * The template is valid JSON where field tokens sit inside string positions,
8
+ * e.g. `{ "data": { "name": "{{firstName}}", "age": "{{age}}" } }`. The template
9
+ * is parsed first, then each `"{{token}}"` is replaced by the matching field
10
+ * value (`token` = a field's node id, or its token-safe `name`), preserving the
11
+ * value's JSON type. Tokens may also be used inside object keys.
12
+ *
13
+ * @param template - The JSON template string
14
+ * @param formValues - Current form values, keyed by node id
15
+ * @param inputNodes - Input nodes, used to also expose values by field name
16
+ * @returns The resolved payload, or `undefined` when the template is empty or
17
+ * not valid JSON (e.g. while the user is still typing)
18
+ */
19
+ export declare const resolveJsonTemplate: (template: string | undefined, formValues: FormValues, inputNodes: Node<InputNodeData>[]) => unknown;
20
+ /**
21
+ * Resolve a JSON template and serialize it to a string, ready to be used as an
22
+ * HTTP request body. Returns `undefined` when the template is empty or invalid
23
+ * JSON (so the caller can omit the body).
24
+ */
25
+ export declare const resolveTemplateToJson: (template: string | undefined, formValues: FormValues, inputNodes: Node<InputNodeData>[]) => string | undefined;
26
+ /**
27
+ * Whether a non-empty JSON template is syntactically valid JSON. Used by the
28
+ * editor to surface a clear error instead of silently falling back at runtime.
29
+ */
30
+ export declare const isJsonTemplateValid: (template: string | undefined) => boolean;
@@ -6,9 +6,37 @@ import { InputNodeData, TreegeNodeData } from '../../shared/types/node';
6
6
  * @returns Array of input nodes only
7
7
  */
8
8
  export declare const getInputNodes: (nodes: Node<TreegeNodeData>[]) => Node<InputNodeData>[];
9
+ /**
10
+ * Resolve the key name for an input node using priority: name > label (en) > nodeId
11
+ * This is the single source of truth for key resolution across the application
12
+ * @param node - The input node
13
+ * @returns The resolved key (name, label, or node ID)
14
+ */
15
+ export declare const resolveNodeKey: (node: Node<InputNodeData>) => string;
16
+ /**
17
+ * Resolve a human, end-user-facing label for an input node, preferring the
18
+ * translated `label` for the given language over the technical `name`. Used
19
+ * when surfacing field references to users (e.g. dependency hints). Priority:
20
+ * translated label > name > node id. This differs from `resolveNodeKey`, which
21
+ * prioritizes `name` for form-submission keys.
22
+ * @param node - The input node
23
+ * @param language - The current language code
24
+ * @returns The resolved display label
25
+ */
26
+ export declare const resolveNodeLabel: (node: Node<InputNodeData>, language: string) => string;
27
+ /**
28
+ * Resolve the placeholder text for an input, falling back to the static
29
+ * "newAnswer" translation for textfield-like types when the user has not
30
+ * defined a placeholder for the current language.
31
+ * @param data - The input node data
32
+ * @param language - The current language code
33
+ * @returns The resolved placeholder string (empty string if none available)
34
+ */
35
+ export declare const resolveInputPlaceholder: (data: InputNodeData, language: string) => string;
9
36
  /**
10
37
  * Get the field name (DOM name attribute) for a given node ID
11
- * Uses node.data.name if available, otherwise falls back to nodeId
38
+ * Priority: name > label (en) > nodeId
39
+ * This must match the logic in convertFormValuesToNamedFormat for consistency
12
40
  * @param nodeId - The ID of the input node
13
41
  * @param nodes - Array of input nodes
14
42
  * @returns The field name to use in the DOM, or undefined if node not found
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Configuration for DOMPurify sanitization
3
+ */
4
+ interface SanitizeOptions {
5
+ /**
6
+ * Allow only plain text (strip all HTML tags)
7
+ * @default true
8
+ */
9
+ plainTextOnly?: boolean;
10
+ /**
11
+ * Custom allowed tags (when plainTextOnly is false)
12
+ */
13
+ allowedTags?: string[];
14
+ /**
15
+ * Custom allowed attributes (when plainTextOnly is false)
16
+ */
17
+ allowedAttributes?: string[];
18
+ }
19
+ /**
20
+ * Sanitizes user input to prevent XSS attacks
21
+ *
22
+ * This utility wraps DOMPurify and provides secure defaults for the treege library.
23
+ * It should be used on all user-provided content before rendering, especially:
24
+ * - Labels from node data
25
+ * - Helper text
26
+ * - Placeholder text
27
+ * - Any content from HTTP responses
28
+ *
29
+ * @param input - The string to sanitize
30
+ * @param options - Sanitization options
31
+ * @returns Sanitized string safe for rendering
32
+ *
33
+ * @example
34
+ * // Plain text only (default behavior)
35
+ * sanitize('<script>alert("xss")</script>Hello')
36
+ * // => 'Hello'
37
+ *
38
+ * @example
39
+ * // Allow safe HTML tags
40
+ * sanitize('<b>Bold text</b><script>alert("xss")</script>', { plainTextOnly: false })
41
+ * // => '<b>Bold text</b>'
42
+ *
43
+ * @example
44
+ * // Custom allowed tags
45
+ * sanitize('<a href="http://example.com">Link</a>', {
46
+ * plainTextOnly: false,
47
+ * allowedTags: ['a'],
48
+ * allowedAttributes: ['href']
49
+ * })
50
+ * // => '<a href="http://example.com">Link</a>'
51
+ */
52
+ export declare const sanitize: (input: string | undefined | null, options?: SanitizeOptions) => string;
53
+ /**
54
+ * Sanitizes data from HTTP responses
55
+ *
56
+ * This function recursively sanitizes all string values in an object or array.
57
+ * Useful for cleaning data received from external APIs before displaying it.
58
+ *
59
+ * Protection against:
60
+ * - Circular references: Uses WeakSet to detect and handle circular objects
61
+ * - Deep nesting attacks: Limits recursion depth to prevent DoS
62
+ * - XSS attacks: Sanitizes all string values
63
+ *
64
+ * @param data - The data to sanitize (can be any type)
65
+ * @param options - Sanitization options
66
+ * @param depth - Current recursion depth (internal use)
67
+ * @param seen - WeakSet to track visited objects (internal use)
68
+ * @returns Sanitized data with same structure
69
+ *
70
+ * @example
71
+ * sanitizeHttpResponse({
72
+ * name: 'John <script>xss</script>',
73
+ * nested: { title: 'Hello <b>world</b>' }
74
+ * })
75
+ * // => { name: 'John ', nested: { title: 'Hello <b>world</b>' } }
76
+ *
77
+ * @example
78
+ * // Handles circular references gracefully
79
+ * const obj = { name: 'Test' };
80
+ * obj.self = obj;
81
+ * sanitizeHttpResponse(obj)
82
+ * // => { name: 'Test', self: { name: 'Test' } } // circular ref broken
83
+ */
84
+ export declare const sanitizeHttpResponse: (data: unknown, options?: SanitizeOptions, depth?: number, seen?: WeakSet<object>) => unknown;
85
+ export {};
@@ -0,0 +1,69 @@
1
+ /**
2
+ * React Native implementation of sanitization utilities
3
+ * Does not use DOMPurify as it depends on browser DOM
4
+ */
5
+ /**
6
+ * Configuration for sanitization
7
+ */
8
+ interface SanitizeOptions {
9
+ /**
10
+ * Allow only plain text (strip all HTML tags)
11
+ * @default true
12
+ */
13
+ plainTextOnly?: boolean;
14
+ /**
15
+ * Custom allowed tags (when plainTextOnly is false)
16
+ * Note: In React Native, HTML tags are always stripped
17
+ */
18
+ allowedTags?: string[];
19
+ /**
20
+ * Custom allowed attributes (when plainTextOnly is false)
21
+ * Note: In React Native, attributes are not applicable
22
+ */
23
+ allowedAttributes?: string[];
24
+ }
25
+ /**
26
+ * Sanitizes user input to prevent XSS attacks
27
+ *
28
+ * React Native implementation that strips all HTML tags and decodes entities.
29
+ * Since React Native doesn't render HTML, we focus on cleaning text content.
30
+ *
31
+ * @param input - The string to sanitize
32
+ * @param options - Sanitization options (maintained for API compatibility)
33
+ * @returns Sanitized string safe for rendering
34
+ *
35
+ * @example
36
+ * sanitize('<script>alert("xss")</script>Hello')
37
+ * // => 'Hello'
38
+ *
39
+ * @example
40
+ * sanitize('<b>Bold text</b><script>alert("xss")</script>')
41
+ * // => 'Bold text'
42
+ */
43
+ export declare const sanitize: (input: string | undefined | null, _options?: SanitizeOptions) => string;
44
+ /**
45
+ * Sanitizes data from HTTP responses
46
+ *
47
+ * This function recursively sanitizes all string values in an object or array.
48
+ * Useful for cleaning data received from external APIs before displaying it.
49
+ *
50
+ * Protection against:
51
+ * - Circular references: Uses WeakSet to detect and handle circular objects
52
+ * - Deep nesting attacks: Limits recursion depth to prevent DoS
53
+ * - XSS attacks: Sanitizes all string values
54
+ *
55
+ * @param data - The data to sanitize (can be any type)
56
+ * @param options - Sanitization options
57
+ * @param depth - Current recursion depth (internal use)
58
+ * @param seen - WeakSet to track visited objects (internal use)
59
+ * @returns Sanitized data with same structure
60
+ *
61
+ * @example
62
+ * sanitizeHttpResponse({
63
+ * name: 'John <script>xss</script>',
64
+ * nested: { title: 'Hello <b>world</b>' }
65
+ * })
66
+ * // => { name: 'John ', nested: { title: 'Hello world' } }
67
+ */
68
+ export declare const sanitizeHttpResponse: (data: unknown, options?: SanitizeOptions, depth?: number, seen?: WeakSet<object>) => unknown;
69
+ export {};
@@ -0,0 +1,27 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { TreegeNodeData } from '../../shared/types/node';
3
+ /**
4
+ * A renderer step — a contiguous slice of visible nodes that share the same
5
+ * `parentId` (group id) or no parent (orphan step).
6
+ *
7
+ * Steps are derived from the flow's visible nodes at render time; the editor's
8
+ * group nodes carry only metadata (label) and are no longer rendered.
9
+ */
10
+ export type FlowStep = {
11
+ /**
12
+ * Group id owning the step, or null for orphan steps (nodes without `parentId`).
13
+ */
14
+ groupId: string | null;
15
+ /**
16
+ * The actual nodes (input + ui) rendered in this step, in flow order.
17
+ */
18
+ nodes: Node<TreegeNodeData>[];
19
+ };
20
+ /**
21
+ * Partition `visibleNodes` into ordered steps. A new step is started every
22
+ * time the `parentId` of the next renderable node changes (i.e. the flow
23
+ * crosses a group boundary, or moves between an orphan and a grouped node).
24
+ *
25
+ * Group nodes themselves are skipped — they're metadata only.
26
+ */
27
+ export declare const computeSteps: (visibleNodes: Node<TreegeNodeData>[]) => FlowStep[];
@@ -0,0 +1,49 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormValues } from '../types/renderer';
3
+ import { HttpHeaders, InputNodeData, SubmitConfig } from '../../shared/types/node';
4
+ /**
5
+ * Result of a form submission
6
+ */
7
+ export interface SubmitResult {
8
+ /**
9
+ * Whether the submission was successful
10
+ */
11
+ success: boolean;
12
+ /**
13
+ * Response data from the server
14
+ */
15
+ data?: unknown;
16
+ /**
17
+ * Error message if submission failed
18
+ */
19
+ error?: string;
20
+ /**
21
+ * URL to redirect to (if configured)
22
+ */
23
+ redirectUrl?: string;
24
+ }
25
+ /**
26
+ * Submit form data using the provided submit configuration
27
+ *
28
+ * This function handles:
29
+ * - Template variable replacement in URL, body, and headers
30
+ * - HTTP request to the configured endpoint
31
+ * - Response parsing
32
+ * - Redirect URL generation with response data
33
+ *
34
+ * @param config - Submit configuration from the submit button node
35
+ * @param formValues - Current form values
36
+ * @param inputNodes - All input nodes (required when sendAllFormValues is true)
37
+ * @param headers
38
+ * @param baseUrl - Base URL prepended to a relative submit url
39
+ * @returns Promise with submission result
40
+ */
41
+ export declare const submitFormData: (config: SubmitConfig, formValues: FormValues, inputNodes: Node<InputNodeData>[], headers?: HttpHeaders, baseUrl?: string) => Promise<SubmitResult>;
42
+ /**
43
+ * Perform redirect to the specified URL
44
+ *
45
+ * Handles both relative and absolute URLs
46
+ *
47
+ * @param url - The URL to redirect to
48
+ */
49
+ export declare const redirect: (url: string) => void;
@@ -0,0 +1,17 @@
1
+ import { Node } from '@xyflow/react';
2
+ import { FormValues, MissingDependency } from '../types/renderer';
3
+ import { InputNodeData } from '../../shared/types/node';
4
+ /**
5
+ * The node ids an input's dynamic request depends on — every `{{nodeId}}`
6
+ * referenced in its `httpConfig` or `optionsSource` url, query-param values, or
7
+ * body. These are the fields that must be filled before the input can fetch its
8
+ * options. Headers are excluded: they carry auth/global values, not user-filled
9
+ * form fields.
10
+ */
11
+ export declare const getTemplateDependencyIds: (node: Node<InputNodeData>) => string[];
12
+ /**
13
+ * The input's template dependencies that are not yet filled, paired with the
14
+ * referenced field's translated label. Computed centrally in `useRenderNode`
15
+ * and passed to every input renderer as `extra.missingDependencies`.
16
+ */
17
+ export declare const getMissingDependencies: (node: Node<InputNodeData>, formValues: FormValues, inputNodes: Node<InputNodeData>[], language: string) => MissingDependency[];