treege 3.0.0-beta.9 → 3.0.0-beta40

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 (137) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +213 -30
  3. package/dist/DefaultInputs-8yJMEyMh.js +1557 -0
  4. package/dist/ThemeContext-Ejgu9Mwr.js +1603 -0
  5. package/dist/editor/components/input/ComboboxWithCreate.d.ts +2 -1
  6. package/dist/editor/constants/defaultNode.d.ts +1 -1
  7. package/dist/editor/constants/edgeTypes.d.ts +3 -2
  8. package/dist/editor/constants/inputTypeIcons.d.ts +3 -0
  9. package/dist/editor/constants/nodeSpacing.d.ts +33 -0
  10. package/dist/editor/constants/nodeTypes.d.ts +5 -5
  11. package/dist/editor/context/TreegeEditorContext.d.ts +53 -1
  12. package/dist/editor/features/TreegeEditor/TreegeEditor.d.ts +1 -1
  13. package/dist/editor/features/TreegeEditor/dialogs/ChangeNodeTypeDialog.d.ts +2 -0
  14. package/dist/editor/features/TreegeEditor/dialogs/DeleteNodeDialog.d.ts +2 -0
  15. package/dist/editor/features/TreegeEditor/edges/ConditionalEdge.d.ts +2 -2
  16. package/dist/editor/features/TreegeEditor/edges/DefaultEdge.d.ts +3 -0
  17. package/dist/editor/features/TreegeEditor/forms/SubmitConfigForm.d.ts +7 -0
  18. package/dist/editor/features/TreegeEditor/inputs/ComboboxPattern.d.ts +2 -1
  19. package/dist/editor/features/TreegeEditor/inputs/OptionImageField.d.ts +6 -0
  20. package/dist/editor/features/TreegeEditor/nodes/GroupNode.d.ts +2 -2
  21. package/dist/editor/features/TreegeEditor/nodes/TreegeNode.d.ts +6 -0
  22. package/dist/editor/features/TreegeEditor/nodes/components/BottomHandleDropdown.d.ts +6 -0
  23. package/dist/editor/features/TreegeEditor/nodes/components/NodeInputPreview.d.ts +7 -0
  24. package/dist/editor/features/TreegeEditor/nodes/components/NodeLabelInput.d.ts +9 -0
  25. package/dist/editor/features/TreegeEditor/nodes/components/NodeMoreMenu.d.ts +6 -0
  26. package/dist/editor/features/TreegeEditor/nodes/components/NodeTypeBadge.d.ts +7 -0
  27. package/dist/editor/features/TreegeEditor/nodes/components/OptionsEditor.d.ts +7 -0
  28. package/dist/editor/features/TreegeEditor/nodes/components/RequiredBadge.d.ts +6 -0
  29. package/dist/editor/features/TreegeEditor/nodes/layout/NodeWrapper.d.ts +2 -1
  30. package/dist/editor/features/TreegeEditor/panel/AIGeneratorDialog.d.ts +16 -0
  31. package/dist/editor/hooks/useAutoLayout.d.ts +15 -0
  32. package/dist/editor/hooks/useFlowActions.d.ts +5 -2
  33. package/dist/editor/hooks/useFlowConnections.d.ts +4 -0
  34. package/dist/editor/hooks/useNodesSelection.d.ts +5 -5
  35. package/dist/editor/types/ai.d.ts +65 -0
  36. package/dist/editor/types/editor.d.ts +9 -8
  37. package/dist/editor/utils/aiFlowGenerator.d.ts +5 -0
  38. package/dist/editor/utils/dagreLayout.d.ts +17 -0
  39. package/dist/editor/utils/edge.d.ts +14 -0
  40. package/dist/editor/utils/image.d.ts +7 -0
  41. package/dist/editor/utils/inputTypeIcon.d.ts +6 -0
  42. package/dist/editor-DWJ95r4g.js +4001 -0
  43. package/dist/editor.js +3 -7
  44. package/dist/main.js +4 -52
  45. package/dist/renderer/context/TreegeRendererContext.d.ts +4 -1
  46. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +19 -11
  47. package/dist/renderer/features/TreegeRenderer/native/components/DefaultFormWrapper.d.ts +7 -7
  48. package/dist/renderer/features/TreegeRenderer/native/components/DefaultGroup.d.ts +7 -7
  49. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +21 -15
  50. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButton.d.ts +9 -7
  51. package/dist/renderer/features/TreegeRenderer/native/components/DefaultSubmitButtonWrapper.d.ts +11 -0
  52. package/dist/renderer/features/TreegeRenderer/native/components/DefaultUI.d.ts +8 -7
  53. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +3 -0
  54. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +3 -0
  55. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +3 -0
  56. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +3 -0
  57. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +3 -0
  58. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +3 -0
  59. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +3 -0
  60. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +3 -0
  61. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +3 -0
  62. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +3 -0
  63. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +3 -0
  64. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +3 -0
  65. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +3 -0
  66. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +3 -0
  67. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +3 -0
  68. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +3 -0
  69. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +3 -0
  70. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +84 -24
  71. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  72. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +1 -1
  73. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +1 -1
  74. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +1 -1
  75. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +1 -1
  76. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +1 -1
  77. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +1 -1
  78. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +1 -1
  79. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +1 -1
  80. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +1 -1
  81. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +1 -1
  82. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +1 -1
  83. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +1 -1
  84. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +1 -1
  85. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +3 -0
  86. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +1 -1
  87. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +1 -1
  88. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +1 -1
  89. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +1 -1
  90. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +1 -1
  91. package/dist/renderer/hooks/useRenderNode.d.ts +55 -0
  92. package/dist/renderer/hooks/useSubmitHandler.d.ts +34 -0
  93. package/dist/renderer/hooks/useTranslate.d.ts +6 -4
  94. package/dist/renderer/index.d.ts +2 -0
  95. package/dist/renderer/index.native.d.ts +19 -0
  96. package/dist/renderer/types/renderer.d.ts +45 -6
  97. package/dist/renderer/utils/form.d.ts +22 -2
  98. package/dist/renderer/utils/http.d.ts +101 -0
  99. package/dist/renderer/utils/node.d.ts +18 -1
  100. package/dist/renderer/utils/sanitize.d.ts +85 -0
  101. package/dist/renderer/utils/sanitize.native.d.ts +69 -0
  102. package/dist/renderer/utils/submit.d.ts +47 -0
  103. package/dist/renderer-native.d.ts +2 -0
  104. package/dist/renderer-native.js +3496 -0
  105. package/dist/renderer.js +3 -45
  106. package/dist/shared/components/ui/badge.d.ts +2 -2
  107. package/dist/shared/components/ui/button.d.ts +2 -2
  108. package/dist/shared/components/ui/collapsible.d.ts +1 -1
  109. package/dist/shared/components/ui/command.d.ts +1 -1
  110. package/dist/shared/components/ui/dropdown-menu.d.ts +1 -1
  111. package/dist/shared/components/ui/form.d.ts +1 -1
  112. package/dist/shared/components/ui/popover.d.ts +4 -2
  113. package/dist/shared/components/ui/select.d.ts +3 -1
  114. package/dist/shared/components/ui/sheet.d.ts +1 -1
  115. package/dist/shared/components/ui/tooltip.d.ts +1 -1
  116. package/dist/shared/constants/colors.d.ts +45 -0
  117. package/dist/shared/constants/inputType.d.ts +1 -0
  118. package/dist/shared/context/ThemeContext.d.ts +2 -0
  119. package/dist/shared/context/ThemeContext.native.d.ts +22 -0
  120. package/dist/shared/hooks/useThemeColors.d.ts +37 -0
  121. package/dist/shared/locales/ar.json.d.ts +117 -10
  122. package/dist/shared/locales/de.json.d.ts +118 -11
  123. package/dist/shared/locales/en.json.d.ts +119 -12
  124. package/dist/shared/locales/es.json.d.ts +118 -11
  125. package/dist/shared/locales/fr.json.d.ts +118 -11
  126. package/dist/shared/locales/it.json.d.ts +118 -11
  127. package/dist/shared/locales/pt.json.d.ts +118 -11
  128. package/dist/shared/types/edge.d.ts +6 -0
  129. package/dist/shared/types/node.d.ts +64 -0
  130. package/package.json +38 -12
  131. package/dist/ThemeContext-BIvs8Kw-.js +0 -758
  132. package/dist/TreegeEditor-Lv5Tn9_F.js +0 -2152
  133. package/dist/TreegeRenderer-BVaqgInZ.js +0 -1405
  134. package/dist/editor/features/TreegeEditor/inputs/SelectInputType.d.ts +0 -7
  135. package/dist/editor/features/TreegeEditor/nodes/FlowNode.d.ts +0 -6
  136. package/dist/editor/features/TreegeEditor/nodes/InputNode.d.ts +0 -6
  137. package/dist/editor/features/TreegeEditor/nodes/UINode.d.ts +0 -6
@@ -0,0 +1,1603 @@
1
+ (function(){(e=>{let t=globalThis.document;try{if(t!==void 0){let n=t.createElement(`style`);n.id=`treege-styles`,n.appendChild(t.createTextNode(e)),t.head.insertBefore(n,t.head.firstChild)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})(`/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-border-default:1px solid #bbb;--xy-node-border-selected-default:1px solid #555;--xy-handle-background-color-default:#333;--xy-selection-background-color-default:#9696b41a;--xy-selection-border-default:1px dotted #9b9b9bcc;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#777;--xy-background-pattern-lines-color-default:#777;--xy-background-pattern-cross-color-default:#777;--xy-node-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));min-width:5px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{justify-content:center;align-items:center;width:26px;height:26px;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border:var(--xy-node-border,var(--xy-node-border-default));color:var(--xy-node-color,var(--xy-node-color-default))}.react-flow__node-input.selected,.react-flow__node-input:focus,.react-flow__node-input:focus-visible,.react-flow__node-default.selected,.react-flow__node-default:focus,.react-flow__node-default:focus-visible,.react-flow__node-output.selected,.react-flow__node-output:focus,.react-flow__node-output:focus-visible,.react-flow__node-group.selected,.react-flow__node-group:focus,.react-flow__node-group:focus-visible{border:var(--xy-node-border-selected,var(--xy-node-border-selected-default));outline:none}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-green-50:oklch(98.2% .018 155.826);--color-green-300:oklch(87.1% .15 154.449);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-widest:.1em;--radius-xs:.125rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-card:var(--treege-card);--color-muted-foreground:var(--treege-muted-foreground);--color-border:var(--treege-border);--color-ring:var(--treege-ring);--color-chart-2:var(--treege-chart-2);--color-chart-3:var(--treege-chart-3);--color-chart-4:var(--treege-chart-4)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--treege-border)}body{color:var(--treege-foreground)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-3\\.5{top:calc(var(--spacing)*-3.5)}.top-0{top:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-5{top:calc(var(--spacing)*5)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-5{left:calc(var(--spacing)*5)}.left-6{left:calc(var(--spacing)*6)}.left-\\[50\\%\\]{left:50%}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-4{margin-block:calc(var(--spacing)*4)}.my-8{margin-block:calc(var(--spacing)*8)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-\\(--cell-size\\){width:var(--cell-size);height:var(--cell-size)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-auto{width:auto;height:auto}.size-full{width:100%;height:100%}.\\!h-3{height:calc(var(--spacing)*3)!important}.h-\\(--cell-size\\){height:var(--cell-size)}.h-0{height:calc(var(--spacing)*0)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-6\\!{height:calc(var(--spacing)*6)!important}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-\\[1\\.15rem\\]{height:1.15rem}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\\(--radix-dropdown-menu-content-available-height\\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\\(--radix-select-content-available-height\\){max-height:var(--radix-select-content-available-height)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-150{max-height:calc(var(--spacing)*150)}.max-h-\\[300px\\]{max-height:300px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-16{min-height:calc(var(--spacing)*16)}.\\!w-3{width:calc(var(--spacing)*3)!important}.w-\\(--cell-size\\){width:var(--cell-size)}.w-0{width:calc(var(--spacing)*0)}.w-2\\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-3\\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\\/12{width:33.3333%}.w-6{width:calc(var(--spacing)*6)}.w-6\\!{width:calc(var(--spacing)*6)!important}.w-8{width:calc(var(--spacing)*8)}.w-8\\/12{width:66.6667%}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-32{width:calc(var(--spacing)*32)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-96{width:calc(var(--spacing)*96)}.w-\\[300px\\]{width:300px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-50{max-width:calc(var(--spacing)*50)}.max-w-\\[350px\\]{max-width:350px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.min-w-\\(--cell-size\\){min-width:var(--cell-size)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[8rem\\]{min-width:8rem}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-\\(--radix-dropdown-menu-content-transform-origin\\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\\(--radix-popover-content-transform-origin\\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\\(--radix-select-content-transform-origin\\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.place-content-center{place-content:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing)*3)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-3{row-gap:calc(var(--spacing)*3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--treege-radius)}.rounded-md{border-radius:calc(var(--treege-radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--treege-radius) - 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-l-md{border-top-left-radius:calc(var(--treege-radius) - 2px);border-bottom-left-radius:calc(var(--treege-radius) - 2px)}.rounded-r-md{border-top-right-radius:calc(var(--treege-radius) - 2px);border-bottom-right-radius:calc(var(--treege-radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-foreground\\/30{border-color:var(--treege-foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/30{border-color:color-mix(in oklab,var(--treege-foreground)30%,transparent)}}.border-gray-300{border-color:var(--color-gray-300)}.border-input{border-color:var(--treege-input)}.border-primary{border-color:var(--treege-primary)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-accent{background-color:var(--treege-accent)}.bg-background{background-color:var(--treege-background)}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-300{background-color:var(--color-blue-300)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--treege-border)}.bg-chart-2{background-color:var(--treege-chart-2)}.bg-destructive{background-color:var(--treege-destructive)}.bg-foreground{background-color:var(--treege-foreground)}.bg-green-50{background-color:var(--color-green-50)}.bg-muted,.bg-muted\\/20{background-color:var(--treege-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/20{background-color:color-mix(in oklab,var(--treege-muted)20%,transparent)}}.bg-muted\\/30{background-color:var(--treege-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--treege-muted)30%,transparent)}}.bg-popover{background-color:var(--treege-popover)}.bg-primary,.bg-primary\\/5{background-color:var(--treege-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/5{background-color:color-mix(in oklab,var(--treege-primary)5%,transparent)}}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-secondary{background-color:var(--treege-secondary)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-foreground{fill:var(--treege-foreground)}.fill-primary{fill:var(--treege-primary)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\\!{padding:calc(var(--spacing)*0)!important}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-px{padding:1px}.px-\\(--cell-size\\){padding-inline:var(--cell-size)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-1\\.5{padding-bottom:calc(var(--spacing)*1.5)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[0\\.8rem\\]{font-size:.8rem}.text-\\[10px\\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#13d3b4\\]{color:#13d3b4}.text-\\[--treege-color-primary\\]{color:--treege-color-primary}.text-accent-foreground{color:var(--treege-accent-foreground)}.text-background{color:var(--treege-background)}.text-current{color:currentColor}.text-destructive{color:var(--treege-destructive)}.text-foreground{color:var(--treege-foreground)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--treege-muted-foreground)}.text-popover-foreground{color:var(--treege-popover-foreground)}.text-primary{color:var(--treege-primary)}.text-primary-foreground{color:var(--treege-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--treege-secondary-foreground)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.\\[color-scheme\\:light\\]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--treege-background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-\\[0_0px_35px\\]{--tw-drop-shadow-size:drop-shadow(0 0px 35px var(--tw-drop-shadow-color,currentcolor));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-blue-600{--tw-drop-shadow-color:oklch(54.6% .245 262.881)}@supports (color:color-mix(in lab, red, red)){.drop-shadow-blue-600{--tw-drop-shadow-color:color-mix(in oklab,var(--color-blue-600)var(--tw-drop-shadow-alpha),transparent)}}.drop-shadow-blue-600{--tw-drop-shadow:var(--tw-drop-shadow-size)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[filter\\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.zoom-in-95{--tw-enter-scale:.95}.\\[--cell-size\\:--spacing\\(8\\)\\]{--cell-size:calc(var(--spacing)*8)}.group-data-\\[disabled\\=true\\]\\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\\[disabled\\=true\\]\\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\\[focused\\=true\\]\\/day\\:relative:is(:where(.group\\/day)[data-focused=true] *){position:relative}.group-data-\\[focused\\=true\\]\\/day\\:z-10:is(:where(.group\\/day)[data-focused=true] *){z-index:10}.group-data-\\[focused\\=true\\]\\/day\\:border-ring:is(:where(.group\\/day)[data-focused=true] *){border-color:var(--treege-ring)}.group-data-\\[focused\\=true\\]\\/day\\:ring-\\[3px\\]:is(:where(.group\\/day)[data-focused=true] *){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\\[focused\\=true\\]\\/day\\:ring-ring\\/50:is(:where(.group\\/day)[data-focused=true] *){--tw-ring-color:var(--treege-ring)}@supports (color:color-mix(in lab, red, red)){.group-data-\\[focused\\=true\\]\\/day\\:ring-ring\\/50:is(:where(.group\\/day)[data-focused=true] *){--tw-ring-color:color-mix(in oklab,var(--treege-ring)50%,transparent)}}.peer-disabled\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.selection\\:bg-primary ::selection{background-color:var(--treege-primary)}.selection\\:bg-primary::selection{background-color:var(--treege-primary)}.selection\\:text-primary-foreground ::selection{color:var(--treege-primary-foreground)}.selection\\:text-primary-foreground::selection{color:var(--treege-primary-foreground)}.file\\:inline-flex::file-selector-button{display:inline-flex}.file\\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--treege-foreground)}.placeholder\\:text-muted-foreground::placeholder,.placeholder\\:text-muted-foreground\\/40::placeholder{color:var(--treege-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/40::placeholder{color:color-mix(in oklab,var(--treege-muted-foreground)40%,transparent)}}.placeholder\\:text-white\\/60::placeholder{color:#fff9}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/60::placeholder{color:color-mix(in oklab,var(--color-white)60%,transparent)}}@media (hover:hover){.hover\\:border-primary\\/50:hover{border-color:var(--treege-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:border-primary\\/50:hover{border-color:color-mix(in oklab,var(--treege-primary)50%,transparent)}}.hover\\:bg-accent:hover{background-color:var(--treege-accent)}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive\\/90:hover{background-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--treege-destructive)90%,transparent)}}.hover\\:bg-primary:hover{background-color:var(--treege-primary)}.hover\\:bg-primary\\/80\\!:hover{background-color:var(--treege-primary)!important}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80\\!:hover{background-color:color-mix(in oklab,var(--treege-primary)80%,transparent)!important}}.hover\\:bg-primary\\/90:hover{background-color:var(--treege-primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--treege-primary)90%,transparent)}}.hover\\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\\:bg-secondary:hover,.hover\\:bg-secondary\\/80:hover{background-color:var(--treege-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--treege-secondary)80%,transparent)}}.hover\\:text-\\[--treege-color-primary\\]:hover{color:--treege-color-primary}.hover\\:text-accent-foreground:hover{color:var(--treege-accent-foreground)}.hover\\:text-primary:hover{color:var(--treege-primary)}.hover\\:no-underline:hover{text-decoration-line:none}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-100:hover{opacity:1}.hover\\:brightness-90:hover{--tw-brightness:brightness(90%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hover\\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.focus\\:bg-accent:focus{background-color:var(--treege-accent)}.focus\\:text-accent-foreground:focus{color:var(--treege-accent-foreground)}.focus\\:text-destructive:focus{color:var(--treege-destructive)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\\:ring-ring:focus{--tw-ring-color:var(--treege-ring)}.focus\\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-ring:focus-visible{border-color:var(--treege-ring)}.focus-visible\\:border-transparent\\!:focus-visible{border-color:#0000!important}.focus-visible\\:ring-0\\!:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--treege-destructive)20%,transparent)}}.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--treege-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--treege-ring)50%,transparent)}}.focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-focus\\:border-ring:has(:focus){border-color:var(--treege-ring)}.has-focus\\:ring-\\[3px\\]:has(:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-focus\\:ring-ring\\/50:has(:focus){--tw-ring-color:var(--treege-ring)}@supports (color:color-mix(in lab, red, red)){.has-focus\\:ring-ring\\/50:has(:focus){--tw-ring-color:color-mix(in oklab,var(--treege-ring)50%,transparent)}}.has-\\[\\>svg\\]\\:px-1\\.5:has(>svg){padding-inline:calc(var(--spacing)*1.5)}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--treege-destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--treege-destructive)20%,transparent)}}.aria-selected\\:text-muted-foreground[aria-selected=true]{color:var(--treege-muted-foreground)}.data-\\[disabled\\]\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\[disabled\\]\\:opacity-50[data-disabled]{opacity:.5}.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=true]{opacity:.5}.data-\\[inset\\]\\:pl-7[data-inset]{padding-left:calc(var(--spacing)*7)}.data-\\[inset\\]\\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[placeholder\\]\\:text-muted-foreground[data-placeholder]{color:var(--treege-muted-foreground)}.data-\\[range-end\\=true\\]\\:rounded-md[data-range-end=true]{border-radius:calc(var(--treege-radius) - 2px)}.data-\\[range-end\\=true\\]\\:rounded-r-md[data-range-end=true]{border-top-right-radius:calc(var(--treege-radius) - 2px);border-bottom-right-radius:calc(var(--treege-radius) - 2px)}.data-\\[range-end\\=true\\]\\:bg-primary[data-range-end=true]{background-color:var(--treege-primary)}.data-\\[range-end\\=true\\]\\:text-primary-foreground[data-range-end=true]{color:var(--treege-primary-foreground)}.data-\\[range-middle\\=true\\]\\:rounded-none[data-range-middle=true]{border-radius:0}.data-\\[range-middle\\=true\\]\\:bg-accent[data-range-middle=true]{background-color:var(--treege-accent)}.data-\\[range-middle\\=true\\]\\:text-accent-foreground[data-range-middle=true]{color:var(--treege-accent-foreground)}.data-\\[range-start\\=true\\]\\:rounded-md[data-range-start=true]{border-radius:calc(var(--treege-radius) - 2px)}.data-\\[range-start\\=true\\]\\:rounded-l-md[data-range-start=true]{border-top-left-radius:calc(var(--treege-radius) - 2px);border-bottom-left-radius:calc(var(--treege-radius) - 2px)}.data-\\[range-start\\=true\\]\\:bg-primary[data-range-start=true]{background-color:var(--treege-primary)}.data-\\[range-start\\=true\\]\\:text-primary-foreground[data-range-start=true]{color:var(--treege-primary-foreground)}.data-\\[selected-single\\=true\\]\\:bg-primary[data-selected-single=true]{background-color:var(--treege-primary)}.data-\\[selected-single\\=true\\]\\:text-primary-foreground[data-selected-single=true]{color:var(--treege-primary-foreground)}.data-\\[selected\\=true\\]\\:rounded-none[data-selected=true]{border-radius:0}.data-\\[selected\\=true\\]\\:bg-accent[data-selected=true]{background-color:var(--treege-accent)}.data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected=true]{color:var(--treege-accent-foreground)}.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\\[side\\=right\\]\\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\\[size\\=default\\]\\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\\[size\\=sm\\]\\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\\*\\*\\:data-\\[slot\\=command-input-wrapper\\]\\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:flex>*)[data-slot=select-value]{display:flex}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\\*\\:data-\\[slot\\=select-value\\]\\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\\[state\\=checked\\]\\:translate-x-\\[calc\\(100\\%-2px\\)\\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[state\\=checked\\]\\:border-primary[data-state=checked]{border-color:var(--treege-primary)}.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked]{background-color:var(--treege-primary)}.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked]{color:var(--treege-primary-foreground)}.data-\\[state\\=closed\\]\\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=closed\\]\\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\\[state\\=open\\]\\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--treege-accent)}.data-\\[state\\=open\\]\\:bg-secondary[data-state=open]{background-color:var(--treege-secondary)}.data-\\[state\\=open\\]\\:text-accent-foreground[data-state=open]{color:var(--treege-accent-foreground)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--treege-muted-foreground)}.data-\\[state\\=open\\]\\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\\[state\\=open\\]\\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\\[state\\=open\\]\\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\\[state\\=open\\]\\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\\[state\\=open\\]\\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\\[state\\=unchecked\\]\\:bg-input[data-state=unchecked]{background-color:var(--treege-input)}.data-\\[variant\\=destructive\\]\\:text-destructive[data-variant=destructive]{color:var(--treege-destructive)}.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--treege-destructive)10%,transparent)}}.data-\\[variant\\=destructive\\]\\:focus\\:text-destructive[data-variant=destructive]:focus{color:var(--treege-destructive)}@media (width>=40rem){.sm\\:max-w-\\[550px\\]\\!{max-width:550px!important}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-sm{max-width:var(--container-sm)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:text-left{text-align:left}}@media (width>=48rem){.md\\:flex-row{flex-direction:row}.md\\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\\:border-input:is(.dark *){border-color:var(--treege-input)}.dark\\:bg-blue-600:is(.dark *){background-color:var(--color-blue-600)}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--treege-destructive)60%,transparent)}}.dark\\:bg-green-900\\/20:is(.dark *){background-color:#0d542b33}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-green-900\\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-green-900)20%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--treege-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--treege-input)30%,transparent)}}.dark\\:bg-red-900\\/20:is(.dark *){background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-red-900\\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\\:\\[color-scheme\\:dark\\]:is(.dark *){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (hover:hover){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--treege-accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--treege-accent)50%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--treege-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--treege-input)50%,transparent)}}.dark\\:hover\\:text-accent-foreground:is(.dark *):hover{color:var(--treege-accent-foreground)}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--treege-destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--treege-destructive)40%,transparent)}}.dark\\:data-\\[state\\=checked\\]\\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--treege-primary)}.dark\\:data-\\[state\\=checked\\]\\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--treege-primary-foreground)}.dark\\:data-\\[state\\=unchecked\\]\\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--treege-foreground)}.dark\\:data-\\[state\\=unchecked\\]\\:bg-input\\/80:is(.dark *)[data-state=unchecked]{background-color:var(--treege-input)}@supports (color:color-mix(in lab, red, red)){.dark\\:data-\\[state\\=unchecked\\]\\:bg-input\\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--treege-input)80%,transparent)}}.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--treege-destructive)20%,transparent)}}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading]{color:var(--treege-muted-foreground)}.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground svg:not([class*=text-]){color:var(--treege-muted-foreground)}.\\[\\&\\:first-child\\[data-selected\\=true\\]_button\\]\\:rounded-l-md:first-child[data-selected=true] button{border-top-left-radius:calc(var(--treege-radius) - 2px);border-bottom-left-radius:calc(var(--treege-radius) - 2px)}:is(.rtl\\:\\*\\*\\:\\[\\.rdp-button\\\\_next\\>svg\\]\\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_next>svg),:is(.rtl\\:\\*\\*\\:\\[\\.rdp-button\\\\_previous\\>svg\\]\\:rotate-180:where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *) *):is(.rdp-button_previous>svg){rotate:180deg}:is(.\\*\\:\\[span\\]\\:last\\:flex>*):is(span):last-child{display:flex}:is(.\\*\\:\\[span\\]\\:last\\:items-center>*):is(span):last-child{align-items:center}:is(.\\*\\:\\[span\\]\\:last\\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--treege-destructive)!important}.\\[\\&\\:last-child\\[data-selected\\=true\\]_button\\]\\:rounded-r-md:last-child[data-selected=true] button{border-top-right-radius:calc(var(--treege-radius) - 2px);border-bottom-right-radius:calc(var(--treege-radius) - 2px)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>span\\]\\:opacity-70>span{opacity:.7}.\\[\\&\\>svg\\]\\:pointer-events-none>svg{pointer-events:none}.\\[\\&\\>svg\\]\\:size-2\\.5>svg{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.\\[\\&\\>svg\\]\\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:size-3\\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:text-muted-foreground>svg{color:var(--treege-muted-foreground)}[data-slot=card-content] .\\[\\[data-slot\\=card-content\\]_\\&\\]\\:bg-transparent,[data-slot=popover-content] .\\[\\[data-slot\\=popover-content\\]_\\&\\]\\:bg-transparent{background-color:#0000}@media (hover:hover){a.\\[a\\&\\]\\:hover\\:bg-accent:hover{background-color:var(--treege-accent)}a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:var(--treege-destructive)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--treege-destructive)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:var(--treege-primary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--treege-primary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:var(--treege-secondary)}@supports (color:color-mix(in lab, red, red)){a.\\[a\\&\\]\\:hover\\:bg-secondary\\/90:hover{background-color:color-mix(in oklab,var(--treege-secondary)90%,transparent)}}a.\\[a\\&\\]\\:hover\\:text-accent-foreground:hover{color:var(--treege-accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--treege-radius:.625rem;--treege-background:oklch(100% 0 0);--treege-foreground:oklch(14.5% 0 0);--treege-card:oklch(100% 0 0);--treege-card-foreground:oklch(14.5% 0 0);--treege-popover:oklch(100% 0 0);--treege-popover-foreground:oklch(14.5% 0 0);--treege-primary:oklch(20.5% 0 0);--treege-primary-foreground:oklch(98.5% 0 0);--treege-secondary:oklch(97% 0 0);--treege-secondary-foreground:oklch(20.5% 0 0);--treege-muted:oklch(97% 0 0);--treege-muted-foreground:oklch(55.6% 0 0);--treege-accent:oklch(97% 0 0);--treege-accent-foreground:oklch(20.5% 0 0);--treege-destructive:oklch(57.7% .245 27.325);--treege-border:oklch(92.2% 0 0);--treege-input:oklch(92.2% 0 0);--treege-ring:oklch(70.8% 0 0);--treege-chart-1:oklch(64.6% .222 41.116);--treege-chart-2:oklch(60% .118 184.704);--treege-chart-3:oklch(39.8% .07 227.392);--treege-chart-4:oklch(82.8% .189 84.429);--treege-chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--treege-background:oklch(14.5% 0 0);--treege-foreground:oklch(98.5% 0 0);--treege-card:oklch(20.5% 0 0);--treege-card-foreground:oklch(98.5% 0 0);--treege-popover:oklch(20.5% 0 0);--treege-popover-foreground:oklch(98.5% 0 0);--treege-primary:oklch(92.2% 0 0);--treege-primary-foreground:oklch(20.5% 0 0);--treege-secondary:oklch(26.9% 0 0);--treege-secondary-foreground:oklch(98.5% 0 0);--treege-muted:oklch(26.9% 0 0);--treege-muted-foreground:oklch(70.8% 0 0);--treege-accent:oklch(26.9% 0 0);--treege-accent-foreground:oklch(98.5% 0 0);--treege-destructive:oklch(70.4% .191 22.216);--treege-border:oklch(100% 0 0/.1);--treege-input:oklch(100% 0 0/.15);--treege-ring:oklch(55.6% 0 0);--treege-chart-1:oklch(48.8% .243 264.376);--treege-chart-2:oklch(69.6% .17 162.48);--treege-chart-3:oklch(76.9% .188 70.08);--treege-chart-4:oklch(62.7% .265 303.9);--treege-chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}:root{--node-width:280px;--node-height:150px;--node-border-radius:40px;--treege-color-primary:#13d3b4;--treege-color-tertiary:#0065a8;--treege-color-secondary:#007ff6;--treege-color-submit-primary:#ff4757;--treege-color-submit-secondary:#ff6b81;--treege-color-submit-tertiary:#ee5a6f}button{cursor:pointer;-webkit-user-select:none;user-select:none}#root{width:100vw;height:100vh}div.react-flow__node,div.react-flow__node.react-flow__node-input{border:0}div.react-flow__node__wrapper{padding:calc(var(--spacing)*7);width:270px;min-height:150px;box-shadow:0 0 20px 6px oklch(from var(--treege-color-primary)l c h/10%),0 0 20px oklch(from var(--treege-color-tertiary)l c h/10%);background:linear-gradient(oklch(from var(--color-card)l c h/33%),oklch(from var(--color-card)l c h/33%))padding-box,linear-gradient(145deg,oklch(from var(--treege-color-primary)l c h/40%),oklch(0% 0 0/0),oklch(from var(--treege-color-secondary)l c h/40%))border-box;border:3px solid #0000;border-radius:30px;flex-direction:column;justify-content:center;display:flex}div.react-flow__node__wrapper.in-group{background:linear-gradient(oklch(from var(--color-card)l c h/33%),oklch(from var(--color-card)l c h/33%))padding-box,linear-gradient(145deg,oklch(from var(--color-chart-2)l c h/33%),oklch(0% 0 0/0),oklch(from var(--color-chart-2)l c h/33%))border-box}div.react-flow__node.selected .react-flow__node__wrapper{box-shadow:0 0 20px 6px oklch(from var(--treege-color-primary)l c h/30%),0 0 20px oklch(from var(--treege-color-tertiary)l c h/30%)}div.react-flow__node__wrapper.submit-type{box-shadow:0 0 20px 6px oklch(from var(--treege-color-submit-primary)l c h/10%),0 0 20px oklch(from var(--treege-color-submit-tertiary)l c h/10%);background:linear-gradient(oklch(from var(--color-card)l c h/33%),oklch(from var(--color-card)l c h/33%))padding-box,linear-gradient(145deg,oklch(from var(--treege-color-submit-primary)l c h/40%),oklch(0% 0 0/0),oklch(from var(--treege-color-submit-secondary)l c h/40%))border-box}div.react-flow__node.selected .react-flow__node__wrapper.submit-type{box-shadow:0 0 20px 6px oklch(from var(--treege-color-submit-primary)l c h/30%),0 0 20px oklch(from var(--treege-color-submit-tertiary)l c h/30%)}div.react-flow__node-group,div.react-flow__node-group.selected{background:oklch(from var(--color-chart-2)l c h/5%);box-shadow:none;border:3px dashed var(--color-chart-2)}div.react-flow__node-group .react-flow__resize-control{opacity:0;padding:4px;transition:opacity .2s}div.react-flow__node-group:hover .react-flow__resize-control,.react-flow__resize-control:hover{opacity:1}div.react-flow__handle{background-color:var(--treege-muted-foreground);height:calc(var(--spacing)*6);width:calc(var(--spacing)*6);cursor:pointer;border-radius:calc(var(--treege-radius) - 4px);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));justify-content:center;align-items:center;display:flex}@media (hover:hover){div.react-flow__handle:hover{background-color:var(--treege-primary)}@supports (color:color-mix(in lab, red, red)){div.react-flow__handle:hover{background-color:color-mix(in oklab,var(--treege-primary)80%,transparent)}}}path.react-flow__edge-path{stroke:var(--treege-muted-foreground)}.button-edge__label{pointer-events:all;transform-origin:50%;position:absolute}.button-edge__button{border:5px solid var(--xy-minimap-background-color-default);background-color:var(--color-ring);width:30px;height:30px;color:var(--treege-primary);cursor:pointer;border-radius:50%;padding-top:0;font-size:12px}.button-edge__button:hover{background-color:var(--treege-destructive);color:#fff}.w-tc-editor{border-radius:calc(var(--treege-radius) - 2px);border-style:var(--tw-border-style);border-width:1px;border-color:var(--treege-input);background-color:var(--treege-input)}@supports (color:color-mix(in lab, red, red)){.w-tc-editor{background-color:color-mix(in oklab,var(--treege-input)30%,transparent)}}.w-tc-editor:is(.dark *){background-color:var(--treege-input)}@supports (color:color-mix(in lab, red, red)){.w-tc-editor:is(.dark *){background-color:color-mix(in oklab,var(--treege-input)30%,transparent)}}.treege-scrollbar{scrollbar-width:thin;scrollbar-color:var(--color-border)transparent}.treege-scrollbar::-webkit-scrollbar{width:6px;height:6px}.treege-scrollbar::-webkit-scrollbar-track{background:0 0}.treege-scrollbar::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:3px}.treege-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--color-muted-foreground)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}/*$vite$:1*/`,{})})();
2
+ import { jsx as e } from "react/jsx-runtime";
3
+ import { Fragment as t, createContext as n, useCallback as r, useContext as i, useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
4
+ import l from "dompurify";
5
+ //#region src/shared/utils/nodeTypeGuards.ts
6
+ var u = (e) => e?.type === "input", d = (e) => e?.type === "ui", f = (e) => e?.type === "flow", p = (e) => e?.type === "group", m = {
7
+ common: {
8
+ cancel: "إلغاء",
9
+ clear: "مسح",
10
+ close: "إغلاق",
11
+ create: "إنشاء",
12
+ delete: "حذف",
13
+ other: "أخرى",
14
+ retry: "إعادة المحاولة",
15
+ save: "حفظ",
16
+ settings: "الإعدادات",
17
+ submit: "إرسال",
18
+ toggle: "تبديل"
19
+ },
20
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"إضافة عنصر\",\"clear\":\"مسح التدفق\",\"clearSuccess\":\"تم مسح التدفق!\",\"clearSuccessDesc\":\"تم إزالة جميع العقد والحواف.\",\"copyFailed\":\"فشل نسخ معرف التدفق\",\"downloadSuccess\":\"تم التنزيل بنجاح.\",\"downloadSuccessDesc\":\"تم تصدير التدفق بنجاح.\",\"exportJson\":\"تصدير JSON\",\"idCopied\":\"تم نسخ معرف التدفق!\",\"importJson\":\"استيراد JSON\",\"importSuccess\":\"تم الاستيراد بنجاح!\",\"importSuccessDesc\":\"تم استيراد التدفق بنجاح.\",\"invalidJson\":\"ملف JSON غير صالح.\",\"invalidJsonDesc\":\"يجب أن يحتوي الملف على مصفوفات من العقد والحواف.\",\"parseError\":\"خطأ في تحليل ملف JSON.\",\"parseErrorDesc\":\"حاول إصلاح الملف واستيراده مرة أخرى.\"},\"aiGenerator\":{\"aiNotConfigured\":\"الذكاء الاصطناعي غير مُهيأ\",\"aiNotConfiguredDesc\":\"أضف خاصية {code} إلى TreegeEditorProvider\",\"buttonLabel\":\"إنشاء باستخدام الذكاء الاصطناعي\",\"cancel\":\"إلغاء\",\"description\":\"الوصف\",\"descriptionPlaceholder\":\"مثال: إنشاء نموذج اتصال مع الاسم والبريد الإلكتروني ورقم الهاتف والرسالة\",\"enterDescription\":\"الرجاء إدخال وصف\",\"failedToGenerate\":\"فشل في إنشاء الشجرة\",\"generate\":\"إنشاء\",\"generating\":\"جارٍ الإنشاء...\",\"keyboardShortcut\":\"اضغط {cmdEnter} أو {ctrlEnter} للإنشاء\",\"missingApiKey\":\"تكوين الذكاء الاصطناعي مفقود\",\"missingApiKeyDesc\":\"الرجاء تكوين مفتاح API الخاص بالذكاء الاصطناعي في TreegeEditorProvider\",\"successDescription\":\"تم إنشاء {nodes} عقدة و {edges} حافة\",\"successTitle\":\"تم إنشاء الشجرة بنجاح!\",\"title\":\"إنشاء تدفق باستخدام الذكاء الاصطناعي\",\"titleDescription\":\"صف النموذج أو شجرة القرار التي تريد إنشاءها، وسيقوم الذكاء الاصطناعي بإنشائها لك.\",\"unknownError\":\"حدث خطأ غير معروف\"},\"changeNodeTypeDialog\":{\"description\":\"يحتوي هذا العنصر على عدة فروع صادرة. النوع الجديد يدعم فرعاً واحداً فقط. اختر الفرع الذي تريد الاحتفاظ به؛ سيتم حذف الفروع الأخرى.\",\"keepBranch\":\"الاحتفاظ بهذا الفرع\",\"noConditions\":\"لا توجد شروط\",\"title\":\"تغيير نوع العنصر\"},\"comboboxPattern\":{\"custom\":\"مخصص: {value}\",\"search\":\"البحث عن أنماط...\",\"selectOrCreate\":\"اختر أو أنشئ نمطاً\",\"usePattern\":\"استخدم النمط: {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"مسح التحديد\",\"noResults\":\"لم يتم العثور على نتائج\"},\"conditionalEdge\":{\"addCondition\":\"إضافة شرط\",\"and\":\"و\",\"condition\":\"شرط\",\"conditions\":\"الشروط\",\"conditionsAnd\":\"شروط (و)\",\"conditionsMixed\":\"شروط (مختلطة)\",\"conditionsOr\":\"شروط (أو)\",\"defineCondition\":\"تعريف شرط\",\"displayConditions\":\"عرض الشروط\",\"displayConditionsDesc\":\"سيتم عرض هذا الحقل إذا تم استيفاء الشروط التالية.\",\"fallback\":\"افتراضي\",\"fallbackPath\":\"المسار الافتراضي / الاحتياطي\",\"fallbackPathDesc\":\"سيتم اتباع هذا المسار عندما لا تتطابق أي شروط أخرى\",\"field\":\"حقل\",\"labelDesc\":\"تسمية مخصصة لزر الشرط\",\"labelOptional\":\"التسمية (اختياري)\",\"labelPlaceholder\":\"مثال: إذا كان مؤهلاً\",\"noFieldsAvailable\":\"لا توجد حقول متاحة\",\"operator\":\"عامل التشغيل\",\"or\":\"أو\",\"removeCondition\":\"إزالة الشرط\",\"selectField\":\"اختر حقلاً\",\"value\":\"قيمة\",\"valuePlaceholder\":\"مثال: 18\"},\"flowNodeForm\":{\"label\":\"التسمية\",\"targetId\":\"معرف الوجهة\",\"targetIdDesc\":\"المعرف الفريد للتدفق المستهدف.\"},\"groupNodeForm\":{\"label\":\"التسمية\"},\"httpConfigForm\":{\"addHeader\":\"إضافة رأس\",\"apiUrl\":\"رابط API\",\"apiUrlDesc\":\"استخدم متغيرات القالب مثل {{fieldId}} للإشارة إلى الحقول الأخرى\",\"apiUrlPlaceholder\":\"https://api.example.com/data\",\"behavior\":\"السلوك\",\"fetchOnMount\":\"جلب عند التحميل\",\"headerName\":\"اسم الرأس\",\"headers\":\"رؤوس\",\"headerValue\":\"قيمة الرأس\",\"httpMethod\":\"طريقة HTTP\",\"insertVariable\":\"إدراج متغير\",\"labelField\":\"حقل التسمية\",\"labelFieldDesc\":\"الحقل المستخدم كتسمية خيار (مثال: الاسم)\",\"labelFieldPlaceholder\":\"الاسم\",\"mapToOptions\":\"تعيين إلى الخيارات\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"لا توجد حقول متاحة\",\"requestBody\":\"جسم الطلب (JSON)\",\"requestBodyDesc\":\"استخدم {{fieldId}} للإشارة إلى حقول أخرى. تأكد من تنسيق JSON الصحيح بما في ذلك علامات الاقتباس حول القيم النصية.\",\"requestBodyPlaceholder\":\"{\\\"name\\\": \\\"{{userName}}\\\", \\\"age\\\": {{userAge}}}\",\"responseConfiguration\":\"تكوين الاستجابة\",\"responsePath\":\"مسار الاستجابة\",\"responsePathDesc\":\"استخراج البيانات من الاستجابة باستخدام نقطة التدوين أو فهرسة المصفوفة\",\"responsePathPlaceholder\":\"data.users أو results[0]\",\"searchParameter\":\"معامل البحث (اختياري)\",\"searchParameterDesc\":\"إذا تم تعيينه، يتم تمكين مربع بحث يضيف هذا المعامل إلى استدعاءات API (مثال: ?q=باريس)\",\"searchParameterPlaceholder\":\"q، بحث، استعلام...\",\"selectMethod\":\"اختر الطريقة\",\"sendAllFormValues\":\"إرسال جميع بيانات النموذج\",\"sendAllFormValuesDesc\":\"إرسال جميع قيم النموذج تلقائياً كمحتوى JSON\",\"showLoadingState\":\"إظهار حالة التحميل\",\"valueField\":\"حقل القيمة\",\"valueFieldDesc\":\"الحقل المستخدم كقيمة خيار (مثال: id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"أضف حقول إدخال قبل هذه العقدة للإشارة إليها\",\"addMapping\":\"إضافة تعيين\",\"addOption\":\"+ إضافة خيار\",\"advancedConfiguration\":\"تكوين متقدم\",\"defaultChecked\":\"محدد افتراضياً\",\"defaultValuesCommaSeparated\":\"القيم الافتراضية (مفصولة بفواصل)\",\"defaultValuesPlaceholder\":\"قيمة1، قيمة2، قيمة3\",\"defaultValueType\":\"نوع القيمة الافتراضية\",\"defaultValueTypeNone\":\"لا شيء\",\"defaultValueTypeReference\":\"حقل مرجعي\",\"defaultValueTypeStatic\":\"قيمة ثابتة\",\"disablePast\":\"تعطيل التواريخ الماضية\",\"errorMessage\":\"رسالة خطأ\",\"helperText\":\"نص مساعد\",\"httpConfiguration\":\"تكوين HTTP\",\"label\":\"التسمية\",\"multipleFiles\":\"ملفات متعددة\",\"multipleSelection\":\"اختيار متعدد\",\"name\":\"الاسم\",\"nameDescription\":\"اسم حقل مخصص اختياري لتصدير النموذج. إذا كان فارغاً، سيتم استخدام التسمية كمفتاح.\",\"noParentFieldsAvailable\":\"لا توجد حقول أصلية متاحة\",\"objectMapping\":\"تعيين الكائن\",\"objectMappingDesc\":\"تعيين خصائص الكائن المصدر إلى بنية جديدة\",\"optional\":\"اختياري\",\"optionDescription\":\"الوصف\",\"optionImageAdd\":\"إضافة صورة\",\"optionImageError\":\"تعذر معالجة الصورة.\",\"optionImageInvalid\":\"تنسيق صورة غير مدعوم.\",\"optionImageRemove\":\"إزالة الصورة\",\"optionImageReplace\":\"استبدال الصورة\",\"optionImageTooLarge\":\"الصورة كبيرة جدًا (الحد الأقصى 5 ميجابايت).\",\"optionImageUpload\":\"تحميل ملف\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"التسمية\",\"options\":\"خيارات\",\"optionValue\":\"القيمة\",\"pattern\":\"نمط\",\"placeholder\":\"نص توضيحي\",\"referenceField\":\"حقل مرجعي\",\"required\":\"مطلوب\",\"selectReferenceField\":\"اختر حقلاً\",\"selectTransformation\":\"اختر التحويل\",\"selectType\":\"اختر النوع\",\"sourceKey\":\"مفتاح المصدر\",\"staticValue\":\"قيمة ثابتة\",\"staticValuePlaceholder\":\"أدخل القيمة الافتراضية\",\"submitConfiguration\":\"إعداد الإرسال\",\"targetKey\":\"مفتاح الوجهة\",\"transformArray\":\"تحويل إلى مصفوفة\",\"transformBoolean\":\"تحويل إلى منطقي\",\"transformDesc\":\"تحويل القيمة المرجعية لتتطابق مع نوع هذا الحقل\",\"transformMapToObject\":\"تعيين إلى كائن\",\"transformNone\":\"بدون تحويل\",\"transformNumber\":\"تحويل إلى رقم\",\"transformString\":\"تحويل إلى نص\",\"transformType\":\"نوع التحويل\",\"validation\":\"التحقق\",\"variant\":\"متغير\",\"variantCard\":\"بطاقة\",\"variantDefault\":\"افتراضي\"},\"nodeActionsSheet\":{\"deleteNode\":\"حذف العقدة\",\"deleteNodeConfirm\":\"هل أنت متأكد من أنك تريد حذف هذه العقدة؟\",\"deleteNodeSuccess\":\"تم حذف العقدة بنجاح\",\"editNode\":\"تعديل العقدة\"},\"selectInputType\":{\"type\":\"النوع\"},\"selectNodeGroup\":{\"createNewGroup\":\"إنشاء مجموعة جديدة\",\"group\":\"مجموعة\",\"groupAlreadyExists\":\"هذه المجموعة موجودة بالفعل\",\"groupAlreadyExistsDesc\":\"استخدم المحدد لإضافة العقدة إلى مجموعة موجودة.\",\"groupCreated\":\"تم إنشاء المجموعة\",\"groupCreatedDesc\":\"تم إنشاء المجموعة \\\"{groupName}\\\" بنجاح.\",\"groupName\":\"اسم المجموعة\",\"groupNamePlaceholder\":\"مثال: الخطوة 1 - معلومات شخصية\",\"newGroup\":\"مجموعة جديدة\",\"newGroupDescription\":\"سيتم إنشاء المجموعة حول العقدة المحددة.\",\"noGroup\":\"بدون مجموعة\"},\"selectNodeType\":{\"nodeType\":\"نوع العقدة\",\"options\":{\"flow\":\"تدفق خارجي\",\"group\":\"مجموعة\",\"input\":\"سؤال\",\"ui\":\"عنصر تصميم\"}},\"submitConfigForm\":{\"addHeader\":\"إضافة رأس\",\"apiUrl\":\"رابط API\",\"apiUrlDesc\":\"استخدم {{fieldId}} للإشارة إلى حقول أخرى\",\"apiUrlPlaceholder\":\"https://api.example.com/submit\",\"behavior\":\"السلوك\",\"errorMessage\":\"رسالة الخطأ\",\"errorMessageDesc\":\"الرسالة المعروضة عند فشل الإرسال\",\"errorMessagePlaceholder\":\"حدث خطأ. يرجى المحاولة مرة أخرى.\",\"headerName\":\"اسم الرأس\",\"headers\":\"الرؤوس\",\"headerValue\":\"قيمة الرأس\",\"httpMethod\":\"طريقة HTTP\",\"insertVariable\":\"إدراج متغير\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"لا توجد حقول متاحة\",\"postSubmission\":\"بعد الإرسال\",\"redirectUrl\":\"رابط إعادة التوجيه\",\"redirectUrlDesc\":\"الرابط الذي سيتم التوجيه إليه بعد نجاح الإرسال\",\"redirectUrlPlaceholder\":\"/success أو https://example.com/thank-you\",\"requestBody\":\"محتوى الطلب (JSON)\",\"requestBodyDesc\":\"استخدم {{fieldId}} للإشارة إلى حقول أخرى. تأكد من تنسيق JSON الصحيح بما في ذلك علامات الاقتباس حول القيم النصية.\",\"requestBodyPlaceholder\":\"{\\\"name\\\": \\\"{{userName}}\\\", \\\"email\\\": \\\"{{userEmail}}\\\"}\",\"selectMethod\":\"اختر الطريقة\",\"sendAllFormValues\":\"إرسال جميع بيانات النموذج\",\"sendAllFormValuesDesc\":\"إرسال جميع قيم النموذج تلقائياً كمحتوى JSON\",\"showLoadingState\":\"إظهار حالة التحميل\",\"successMessage\":\"رسالة النجاح\",\"successMessageDesc\":\"الرسالة المعروضة عند نجاح الإرسال\",\"successMessagePlaceholder\":\"تم إرسال النموذج بنجاح!\"},\"treegeNode\":{\"labelPlaceholder\":\"تسمية...\"},\"uiNodeForm\":{\"label\":\"التسمية\",\"type\":\"النوع\",\"typeDivider\":\"فاصل\",\"typeTitle\":\"عنوان\"}}"),
21
+ renderer: {
22
+ defaultAddressInput: {
23
+ enterAddress: "أدخل عنواناً...",
24
+ noAddressesFound: "لم يتم العثور على عناوين.",
25
+ searching: "جاري البحث...",
26
+ typeMinChars: "اكتب 3 أحرف على الأقل للبحث"
27
+ },
28
+ defaultAutocompleteInput: {
29
+ noResults: "لم يتم العثور على نتائج.",
30
+ search: "بحث...",
31
+ selectOption: "اختر خياراً"
32
+ },
33
+ defaultHttpInput: {
34
+ fetchFailed: "فشل في جلب البيانات. يرجى التحقق من اتصالك بالشبكة.",
35
+ httpError: "خطأ HTTP {status}: {statusText}",
36
+ noDataAvailable: "لا توجد بيانات متاحة. قم بتكوين \"جلب عند التحميل\" أو أضف معامل بحث.",
37
+ noResults: "لم يتم العثور على نتائج.",
38
+ noUrlConfigured: "لم يتم تكوين رابط. يرجى إضافة عنوان URL في إعدادات HTTP.",
39
+ retry: "إعادة المحاولة",
40
+ search: "بحث...",
41
+ searching: "جاري البحث...",
42
+ selectOption: "اختر خياراً",
43
+ waitingForRequiredFields: "في انتظار الحقول المطلوبة"
44
+ },
45
+ defaultInputs: {
46
+ addMoreFiles: "إضافة المزيد من الملفات",
47
+ endDate: "تاريخ الانتهاء",
48
+ endTime: "وقت الانتهاء",
49
+ filePickerError: "فشل في اختيار الملف",
50
+ filePickerUnavailable: "اختيار الملفات غير متاح. يرجى تثبيت react-native-document-picker.",
51
+ newAnswer: "إجابة جديدة...",
52
+ replaceFile: "استبدال الملف",
53
+ required: "*",
54
+ selectDate: "اختر التاريخ",
55
+ selectDateRange: "اختر نطاق التاريخ",
56
+ selectFile: "اختر ملف",
57
+ selectFiles: "اختر ملفات",
58
+ startDate: "تاريخ البدء",
59
+ startTime: "وقت البدء"
60
+ },
61
+ defaultSelectInput: { selectOption: "اختر خياراً" },
62
+ defaultSubmitButton: {
63
+ requiredFieldsMissing: "حقول مطلوبة مفقودة:",
64
+ submit: "إرسال"
65
+ }
66
+ },
67
+ validation: {
68
+ invalidFormat: "تنسيق غير صالح",
69
+ required: "هذا الحقل مطلوب"
70
+ }
71
+ }, h = {
72
+ common: {
73
+ cancel: "Abbrechen",
74
+ clear: "Löschen",
75
+ close: "Schließen",
76
+ create: "Erstellen",
77
+ delete: "Löschen",
78
+ other: "Sonstige",
79
+ retry: "Erneut versuchen",
80
+ save: "Speichern",
81
+ settings: "Einstellungen",
82
+ submit: "Senden",
83
+ toggle: "Umschalten"
84
+ },
85
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"Element hinzufügen\",\"clear\":\"Löschen\",\"clearSuccess\":\"Fluss geleert!\",\"clearSuccessDesc\":\"Alle Knoten und Kanten wurden entfernt.\",\"copyFailed\":\"Kopieren der Flow‑ID fehlgeschlagen\",\"downloadSuccess\":\"Download erfolgreich.\",\"downloadSuccessDesc\":\"Der Ablauf wurde erfolgreich exportiert.\",\"exportJson\":\"JSON exportieren\",\"idCopied\":\"Flow‑ID kopiert!\",\"importJson\":\"JSON importieren\",\"importSuccess\":\"Import erfolgreich!\",\"importSuccessDesc\":\"Der Ablauf wurde erfolgreich importiert.\",\"invalidJson\":\"Ungültige JSON-Datei.\",\"invalidJsonDesc\":\"Die Datei muss Knoten- und Kanten-Arrays enthalten.\",\"parseError\":\"Fehler beim Parsen der JSON-Datei.\",\"parseErrorDesc\":\"Versuchen Sie, die Datei zu korrigieren und erneut zu importieren.\"},\"aiGenerator\":{\"aiNotConfigured\":\"KI nicht konfiguriert\",\"aiNotConfiguredDesc\":\"Fügen Sie {code} Prop zu TreegeEditorProvider hinzu\",\"buttonLabel\":\"Mit KI generieren\",\"cancel\":\"Abbrechen\",\"description\":\"Beschreibung\",\"descriptionPlaceholder\":\"Beispiel: Erstellen Sie ein Kontaktformular mit Name, E-Mail, Telefonnummer und Nachricht\",\"enterDescription\":\"Bitte geben Sie eine Beschreibung ein\",\"failedToGenerate\":\"Fehler beim Generieren des Baums\",\"generate\":\"Generieren\",\"generating\":\"Wird generiert...\",\"keyboardShortcut\":\"Drücken Sie {cmdEnter} oder {ctrlEnter} zum Generieren\",\"missingApiKey\":\"KI-Konfiguration fehlt\",\"missingApiKeyDesc\":\"Bitte konfigurieren Sie Ihren KI-API-Schlüssel in TreegeEditorProvider\",\"successDescription\":\"{nodes} Knoten und {edges} Kanten erstellt\",\"successTitle\":\"Baum erfolgreich generiert!\",\"title\":\"Flow mit KI generieren\",\"titleDescription\":\"Beschreiben Sie das Formular oder den Entscheidungsbaum, den Sie erstellen möchten, und die KI wird ihn für Sie generieren.\",\"unknownError\":\"Unbekannter Fehler aufgetreten\"},\"changeNodeTypeDialog\":{\"description\":\"Dieser Knoten hat mehrere ausgehende Verzweigungen. Der neue Typ unterstützt nur eine. Wählen Sie, welche Verzweigung beibehalten werden soll; die anderen werden entfernt.\",\"keepBranch\":\"Diese Verzweigung behalten\",\"noConditions\":\"Keine Bedingungen\",\"title\":\"Knotentyp ändern\"},\"comboboxPattern\":{\"custom\":\"Benutzerdefiniert: {value}\",\"search\":\"Muster suchen...\",\"selectOrCreate\":\"Muster auswählen oder erstellen\",\"usePattern\":\"Muster verwenden: {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"Auswahl löschen\",\"noResults\":\"Keine Ergebnisse gefunden\"},\"conditionalEdge\":{\"addCondition\":\"Bedingung hinzufügen\",\"and\":\"UND\",\"condition\":\"Bedingung\",\"conditions\":\"Bedingungen\",\"conditionsAnd\":\"Bedingungen (UND)\",\"conditionsMixed\":\"Bedingungen (gemischt)\",\"conditionsOr\":\"Bedingungen (ODER)\",\"defineCondition\":\"Bedingung definieren\",\"displayConditions\":\"Bedingungen anzeigen\",\"displayConditionsDesc\":\"Dieses Feld wird angezeigt, wenn die folgenden Bedingungen erfüllt sind.\",\"fallback\":\"Standard\",\"fallbackPath\":\"Standard- / Fallback-Pfad\",\"fallbackPathDesc\":\"Dieser Pfad wird befolgt, wenn keine andere Bedingung zutrifft\",\"field\":\"Feld\",\"labelDesc\":\"Benutzerdefinierte Bezeichnung für die Bedingungsschaltfläche\",\"labelOptional\":\"Bezeichnung (optional)\",\"labelPlaceholder\":\"z.B.: Wenn berechtigt\",\"noFieldsAvailable\":\"Keine Felder verfügbar\",\"operator\":\"Operator\",\"or\":\"ODER\",\"removeCondition\":\"Bedingung entfernen\",\"selectField\":\"Feld auswählen\",\"value\":\"Wert\",\"valuePlaceholder\":\"z.B.: 18\"},\"flowNodeForm\":{\"label\":\"Bezeichnung\",\"targetId\":\"Ziel-ID\",\"targetIdDesc\":\"Eindeutige Kennung des Zielablaufs.\"},\"groupNodeForm\":{\"label\":\"Bezeichnung\"},\"httpConfigForm\":{\"addHeader\":\"Header hinzufügen\",\"apiUrl\":\"API-URL\",\"apiUrlDesc\":\"Verwenden Sie Vorlagenvariablen wie {{fieldId}}, um andere Felder zu referenzieren\",\"apiUrlPlaceholder\":\"https://api.beispiel.com/data\",\"behavior\":\"Verhalten\",\"fetchOnMount\":\"Beim Laden abrufen\",\"headerName\":\"Header-Name\",\"headers\":\"Header\",\"headerValue\":\"Header-Wert\",\"httpMethod\":\"HTTP-Methode\",\"insertVariable\":\"Variable einfügen\",\"labelField\":\"Bezeichnungsfeld\",\"labelFieldDesc\":\"Feld, das als Optionsbezeichnung verwendet werden soll (z.B. name)\",\"labelFieldPlaceholder\":\"name\",\"mapToOptions\":\"Auf Optionen abbilden\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Keine Felder verfügbar\",\"requestBody\":\"Anfrage-Body (JSON)\",\"requestBodyDesc\":\"Verwenden Sie {{fieldId}}, um andere Felder zu referenzieren. Stellen Sie sicher, dass die JSON-Formatierung korrekt ist, einschließlich Anführungszeichen um Zeichenkettenwerte.\",\"requestBodyPlaceholder\":\"{\\\"name\\\": \\\"{{benutzername}}\\\", \\\"alter\\\": {{benutzeralter}}}\",\"responseConfiguration\":\"Antwort-Konfiguration\",\"responsePath\":\"Antwortpfad\",\"responsePathDesc\":\"Daten aus der Antwort mit Punktnotation oder Array-Indizierung extrahieren\",\"responsePathPlaceholder\":\"data.users oder results[0]\",\"searchParameter\":\"Suchparameter (optional)\",\"searchParameterDesc\":\"Wenn festgelegt, aktiviert eine Suchbox, die diesen Parameter zu API-Aufrufen hinzufügt (z.B. ?q=Paris)\",\"searchParameterPlaceholder\":\"q, suche, abfrage...\",\"selectMethod\":\"Methode auswählen\",\"sendAllFormValues\":\"Alle Formulardaten senden\",\"sendAllFormValuesDesc\":\"Alle Formularwerte automatisch als JSON-Body senden\",\"showLoadingState\":\"Ladezustand anzeigen\",\"valueField\":\"Wertfeld\",\"valueFieldDesc\":\"Feld, das als Optionswert verwendet werden soll (z.B. id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"Fügen Sie Eingabefelder vor diesem Knoten hinzu, um sie zu referenzieren\",\"addMapping\":\"Zuordnung hinzufügen\",\"addOption\":\"Option hinzufügen\",\"advancedConfiguration\":\"Erweiterte Konfiguration\",\"defaultChecked\":\"Standardmäßig aktiviert\",\"defaultValuesCommaSeparated\":\"Standardwerte (durch Kommas getrennt)\",\"defaultValuesPlaceholder\":\"wert1, wert2, wert3\",\"defaultValueType\":\"Standardwerttyp\",\"defaultValueTypeNone\":\"Keiner\",\"defaultValueTypeReference\":\"Referenzfeld\",\"defaultValueTypeStatic\":\"Statischer Wert\",\"disablePast\":\"Vergangene Daten deaktivieren\",\"errorMessage\":\"Fehlermeldung\",\"helperText\":\"Hilfetext\",\"httpConfiguration\":\"HTTP-Konfiguration\",\"label\":\"Bezeichnung\",\"multipleFiles\":\"Mehrere Dateien\",\"multipleSelection\":\"Mehrfachauswahl\",\"name\":\"Name\",\"nameDescription\":\"Optionaler benutzerdefinierter Feldname für den Formularexport. Falls leer, wird die Bezeichnung als Schlüssel verwendet.\",\"noParentFieldsAvailable\":\"Keine übergeordneten Felder verfügbar\",\"objectMapping\":\"Objektzuordnung\",\"objectMappingDesc\":\"Eigenschaften des Quellobjekts auf eine neue Struktur abbilden\",\"optional\":\"Optional\",\"optionDescription\":\"Beschreibung\",\"optionImageAdd\":\"Bild hinzufügen\",\"optionImageError\":\"Bild konnte nicht verarbeitet werden.\",\"optionImageInvalid\":\"Nicht unterstütztes Bildformat.\",\"optionImageRemove\":\"Bild entfernen\",\"optionImageReplace\":\"Bild ersetzen\",\"optionImageTooLarge\":\"Bild zu groß (max. 5 MB).\",\"optionImageUpload\":\"Datei hochladen\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"Bezeichnung\",\"options\":\"Optionen\",\"optionValue\":\"Wert\",\"pattern\":\"Muster\",\"placeholder\":\"Platzhalter\",\"referenceField\":\"Referenzfeld\",\"required\":\"Erforderlich\",\"selectReferenceField\":\"Feld auswählen\",\"selectTransformation\":\"Transformation auswählen\",\"selectType\":\"Typ auswählen\",\"sourceKey\":\"Quellschlüssel\",\"staticValue\":\"Statischer Wert\",\"staticValuePlaceholder\":\"Standardwert eingeben\",\"submitConfiguration\":\"Übermittlungskonfiguration\",\"targetKey\":\"Zielschlüssel\",\"transformArray\":\"In Array konvertieren\",\"transformBoolean\":\"In Boolean konvertieren\",\"transformDesc\":\"Den referenzierten Wert transformieren, um dem Typ dieses Feldes zu entsprechen\",\"transformMapToObject\":\"Auf Objekt abbilden\",\"transformNone\":\"Keine Transformation\",\"transformNumber\":\"In Zahl konvertieren\",\"transformString\":\"In String konvertieren\",\"transformType\":\"Transformationstyp\",\"validation\":\"Validierung\",\"variant\":\"Variante\",\"variantCard\":\"Karte\",\"variantDefault\":\"Standard\"},\"nodeActionsSheet\":{\"deleteNode\":\"Knoten löschen\",\"deleteNodeConfirm\":\"Sind Sie sicher, dass Sie diesen Knoten löschen möchten?\",\"deleteNodeSuccess\":\"Knoten erfolgreich gelöscht\",\"editNode\":\"Knoten bearbeiten\"},\"selectInputType\":{\"type\":\"Typ\"},\"selectNodeGroup\":{\"createNewGroup\":\"Neue Gruppe erstellen\",\"group\":\"Gruppe\",\"groupAlreadyExists\":\"Diese Gruppe existiert bereits\",\"groupAlreadyExistsDesc\":\"Verwenden Sie den Selektor, um den Knoten zu einer vorhandenen Gruppe hinzuzufügen.\",\"groupCreated\":\"Gruppe erstellt\",\"groupCreatedDesc\":\"Die Gruppe \\\"{groupName}\\\" wurde erfolgreich erstellt.\",\"groupName\":\"Gruppenname\",\"groupNamePlaceholder\":\"z.B.: Schritt 1 - Persönliche Informationen\",\"newGroup\":\"Neue Gruppe\",\"newGroupDescription\":\"Die Gruppe wird um den ausgewählten Knoten herum erstellt.\",\"noGroup\":\"Keine Gruppe\"},\"selectNodeType\":{\"nodeType\":\"Knotentyp\",\"options\":{\"flow\":\"Externer Ablauf\",\"group\":\"Gruppe\",\"input\":\"Frage\",\"ui\":\"Designelement\"}},\"submitConfigForm\":{\"addHeader\":\"Header hinzufügen\",\"apiUrl\":\"API-URL\",\"apiUrlDesc\":\"Verwenden Sie {{fieldId}}, um andere Felder zu referenzieren\",\"apiUrlPlaceholder\":\"https://api.beispiel.de/submit\",\"behavior\":\"Verhalten\",\"errorMessage\":\"Fehlermeldung\",\"errorMessageDesc\":\"Nachricht, die bei fehlgeschlagener Übermittlung angezeigt wird\",\"errorMessagePlaceholder\":\"Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.\",\"headerName\":\"Header-Name\",\"headers\":\"Header\",\"headerValue\":\"Header-Wert\",\"httpMethod\":\"HTTP-Methode\",\"insertVariable\":\"Variable einfügen\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Keine Felder verfügbar\",\"postSubmission\":\"Nach dem Absenden\",\"redirectUrl\":\"Weiterleitungs-URL\",\"redirectUrlDesc\":\"URL, zu der nach erfolgreicher Übermittlung weitergeleitet wird\",\"redirectUrlPlaceholder\":\"/success oder https://beispiel.de/danke\",\"requestBody\":\"Anfragekörper (JSON)\",\"requestBodyDesc\":\"Verwenden Sie {{fieldId}}, um andere Felder zu referenzieren. Stellen Sie sicher, dass die JSON-Formatierung korrekt ist, einschließlich Anführungszeichen um Zeichenkettenwerte.\",\"requestBodyPlaceholder\":\"{\\\"name\\\": \\\"{{benutzername}}\\\", \\\"email\\\": \\\"{{benutzeremail}}\\\"}\",\"selectMethod\":\"Methode auswählen\",\"sendAllFormValues\":\"Alle Formulardaten senden\",\"sendAllFormValuesDesc\":\"Alle Formularwerte automatisch als JSON-Body senden\",\"showLoadingState\":\"Ladezustand anzeigen\",\"successMessage\":\"Erfolgsmeldung\",\"successMessageDesc\":\"Nachricht, die bei erfolgreicher Übermittlung angezeigt wird\",\"successMessagePlaceholder\":\"Formular erfolgreich übermittelt!\"},\"treegeNode\":{\"labelPlaceholder\":\"Bezeichnung...\"},\"uiNodeForm\":{\"label\":\"Bezeichnung\",\"type\":\"Typ\",\"typeDivider\":\"Trennlinie\",\"typeTitle\":\"Titel\"}}"),
86
+ renderer: {
87
+ defaultAddressInput: {
88
+ enterAddress: "Geben Sie eine Adresse ein...",
89
+ noAddressesFound: "Keine Adressen gefunden.",
90
+ searching: "Suche läuft...",
91
+ typeMinChars: "Geben Sie mindestens 3 Zeichen ein, um zu suchen"
92
+ },
93
+ defaultAutocompleteInput: {
94
+ noResults: "Keine Ergebnisse gefunden.",
95
+ search: "Suchen...",
96
+ selectOption: "Option auswählen"
97
+ },
98
+ defaultHttpInput: {
99
+ fetchFailed: "Fehler beim Abrufen der Daten. Bitte überprüfen Sie Ihre Netzwerkverbindung.",
100
+ httpError: "HTTP-Fehler {status}: {statusText}",
101
+ noDataAvailable: "Keine Daten verfügbar. Konfigurieren Sie \"Beim Laden abrufen\" oder fügen Sie einen Suchparameter hinzu.",
102
+ noResults: "Keine Ergebnisse gefunden.",
103
+ noUrlConfigured: "Keine URL konfiguriert. Bitte fügen Sie eine URL in der HTTP-Konfiguration hinzu.",
104
+ retry: "Erneut versuchen",
105
+ search: "Suchen...",
106
+ searching: "Suche läuft...",
107
+ selectOption: "Option auswählen",
108
+ waitingForRequiredFields: "Warten auf erforderliche Felder"
109
+ },
110
+ defaultInputs: {
111
+ addMoreFiles: "Weitere Dateien hinzufügen",
112
+ endDate: "Enddatum",
113
+ endTime: "Endzeit",
114
+ filePickerError: "Fehler beim Auswählen der Datei",
115
+ filePickerUnavailable: "Dateiauswahl nicht verfügbar. Bitte installieren Sie react-native-document-picker.",
116
+ newAnswer: "Neue Antwort...",
117
+ replaceFile: "Datei ersetzen",
118
+ required: "*",
119
+ selectDate: "Datum auswählen",
120
+ selectDateRange: "Datumsbereich auswählen",
121
+ selectFile: "Datei auswählen",
122
+ selectFiles: "Dateien auswählen",
123
+ startDate: "Startdatum",
124
+ startTime: "Startzeit"
125
+ },
126
+ defaultSelectInput: { selectOption: "Option auswählen" },
127
+ defaultSubmitButton: {
128
+ requiredFieldsMissing: "Erforderliche Felder fehlen",
129
+ submit: "Senden"
130
+ }
131
+ },
132
+ validation: {
133
+ invalidFormat: "Ungültiges Format",
134
+ required: "Dieses Feld ist erforderlich"
135
+ }
136
+ }, g = {
137
+ common: {
138
+ cancel: "Cancel",
139
+ clear: "Clear",
140
+ close: "Close",
141
+ create: "Create",
142
+ delete: "Delete",
143
+ other: "Other",
144
+ retry: "Retry",
145
+ save: "Save",
146
+ settings: "Settings",
147
+ submit: "Submit",
148
+ toggle: "Toggle"
149
+ },
150
+ editor: {
151
+ actionsPanel: {
152
+ addNode: "Add Element",
153
+ clear: "Clear",
154
+ clearSuccess: "Flow cleared!",
155
+ clearSuccessDesc: "All nodes and edges have been removed.",
156
+ copyFailed: "Failed to copy Flow ID",
157
+ downloadSuccess: "Download successfully.",
158
+ downloadSuccessDesc: "The flow has been exported successfully.",
159
+ exportJson: "Export JSON",
160
+ idCopied: "Flow ID copied!",
161
+ importJson: "Import JSON",
162
+ importSuccess: "Import successful!",
163
+ importSuccessDesc: "The flow has been imported successfully.",
164
+ invalidJson: "Invalid JSON file.",
165
+ invalidJsonDesc: "The file must contain nodes and edges arrays.",
166
+ parseError: "Error parsing JSON file.",
167
+ parseErrorDesc: "Try to fix the file and import it again."
168
+ },
169
+ aiGenerator: {
170
+ aiNotConfigured: "AI not configured",
171
+ aiNotConfiguredDesc: "Add {code} prop to TreegeEditorProvider",
172
+ buttonLabel: "Generate with AI",
173
+ cancel: "Cancel",
174
+ description: "Description",
175
+ descriptionPlaceholder: "Example: Create a contact form with name, email, phone number, and message fields",
176
+ enterDescription: "Please enter a description",
177
+ failedToGenerate: "Failed to generate tree",
178
+ generate: "Generate",
179
+ generating: "Generating...",
180
+ keyboardShortcut: "Press {cmdEnter} or {ctrlEnter} to generate",
181
+ missingApiKey: "AI configuration missing",
182
+ missingApiKeyDesc: "Please configure your AI API key in TreegeEditorProvider",
183
+ successDescription: "Created {nodes} nodes and {edges} edges",
184
+ successTitle: "Tree generated successfully!",
185
+ title: "Generate Flow with AI",
186
+ titleDescription: "Describe the form or decision tree you want to create, and AI will generate it for you.",
187
+ unknownError: "Unknown error occurred"
188
+ },
189
+ changeNodeTypeDialog: {
190
+ description: "This node has several outgoing branches. The new type only supports one. Choose which branch to keep; the others will be removed.",
191
+ keepBranch: "Keep this branch",
192
+ noConditions: "No conditions",
193
+ title: "Change node type"
194
+ },
195
+ comboboxPattern: {
196
+ custom: "Custom: {value}",
197
+ search: "Search patterns...",
198
+ selectOrCreate: "Select or create a pattern",
199
+ usePattern: "Use pattern: {query}"
200
+ },
201
+ comboboxWithCreate: {
202
+ clearSelection: "Clear selection",
203
+ noResults: "No results found"
204
+ },
205
+ conditionalEdge: {
206
+ addCondition: "Add condition",
207
+ and: "AND",
208
+ condition: "Condition",
209
+ conditions: "Conditions",
210
+ conditionsAnd: "conditions (AND)",
211
+ conditionsMixed: "conditions (mixed)",
212
+ conditionsOr: "conditions (OR)",
213
+ defineCondition: "Define a condition",
214
+ displayConditions: "Display conditions",
215
+ displayConditionsDesc: "This field will be shown if the following conditions are met.",
216
+ fallback: "Fallback",
217
+ fallbackPath: "Fallback / Default path",
218
+ fallbackPathDesc: "This path will be followed when no other conditions match",
219
+ field: "Field",
220
+ labelDesc: "Custom label for the condition button",
221
+ labelOptional: "Label (optional)",
222
+ labelPlaceholder: "Ex: If eligible",
223
+ noFieldsAvailable: "No fields available",
224
+ operator: "Operator",
225
+ or: "OR",
226
+ removeCondition: "Remove condition",
227
+ selectField: "Select a field",
228
+ value: "Value",
229
+ valuePlaceholder: "Ex: 18"
230
+ },
231
+ flowNodeForm: {
232
+ label: "Label",
233
+ targetId: "Target id",
234
+ targetIdDesc: "Unique identifier of the target flow."
235
+ },
236
+ groupNodeForm: { label: "Label" },
237
+ httpConfigForm: {
238
+ addHeader: "Add header",
239
+ apiUrl: "API URL",
240
+ apiUrlDesc: "Use template variables like {{fieldId}} to reference form fields",
241
+ apiUrlPlaceholder: "https://api.example.com/data",
242
+ behavior: "Behavior",
243
+ fetchOnMount: "Fetch on mount",
244
+ headerName: "Header name",
245
+ headers: "Headers",
246
+ headerValue: "Header value",
247
+ httpMethod: "HTTP Method",
248
+ insertVariable: "Insert variable",
249
+ labelField: "Label Field",
250
+ labelFieldDesc: "Field to use as option label (e.g., name)",
251
+ labelFieldPlaceholder: "name",
252
+ mapToOptions: "Map to Options",
253
+ methodDelete: "DELETE",
254
+ methodGet: "GET",
255
+ methodPatch: "PATCH",
256
+ methodPost: "POST",
257
+ methodPut: "PUT",
258
+ noFieldsAvailable: "No fields available",
259
+ requestBody: "Request Body (JSON)",
260
+ requestBodyDesc: "Use {{fieldId}} to reference form fields. Ensure proper JSON formatting including quotes around string values.",
261
+ requestBodyPlaceholder: "{\"name\": \"{{userName}}\", \"age\": {{userAge}}}",
262
+ responseConfiguration: "Response Configuration",
263
+ responsePath: "Response Path",
264
+ responsePathDesc: "Extract data from response using dot notation or array indexing",
265
+ responsePathPlaceholder: "data.users or results[0]",
266
+ searchParameter: "Search Parameter (optional)",
267
+ searchParameterDesc: "If set, enables combobox with search that adds this param to API calls (e.g., ?q=Paris)",
268
+ searchParameterPlaceholder: "q, search, query...",
269
+ selectMethod: "Select method",
270
+ sendAllFormValues: "Send all form data",
271
+ sendAllFormValuesDesc: "Automatically send all form values as JSON body",
272
+ showLoadingState: "Show loading state",
273
+ valueField: "Value Field",
274
+ valueFieldDesc: "Field to use as option value (e.g., id)",
275
+ valueFieldPlaceholder: "id"
276
+ },
277
+ inputNodeForm: {
278
+ addInputFieldsBeforeReference: "Add input fields before this node to reference them",
279
+ addMapping: "Add Mapping",
280
+ addOption: "Add option",
281
+ advancedConfiguration: "Advanced Configuration",
282
+ defaultChecked: "Default Checked",
283
+ defaultValuesCommaSeparated: "Default Values (comma-separated)",
284
+ defaultValuesPlaceholder: "value1, value2, value3",
285
+ defaultValueType: "Default Value Type",
286
+ defaultValueTypeNone: "None",
287
+ defaultValueTypeReference: "Reference Field",
288
+ defaultValueTypeStatic: "Static Value",
289
+ disablePast: "Disable past dates",
290
+ errorMessage: "Error message",
291
+ helperText: "Helper text",
292
+ httpConfiguration: "HTTP Configuration",
293
+ label: "Label",
294
+ multipleFiles: "Multiple files",
295
+ multipleSelection: "Multiple selection",
296
+ name: "Name",
297
+ nameDescription: "Optional custom field name for form export. If empty, the label will be used as the key.",
298
+ noParentFieldsAvailable: "No parent fields available",
299
+ objectMapping: "Object Mapping",
300
+ objectMappingDesc: "Map properties from the source object to a new structure",
301
+ optional: "Optional",
302
+ optionDescription: "Description",
303
+ optionImageAdd: "Add image",
304
+ optionImageError: "Unable to process image.",
305
+ optionImageInvalid: "Unsupported image format.",
306
+ optionImageRemove: "Remove image",
307
+ optionImageReplace: "Replace image",
308
+ optionImageTooLarge: "Image too large (max 5 MB).",
309
+ optionImageUpload: "Upload file",
310
+ optionImageUrlPlaceholder: "https://...",
311
+ optionLabel: "Label",
312
+ options: "Options",
313
+ optionValue: "Value",
314
+ pattern: "Pattern",
315
+ placeholder: "Placeholder",
316
+ referenceField: "Reference Field",
317
+ required: "Required",
318
+ selectReferenceField: "Select a field",
319
+ selectTransformation: "Select transformation",
320
+ selectType: "Select type",
321
+ sourceKey: "Source key",
322
+ staticValue: "Static Value",
323
+ staticValuePlaceholder: "Enter default value",
324
+ submitConfiguration: "Submit Configuration",
325
+ targetKey: "Target key",
326
+ transformArray: "Convert to Array",
327
+ transformBoolean: "Convert to Boolean",
328
+ transformDesc: "Transform the referenced value to match this field's type",
329
+ transformMapToObject: "Map to Object",
330
+ transformNone: "No transformation",
331
+ transformNumber: "Convert to Number",
332
+ transformString: "Convert to String",
333
+ transformType: "Transform Type",
334
+ validation: "Validation",
335
+ variant: "Variant",
336
+ variantCard: "Card",
337
+ variantDefault: "Default"
338
+ },
339
+ nodeActionsSheet: {
340
+ deleteNode: "Delete node",
341
+ deleteNodeConfirm: "Are you sure you want to delete this node?",
342
+ deleteNodeSuccess: "Node deleted successfully",
343
+ editNode: "Edit node"
344
+ },
345
+ selectInputType: { type: "Type" },
346
+ selectNodeGroup: {
347
+ createNewGroup: "Create a new group",
348
+ group: "Group",
349
+ groupAlreadyExists: "This group already exists",
350
+ groupAlreadyExistsDesc: "Use the selector to add the node to an existing group.",
351
+ groupCreated: "Group created",
352
+ groupCreatedDesc: "The group \"{groupName}\" has been created successfully.",
353
+ groupName: "Group name",
354
+ groupNamePlaceholder: "Ex: Step 1 - Personal info",
355
+ newGroup: "New group",
356
+ newGroupDescription: "The group will be created around the selected node.",
357
+ noGroup: "No group"
358
+ },
359
+ selectNodeType: {
360
+ nodeType: "Node Type",
361
+ options: {
362
+ flow: "External Flow",
363
+ group: "Group",
364
+ input: "Question",
365
+ ui: "Design Element"
366
+ }
367
+ },
368
+ submitConfigForm: {
369
+ addHeader: "Add header",
370
+ apiUrl: "API URL",
371
+ apiUrlDesc: "Use {{fieldId}} to reference form fields",
372
+ apiUrlPlaceholder: "https://api.example.com/submit",
373
+ behavior: "Behavior",
374
+ errorMessage: "Error Message",
375
+ errorMessageDesc: "Message displayed when submission fails",
376
+ errorMessagePlaceholder: "An error occurred. Please try again.",
377
+ headerName: "Header name",
378
+ headers: "Headers",
379
+ headerValue: "Header value",
380
+ httpMethod: "HTTP Method",
381
+ insertVariable: "Insert variable",
382
+ methodDelete: "DELETE",
383
+ methodPatch: "PATCH",
384
+ methodPost: "POST",
385
+ methodPut: "PUT",
386
+ noFieldsAvailable: "No fields available",
387
+ postSubmission: "Post Submission",
388
+ redirectUrl: "Redirect URL",
389
+ redirectUrlDesc: "URL to redirect to after successful submission",
390
+ redirectUrlPlaceholder: "/success or https://example.com/thank-you",
391
+ requestBody: "Request Body (JSON)",
392
+ requestBodyDesc: "Use {{fieldId}} to reference form fields. Ensure proper JSON formatting including quotes around string values.",
393
+ requestBodyPlaceholder: "{\"name\": \"{{userName}}\", \"email\": \"{{userEmail}}\"}",
394
+ selectMethod: "Select method",
395
+ sendAllFormValues: "Send all form data",
396
+ sendAllFormValuesDesc: "Automatically send all form values as JSON body",
397
+ showLoadingState: "Show loading state",
398
+ successMessage: "Success Message",
399
+ successMessageDesc: "Message displayed when submission succeeds",
400
+ successMessagePlaceholder: "Form submitted successfully!"
401
+ },
402
+ treegeNode: { labelPlaceholder: "Label..." },
403
+ uiNodeForm: {
404
+ label: "Label",
405
+ type: "Type",
406
+ typeDivider: "Divider",
407
+ typeTitle: "Title"
408
+ }
409
+ },
410
+ renderer: {
411
+ defaultAddressInput: {
412
+ enterAddress: "Enter an address...",
413
+ noAddressesFound: "No addresses found.",
414
+ searching: "Searching...",
415
+ typeMinChars: "Type at least 3 characters to search"
416
+ },
417
+ defaultAutocompleteInput: {
418
+ noResults: "No results found.",
419
+ search: "Search...",
420
+ selectOption: "Select an option"
421
+ },
422
+ defaultHttpInput: {
423
+ fetchFailed: "Failed to fetch data. Please check your network connection.",
424
+ httpError: "HTTP Error {status}: {statusText}",
425
+ noDataAvailable: "No data available. Configure \"Fetch on mount\" or add a search parameter.",
426
+ noResults: "No results found.",
427
+ noUrlConfigured: "No URL configured. Please add a URL in the HTTP configuration.",
428
+ retry: "Retry",
429
+ search: "Search...",
430
+ searching: "Search...",
431
+ selectOption: "Select an option",
432
+ waitingForRequiredFields: "Waiting for required fields"
433
+ },
434
+ defaultInputs: {
435
+ addMoreFiles: "Add more files",
436
+ endDate: "End date",
437
+ endTime: "End time",
438
+ filePickerError: "Failed to select file",
439
+ filePickerUnavailable: "File selection unavailable. Please install react-native-document-picker.",
440
+ newAnswer: "New answer...",
441
+ replaceFile: "Replace file",
442
+ required: "*",
443
+ selectDate: "Select date",
444
+ selectDateRange: "Select date range",
445
+ selectFile: "Select file",
446
+ selectFiles: "Select files",
447
+ startDate: "Start date",
448
+ startTime: "Start time"
449
+ },
450
+ defaultSelectInput: { selectOption: "Select an option" },
451
+ defaultSubmitButton: {
452
+ requiredFieldsMissing: "Required fields missing",
453
+ submit: "Submit"
454
+ }
455
+ },
456
+ validation: {
457
+ invalidFormat: "Invalid format",
458
+ required: "This field is required"
459
+ }
460
+ }, _ = {
461
+ common: {
462
+ cancel: "Cancelar",
463
+ clear: "Limpiar",
464
+ close: "Cerrar",
465
+ create: "Crear",
466
+ delete: "Eliminar",
467
+ other: "Otro",
468
+ retry: "Reintentar",
469
+ save: "Guardar",
470
+ settings: "Configuración",
471
+ submit: "Enviar",
472
+ toggle: "Alternar"
473
+ },
474
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"Agregar elemento\",\"clear\":\"Limpiar\",\"clearSuccess\":\"¡Flujo limpiado!\",\"clearSuccessDesc\":\"Todos los nodos y aristas han sido eliminados.\",\"copyFailed\":\"No se pudo copiar el ID del flujo\",\"downloadSuccess\":\"Descarga exitosa.\",\"downloadSuccessDesc\":\"El flujo se ha exportado correctamente.\",\"exportJson\":\"Exportar JSON\",\"idCopied\":\"ID del flujo copiado!\",\"importJson\":\"Importar JSON\",\"importSuccess\":\"¡Importación exitosa!\",\"importSuccessDesc\":\"El flujo se ha importado correctamente.\",\"invalidJson\":\"Archivo JSON inválido.\",\"invalidJsonDesc\":\"El archivo debe contener matrices de nodos y aristas.\",\"parseError\":\"Error al analizar el archivo JSON.\",\"parseErrorDesc\":\"Intenta corregir el archivo e importarlo nuevamente.\"},\"aiGenerator\":{\"aiNotConfigured\":\"IA no configurada\",\"aiNotConfiguredDesc\":\"Agregue la prop {code} a TreegeEditorProvider\",\"buttonLabel\":\"Generar con IA\",\"cancel\":\"Cancelar\",\"description\":\"Descripción\",\"descriptionPlaceholder\":\"Ejemplo: Crear un formulario de contacto con nombre, correo electrónico, teléfono y mensaje\",\"enterDescription\":\"Por favor ingrese una descripción\",\"failedToGenerate\":\"Error al generar el árbol\",\"generate\":\"Generar\",\"generating\":\"Generando...\",\"keyboardShortcut\":\"Presione {cmdEnter} o {ctrlEnter} para generar\",\"missingApiKey\":\"Falta configuración de IA\",\"missingApiKeyDesc\":\"Por favor configure su clave API de IA en TreegeEditorProvider\",\"successDescription\":\"{nodes} nodos y {edges} aristas creados\",\"successTitle\":\"¡Árbol generado exitosamente!\",\"title\":\"Generar flujo con IA\",\"titleDescription\":\"Describa el formulario o árbol de decisión que desea crear, y la IA lo generará por usted.\",\"unknownError\":\"Error desconocido\"},\"changeNodeTypeDialog\":{\"description\":\"Este nodo tiene varias ramas salientes. El nuevo tipo solo admite una. Elige qué rama conservar; las demás serán eliminadas.\",\"keepBranch\":\"Conservar esta rama\",\"noConditions\":\"Sin condiciones\",\"title\":\"Cambiar tipo de nodo\"},\"comboboxPattern\":{\"custom\":\"Personalizado: {value}\",\"search\":\"Buscar patrones...\",\"selectOrCreate\":\"Seleccionar o crear un patrón\",\"usePattern\":\"Usar patrón: {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"Limpiar selección\",\"noResults\":\"No se encontraron resultados\"},\"conditionalEdge\":{\"addCondition\":\"Agregar condición\",\"and\":\"Y\",\"condition\":\"Condición\",\"conditions\":\"Condiciones\",\"conditionsAnd\":\"condiciones (Y)\",\"conditionsMixed\":\"condiciones (mixtas)\",\"conditionsOr\":\"condiciones (O)\",\"defineCondition\":\"Definir una condición\",\"displayConditions\":\"Mostrar condiciones\",\"displayConditionsDesc\":\"Este campo se mostrará si se cumplen las siguientes condiciones.\",\"fallback\":\"Predeterminado\",\"fallbackPath\":\"Ruta predeterminada / de respaldo\",\"fallbackPathDesc\":\"Esta ruta se seguirá cuando ninguna otra condición coincida\",\"field\":\"Campo\",\"labelDesc\":\"Etiqueta personalizada para el botón de condición\",\"labelOptional\":\"Etiqueta (opcional)\",\"labelPlaceholder\":\"Ej: Si es elegible\",\"noFieldsAvailable\":\"No hay campos disponibles\",\"operator\":\"Operador\",\"or\":\"O\",\"removeCondition\":\"Eliminar condición\",\"selectField\":\"Seleccionar un campo\",\"value\":\"Valor\",\"valuePlaceholder\":\"Ej: 18\"},\"flowNodeForm\":{\"label\":\"Etiqueta\",\"targetId\":\"ID de destino\",\"targetIdDesc\":\"Identificador único del flujo de destino.\"},\"groupNodeForm\":{\"label\":\"Etiqueta\"},\"httpConfigForm\":{\"addHeader\":\"Agregar encabezado\",\"apiUrl\":\"URL de la API\",\"apiUrlDesc\":\"Use variables de plantilla como {{fieldId}} para referenciar otros campos\",\"apiUrlPlaceholder\":\"https://api.ejemplo.com/data\",\"behavior\":\"Comportamiento\",\"fetchOnMount\":\"Cargar al montar\",\"headerName\":\"Nombre del encabezado\",\"headers\":\"Encabezados\",\"headerValue\":\"Valor del encabezado\",\"httpMethod\":\"Método HTTP\",\"insertVariable\":\"Insertar variable\",\"labelField\":\"Campo de etiqueta\",\"labelFieldDesc\":\"Campo a usar como etiqueta de opción (ej: nombre)\",\"labelFieldPlaceholder\":\"nombre\",\"mapToOptions\":\"Mapear a opciones\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"No hay campos disponibles\",\"requestBody\":\"Cuerpo de la solicitud (JSON)\",\"requestBodyDesc\":\"Use {{fieldId}} para referenciar otros campos. Asegúrese de un formato JSON adecuado, incluyendo comillas alrededor de los valores de cadena.\",\"requestBodyPlaceholder\":\"{\\\"nombre\\\": \\\"{{nombreUsuario}}\\\", \\\"edad\\\": {{edadUsuario}}}\",\"responseConfiguration\":\"Configuración de respuesta\",\"responsePath\":\"Ruta de respuesta\",\"responsePathDesc\":\"Extraer datos de la respuesta usando notación de puntos o indexación de matriz\",\"responsePathPlaceholder\":\"data.users o results[0]\",\"searchParameter\":\"Parámetro de búsqueda (opcional)\",\"searchParameterDesc\":\"Si se configura, habilita un cuadro de búsqueda que agrega este parámetro a las llamadas API (ej: ?q=París)\",\"searchParameterPlaceholder\":\"q, buscar, consulta...\",\"selectMethod\":\"Seleccionar método\",\"sendAllFormValues\":\"Enviar todos los datos del formulario\",\"sendAllFormValuesDesc\":\"Enviar automáticamente todos los valores del formulario como cuerpo JSON\",\"showLoadingState\":\"Mostrar estado de carga\",\"valueField\":\"Campo de valor\",\"valueFieldDesc\":\"Campo a usar como valor de opción (ej: id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"Agregue campos de entrada antes de este nodo para referenciarlos\",\"addMapping\":\"Agregar mapeo\",\"addOption\":\"Agregar opción\",\"advancedConfiguration\":\"Configuración avanzada\",\"defaultChecked\":\"Marcado por defecto\",\"defaultValuesCommaSeparated\":\"Valores predeterminados (separados por comas)\",\"defaultValuesPlaceholder\":\"valor1, valor2, valor3\",\"defaultValueType\":\"Tipo de valor predeterminado\",\"defaultValueTypeNone\":\"Ninguno\",\"defaultValueTypeReference\":\"Campo de referencia\",\"defaultValueTypeStatic\":\"Valor estático\",\"disablePast\":\"Desactivar fechas pasadas\",\"errorMessage\":\"Mensaje de error\",\"helperText\":\"Texto de ayuda\",\"httpConfiguration\":\"Configuración HTTP\",\"label\":\"Etiqueta\",\"multipleFiles\":\"Archivos múltiples\",\"multipleSelection\":\"Selección múltiple\",\"name\":\"Nombre\",\"nameDescription\":\"Nombre de campo personalizado opcional para la exportación del formulario. Si está vacío, la etiqueta se usará como clave.\",\"noParentFieldsAvailable\":\"No hay campos principales disponibles\",\"objectMapping\":\"Mapeo de objetos\",\"objectMappingDesc\":\"Mapear las propiedades del objeto de origen a una nueva estructura\",\"optional\":\"Opcional\",\"optionDescription\":\"Descripción\",\"optionImageAdd\":\"Agregar imagen\",\"optionImageError\":\"No se pudo procesar la imagen.\",\"optionImageInvalid\":\"Formato de imagen no compatible.\",\"optionImageRemove\":\"Quitar imagen\",\"optionImageReplace\":\"Reemplazar imagen\",\"optionImageTooLarge\":\"Imagen demasiado grande (máx. 5 MB).\",\"optionImageUpload\":\"Subir archivo\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"Etiqueta\",\"options\":\"Opciones\",\"optionValue\":\"Valor\",\"pattern\":\"Patrón\",\"placeholder\":\"Marcador de posición\",\"referenceField\":\"Campo de referencia\",\"required\":\"Obligatorio\",\"selectReferenceField\":\"Seleccionar un campo\",\"selectTransformation\":\"Seleccionar transformación\",\"selectType\":\"Seleccionar tipo\",\"sourceKey\":\"Clave de origen\",\"staticValue\":\"Valor estático\",\"staticValuePlaceholder\":\"Ingrese el valor predeterminado\",\"submitConfiguration\":\"Configuración de envío\",\"targetKey\":\"Clave de destino\",\"transformArray\":\"Convertir a matriz\",\"transformBoolean\":\"Convertir a booleano\",\"transformDesc\":\"Transformar el valor referenciado para que coincida con el tipo de este campo\",\"transformMapToObject\":\"Mapear a objeto\",\"transformNone\":\"Sin transformación\",\"transformNumber\":\"Convertir a número\",\"transformString\":\"Convertir a texto\",\"transformType\":\"Tipo de transformación\",\"validation\":\"Validación\",\"variant\":\"Variante\",\"variantCard\":\"Tarjeta\",\"variantDefault\":\"Predeterminado\"},\"nodeActionsSheet\":{\"deleteNode\":\"Eliminar nodo\",\"deleteNodeConfirm\":\"¿Estás seguro de que quieres eliminar este nodo?\",\"deleteNodeSuccess\":\"Nodo eliminado exitosamente\",\"editNode\":\"Editar nodo\"},\"selectInputType\":{\"type\":\"Tipo\"},\"selectNodeGroup\":{\"createNewGroup\":\"Crear un nuevo grupo\",\"group\":\"Grupo\",\"groupAlreadyExists\":\"Este grupo ya existe\",\"groupAlreadyExistsDesc\":\"Use el selector para agregar el nodo a un grupo existente.\",\"groupCreated\":\"Grupo creado\",\"groupCreatedDesc\":\"El grupo \\\"{groupName}\\\" se ha creado correctamente.\",\"groupName\":\"Nombre del grupo\",\"groupNamePlaceholder\":\"Ej: Paso 1 - Información personal\",\"newGroup\":\"Nuevo grupo\",\"newGroupDescription\":\"El grupo se creará alrededor del nodo seleccionado.\",\"noGroup\":\"Sin grupo\"},\"selectNodeType\":{\"nodeType\":\"Tipo de nodo\",\"options\":{\"flow\":\"Flujo externo\",\"group\":\"Grupo\",\"input\":\"Pregunta\",\"ui\":\"Elemento de diseño\"}},\"submitConfigForm\":{\"addHeader\":\"Agregar encabezado\",\"apiUrl\":\"URL de la API\",\"apiUrlDesc\":\"Use {{fieldId}} para referenciar otros campos\",\"apiUrlPlaceholder\":\"https://api.ejemplo.com/submit\",\"behavior\":\"Comportamiento\",\"errorMessage\":\"Mensaje de error\",\"errorMessageDesc\":\"Mensaje mostrado cuando falla el envío\",\"errorMessagePlaceholder\":\"Ocurrió un error. Por favor, intente nuevamente.\",\"headerName\":\"Nombre del encabezado\",\"headers\":\"Encabezados\",\"headerValue\":\"Valor del encabezado\",\"httpMethod\":\"Método HTTP\",\"insertVariable\":\"Insertar variable\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"No hay campos disponibles\",\"postSubmission\":\"Después del envío\",\"redirectUrl\":\"URL de redirección\",\"redirectUrlDesc\":\"URL a la que redirigir después de un envío exitoso\",\"redirectUrlPlaceholder\":\"/success o https://ejemplo.com/gracias\",\"requestBody\":\"Cuerpo de la solicitud (JSON)\",\"requestBodyDesc\":\"Use {{fieldId}} para referenciar otros campos. Asegúrese de un formato JSON adecuado, incluyendo comillas alrededor de los valores de cadena.\",\"requestBodyPlaceholder\":\"{\\\"nombre\\\": \\\"{{nombreUsuario}}\\\", \\\"email\\\": \\\"{{emailUsuario}}\\\"}\",\"selectMethod\":\"Seleccionar método\",\"sendAllFormValues\":\"Enviar todos los datos del formulario\",\"sendAllFormValuesDesc\":\"Enviar automáticamente todos los valores del formulario como cuerpo JSON\",\"showLoadingState\":\"Mostrar estado de carga\",\"successMessage\":\"Mensaje de éxito\",\"successMessageDesc\":\"Mensaje mostrado cuando el envío es exitoso\",\"successMessagePlaceholder\":\"¡Formulario enviado exitosamente!\"},\"treegeNode\":{\"labelPlaceholder\":\"Etiqueta...\"},\"uiNodeForm\":{\"label\":\"Etiqueta\",\"type\":\"Tipo\",\"typeDivider\":\"Divisor\",\"typeTitle\":\"Título\"}}"),
475
+ renderer: {
476
+ defaultAddressInput: {
477
+ enterAddress: "Ingrese una dirección...",
478
+ noAddressesFound: "No se encontraron direcciones.",
479
+ searching: "Buscando...",
480
+ typeMinChars: "Escribe al menos 3 caracteres para buscar"
481
+ },
482
+ defaultAutocompleteInput: {
483
+ noResults: "No se encontraron resultados.",
484
+ search: "Buscar...",
485
+ selectOption: "Seleccionar una opción"
486
+ },
487
+ defaultHttpInput: {
488
+ fetchFailed: "Error al obtener los datos. Por favor, verifique su conexión de red.",
489
+ httpError: "Error HTTP {status}: {statusText}",
490
+ noDataAvailable: "No hay datos disponibles. Configure \"Cargar al montar\" o agregue un parámetro de búsqueda.",
491
+ noResults: "No se encontraron resultados.",
492
+ noUrlConfigured: "No hay URL configurada. Por favor, agregue una URL en la configuración HTTP.",
493
+ retry: "Reintentar",
494
+ search: "Buscar...",
495
+ searching: "Buscando...",
496
+ selectOption: "Seleccionar una opción",
497
+ waitingForRequiredFields: "Esperando campos requeridos"
498
+ },
499
+ defaultInputs: {
500
+ addMoreFiles: "Agregar más archivos",
501
+ endDate: "Fecha de fin",
502
+ endTime: "Hora de fin",
503
+ filePickerError: "Error al seleccionar archivo",
504
+ filePickerUnavailable: "Selección de archivos no disponible. Instale react-native-document-picker.",
505
+ newAnswer: "Nueva respuesta...",
506
+ replaceFile: "Reemplazar archivo",
507
+ required: "*",
508
+ selectDate: "Seleccionar fecha",
509
+ selectDateRange: "Seleccionar rango de fechas",
510
+ selectFile: "Seleccionar archivo",
511
+ selectFiles: "Seleccionar archivos",
512
+ startDate: "Fecha de inicio",
513
+ startTime: "Hora de inicio"
514
+ },
515
+ defaultSelectInput: { selectOption: "Seleccionar una opción" },
516
+ defaultSubmitButton: {
517
+ requiredFieldsMissing: "Faltan campos obligatorios",
518
+ submit: "Enviar"
519
+ }
520
+ },
521
+ validation: {
522
+ invalidFormat: "Formato inválido",
523
+ required: "Este campo es obligatorio"
524
+ }
525
+ }, v = {
526
+ common: {
527
+ cancel: "Annuler",
528
+ clear: "Effacer",
529
+ close: "Fermer",
530
+ create: "Créer",
531
+ delete: "Supprimer",
532
+ other: "Autre",
533
+ retry: "Réessayer",
534
+ save: "Enregistrer",
535
+ settings: "Paramètres",
536
+ submit: "Soumettre",
537
+ toggle: "Basculer"
538
+ },
539
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"Ajouter un élément\",\"clear\":\"Supprimer\",\"clearSuccess\":\"Flux vidé !\",\"clearSuccessDesc\":\"Tous les nœuds et arêtes ont été supprimés.\",\"copyFailed\":\"Échec de la copie de l'ID du flux\",\"downloadSuccess\":\"Téléchargement réussi.\",\"downloadSuccessDesc\":\"Le flux a été exporté avec succès.\",\"exportJson\":\"Exporter JSON\",\"idCopied\":\"ID du flux copié !\",\"importJson\":\"Importer JSON\",\"importSuccess\":\"Importation réussie !\",\"importSuccessDesc\":\"Le flux a été importé avec succès.\",\"invalidJson\":\"Fichier JSON invalide.\",\"invalidJsonDesc\":\"Le fichier doit contenir des tableaux de nœuds et d'arêtes.\",\"parseError\":\"Erreur d'analyse du fichier JSON.\",\"parseErrorDesc\":\"Essayez de corriger le fichier et de l'importer à nouveau.\"},\"aiGenerator\":{\"aiNotConfigured\":\"IA non configurée\",\"aiNotConfiguredDesc\":\"Ajoutez la prop {code} à TreegeEditorProvider\",\"buttonLabel\":\"Générer avec l'IA\",\"cancel\":\"Annuler\",\"description\":\"Description\",\"descriptionPlaceholder\":\"Exemple : Créer un formulaire de contact avec nom, email, téléphone et message\",\"enterDescription\":\"Veuillez entrer une description\",\"failedToGenerate\":\"Échec de la génération de l'arbre\",\"generate\":\"Générer\",\"generating\":\"Génération...\",\"keyboardShortcut\":\"Appuyez sur {cmdEnter} ou {ctrlEnter} pour générer\",\"missingApiKey\":\"Configuration IA manquante\",\"missingApiKeyDesc\":\"Veuillez configurer votre clé API IA dans TreegeEditorProvider\",\"successDescription\":\"{nodes} nœuds et {edges} arêtes créés\",\"successTitle\":\"Arbre généré avec succès !\",\"title\":\"Générer un flux avec l'IA\",\"titleDescription\":\"Décrivez le formulaire ou l'arbre de décision que vous souhaitez créer, et l'IA le générera pour vous.\",\"unknownError\":\"Erreur inconnue\"},\"changeNodeTypeDialog\":{\"description\":\"Ce nœud possède plusieurs branches sortantes. Le nouveau type n'en supporte qu'une seule. Choisissez la branche à conserver ; les autres seront supprimées.\",\"keepBranch\":\"Conserver cette branche\",\"noConditions\":\"Aucune condition\",\"title\":\"Changer le type de nœud\"},\"comboboxPattern\":{\"custom\":\"Personnalisé : {value}\",\"search\":\"Rechercher des motifs...\",\"selectOrCreate\":\"Sélectionner ou créer un motif\",\"usePattern\":\"Utiliser le motif : {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"Effacer la sélection\",\"noResults\":\"Aucun résultat trouvé\"},\"conditionalEdge\":{\"addCondition\":\"Ajouter une condition\",\"and\":\"ET\",\"condition\":\"Condition\",\"conditions\":\"Conditions\",\"conditionsAnd\":\"conditions (ET)\",\"conditionsMixed\":\"conditions (mixtes)\",\"conditionsOr\":\"conditions (OU)\",\"defineCondition\":\"Définir une condition\",\"displayConditions\":\"Afficher les conditions\",\"displayConditionsDesc\":\"Ce champ sera affiché si les conditions suivantes sont remplies.\",\"fallback\":\"Par défaut\",\"fallbackPath\":\"Chemin par défaut / de secours\",\"fallbackPathDesc\":\"Ce chemin sera suivi lorsqu'aucune autre condition ne correspond\",\"field\":\"Champ\",\"labelDesc\":\"Libellé personnalisé pour le bouton de condition\",\"labelOptional\":\"Libellé (optionnel)\",\"labelPlaceholder\":\"Ex : Si éligible\",\"noFieldsAvailable\":\"Aucun champ disponible\",\"operator\":\"Opérateur\",\"or\":\"OU\",\"removeCondition\":\"Supprimer la condition\",\"selectField\":\"Sélectionner un champ\",\"value\":\"Valeur\",\"valuePlaceholder\":\"Ex : 18\"},\"flowNodeForm\":{\"label\":\"Libellé\",\"targetId\":\"ID cible\",\"targetIdDesc\":\"Identifiant unique du flux cible.\"},\"groupNodeForm\":{\"label\":\"Libellé\"},\"httpConfigForm\":{\"addHeader\":\"Ajouter un en-tête\",\"apiUrl\":\"URL de l'API\",\"apiUrlDesc\":\"Utilisez des variables de modèle comme {{fieldId}} pour référencer d'autres champs\",\"apiUrlPlaceholder\":\"https://api.exemple.com/data\",\"behavior\":\"Comportement\",\"fetchOnMount\":\"Charger au montage\",\"headerName\":\"Nom de l'en-tête\",\"headers\":\"En-têtes\",\"headerValue\":\"Valeur de l'en-tête\",\"httpMethod\":\"Méthode HTTP\",\"insertVariable\":\"Insérer une variable\",\"labelField\":\"Champ de libellé\",\"labelFieldDesc\":\"Champ à utiliser comme libellé d'option (ex : nom)\",\"labelFieldPlaceholder\":\"nom\",\"mapToOptions\":\"Mapper vers les options\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Aucun champ disponible\",\"requestBody\":\"Corps de la requête (JSON)\",\"requestBodyDesc\":\"Utilisez {{fieldId}} pour référencer d'autres champs. Assurez-vous d'un formatage JSON approprié, incluant les guillemets autour des valeurs de chaîne.\",\"requestBodyPlaceholder\":\"{\\\"nom\\\": \\\"{{nomUtilisateur}}\\\", \\\"age\\\": {{ageUtilisateur}}}\",\"responseConfiguration\":\"Configuration de la réponse\",\"responsePath\":\"Chemin de la réponse\",\"responsePathDesc\":\"Extraire les données de la réponse en utilisant la notation par points ou l'indexation de tableau\",\"responsePathPlaceholder\":\"data.users ou results[0]\",\"searchParameter\":\"Paramètre de recherche (optionnel)\",\"searchParameterDesc\":\"Si défini, active une zone de recherche qui ajoute ce paramètre aux appels API (ex : ?q=Paris)\",\"searchParameterPlaceholder\":\"q, recherche, requête...\",\"selectMethod\":\"Sélectionner une méthode\",\"sendAllFormValues\":\"Envoyer toutes les données du formulaire\",\"sendAllFormValuesDesc\":\"Envoyer automatiquement toutes les valeurs du formulaire en tant que corps JSON\",\"showLoadingState\":\"Afficher l'état de chargement\",\"valueField\":\"Champ de valeur\",\"valueFieldDesc\":\"Champ à utiliser comme valeur d'option (ex : id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"Ajoutez des champs de saisie avant ce nœud pour les référencer\",\"addMapping\":\"Ajouter un mappage\",\"addOption\":\"Ajouter une option\",\"advancedConfiguration\":\"Configuration avancée\",\"defaultChecked\":\"Coché par défaut\",\"defaultValuesCommaSeparated\":\"Valeurs par défaut (séparées par des virgules)\",\"defaultValuesPlaceholder\":\"valeur1, valeur2, valeur3\",\"defaultValueType\":\"Type de valeur par défaut\",\"defaultValueTypeNone\":\"Aucun\",\"defaultValueTypeReference\":\"Champ de référence\",\"defaultValueTypeStatic\":\"Valeur statique\",\"disablePast\":\"Désactiver les dates passées\",\"errorMessage\":\"Message d'erreur\",\"helperText\":\"Texte d'aide\",\"httpConfiguration\":\"Configuration HTTP\",\"label\":\"Libellé\",\"multipleFiles\":\"Fichiers multiples\",\"multipleSelection\":\"Sélection multiple\",\"name\":\"Nom\",\"nameDescription\":\"Nom de champ personnalisé optionnel pour l'export du formulaire. Si vide, le libellé sera utilisé comme clé.\",\"noParentFieldsAvailable\":\"Aucun champ parent disponible\",\"objectMapping\":\"Mappage d'objet\",\"objectMappingDesc\":\"Mapper les propriétés de l'objet source vers une nouvelle structure\",\"optional\":\"Optionnel\",\"optionDescription\":\"Description\",\"optionImageAdd\":\"Ajouter une image\",\"optionImageError\":\"Impossible de traiter l'image.\",\"optionImageInvalid\":\"Format d'image non pris en charge.\",\"optionImageRemove\":\"Retirer l'image\",\"optionImageReplace\":\"Remplacer l'image\",\"optionImageTooLarge\":\"Image trop volumineuse (max 5 Mo).\",\"optionImageUpload\":\"Importer un fichier\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"Libellé\",\"options\":\"Options\",\"optionValue\":\"Valeur\",\"pattern\":\"Motif\",\"placeholder\":\"Texte indicatif\",\"referenceField\":\"Champ de référence\",\"required\":\"Requis\",\"selectReferenceField\":\"Sélectionner un champ\",\"selectTransformation\":\"Sélectionner une transformation\",\"selectType\":\"Sélectionner un type\",\"sourceKey\":\"Clé source\",\"staticValue\":\"Valeur statique\",\"staticValuePlaceholder\":\"Entrer une valeur par défaut\",\"submitConfiguration\":\"Configuration de soumission\",\"targetKey\":\"Clé cible\",\"transformArray\":\"Convertir en tableau\",\"transformBoolean\":\"Convertir en booléen\",\"transformDesc\":\"Transformer la valeur référencée pour correspondre au type de ce champ\",\"transformMapToObject\":\"Mapper vers un objet\",\"transformNone\":\"Aucune transformation\",\"transformNumber\":\"Convertir en nombre\",\"transformString\":\"Convertir en chaîne\",\"transformType\":\"Type de transformation\",\"validation\":\"Validation\",\"variant\":\"Variante\",\"variantCard\":\"Carte\",\"variantDefault\":\"Par défaut\"},\"nodeActionsSheet\":{\"deleteNode\":\"Supprimer le nœud\",\"deleteNodeConfirm\":\"Êtes-vous sûr de vouloir supprimer ce nœud ?\",\"deleteNodeSuccess\":\"Nœud supprimé avec succès\",\"editNode\":\"Modifier le nœud\"},\"selectInputType\":{\"type\":\"Type\"},\"selectNodeGroup\":{\"createNewGroup\":\"Créer un nouveau groupe\",\"group\":\"Groupe\",\"groupAlreadyExists\":\"Ce groupe existe déjà\",\"groupAlreadyExistsDesc\":\"Utilisez le sélecteur pour ajouter le nœud à un groupe existant.\",\"groupCreated\":\"Groupe créé\",\"groupCreatedDesc\":\"Le groupe \\\"{groupName}\\\" a été créé avec succès.\",\"groupName\":\"Nom du groupe\",\"groupNamePlaceholder\":\"Ex : Étape 1 - Informations personnelles\",\"newGroup\":\"Nouveau groupe\",\"newGroupDescription\":\"Le groupe sera créé autour du nœud sélectionné.\",\"noGroup\":\"Aucun groupe\"},\"selectNodeType\":{\"nodeType\":\"Type de nœud\",\"options\":{\"flow\":\"Flux externe\",\"group\":\"Groupe\",\"input\":\"Question\",\"ui\":\"Élément de design\"}},\"submitConfigForm\":{\"addHeader\":\"Ajouter un en-tête\",\"apiUrl\":\"URL de l'API\",\"apiUrlDesc\":\"Utilisez {{fieldId}} pour référencer d'autres champs\",\"apiUrlPlaceholder\":\"https://api.exemple.com/submit\",\"behavior\":\"Comportement\",\"errorMessage\":\"Message d'erreur\",\"errorMessageDesc\":\"Message affiché en cas d'échec de la soumission\",\"errorMessagePlaceholder\":\"Une erreur s'est produite. Veuillez réessayer.\",\"headerName\":\"Nom de l'en-tête\",\"headers\":\"En-têtes\",\"headerValue\":\"Valeur de l'en-tête\",\"httpMethod\":\"Méthode HTTP\",\"insertVariable\":\"Insérer une variable\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Aucun champ disponible\",\"postSubmission\":\"Après soumission\",\"redirectUrl\":\"URL de redirection\",\"redirectUrlDesc\":\"URL vers laquelle rediriger après une soumission réussie\",\"redirectUrlPlaceholder\":\"/success ou https://exemple.com/merci\",\"requestBody\":\"Corps de la requête (JSON)\",\"requestBodyDesc\":\"Utilisez {{fieldId}} pour référencer d'autres champs. Assurez-vous d'un formatage JSON approprié, incluant les guillemets autour des valeurs de chaîne.\",\"requestBodyPlaceholder\":\"{\\\"nom\\\": \\\"{{nomUtilisateur}}\\\", \\\"email\\\": \\\"{{emailUtilisateur}}\\\"}\",\"selectMethod\":\"Sélectionner une méthode\",\"sendAllFormValues\":\"Envoyer toutes les données du formulaire\",\"sendAllFormValuesDesc\":\"Envoyer automatiquement toutes les valeurs du formulaire en tant que corps JSON\",\"showLoadingState\":\"Afficher l'état de chargement\",\"successMessage\":\"Message de succès\",\"successMessageDesc\":\"Message affiché en cas de soumission réussie\",\"successMessagePlaceholder\":\"Formulaire soumis avec succès !\"},\"treegeNode\":{\"labelPlaceholder\":\"Libellé...\"},\"uiNodeForm\":{\"label\":\"Libellé\",\"type\":\"Type\",\"typeDivider\":\"Séparateur\",\"typeTitle\":\"Titre\"}}"),
540
+ renderer: {
541
+ defaultAddressInput: {
542
+ enterAddress: "Entrez une adresse...",
543
+ noAddressesFound: "Aucune adresse trouvée.",
544
+ searching: "Recherche...",
545
+ typeMinChars: "Tapez au moins 3 caractères pour rechercher"
546
+ },
547
+ defaultAutocompleteInput: {
548
+ noResults: "Aucun résultat trouvé.",
549
+ search: "Recherche...",
550
+ selectOption: "Sélectionner une option"
551
+ },
552
+ defaultHttpInput: {
553
+ fetchFailed: "Échec de la récupération des données. Veuillez vérifier votre connexion réseau.",
554
+ httpError: "Erreur HTTP {status} : {statusText}",
555
+ noDataAvailable: "Aucune donnée disponible. Configurez \"Charger au montage\" ou ajoutez un paramètre de recherche.",
556
+ noResults: "Aucun résultat trouvé.",
557
+ noUrlConfigured: "Aucune URL configurée. Veuillez ajouter une URL dans la configuration HTTP.",
558
+ retry: "Réessayer",
559
+ search: "Recherche...",
560
+ searching: "Recherche...",
561
+ selectOption: "Sélectionner une option",
562
+ waitingForRequiredFields: "En attente des champs requis"
563
+ },
564
+ defaultInputs: {
565
+ addMoreFiles: "Ajouter plus de fichiers",
566
+ endDate: "Date de fin",
567
+ endTime: "Heure de fin",
568
+ filePickerError: "Échec de la sélection du fichier",
569
+ filePickerUnavailable: "Sélection de fichier indisponible. Veuillez installer react-native-document-picker.",
570
+ newAnswer: "Nouvelle réponse...",
571
+ replaceFile: "Remplacer le fichier",
572
+ required: "*",
573
+ selectDate: "Sélectionner une date",
574
+ selectDateRange: "Sélectionner une plage de dates",
575
+ selectFile: "Sélectionner un fichier",
576
+ selectFiles: "Sélectionner des fichiers",
577
+ startDate: "Date de début",
578
+ startTime: "Heure de début"
579
+ },
580
+ defaultSelectInput: { selectOption: "Sélectionner une option" },
581
+ defaultSubmitButton: {
582
+ requiredFieldsMissing: "Champs requis manquants",
583
+ submit: "Envoyer"
584
+ }
585
+ },
586
+ validation: {
587
+ invalidFormat: "Format invalide",
588
+ required: "Ce champ est requis"
589
+ }
590
+ }, y = {
591
+ common: {
592
+ cancel: "Annulla",
593
+ clear: "Cancella",
594
+ close: "Chiudi",
595
+ create: "Crea",
596
+ delete: "Elimina",
597
+ other: "Altro",
598
+ retry: "Riprova",
599
+ save: "Salva",
600
+ settings: "Impostazioni",
601
+ submit: "Invia",
602
+ toggle: "Attiva/Disattiva"
603
+ },
604
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"Aggiungi elemento\",\"clear\":\"Pulisci\",\"clearSuccess\":\"Flusso pulito!\",\"clearSuccessDesc\":\"Tutti i nodi e gli archi sono stati rimossi.\",\"copyFailed\":\"Impossibile copiare l'ID del flusso\",\"downloadSuccess\":\"Download riuscito.\",\"downloadSuccessDesc\":\"Il flusso è stato esportato con successo.\",\"exportJson\":\"Esporta JSON\",\"idCopied\":\"ID del flusso copiato!\",\"importJson\":\"Importa JSON\",\"importSuccess\":\"Importazione riuscita!\",\"importSuccessDesc\":\"Il flusso è stato importato con successo.\",\"invalidJson\":\"File JSON non valido.\",\"invalidJsonDesc\":\"Il file deve contenere array di nodi e archi.\",\"parseError\":\"Errore nell'analisi del file JSON.\",\"parseErrorDesc\":\"Prova a correggere il file e importarlo di nuovo.\"},\"aiGenerator\":{\"aiNotConfigured\":\"IA non configurata\",\"aiNotConfiguredDesc\":\"Aggiungi la prop {code} a TreegeEditorProvider\",\"buttonLabel\":\"Genera con IA\",\"cancel\":\"Annulla\",\"description\":\"Descrizione\",\"descriptionPlaceholder\":\"Esempio: Crea un modulo di contatto con nome, email, telefono e messaggio\",\"enterDescription\":\"Inserisci una descrizione\",\"failedToGenerate\":\"Errore nella generazione dell'albero\",\"generate\":\"Genera\",\"generating\":\"Generazione...\",\"keyboardShortcut\":\"Premi {cmdEnter} o {ctrlEnter} per generare\",\"missingApiKey\":\"Configurazione IA mancante\",\"missingApiKeyDesc\":\"Configura la tua chiave API IA in TreegeEditorProvider\",\"successDescription\":\"{nodes} nodi e {edges} archi creati\",\"successTitle\":\"Albero generato con successo!\",\"title\":\"Genera flusso con IA\",\"titleDescription\":\"Descrivi il modulo o l'albero decisionale che vuoi creare, e l'IA lo genererà per te.\",\"unknownError\":\"Errore sconosciuto\"},\"changeNodeTypeDialog\":{\"description\":\"Questo nodo ha più rami in uscita. Il nuovo tipo ne supporta solo uno. Scegli quale ramo mantenere; gli altri verranno rimossi.\",\"keepBranch\":\"Mantieni questo ramo\",\"noConditions\":\"Nessuna condizione\",\"title\":\"Cambia tipo di nodo\"},\"comboboxPattern\":{\"custom\":\"Personalizzato: {value}\",\"search\":\"Cerca schemi...\",\"selectOrCreate\":\"Seleziona o crea uno schema\",\"usePattern\":\"Usa schema: {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"Cancella selezione\",\"noResults\":\"Nessun risultato trovato\"},\"conditionalEdge\":{\"addCondition\":\"Aggiungi condizione\",\"and\":\"E\",\"condition\":\"Condizione\",\"conditions\":\"Condizioni\",\"conditionsAnd\":\"condizioni (E)\",\"conditionsMixed\":\"condizioni (miste)\",\"conditionsOr\":\"condizioni (O)\",\"defineCondition\":\"Definisci una condizione\",\"displayConditions\":\"Mostra condizioni\",\"displayConditionsDesc\":\"Questo campo verrà mostrato se vengono soddisfatte le seguenti condizioni.\",\"fallback\":\"Predefinito\",\"fallbackPath\":\"Percorso predefinito / di fallback\",\"fallbackPathDesc\":\"Questo percorso verrà seguito quando nessun'altra condizione corrisponde\",\"field\":\"Campo\",\"labelDesc\":\"Etichetta personalizzata per il pulsante della condizione\",\"labelOptional\":\"Etichetta (opzionale)\",\"labelPlaceholder\":\"Es: Se idoneo\",\"noFieldsAvailable\":\"Nessun campo disponibile\",\"operator\":\"Operatore\",\"or\":\"O\",\"removeCondition\":\"Rimuovi condizione\",\"selectField\":\"Seleziona un campo\",\"value\":\"Valore\",\"valuePlaceholder\":\"Es: 18\"},\"flowNodeForm\":{\"label\":\"Etichetta\",\"targetId\":\"ID di destinazione\",\"targetIdDesc\":\"Identificatore univoco del flusso di destinazione.\"},\"groupNodeForm\":{\"label\":\"Etichetta\"},\"httpConfigForm\":{\"addHeader\":\"Aggiungi intestazione\",\"apiUrl\":\"URL API\",\"apiUrlDesc\":\"Usa variabili template come {{fieldId}} per riferire altri campi\",\"apiUrlPlaceholder\":\"https://api.esempio.com/data\",\"behavior\":\"Comportamento\",\"fetchOnMount\":\"Carica al montaggio\",\"headerName\":\"Nome intestazione\",\"headers\":\"Intestazioni\",\"headerValue\":\"Valore intestazione\",\"httpMethod\":\"Metodo HTTP\",\"insertVariable\":\"Inserisci variabile\",\"labelField\":\"Campo etichetta\",\"labelFieldDesc\":\"Campo da usare come etichetta dell'opzione (es: nome)\",\"labelFieldPlaceholder\":\"nome\",\"mapToOptions\":\"Mappa su opzioni\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Nessun campo disponibile\",\"requestBody\":\"Corpo della richiesta (JSON)\",\"requestBodyDesc\":\"Usa {{fieldId}} per riferire altri campi. Assicurati che la formattazione JSON sia corretta, comprese le virgolette attorno ai valori stringa.\",\"requestBodyPlaceholder\":\"{\\\"nome\\\": \\\"{{nomeUtente}}\\\", \\\"eta\\\": {{etaUtente}}}\",\"responseConfiguration\":\"Configurazione della risposta\",\"responsePath\":\"Percorso della risposta\",\"responsePathDesc\":\"Estrai dati dalla risposta usando la notazione a punti o l'indicizzazione dell'array\",\"responsePathPlaceholder\":\"data.users o results[0]\",\"searchParameter\":\"Parametro di ricerca (opzionale)\",\"searchParameterDesc\":\"Se impostato, abilita una casella di ricerca che aggiunge questo parametro alle chiamate API (es: ?q=Parigi)\",\"searchParameterPlaceholder\":\"q, ricerca, query...\",\"selectMethod\":\"Seleziona metodo\",\"sendAllFormValues\":\"Invia tutti i dati del modulo\",\"sendAllFormValuesDesc\":\"Invia automaticamente tutti i valori del modulo come corpo JSON\",\"showLoadingState\":\"Mostra stato di caricamento\",\"valueField\":\"Campo valore\",\"valueFieldDesc\":\"Campo da usare come valore dell'opzione (es: id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"Aggiungi campi di input prima di questo nodo per riferirli\",\"addMapping\":\"Aggiungi mappatura\",\"addOption\":\"Aggiungi opzione\",\"advancedConfiguration\":\"Configurazione avanzata\",\"defaultChecked\":\"Selezionato per impostazione predefinita\",\"defaultValuesCommaSeparated\":\"Valori predefiniti (separati da virgole)\",\"defaultValuesPlaceholder\":\"valore1, valore2, valore3\",\"defaultValueType\":\"Tipo di valore predefinito\",\"defaultValueTypeNone\":\"Nessuno\",\"defaultValueTypeReference\":\"Campo di riferimento\",\"defaultValueTypeStatic\":\"Valore statico\",\"disablePast\":\"Disabilita date passate\",\"errorMessage\":\"Messaggio di errore\",\"helperText\":\"Testo di aiuto\",\"httpConfiguration\":\"Configurazione HTTP\",\"label\":\"Etichetta\",\"multipleFiles\":\"File multipli\",\"multipleSelection\":\"Selezione multipla\",\"name\":\"Nome\",\"nameDescription\":\"Nome campo personalizzato opzionale per l'esportazione del modulo. Se vuoto, l'etichetta verrà utilizzata come chiave.\",\"noParentFieldsAvailable\":\"Nessun campo genitore disponibile\",\"objectMapping\":\"Mappatura oggetto\",\"objectMappingDesc\":\"Mappa le proprietà dell'oggetto sorgente su una nuova struttura\",\"optional\":\"Opzionale\",\"optionDescription\":\"Descrizione\",\"optionImageAdd\":\"Aggiungi immagine\",\"optionImageError\":\"Impossibile elaborare l'immagine.\",\"optionImageInvalid\":\"Formato immagine non supportato.\",\"optionImageRemove\":\"Rimuovi immagine\",\"optionImageReplace\":\"Sostituisci immagine\",\"optionImageTooLarge\":\"Immagine troppo grande (max 5 MB).\",\"optionImageUpload\":\"Carica file\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"Etichetta\",\"options\":\"Opzioni\",\"optionValue\":\"Valore\",\"pattern\":\"Schema\",\"placeholder\":\"Segnaposto\",\"referenceField\":\"Campo di riferimento\",\"required\":\"Obbligatorio\",\"selectReferenceField\":\"Seleziona un campo\",\"selectTransformation\":\"Seleziona trasformazione\",\"selectType\":\"Seleziona tipo\",\"sourceKey\":\"Chiave sorgente\",\"staticValue\":\"Valore statico\",\"staticValuePlaceholder\":\"Inserisci valore predefinito\",\"submitConfiguration\":\"Configurazione di invio\",\"targetKey\":\"Chiave destinazione\",\"transformArray\":\"Converti in array\",\"transformBoolean\":\"Converti in booleano\",\"transformDesc\":\"Trasforma il valore riferito per corrispondere al tipo di questo campo\",\"transformMapToObject\":\"Mappa su oggetto\",\"transformNone\":\"Nessuna trasformazione\",\"transformNumber\":\"Converti in numero\",\"transformString\":\"Converti in stringa\",\"transformType\":\"Tipo di trasformazione\",\"validation\":\"Validazione\",\"variant\":\"Variante\",\"variantCard\":\"Scheda\",\"variantDefault\":\"Predefinito\"},\"nodeActionsSheet\":{\"deleteNode\":\"Elimina nodo\",\"deleteNodeConfirm\":\"Sei sicuro di voler eliminare questo nodo?\",\"deleteNodeSuccess\":\"Nodo eliminato con successo\",\"editNode\":\"Modifica nodo\"},\"selectInputType\":{\"type\":\"Tipo\"},\"selectNodeGroup\":{\"createNewGroup\":\"Crea un nuovo gruppo\",\"group\":\"Gruppo\",\"groupAlreadyExists\":\"Questo gruppo esiste già\",\"groupAlreadyExistsDesc\":\"Usa il selettore per aggiungere il nodo a un gruppo esistente.\",\"groupCreated\":\"Gruppo creato\",\"groupCreatedDesc\":\"Il gruppo \\\"{groupName}\\\" è stato creato con successo.\",\"groupName\":\"Nome del gruppo\",\"groupNamePlaceholder\":\"Es: Passo 1 - Informazioni personali\",\"newGroup\":\"Nuovo gruppo\",\"newGroupDescription\":\"Il gruppo verrà creato attorno al nodo selezionato.\",\"noGroup\":\"Nessun gruppo\"},\"selectNodeType\":{\"nodeType\":\"Tipo di nodo\",\"options\":{\"flow\":\"Flusso esterno\",\"group\":\"Gruppo\",\"input\":\"Domanda\",\"ui\":\"Elemento di design\"}},\"submitConfigForm\":{\"addHeader\":\"Aggiungi intestazione\",\"apiUrl\":\"URL dell'API\",\"apiUrlDesc\":\"Usa {{fieldId}} per riferire altri campi\",\"apiUrlPlaceholder\":\"https://api.esempio.it/submit\",\"behavior\":\"Comportamento\",\"errorMessage\":\"Messaggio di errore\",\"errorMessageDesc\":\"Messaggio visualizzato quando l'invio fallisce\",\"errorMessagePlaceholder\":\"Si è verificato un errore. Riprova.\",\"headerName\":\"Nome intestazione\",\"headers\":\"Intestazioni\",\"headerValue\":\"Valore intestazione\",\"httpMethod\":\"Metodo HTTP\",\"insertVariable\":\"Inserisci variabile\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Nessun campo disponibile\",\"postSubmission\":\"Dopo l'invio\",\"redirectUrl\":\"URL di reindirizzamento\",\"redirectUrlDesc\":\"URL a cui reindirizzare dopo un invio riuscito\",\"redirectUrlPlaceholder\":\"/success o https://esempio.it/grazie\",\"requestBody\":\"Corpo della richiesta (JSON)\",\"requestBodyDesc\":\"Usa {{fieldId}} per riferire altri campi. Assicurati che la formattazione JSON sia corretta, comprese le virgolette attorno ai valori stringa.\",\"requestBodyPlaceholder\":\"{\\\"nome\\\": \\\"{{nomeUtente}}\\\", \\\"email\\\": \\\"{{emailUtente}}\\\"}\",\"selectMethod\":\"Seleziona metodo\",\"sendAllFormValues\":\"Invia tutti i dati del modulo\",\"sendAllFormValuesDesc\":\"Invia automaticamente tutti i valori del modulo come corpo JSON\",\"showLoadingState\":\"Mostra stato di caricamento\",\"successMessage\":\"Messaggio di successo\",\"successMessageDesc\":\"Messaggio visualizzato quando l'invio ha successo\",\"successMessagePlaceholder\":\"Modulo inviato con successo!\"},\"treegeNode\":{\"labelPlaceholder\":\"Etichetta...\"},\"uiNodeForm\":{\"label\":\"Etichetta\",\"type\":\"Tipo\",\"typeDivider\":\"Divisore\",\"typeTitle\":\"Titolo\"}}"),
605
+ renderer: {
606
+ defaultAddressInput: {
607
+ enterAddress: "Inserisci un indirizzo...",
608
+ noAddressesFound: "Nessun indirizzo trovato.",
609
+ searching: "Ricerca in corso...",
610
+ typeMinChars: "Digita almeno 3 caratteri per cercare"
611
+ },
612
+ defaultAutocompleteInput: {
613
+ noResults: "Nessun risultato trovato.",
614
+ search: "Cerca...",
615
+ selectOption: "Seleziona un'opzione"
616
+ },
617
+ defaultHttpInput: {
618
+ fetchFailed: "Impossibile recuperare i dati. Controlla la tua connessione di rete.",
619
+ httpError: "Errore HTTP {status}: {statusText}",
620
+ noDataAvailable: "Nessun dato disponibile. Configura \"Carica al montaggio\" o aggiungi un parametro di ricerca.",
621
+ noResults: "Nessun risultato trovato.",
622
+ noUrlConfigured: "Nessun URL configurato. Aggiungi un URL nella configurazione HTTP.",
623
+ retry: "Riprova",
624
+ search: "Cerca...",
625
+ searching: "Ricerca in corso...",
626
+ selectOption: "Seleziona un'opzione",
627
+ waitingForRequiredFields: "In attesa dei campi richiesti"
628
+ },
629
+ defaultInputs: {
630
+ addMoreFiles: "Aggiungi altri file",
631
+ endDate: "Data di fine",
632
+ endTime: "Ora di fine",
633
+ filePickerError: "Errore nella selezione del file",
634
+ filePickerUnavailable: "Selezione file non disponibile. Installare react-native-document-picker.",
635
+ newAnswer: "Nuova risposta...",
636
+ replaceFile: "Sostituisci file",
637
+ required: "*",
638
+ selectDate: "Seleziona data",
639
+ selectDateRange: "Seleziona intervallo di date",
640
+ selectFile: "Seleziona file",
641
+ selectFiles: "Seleziona file",
642
+ startDate: "Data di inizio",
643
+ startTime: "Ora di inizio"
644
+ },
645
+ defaultSelectInput: { selectOption: "Seleziona un'opzione" },
646
+ defaultSubmitButton: {
647
+ requiredFieldsMissing: "Campi obbligatori mancanti",
648
+ submit: "Invia"
649
+ }
650
+ },
651
+ validation: {
652
+ invalidFormat: "Formato non valido",
653
+ required: "Questo campo è obbligatorio"
654
+ }
655
+ }, b = {
656
+ common: {
657
+ cancel: "Cancelar",
658
+ clear: "Limpar",
659
+ close: "Fechar",
660
+ create: "Criar",
661
+ delete: "Excluir",
662
+ other: "Outro",
663
+ retry: "Tentar novamente",
664
+ save: "Salvar",
665
+ settings: "Configurações",
666
+ submit: "Enviar",
667
+ toggle: "Alternar"
668
+ },
669
+ editor: /* @__PURE__ */ JSON.parse("{\"actionsPanel\":{\"addNode\":\"Adicionar elemento\",\"clear\":\"Limpar\",\"clearSuccess\":\"Fluxo limpo!\",\"clearSuccessDesc\":\"Todos os nós e arestas foram removidos.\",\"copyFailed\":\"Falha ao copiar o ID do fluxo\",\"downloadSuccess\":\"Download bem-sucedido.\",\"downloadSuccessDesc\":\"O fluxo foi exportado com sucesso.\",\"exportJson\":\"Exportar JSON\",\"idCopied\":\"ID do fluxo copiado!\",\"importJson\":\"Importar JSON\",\"importSuccess\":\"Importação bem-sucedida!\",\"importSuccessDesc\":\"O fluxo foi importado com sucesso.\",\"invalidJson\":\"Arquivo JSON inválido.\",\"invalidJsonDesc\":\"O arquivo deve conter arrays de nós e arestas.\",\"parseError\":\"Erro ao analisar o arquivo JSON.\",\"parseErrorDesc\":\"Tente corrigir o arquivo e importá-lo novamente.\"},\"aiGenerator\":{\"aiNotConfigured\":\"IA não configurada\",\"aiNotConfiguredDesc\":\"Adicione a prop {code} ao TreegeEditorProvider\",\"buttonLabel\":\"Gerar com IA\",\"cancel\":\"Cancelar\",\"description\":\"Descrição\",\"descriptionPlaceholder\":\"Exemplo: Criar um formulário de contato com nome, email, telefone e mensagem\",\"enterDescription\":\"Por favor insira uma descrição\",\"failedToGenerate\":\"Falha ao gerar árvore\",\"generate\":\"Gerar\",\"generating\":\"Gerando...\",\"keyboardShortcut\":\"Pressione {cmdEnter} ou {ctrlEnter} para gerar\",\"missingApiKey\":\"Configuração de IA ausente\",\"missingApiKeyDesc\":\"Por favor configure sua chave API de IA no TreegeEditorProvider\",\"successDescription\":\"{nodes} nós e {edges} arestas criados\",\"successTitle\":\"Árvore gerada com sucesso!\",\"title\":\"Gerar fluxo com IA\",\"titleDescription\":\"Descreva o formulário ou árvore de decisão que deseja criar, e a IA irá gerá-lo para você.\",\"unknownError\":\"Erro desconhecido\"},\"changeNodeTypeDialog\":{\"description\":\"Este nó possui várias ramificações de saída. O novo tipo suporta apenas uma. Escolha qual ramificação manter; as outras serão removidas.\",\"keepBranch\":\"Manter esta ramificação\",\"noConditions\":\"Sem condições\",\"title\":\"Alterar tipo de nó\"},\"comboboxPattern\":{\"custom\":\"Personalizado: {value}\",\"search\":\"Pesquisar padrões...\",\"selectOrCreate\":\"Selecionar ou criar um padrão\",\"usePattern\":\"Usar padrão: {query}\"},\"comboboxWithCreate\":{\"clearSelection\":\"Limpar seleção\",\"noResults\":\"Nenhum resultado encontrado\"},\"conditionalEdge\":{\"addCondition\":\"Adicionar condição\",\"and\":\"E\",\"condition\":\"Condição\",\"conditions\":\"Condições\",\"conditionsAnd\":\"condições (E)\",\"conditionsMixed\":\"condições (mistas)\",\"conditionsOr\":\"condições (OU)\",\"defineCondition\":\"Definir uma condição\",\"displayConditions\":\"Exibir condições\",\"displayConditionsDesc\":\"Este campo será exibido se as seguintes condições forem atendidas.\",\"fallback\":\"Padrão\",\"fallbackPath\":\"Caminho padrão / de fallback\",\"fallbackPathDesc\":\"Este caminho será seguido quando nenhuma outra condição corresponder\",\"field\":\"Campo\",\"labelDesc\":\"Rótulo personalizado para o botão de condição\",\"labelOptional\":\"Rótulo (opcional)\",\"labelPlaceholder\":\"Ex: Se elegível\",\"noFieldsAvailable\":\"Nenhum campo disponível\",\"operator\":\"Operador\",\"or\":\"OU\",\"removeCondition\":\"Remover condição\",\"selectField\":\"Selecione um campo\",\"value\":\"Valor\",\"valuePlaceholder\":\"Ex: 18\"},\"flowNodeForm\":{\"label\":\"Rótulo\",\"targetId\":\"ID de destino\",\"targetIdDesc\":\"Identificador único do fluxo de destino.\"},\"groupNodeForm\":{\"label\":\"Rótulo\"},\"httpConfigForm\":{\"addHeader\":\"Adicionar cabeçalho\",\"apiUrl\":\"URL da API\",\"apiUrlDesc\":\"Use variáveis de modelo como {{fieldId}} para referenciar outros campos\",\"apiUrlPlaceholder\":\"https://api.exemplo.com/data\",\"behavior\":\"Comportamento\",\"fetchOnMount\":\"Buscar na montagem\",\"headerName\":\"Nome do cabeçalho\",\"headers\":\"Cabeçalhos\",\"headerValue\":\"Valor do cabeçalho\",\"httpMethod\":\"Método HTTP\",\"insertVariable\":\"Inserir variável\",\"labelField\":\"Campo de rótulo\",\"labelFieldDesc\":\"Campo a ser usado como rótulo da opção (ex: nome)\",\"labelFieldPlaceholder\":\"nome\",\"mapToOptions\":\"Mapear para opções\",\"methodDelete\":\"DELETE\",\"methodGet\":\"GET\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Nenhum campo disponível\",\"requestBody\":\"Corpo da requisição (JSON)\",\"requestBodyDesc\":\"Use {{fieldId}} para referenciar outros campos. Certifique-se de que a formatação JSON está correta, incluindo aspas ao redor de valores de string.\",\"requestBodyPlaceholder\":\"{\\\"nome\\\": \\\"{{nomeUsuario}}\\\", \\\"idade\\\": {{idadeUsuario}}}\",\"responseConfiguration\":\"Configuração da resposta\",\"responsePath\":\"Caminho da resposta\",\"responsePathDesc\":\"Extrair dados da resposta usando notação de ponto ou indexação de array\",\"responsePathPlaceholder\":\"data.users ou results[0]\",\"searchParameter\":\"Parâmetro de pesquisa (opcional)\",\"searchParameterDesc\":\"Se definido, habilita uma caixa de pesquisa que adiciona este parâmetro às chamadas de API (ex: ?q=Paris)\",\"searchParameterPlaceholder\":\"q, pesquisa, consulta...\",\"selectMethod\":\"Selecionar método\",\"sendAllFormValues\":\"Enviar todos os dados do formulário\",\"sendAllFormValuesDesc\":\"Enviar automaticamente todos os valores do formulário como corpo JSON\",\"showLoadingState\":\"Mostrar estado de carregamento\",\"valueField\":\"Campo de valor\",\"valueFieldDesc\":\"Campo a ser usado como valor da opção (ex: id)\",\"valueFieldPlaceholder\":\"id\"},\"inputNodeForm\":{\"addInputFieldsBeforeReference\":\"Adicione campos de entrada antes deste nó para referenciá-los\",\"addMapping\":\"Adicionar mapeamento\",\"addOption\":\"Adicionar opção\",\"advancedConfiguration\":\"Configuração avançada\",\"defaultChecked\":\"Marcado por padrão\",\"defaultValuesCommaSeparated\":\"Valores padrão (separados por vírgulas)\",\"defaultValuesPlaceholder\":\"valor1, valor2, valor3\",\"defaultValueType\":\"Tipo de valor padrão\",\"defaultValueTypeNone\":\"Nenhum\",\"defaultValueTypeReference\":\"Campo de referência\",\"defaultValueTypeStatic\":\"Valor estático\",\"disablePast\":\"Desativar datas passadas\",\"errorMessage\":\"Mensagem de erro\",\"helperText\":\"Texto de ajuda\",\"httpConfiguration\":\"Configuração HTTP\",\"label\":\"Rótulo\",\"multipleFiles\":\"Arquivos múltiplos\",\"multipleSelection\":\"Seleção múltipla\",\"name\":\"Nome\",\"nameDescription\":\"Nome de campo personalizado opcional para exportação de formulário. Se vazio, o rótulo será usado como chave.\",\"noParentFieldsAvailable\":\"Nenhum campo pai disponível\",\"objectMapping\":\"Mapeamento de objeto\",\"objectMappingDesc\":\"Mapear as propriedades do objeto de origem para uma nova estrutura\",\"optional\":\"Opcional\",\"optionDescription\":\"Descrição\",\"optionImageAdd\":\"Adicionar imagem\",\"optionImageError\":\"Não foi possível processar a imagem.\",\"optionImageInvalid\":\"Formato de imagem não suportado.\",\"optionImageRemove\":\"Remover imagem\",\"optionImageReplace\":\"Substituir imagem\",\"optionImageTooLarge\":\"Imagem muito grande (máx. 5 MB).\",\"optionImageUpload\":\"Enviar arquivo\",\"optionImageUrlPlaceholder\":\"https://...\",\"optionLabel\":\"Rótulo\",\"options\":\"Opções\",\"optionValue\":\"Valor\",\"pattern\":\"Padrão\",\"placeholder\":\"Espaço reservado\",\"referenceField\":\"Campo de referência\",\"required\":\"Obrigatório\",\"selectReferenceField\":\"Selecione um campo\",\"selectTransformation\":\"Selecionar transformação\",\"selectType\":\"Selecionar tipo\",\"sourceKey\":\"Chave de origem\",\"staticValue\":\"Valor estático\",\"staticValuePlaceholder\":\"Digite o valor padrão\",\"submitConfiguration\":\"Configuração de envio\",\"targetKey\":\"Chave de destino\",\"transformArray\":\"Converter para array\",\"transformBoolean\":\"Converter para booleano\",\"transformDesc\":\"Transformar o valor referenciado para corresponder ao tipo deste campo\",\"transformMapToObject\":\"Mapear para objeto\",\"transformNone\":\"Sem transformação\",\"transformNumber\":\"Converter para número\",\"transformString\":\"Converter para string\",\"transformType\":\"Tipo de transformação\",\"validation\":\"Validação\",\"variant\":\"Variante\",\"variantCard\":\"Cartão\",\"variantDefault\":\"Padrão\"},\"nodeActionsSheet\":{\"deleteNode\":\"Excluir nó\",\"deleteNodeConfirm\":\"Tem certeza de que deseja excluir este nó?\",\"deleteNodeSuccess\":\"Nó excluído com sucesso\",\"editNode\":\"Editar nó\"},\"selectInputType\":{\"type\":\"Tipo\"},\"selectNodeGroup\":{\"createNewGroup\":\"Criar um novo grupo\",\"group\":\"Grupo\",\"groupAlreadyExists\":\"Este grupo já existe\",\"groupAlreadyExistsDesc\":\"Use o seletor para adicionar o nó a um grupo existente.\",\"groupCreated\":\"Grupo criado\",\"groupCreatedDesc\":\"O grupo \\\"{groupName}\\\" foi criado com sucesso.\",\"groupName\":\"Nome do grupo\",\"groupNamePlaceholder\":\"Ex: Passo 1 - Informações pessoais\",\"newGroup\":\"Novo grupo\",\"newGroupDescription\":\"O grupo será criado em torno do nó selecionado.\",\"noGroup\":\"Sem grupo\"},\"selectNodeType\":{\"nodeType\":\"Tipo de nó\",\"options\":{\"flow\":\"Fluxo externo\",\"group\":\"Grupo\",\"input\":\"Pergunta\",\"ui\":\"Elemento de design\"}},\"submitConfigForm\":{\"addHeader\":\"Adicionar cabeçalho\",\"apiUrl\":\"URL da API\",\"apiUrlDesc\":\"Use {{fieldId}} para referenciar outros campos\",\"apiUrlPlaceholder\":\"https://api.exemplo.com/submit\",\"behavior\":\"Comportamento\",\"errorMessage\":\"Mensagem de erro\",\"errorMessageDesc\":\"Mensagem exibida quando o envio falha\",\"errorMessagePlaceholder\":\"Ocorreu um erro. Por favor, tente novamente.\",\"headerName\":\"Nome do cabeçalho\",\"headers\":\"Cabeçalhos\",\"headerValue\":\"Valor do cabeçalho\",\"httpMethod\":\"Método HTTP\",\"insertVariable\":\"Inserir variável\",\"methodDelete\":\"DELETE\",\"methodPatch\":\"PATCH\",\"methodPost\":\"POST\",\"methodPut\":\"PUT\",\"noFieldsAvailable\":\"Nenhum campo disponível\",\"postSubmission\":\"Após o envio\",\"redirectUrl\":\"URL de redirecionamento\",\"redirectUrlDesc\":\"URL para redirecionar após envio bem-sucedido\",\"redirectUrlPlaceholder\":\"/success ou https://exemplo.com/obrigado\",\"requestBody\":\"Corpo da requisição (JSON)\",\"requestBodyDesc\":\"Use {{fieldId}} para referenciar outros campos. Certifique-se de que a formatação JSON está correta, incluindo aspas ao redor de valores de string.\",\"requestBodyPlaceholder\":\"{\\\"nome\\\": \\\"{{nomeUsuario}}\\\", \\\"email\\\": \\\"{{emailUsuario}}\\\"}\",\"selectMethod\":\"Selecionar método\",\"sendAllFormValues\":\"Enviar todos os dados do formulário\",\"sendAllFormValuesDesc\":\"Enviar automaticamente todos os valores do formulário como corpo JSON\",\"showLoadingState\":\"Mostrar estado de carregamento\",\"successMessage\":\"Mensagem de sucesso\",\"successMessageDesc\":\"Mensagem exibida quando o envio é bem-sucedido\",\"successMessagePlaceholder\":\"Formulário enviado com sucesso!\"},\"treegeNode\":{\"labelPlaceholder\":\"Rótulo...\"},\"uiNodeForm\":{\"label\":\"Rótulo\",\"type\":\"Tipo\",\"typeDivider\":\"Divisor\",\"typeTitle\":\"Título\"}}"),
670
+ renderer: {
671
+ defaultAddressInput: {
672
+ enterAddress: "Digite um endereço...",
673
+ noAddressesFound: "Nenhum endereço encontrado.",
674
+ searching: "Pesquisando...",
675
+ typeMinChars: "Digite pelo menos 3 caracteres para pesquisar"
676
+ },
677
+ defaultAutocompleteInput: {
678
+ noResults: "Nenhum resultado encontrado.",
679
+ search: "Pesquisar...",
680
+ selectOption: "Selecione uma opção"
681
+ },
682
+ defaultHttpInput: {
683
+ fetchFailed: "Falha ao buscar dados. Por favor, verifique sua conexão de rede.",
684
+ httpError: "Erro HTTP {status}: {statusText}",
685
+ noDataAvailable: "Nenhum dado disponível. Configure \"Buscar na montagem\" ou adicione um parâmetro de pesquisa.",
686
+ noResults: "Nenhum resultado encontrado.",
687
+ noUrlConfigured: "Nenhuma URL configurada. Por favor, adicione uma URL na configuração HTTP.",
688
+ retry: "Tentar novamente",
689
+ search: "Pesquisar...",
690
+ searching: "Pesquisando...",
691
+ selectOption: "Selecione uma opção",
692
+ waitingForRequiredFields: "Aguardando campos obrigatórios"
693
+ },
694
+ defaultInputs: {
695
+ addMoreFiles: "Adicionar mais arquivos",
696
+ endDate: "Data de fim",
697
+ endTime: "Hora de fim",
698
+ filePickerError: "Falha ao selecionar arquivo",
699
+ filePickerUnavailable: "Seleção de arquivo indisponível. Instale react-native-document-picker.",
700
+ newAnswer: "Nova resposta...",
701
+ replaceFile: "Substituir arquivo",
702
+ required: "*",
703
+ selectDate: "Selecionar data",
704
+ selectDateRange: "Selecionar intervalo de datas",
705
+ selectFile: "Selecionar arquivo",
706
+ selectFiles: "Selecionar arquivos",
707
+ startDate: "Data de início",
708
+ startTime: "Hora de início"
709
+ },
710
+ defaultSelectInput: { selectOption: "Selecione uma opção" },
711
+ defaultSubmitButton: {
712
+ requiredFieldsMissing: "Campos obrigatórios ausentes",
713
+ submit: "Enviar"
714
+ }
715
+ },
716
+ validation: {
717
+ invalidFormat: "Formato inválido",
718
+ required: "Este campo é obrigatório"
719
+ }
720
+ }, x = (e, t = "en") => e ? typeof e == "string" ? e : e[t] || e.en || Object.values(e).find(Boolean) || "" : "", S = {
721
+ ar: m,
722
+ de: h,
723
+ en: g,
724
+ es: _,
725
+ fr: v,
726
+ it: y,
727
+ pt: b
728
+ }, C = (e, t = "") => Object.keys(e).reduce((n, r) => {
729
+ let i = e[r], a = t ? `${t}.${r}` : r;
730
+ return typeof i == "object" && i && !Array.isArray(i) ? Object.assign(n, C(i, a)) : n[a] = String(i), n;
731
+ }, {}), w = (e) => C(S[e] || S.en), T = (e) => {
732
+ let t = o(() => w(e), [e]);
733
+ return o(() => (n) => n ? typeof n == "object" ? x(n, e) : n in t ? t[n] : n : "", [e, t]);
734
+ }, E = {
735
+ AND: "AND",
736
+ OR: "OR"
737
+ }, D = {
738
+ flow: "flow",
739
+ group: "group",
740
+ input: "input",
741
+ ui: "ui"
742
+ }, O = (e) => e == null ? null : typeof e == "boolean" || typeof e == "number" ? e : typeof e == "string" ? e === "" ? null : e : typeof e == "object" ? JSON.stringify(e) : String(e), k = (e, t, n) => {
743
+ let r = O(e), i = O(t);
744
+ if (r === null || i === null) switch (n) {
745
+ case "===": return r === i;
746
+ case "!==": return r !== i;
747
+ default: return !1;
748
+ }
749
+ if ([
750
+ ">",
751
+ "<",
752
+ ">=",
753
+ "<="
754
+ ].includes(n)) {
755
+ let e = Number(r), t = Number(i);
756
+ if (!(Number.isNaN(e) || Number.isNaN(t))) switch (n) {
757
+ case ">": return e > t;
758
+ case "<": return e < t;
759
+ case ">=": return e >= t;
760
+ case "<=": return e <= t;
761
+ default: return !1;
762
+ }
763
+ return !1;
764
+ }
765
+ switch (n) {
766
+ case "===": {
767
+ let e = Number(r), t = Number(i);
768
+ return Number.isNaN(e) || Number.isNaN(t) ? String(r) === String(i) : e === t;
769
+ }
770
+ case "!==": {
771
+ let e = Number(r), t = Number(i);
772
+ return Number.isNaN(e) || Number.isNaN(t) ? String(r) !== String(i) : e !== t;
773
+ }
774
+ default: return !1;
775
+ }
776
+ }, A = (e, t, n) => {
777
+ let { field: r, operator: i, value: a } = e;
778
+ if (!(r && i) || a === void 0) return !0;
779
+ let o = t[r];
780
+ if (o === void 0 && n) {
781
+ let e = n.get(r);
782
+ e && u(e) && (o = t[e.id]);
783
+ }
784
+ return k(o, a, i);
785
+ }, j = (e, t, n) => {
786
+ if (!e || e.length === 0) return !0;
787
+ if (e.length === 1) return A(e[0], t, n);
788
+ let r = A(e[0], t, n);
789
+ for (let i = 1; i < e.length; i += 1) {
790
+ let a = e[i], o = A(a, t, n), s = e[i - 1].logicalOperator || E.AND;
791
+ if (s === E.AND) {
792
+ if (r &&= o, !r) return !1;
793
+ } else if (s === E.OR && (r ||= o, r)) return !0;
794
+ }
795
+ return r;
796
+ }, M = new Set([
797
+ "text",
798
+ "number",
799
+ "password",
800
+ "textarea",
801
+ "time"
802
+ ]), ee = (e) => e.filter(u), N = (e) => {
803
+ if (e.data.name) return e.data.name;
804
+ if (e.data.label) {
805
+ if (e.data.label.en) return e.data.label.en;
806
+ let t = Object.values(e.data.label).find(Boolean);
807
+ if (t) return t;
808
+ }
809
+ return e.id;
810
+ }, P = (e, t) => {
811
+ let n = e.type ?? "text";
812
+ return !e.placeholder?.[t] && M.has(n) ? w(t)["renderer.defaultInputs.newAnswer"] ?? "" : x(e.placeholder, t);
813
+ }, te = (e, t) => {
814
+ let n = t.find((t) => t.id === e);
815
+ return n ? N(n) : void 0;
816
+ }, F = (e) => e == null || typeof e == "string" && e.trim() === "" ? !0 : Array.isArray(e) && e.length === 0, I = (e, t) => e ? t[e] != null : !1, L = (e, t) => {
817
+ let n = {};
818
+ return t.forEach((t) => {
819
+ let r = t.id, i = N(t);
820
+ e[r] !== void 0 && (n[i] = e[r]);
821
+ }), n;
822
+ }, R = (e, t, n) => {
823
+ if (!t) return e;
824
+ switch (t) {
825
+ case "toString": return String(e);
826
+ case "toNumber": return Number(e);
827
+ case "toBoolean":
828
+ if (typeof e == "string") {
829
+ let t = e.trim().toLowerCase();
830
+ if ([
831
+ "true",
832
+ "1",
833
+ "yes",
834
+ "on"
835
+ ].includes(t)) return !0;
836
+ if ([
837
+ "false",
838
+ "0",
839
+ "no",
840
+ "off",
841
+ ""
842
+ ].includes(t)) return !1;
843
+ }
844
+ return typeof e == "number" ? e !== 0 : typeof e == "boolean" ? e : !!e;
845
+ case "toArray": return Array.isArray(e) ? e : [e];
846
+ case "toObject":
847
+ if (n && Array.isArray(n)) {
848
+ if (typeof e != "object" || !e) return e;
849
+ let t = {};
850
+ return n.forEach((n) => {
851
+ n.sourceKey && n.targetKey && (t[n.targetKey] = e[n.sourceKey]);
852
+ }), t;
853
+ }
854
+ return e;
855
+ default: return e;
856
+ }
857
+ }, z = (e, t) => {
858
+ if (Object.is(e, t)) return !0;
859
+ if (!(e && t) || typeof e != "object" || typeof t != "object") return !1;
860
+ try {
861
+ return JSON.stringify(e) === JSON.stringify(t);
862
+ } catch {
863
+ return !1;
864
+ }
865
+ }, B = (e, t, n) => {
866
+ let r = {};
867
+ return e.forEach((e) => {
868
+ let { defaultValue: i } = e.data;
869
+ if (!i || i.type !== "reference" || !i.referenceField) return;
870
+ let a = e.id, { referenceField: o, transformFunction: s, objectMapping: c } = i, l = t[o], u = n[o];
871
+ if (l === u || l == null) return;
872
+ let d = R(l, s, c), f = R(u, s, c), p = t[a], m = z(p, f), h = z(p, d);
873
+ !m || h || (r[a] = d);
874
+ }), r;
875
+ }, V = (e) => {
876
+ let t = /* @__PURE__ */ new Map();
877
+ return e.forEach((e) => {
878
+ let n = t.get(e.source);
879
+ n ? n.push(e) : t.set(e.source, [e]);
880
+ }), t;
881
+ }, H = (e, t, n) => {
882
+ let r = [], i = [], a = [];
883
+ e.forEach((e) => {
884
+ let t = e.data?.isFallback, n = e.data?.conditions?.length;
885
+ t ? a.push(e) : n ? i.push(e) : r.push(e);
886
+ });
887
+ let o = [...r];
888
+ if (i.length === 0) return a.length > 0 && o.length === 0 && o.push(...a), {
889
+ edgesToFollow: o,
890
+ waitingForInput: !1
891
+ };
892
+ if (!i.every((e) => {
893
+ let r = e.data?.conditions;
894
+ return r ? r.every((e) => {
895
+ if (!e.field) return !0;
896
+ let r = n.get(e.field);
897
+ return I(u(r) ? r.id : e.field, t);
898
+ }) : !1;
899
+ })) return a.length > 0 && o.push(...a), {
900
+ edgesToFollow: o,
901
+ waitingForInput: o.length === 0
902
+ };
903
+ let s = i.filter((e) => j(e.data?.conditions, t, n));
904
+ return s.length > 0 ? (o.push(...s), {
905
+ edgesToFollow: o,
906
+ waitingForInput: !1
907
+ }) : (o.push(...a), {
908
+ edgesToFollow: o,
909
+ waitingForInput: !1
910
+ });
911
+ }, U = (e, t) => !t.some((t) => t.target === e), W = (e, t) => {
912
+ let n = e.filter((e) => U(e.id, t));
913
+ return n.find(u) || n[0];
914
+ }, G = (e, t, n, r) => {
915
+ e.forEach((e) => {
916
+ let i = r.get(e);
917
+ if (!i) return;
918
+ let { parentId: a } = i, o = /* @__PURE__ */ new Set();
919
+ for (; a && !o.has(a);) {
920
+ if (o.add(a), t.add(a), !n.has(a)) {
921
+ let t = n.get(e);
922
+ t !== void 0 && n.set(a, t);
923
+ }
924
+ a = r.get(a)?.parentId;
925
+ }
926
+ });
927
+ }, K = (e, t, n) => {
928
+ let r = W(e, t);
929
+ if (!r) return {
930
+ endOfPathReached: !0,
931
+ visibleNodeIds: /* @__PURE__ */ new Set(),
932
+ visibleNodes: [],
933
+ visibleRootNodes: []
934
+ };
935
+ let i = new Map(e.map((e) => [e.id, e])), a = V(t), o = [], s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = !1, u = (e) => {
936
+ if (c.has(e)) return;
937
+ c.add(e);
938
+ let t = i.get(e);
939
+ if (!t) return;
940
+ s.add(e), o.push(t);
941
+ let { edgesToFollow: r, waitingForInput: d } = H(a.get(e) || [], n, i);
942
+ if (d) {
943
+ l = !0;
944
+ return;
945
+ }
946
+ r.forEach((e) => {
947
+ u(e.target);
948
+ });
949
+ };
950
+ u(r.id);
951
+ let d = new Map(o.map((e, t) => [e.id, t])), f = new Set(s);
952
+ G(s, f, d, i);
953
+ let p = e.filter((e) => f.has(e.id)).sort((e, t) => (d.get(e.id) ?? 2 ** 53 - 1) - (d.get(t.id) ?? 2 ** 53 - 1)), m = p.filter((e) => !(e.parentId && f.has(e.parentId)));
954
+ return {
955
+ endOfPathReached: !l,
956
+ visibleNodeIds: f,
957
+ visibleNodes: p,
958
+ visibleRootNodes: m
959
+ };
960
+ }, q = (e) => {
961
+ if (e.length === 1) return e[0];
962
+ let t = new Set(e.map((e) => e.id)), n = /* @__PURE__ */ new Set();
963
+ return e.forEach((e) => {
964
+ e.nodes.forEach((e) => {
965
+ if (f(e)) {
966
+ let r = e.data.targetId;
967
+ r && t.has(r) && n.add(r);
968
+ }
969
+ });
970
+ }), e.find((e) => !n.has(e.id)) || e[0];
971
+ }, J = (e, t, n, r, i = /* @__PURE__ */ new Set()) => {
972
+ let a = /* @__PURE__ */ new Set();
973
+ for (let o of e) if (n.has(o)) {
974
+ let e = r.get(o), s = e ? t.get(e) : void 0;
975
+ if (s) {
976
+ if (e && i.has(e)) continue;
977
+ e && i.add(e);
978
+ let o = J(new Set(s.nodes.map((e) => e.id)), t, n, r, i);
979
+ for (let e of o) a.add(e);
980
+ }
981
+ } else a.add(o);
982
+ return a;
983
+ }, ne = (e, t) => {
984
+ let n = /* @__PURE__ */ new Set();
985
+ return t.forEach((t) => {
986
+ e.has(t.source) && e.has(t.target) && n.add(t.source);
987
+ }), Array.from(e).filter((e) => !n.has(e));
988
+ }, Y = (e) => {
989
+ if (!e) return {
990
+ edges: [],
991
+ id: "empty",
992
+ nodes: []
993
+ };
994
+ let t = Array.isArray(e) ? e : [e];
995
+ if (t.length === 0) return {
996
+ edges: [],
997
+ id: "empty",
998
+ nodes: []
999
+ };
1000
+ let n = q(t);
1001
+ if (t.length === 1) return n;
1002
+ let r = new Map(t.map((e) => [e.id, e])), i = [], a = [...n.edges], o = new Set([n.id]), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), u = (e) => {
1003
+ let t = [];
1004
+ return e.forEach((e) => {
1005
+ if (!f(e)) {
1006
+ t.push(e);
1007
+ return;
1008
+ }
1009
+ let n = e.data.targetId;
1010
+ if (!n) return;
1011
+ let i = r.get(n);
1012
+ if (!i) {
1013
+ console.warn(`Flow with id "${n}" not found`);
1014
+ return;
1015
+ }
1016
+ let l = i.nodes.find((e) => !e.parentId);
1017
+ if (!l) {
1018
+ console.warn(`Flow "${n}" has no root node; preserving FlowNode "${e.id}"`), t.push(e);
1019
+ return;
1020
+ }
1021
+ s.set(e.id, l.id), c.set(e.id, n), o.has(n) || (o.add(n), a.push(...i.edges), t.push(...u(i.nodes)));
1022
+ }), t;
1023
+ };
1024
+ i.push(...u(n.nodes)), a.forEach((e) => {
1025
+ if (s.has(e.source)) {
1026
+ let t = l.get(e.source);
1027
+ t ? t.push(e) : l.set(e.source, [e]);
1028
+ }
1029
+ });
1030
+ let d = a.map((e) => {
1031
+ if (s.has(e.source)) return null;
1032
+ let t = s.get(e.target);
1033
+ return t ? {
1034
+ ...e,
1035
+ target: t
1036
+ } : e;
1037
+ }).filter((e) => e !== null);
1038
+ return s.forEach((e, t) => {
1039
+ let n = l.get(t);
1040
+ if (!n?.length) return;
1041
+ let i = c.get(t), a = i ? r.get(i) : void 0;
1042
+ a && ne(J(new Set(a.nodes.map((e) => e.id)), r, s, c, new Set(i ? [i] : [])), d).forEach((e) => {
1043
+ n.forEach((n) => {
1044
+ let r = s.get(n.target) ?? n.target, i = n.id ?? `${t}__${n.target}`;
1045
+ d.push({
1046
+ ...n,
1047
+ id: `${e}__${i}`,
1048
+ source: e,
1049
+ target: r
1050
+ });
1051
+ });
1052
+ });
1053
+ }), {
1054
+ edges: d,
1055
+ id: n.id,
1056
+ nodes: i
1057
+ };
1058
+ }, X = n(null), re = ({ children: t, value: n }) => /* @__PURE__ */ e(X.Provider, {
1059
+ value: n,
1060
+ children: t
1061
+ }), ie = () => {
1062
+ let e = i(X) ?? {
1063
+ flows: null,
1064
+ formErrors: {},
1065
+ formValues: {},
1066
+ googleApiKey: void 0,
1067
+ inputNodes: [],
1068
+ language: "",
1069
+ setFieldValue: () => {}
1070
+ }, t = o(() => e.flows ? Y(e.flows).edges : [], [e.flows]);
1071
+ return {
1072
+ ...e,
1073
+ edges: t
1074
+ };
1075
+ }, ae = [
1076
+ "b",
1077
+ "i",
1078
+ "em",
1079
+ "strong",
1080
+ "u",
1081
+ "br",
1082
+ "p",
1083
+ "span"
1084
+ ], oe = ["class"], Z = (e, t = {}) => {
1085
+ if (e == null || e === "") return "";
1086
+ let n = String(e), { plainTextOnly: r = !0, allowedTags: i, allowedAttributes: a } = t;
1087
+ if (r) return l.sanitize(n, {
1088
+ ALLOWED_ATTR: [],
1089
+ ALLOWED_TAGS: []
1090
+ });
1091
+ let o = i ?? ae, s = a ?? oe;
1092
+ return l.sanitize(n, {
1093
+ ALLOW_DATA_ATTR: !1,
1094
+ ALLOW_UNKNOWN_PROTOCOLS: !1,
1095
+ ALLOWED_ATTR: s,
1096
+ ALLOWED_TAGS: o,
1097
+ FORBID_ATTR: ["style"],
1098
+ FORBID_TAGS: ["style", "script"],
1099
+ KEEP_CONTENT: !0,
1100
+ RETURN_DOM: !1,
1101
+ RETURN_DOM_FRAGMENT: !1
1102
+ });
1103
+ }, se = 100, Q = (e, t = {}, n = 0, r = /* @__PURE__ */ new WeakSet()) => {
1104
+ if (n > se) return console.warn(`sanitizeHttpResponse: Maximum depth (${se}) exceeded.`), typeof e == "string" ? Z(e, t) : "[Max Depth Exceeded]";
1105
+ if (e == null) return e;
1106
+ if (typeof e == "string") return Z(e, t);
1107
+ if (Array.isArray(e)) return e.map((e) => Q(e, t, n + 1, r));
1108
+ if (typeof e == "object") {
1109
+ if (r.has(e)) return console.warn("sanitizeHttpResponse: Circular reference detected. Breaking cycle to prevent infinite recursion."), "[Circular Reference]";
1110
+ r.add(e);
1111
+ let i = {};
1112
+ for (let [a, o] of Object.entries(e)) i[a] = Q(o, t, n + 1, r);
1113
+ return r.delete(e), i;
1114
+ }
1115
+ return e;
1116
+ }, ce = (e) => {
1117
+ let t = ie(), n = T(e ?? t.language);
1118
+ return o(() => (e) => {
1119
+ let t = n(e);
1120
+ return typeof e == "object" && e ? Z(t) : t;
1121
+ }, [n]);
1122
+ }, le = (e) => new Promise((t, n) => {
1123
+ let r = new FileReader();
1124
+ r.onload = () => {
1125
+ let n = r.result;
1126
+ t({
1127
+ data: n,
1128
+ lastModified: e.lastModified,
1129
+ name: e.name,
1130
+ size: e.size,
1131
+ type: e.type
1132
+ });
1133
+ }, r.onerror = () => {
1134
+ n(/* @__PURE__ */ Error(`Failed to read file: ${e.name}`));
1135
+ }, r.readAsDataURL(e);
1136
+ }), ue = (e) => {
1137
+ let t = e.data.split(",")[1], n = atob(t), r = new ArrayBuffer(n.length), i = new Uint8Array(r);
1138
+ for (let e = 0; e < n.length; e++) i[e] = n.charCodeAt(e);
1139
+ let a = new Blob([r], { type: e.type });
1140
+ return new File([a], e.name, {
1141
+ lastModified: e.lastModified,
1142
+ type: e.type
1143
+ });
1144
+ }, de = (e) => Promise.all(e.map((e) => le(e))), fe = n(void 0), pe = () => i(fe), me = ({ children: t, components: n, googleApiKey: r, language: i, theme: a, validationMode: o }) => {
1145
+ let s = {
1146
+ components: n,
1147
+ googleApiKey: r,
1148
+ language: i,
1149
+ theme: a,
1150
+ validationMode: o
1151
+ };
1152
+ return /* @__PURE__ */ e(fe.Provider, {
1153
+ value: s,
1154
+ children: t
1155
+ });
1156
+ }, he = async (e) => {
1157
+ try {
1158
+ let { url: t, method: n = "GET", headers: r = [], body: i } = e;
1159
+ if (!t || t.trim() === "") return {
1160
+ error: "No URL provided",
1161
+ success: !1
1162
+ };
1163
+ let a = { "Content-Type": "application/json" };
1164
+ r.forEach((e) => {
1165
+ e.key && e.value && (a[e.key] = e.value);
1166
+ });
1167
+ let o = {
1168
+ headers: a,
1169
+ method: n
1170
+ };
1171
+ i && n && [
1172
+ "POST",
1173
+ "PUT",
1174
+ "PATCH"
1175
+ ].includes(n) && (o.body = i);
1176
+ let s = await fetch(t, o), c;
1177
+ return c = s.headers.get("content-type")?.includes("application/json") ? await s.json() : await s.text(), s.ok ? {
1178
+ data: c,
1179
+ status: s.status,
1180
+ statusText: s.statusText,
1181
+ success: !0
1182
+ } : {
1183
+ data: c,
1184
+ error: `HTTP ${s.status}: ${s.statusText}`,
1185
+ status: s.status,
1186
+ statusText: s.statusText,
1187
+ success: !1
1188
+ };
1189
+ } catch (e) {
1190
+ return {
1191
+ error: e instanceof Error ? e.message : "An unknown error occurred",
1192
+ success: !1
1193
+ };
1194
+ }
1195
+ }, $ = (e, t, n = {}) => {
1196
+ if (!e) return "";
1197
+ let { encode: r = !1, json: i = !1 } = n;
1198
+ return e.replace(/\{\{([\w-]+)}}/g, (e, n) => {
1199
+ let a = t[n.trim()];
1200
+ if (a == null) return i ? "null" : "";
1201
+ let o = typeof a == "string" ? Z(a) : a;
1202
+ if (r) return encodeURIComponent(String(o));
1203
+ if (i) {
1204
+ if (typeof o == "string") return `"${o.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"`;
1205
+ if (typeof o == "number" || typeof o == "boolean") return String(o);
1206
+ if (typeof o == "object") return JSON.stringify(o);
1207
+ }
1208
+ return String(o);
1209
+ });
1210
+ }, ge = (e, t) => e ? e.replace(/\{\{response\.([\w.-]+)}}/g, (e, n) => {
1211
+ let r = _e(t, n.trim());
1212
+ return r == null ? "" : String(r);
1213
+ }) : "", _e = (e, t) => {
1214
+ if (!(!e || typeof e != "object")) return t.split(".").reduce((e, t) => {
1215
+ if (!(typeof e != "object" || !e)) return e[t];
1216
+ }, e);
1217
+ }, ve = async (e, t, n) => {
1218
+ if (!e.url || e.url.trim() === "") return {
1219
+ error: "No URL configured for submission",
1220
+ success: !1
1221
+ };
1222
+ let r = $(e.url, t, { encode: !0 });
1223
+ if (!r || r.trim() === "") return {
1224
+ error: "Invalid URL after template replacement",
1225
+ success: !1
1226
+ };
1227
+ let i = e.headers?.map((e) => ({
1228
+ key: e.key,
1229
+ value: $(e.value, t)
1230
+ })), a = await he({
1231
+ body: e.sendAllFormValues ? JSON.stringify(L(t, n)) : e.body ? $(e.body, t, { json: !0 }) : void 0,
1232
+ headers: i,
1233
+ method: e.method || "POST",
1234
+ url: r
1235
+ });
1236
+ if (!a.success) return {
1237
+ data: a.data,
1238
+ error: a.error,
1239
+ success: !1
1240
+ };
1241
+ let o = e.redirectUrl ? (() => {
1242
+ let t = ge(e.redirectUrl, a.data);
1243
+ return t && t.trim() !== "" ? t : void 0;
1244
+ })() : void 0;
1245
+ return {
1246
+ data: a.data,
1247
+ redirectUrl: o,
1248
+ success: !0
1249
+ };
1250
+ }, ye = (e) => {
1251
+ e && (e.startsWith("http://") || e.startsWith("https://") ? window.location.href = e : window.history?.pushState ? (window.history.pushState({}, "", e), window.dispatchEvent(new PopStateEvent("popstate"))) : window.location.href = e);
1252
+ }, be = (e, t, n, i) => {
1253
+ let [a, s] = c(!1), [l, d] = c(null), f = o(() => {
1254
+ let t = e.find((e) => u(e) && e.data?.type === "submit");
1255
+ return t && u(t) ? t : null;
1256
+ }, [e]), p = r(async (e) => {
1257
+ if (!f?.data?.submitConfig) return null;
1258
+ let r = f.data.submitConfig;
1259
+ if (!r.url || r.url.trim() === "") return null;
1260
+ d(null), r.showLoading !== !1 && s(!0);
1261
+ try {
1262
+ let a = await ve(r, t, i);
1263
+ if (a.success) {
1264
+ let t = x(r.successMessage, n);
1265
+ if (t && d({
1266
+ message: t,
1267
+ type: "success"
1268
+ }), e && e(a.data), a.redirectUrl) {
1269
+ let e = a.redirectUrl;
1270
+ setTimeout(() => ye(e), 1e3);
1271
+ }
1272
+ } else d({
1273
+ message: x(r.errorMessage, n) || a.error || "An error occurred during submission",
1274
+ type: "error"
1275
+ });
1276
+ return a;
1277
+ } catch (e) {
1278
+ let t = x(r.errorMessage, n) || (e instanceof Error ? e.message : "An unexpected error occurred");
1279
+ return d({
1280
+ message: t,
1281
+ type: "error"
1282
+ }), {
1283
+ error: t,
1284
+ success: !1
1285
+ };
1286
+ } finally {
1287
+ s(!1);
1288
+ }
1289
+ }, [
1290
+ f,
1291
+ t,
1292
+ n,
1293
+ i
1294
+ ]);
1295
+ return {
1296
+ clearSubmitMessage: r(() => {
1297
+ d(null);
1298
+ }, []),
1299
+ handleSubmitWithConfig: p,
1300
+ hasSubmitConfig: !!f?.data?.submitConfig,
1301
+ isSubmitting: a,
1302
+ submitButtonNode: f,
1303
+ submitMessage: l
1304
+ };
1305
+ }, xe = ({ components: e, flows: t, googleApiKey: n, initialValues: i = {}, language: l, onChange: d, onSubmit: f, theme: p, validate: m, validationMode: h }) => {
1306
+ let g = pe(), _ = o(() => ({
1307
+ components: {
1308
+ form: e?.form ?? g?.components?.form,
1309
+ group: e?.group ?? g?.components?.group,
1310
+ inputs: {
1311
+ ...g?.components?.inputs,
1312
+ ...e?.inputs
1313
+ },
1314
+ submitButton: e?.submitButton ?? g?.components?.submitButton,
1315
+ submitButtonWrapper: e?.submitButtonWrapper ?? g?.components?.submitButtonWrapper,
1316
+ ui: {
1317
+ ...g?.components?.ui,
1318
+ ...e?.ui
1319
+ }
1320
+ },
1321
+ googleApiKey: n ?? g?.googleApiKey,
1322
+ language: l ?? g?.language ?? "en",
1323
+ theme: p ?? g?.theme ?? "dark",
1324
+ validationMode: h ?? g?.validationMode ?? "onSubmit"
1325
+ }), [
1326
+ e,
1327
+ g,
1328
+ n,
1329
+ l,
1330
+ p,
1331
+ h
1332
+ ]), v = o(() => Y(t), [t]), { nodes: y, edges: b } = v, x = o(() => ee(y), [y]), S = ce(_.language), C = s({}), [w, T] = c({}), [E, D] = c(() => {
1333
+ let e = { ...i };
1334
+ return y.forEach((t) => {
1335
+ if (u(t)) {
1336
+ let n = t.id;
1337
+ if (e[n] !== void 0) return;
1338
+ let { defaultValue: r } = t.data;
1339
+ if (!r) return;
1340
+ if (r.type === "static" && r.staticValue !== void 0 && (e[n] = r.staticValue), r.type === "reference" && r.referenceField) {
1341
+ let { referenceField: t } = r, i = e[t];
1342
+ i !== void 0 && (e[n] = i);
1343
+ }
1344
+ }
1345
+ }), e;
1346
+ }), { endOfPathReached: O, visibleNodes: k, visibleRootNodes: A } = o(() => K(y, b, E), [
1347
+ y,
1348
+ b,
1349
+ E
1350
+ ]), { clearSubmitMessage: j, handleSubmitWithConfig: M, hasSubmitConfig: N, isSubmitting: P, submitMessage: te } = be(k, E, _.language, x), I = s(d), R = s(m), z = o(() => L(E, x), [E, x]), V = r((e, t) => {
1351
+ D((n) => ({
1352
+ ...n,
1353
+ [e]: t
1354
+ })), T((t) => {
1355
+ let n = { ...t };
1356
+ return delete n[e], n;
1357
+ });
1358
+ }, []), H = r((e) => {
1359
+ Object.keys(e).length !== 0 && (D((t) => ({
1360
+ ...t,
1361
+ ...e
1362
+ })), T((t) => {
1363
+ let n = { ...t };
1364
+ return Object.keys(e).forEach((e) => {
1365
+ delete n[e];
1366
+ }), n;
1367
+ }));
1368
+ }, []), U = r((e) => {
1369
+ let t = {};
1370
+ k.forEach((e) => {
1371
+ if (u(e)) {
1372
+ let n = e.id, r = E[n];
1373
+ if (e.data.required && F(r)) {
1374
+ t[n] = S(e.data.errorMessage) || S("validation.required");
1375
+ return;
1376
+ }
1377
+ if (!F(r) && e.data.pattern) try {
1378
+ new RegExp(e.data.pattern).test(String(r)) || (t[n] = S(e.data.errorMessage) || S("validation.invalidFormat"));
1379
+ } catch (e) {
1380
+ console.error(`Invalid pattern for field ${n}:`, e);
1381
+ }
1382
+ }
1383
+ });
1384
+ let n = e ? e(E, k) : {}, r = {
1385
+ ...t,
1386
+ ...n
1387
+ };
1388
+ return T(r), {
1389
+ errors: r,
1390
+ hasCustomErrors: Object.keys(n).length > 0,
1391
+ isValid: Object.keys(r).length === 0
1392
+ };
1393
+ }, [
1394
+ k,
1395
+ E,
1396
+ S
1397
+ ]), W = r(async () => {
1398
+ let { isValid: e } = U(R.current);
1399
+ if (!e) return !1;
1400
+ if (N) {
1401
+ let e = await M((e) => {
1402
+ f && f(z, { httpResponse: e });
1403
+ });
1404
+ if (e === null) return f?.(z), !0;
1405
+ if (!e.success) return !0;
1406
+ } else f && f(z);
1407
+ return !0;
1408
+ }, [
1409
+ U,
1410
+ N,
1411
+ M,
1412
+ f,
1413
+ z
1414
+ ]), G = o(() => {
1415
+ let e = [];
1416
+ return k.forEach((t) => {
1417
+ if (!u(t)) return;
1418
+ let n = t.id, r = E[n];
1419
+ if (t.data.required && F(r)) {
1420
+ let r = S(t.data.label) || n;
1421
+ e.push(r);
1422
+ }
1423
+ }), e;
1424
+ }, [
1425
+ k,
1426
+ E,
1427
+ S
1428
+ ]), q = o(() => k.some((e) => u(e) && e.data.type === "submit"), [k]), J = o(() => {
1429
+ let e = Object.keys(w);
1430
+ return e.length > 0 ? e[0] : void 0;
1431
+ }, [w]);
1432
+ return a(() => {
1433
+ I.current = d;
1434
+ }, [d]), a(() => {
1435
+ R.current = m;
1436
+ }, [m]), a(() => {
1437
+ I.current?.(z);
1438
+ }, [z]), a(() => {
1439
+ _.validationMode === "onChange" && U(R.current);
1440
+ }, [_.validationMode, U]), a(() => {
1441
+ let e = B(x, E, C.current);
1442
+ Object.keys(e).length > 0 && H(e), C.current = E;
1443
+ }, [
1444
+ E,
1445
+ x,
1446
+ H
1447
+ ]), {
1448
+ canSubmit: !q && O && y.length > 0,
1449
+ clearSubmitMessage: j,
1450
+ config: _,
1451
+ firstErrorFieldId: J,
1452
+ formErrors: w,
1453
+ formValues: E,
1454
+ handleSubmit: W,
1455
+ inputNodes: x,
1456
+ isSubmitting: P,
1457
+ mergedFlow: v,
1458
+ missingRequiredFields: G,
1459
+ prevFormValuesRef: C,
1460
+ setFieldErrors: T,
1461
+ setFieldValue: V,
1462
+ setMultipleFieldValues: H,
1463
+ submitMessage: te,
1464
+ t: S,
1465
+ validateForm: U,
1466
+ visibleNodes: k,
1467
+ visibleRootNodes: A
1468
+ };
1469
+ }, Se = ({ DefaultFormWrapper: n, DefaultGroup: i, DefaultSubmitButton: a, DefaultSubmitButtonWrapper: s, config: c, defaultInputRenderers: l, defaultUI: f, formErrors: m, formValues: h, missingRequiredFields: g, setFieldValue: _, visibleNodes: v }) => {
1470
+ let y = o(() => c.components.form || n, [c.components.form, n]), b = o(() => c.components.submitButton || a, [c.components.submitButton, a]), S = o(() => c.components.submitButtonWrapper || s || t, [c.components.submitButtonWrapper, s]);
1471
+ return {
1472
+ FormWrapper: y,
1473
+ renderNode: r(function t(n) {
1474
+ let { type: r } = n;
1475
+ switch (r) {
1476
+ case D.input: {
1477
+ if (!u(n)) return null;
1478
+ let t = n.data, r = t.type || "text", i = c.components.inputs?.[r], a = l[r], o = i || a, s = n.id, d = (e) => _(s, e), f = h[s], p = m[s], v = x(t.label, c.language), y = P(t, c.language), b = x(t.helperText, c.language), S = N(n), C = Z(v), w = Z(y), T = Z(b);
1479
+ return o ? /* @__PURE__ */ e(o, {
1480
+ id: n.id,
1481
+ node: n,
1482
+ value: f,
1483
+ error: p,
1484
+ label: C,
1485
+ placeholder: w,
1486
+ helperText: T,
1487
+ name: S,
1488
+ setValue: d,
1489
+ missingRequiredFields: g
1490
+ }, n.id) : (console.warn("No renderer found for input type:", r), null);
1491
+ }
1492
+ case D.group: return p(n) ? /* @__PURE__ */ e(c.components.group || i, {
1493
+ node: n,
1494
+ children: v.filter((e) => e.parentId === n.id).map((e) => t(e))
1495
+ }, n.id) : null;
1496
+ case D.ui: {
1497
+ if (!d(n)) return null;
1498
+ let t = n.data.type || "title", r = c.components.ui?.[t], i = f[t], a = r || i;
1499
+ return a ? /* @__PURE__ */ e(a, { node: n }, n.id) : null;
1500
+ }
1501
+ case D.flow: return null;
1502
+ default: return console.warn("Unknown node type:", r), null;
1503
+ }
1504
+ }, [
1505
+ c,
1506
+ v,
1507
+ h,
1508
+ m,
1509
+ _,
1510
+ g,
1511
+ l,
1512
+ f,
1513
+ i
1514
+ ]),
1515
+ SubmitButton: b,
1516
+ SubmitButtonWrapper: S
1517
+ };
1518
+ }, Ce = {
1519
+ dark: {
1520
+ background: "#0A0A0A",
1521
+ border: "#262626",
1522
+ borderFocus: "#60A5FA",
1523
+ card: "#171717",
1524
+ error: "#FF6467",
1525
+ errorBg: "#2A1010",
1526
+ errorLight: "#2A1010",
1527
+ input: "#171717",
1528
+ muted: "#262626",
1529
+ primary: "#60A5FA",
1530
+ primaryDisabled: "#404040",
1531
+ primaryForeground: "#0A0A0A",
1532
+ primaryLight: "#1E3A5F",
1533
+ separator: "#262626",
1534
+ success: "#10B981",
1535
+ successBg: "#1A3A24",
1536
+ text: "#FAFAFA",
1537
+ textMuted: "#A1A1A1",
1538
+ textSecondary: "#A1A1A1"
1539
+ },
1540
+ light: {
1541
+ background: "#FFFFFF",
1542
+ border: "#E5E5E5",
1543
+ borderFocus: "#3B82F6",
1544
+ card: "#FFFFFF",
1545
+ error: "#E7000B",
1546
+ errorBg: "#FEE2E2",
1547
+ errorLight: "#FEE2E2",
1548
+ input: "#FFFFFF",
1549
+ muted: "#F5F5F5",
1550
+ primary: "#3B82F6",
1551
+ primaryDisabled: "#A1A1A1",
1552
+ primaryForeground: "#FFFFFF",
1553
+ primaryLight: "#EFF6FF",
1554
+ separator: "#E5E5E5",
1555
+ success: "#10B981",
1556
+ successBg: "#D1FAE5",
1557
+ text: "#0A0A0A",
1558
+ textMuted: "#737373",
1559
+ textSecondary: "#525252"
1560
+ }
1561
+ }, we = n({
1562
+ colors: Ce.light,
1563
+ setTheme: () => null,
1564
+ theme: "system"
1565
+ }), Te = ({ children: t, defaultTheme: n = "system", storageKey: r = "treege-theme", theme: i, ...s }) => {
1566
+ let [l, u] = c(() => i || typeof window < "u" && localStorage.getItem(r) || n), d = i ?? l, f = Ce[d === "system" ? typeof window < "u" && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : d], p = o(() => ({
1567
+ colors: f,
1568
+ setTheme: (e) => {
1569
+ !i && typeof window < "u" && localStorage.setItem(r, e), u(e);
1570
+ },
1571
+ theme: d
1572
+ }), [
1573
+ r,
1574
+ d,
1575
+ i,
1576
+ f
1577
+ ]);
1578
+ return a(() => {
1579
+ i && u(i);
1580
+ }, [i]), a(() => {
1581
+ if (typeof window > "u") return;
1582
+ let e = window.document.documentElement;
1583
+ if (e.classList.remove("light", "dark"), d === "system") {
1584
+ let t = window.matchMedia("(prefers-color-scheme: dark)"), n = t.matches ? "dark" : "light";
1585
+ e.classList.add(n);
1586
+ let r = (t) => {
1587
+ e.classList.remove("light", "dark"), e.classList.add(t.matches ? "dark" : "light");
1588
+ };
1589
+ return t.addEventListener("change", r), () => t.removeEventListener("change", r);
1590
+ }
1591
+ e.classList.add(d);
1592
+ }, [d]), /* @__PURE__ */ e(we.Provider, {
1593
+ ...s,
1594
+ value: p,
1595
+ children: t
1596
+ });
1597
+ }, Ee = () => {
1598
+ let e = i(we);
1599
+ if (e === void 0) throw Error("useTheme must be used within a ThemeProvider");
1600
+ return e;
1601
+ };
1602
+ //#endregion
1603
+ export { E as A, F as C, A as D, N as E, p as F, u as I, d as L, w as M, x as N, j as O, f as P, L as S, P as T, U as _, me as a, B as b, de as c, Z as d, Q as f, K as g, W as h, xe as i, T as j, D as k, ue as l, ie as m, Ee as n, pe as o, re as p, Se as r, le as s, Te as t, ce as u, Y as v, te as w, I as x, R as y };