treege 3.0.0-beta.62 → 3.0.0-beta.64

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 (60) hide show
  1. package/README.md +95 -43
  2. package/dist/DefaultInputs-2wzCRMKH.js +1742 -0
  3. package/dist/{ThemeContext-cGSTk24y.js → ThemeContext-7cghqUb0.js} +108 -602
  4. package/dist/{editor-K1jjfc5n.js → editor-DPECN9XS.js} +1799 -1800
  5. package/dist/editor.js +2 -2
  6. package/dist/main.js +6 -4
  7. package/dist/renderer/features/TreegeRenderer/native/TreegeRenderer.d.ts +1 -1
  8. package/dist/renderer/features/TreegeRenderer/native/components/DefaultInputs.d.ts +1 -2
  9. package/dist/renderer/features/TreegeRenderer/native/components/DefaultStep.d.ts +1 -1
  10. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAddressInput.d.ts +2 -2
  11. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultAutocompleteInput.d.ts +2 -2
  12. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultCheckboxInput.d.ts +2 -2
  13. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateInput.d.ts +2 -2
  14. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultDateRangeInput.d.ts +2 -2
  15. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultFileInput.d.ts +2 -2
  16. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHiddenInput.d.ts +2 -2
  17. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultHttpInput.d.ts +2 -2
  18. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultNumberInput.d.ts +2 -2
  19. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultPasswordInput.d.ts +2 -2
  20. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultRadioInput.d.ts +2 -2
  21. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSelectInput.d.ts +2 -2
  22. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSubmitInput.d.ts +11 -0
  23. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultSwitchInput.d.ts +2 -2
  24. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextInput.d.ts +2 -2
  25. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTextareaInput.d.ts +2 -2
  26. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeInput.d.ts +2 -2
  27. package/dist/renderer/features/TreegeRenderer/native/components/inputs/DefaultTimeRangeInput.d.ts +2 -2
  28. package/dist/renderer/features/TreegeRenderer/useTreegeRenderer.d.ts +2 -0
  29. package/dist/renderer/features/TreegeRenderer/web/TreegeRenderer.d.ts +1 -1
  30. package/dist/renderer/features/TreegeRenderer/web/components/DefaultFormWrapper.d.ts +2 -1
  31. package/dist/renderer/features/TreegeRenderer/web/components/DefaultStep.d.ts +1 -1
  32. package/dist/renderer/features/TreegeRenderer/web/components/DefaultSubmitButton.d.ts +4 -0
  33. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAddressInput.d.ts +2 -2
  34. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultAutocompleteInput.d.ts +2 -2
  35. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultCheckboxInput.d.ts +2 -2
  36. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateInput.d.ts +2 -2
  37. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultDateRangeInput.d.ts +2 -2
  38. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultFileInput.d.ts +2 -2
  39. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHiddenInput.d.ts +2 -2
  40. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultHttpInput.d.ts +2 -2
  41. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultNumberInput.d.ts +2 -2
  42. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultPasswordInput.d.ts +2 -2
  43. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultRadioInput.d.ts +2 -2
  44. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSelectInput.d.ts +2 -2
  45. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSubmitInput.d.ts +10 -2
  46. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultSwitchInput.d.ts +2 -2
  47. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextAreaInput.d.ts +2 -2
  48. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTextInput.d.ts +2 -2
  49. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeInput.d.ts +2 -2
  50. package/dist/renderer/features/TreegeRenderer/web/components/inputs/DefaultTimeRangeInput.d.ts +2 -2
  51. package/dist/renderer/hooks/useRenderNode.d.ts +4 -1
  52. package/dist/renderer/types/renderer.d.ts +73 -11
  53. package/dist/renderer/utils/form.d.ts +16 -0
  54. package/dist/renderer-DlAYvOLz.js +272 -0
  55. package/dist/renderer-native.js +1011 -1002
  56. package/dist/renderer.js +5 -3
  57. package/dist/useRenderNode-CZt7LwVV.js +504 -0
  58. package/package.json +1 -1
  59. package/dist/DefaultInputs-DamDWb5R.js +0 -1988
  60. package/dist/renderer/features/TreegeRenderer/InputRendererHost.d.ts +0 -15
package/dist/editor.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as e } from "./editor-K1jjfc5n.js";
2
- import { n as t, t as n } from "./ThemeContext-cGSTk24y.js";
1
+ import { t as e } from "./editor-DPECN9XS.js";
2
+ import { n as t, t as n } from "./ThemeContext-7cghqUb0.js";
3
3
  export { n as ThemeProvider, e as TreegeEditor, t as useTheme };
package/dist/main.js CHANGED
@@ -1,4 +1,6 @@
1
- import { t as e } from "./editor-K1jjfc5n.js";
2
- import { B as t, H as n, M as r, U as i, V as a, a as o, b as s, c, d as l, f as u, g as d, h as f, i as p, j as m, l as h, m as g, n as _, o as v, p as y, s as b, t as x, u as S, x as C, y as w, z as T } from "./ThemeContext-cGSTk24y.js";
3
- import { C as E, E as D, S as O, T as k, _ as A, a as j, b as M, d as N, f as P, i as F, l as I, m as L, n as R, p as z, r as B, s as V, t as H, u as U, v as W, w as G, x as K, y as q } from "./DefaultInputs-DamDWb5R.js";
4
- export { D as DefaultAddressInput, k as DefaultAutocompleteInput, G as DefaultCheckboxInput, E as DefaultDateInput, O as DefaultDateRangeInput, K as DefaultFileInput, M as DefaultHiddenInput, q as DefaultHttpInput, W as DefaultNumberInput, A as DefaultPasswordInput, L as DefaultRadioInput, z as DefaultSelectInput, V as DefaultSwitchInput, j as DefaultTextAreaInput, F as DefaultTextInput, B as DefaultTimeInput, R as DefaultTimeRangeInput, U as Divider, x as ThemeProvider, N as Title, e as TreegeEditor, I as TreegeRenderer, S as TreegeRendererProvider, u as applyReferenceTransformation, y as calculateReferenceFieldUpdates, g as checkFormFieldHasValue, f as convertFormValuesToNamedFormat, H as defaultInputRenderers, P as defaultUI, c as evaluateCondition, h as evaluateConditions, w as fileToSerializable, s as filesToSerializable, o as findStartNode, v as getFlowRenderState, T as getStaticTranslations, t as getTranslatedText, d as isFieldEmpty, a as isGroupNode, n as isInputNode, b as isStartNode, i as isUINode, m as sanitize, r as sanitizeHttpResponse, C as serializableToFile, _ as useTheme, p as useTreegeRenderer, l as useTreegeRendererConfig };
1
+ import { t as e } from "./editor-DPECN9XS.js";
2
+ import { D as t, E as n, F as r, I as i, L as a, N as o, P as s, a as c, c as l, h as u, i as d, m as f, n as p, o as m, p as h, r as g, s as _, t as v } from "./ThemeContext-7cghqUb0.js";
3
+ import { S as y, _ as b, a as x, b as S, g as C, h as w, i as T, l as E, m as D, n as O, p as k, r as A, s as j, t as M, u as N, v as P, x as F, y as I } from "./DefaultInputs-2wzCRMKH.js";
4
+ import { a as L, c as R, i as z, l as B, n as V, o as H, r as U, s as W } from "./useRenderNode-CZt7LwVV.js";
5
+ import { i as G, n as K, r as q, t as J } from "./renderer-DlAYvOLz.js";
6
+ export { y as DefaultAddressInput, F as DefaultAutocompleteInput, S as DefaultCheckboxInput, I as DefaultDateInput, P as DefaultDateRangeInput, b as DefaultFileInput, C as DefaultHiddenInput, w as DefaultHttpInput, D as DefaultNumberInput, k as DefaultPasswordInput, N as DefaultRadioInput, E as DefaultSelectInput, j as DefaultSwitchInput, x as DefaultTextAreaInput, T as DefaultTextInput, A as DefaultTimeInput, O as DefaultTimeRangeInput, K as Divider, v as ThemeProvider, q as Title, e as TreegeEditor, J as TreegeRenderer, R as TreegeRendererProvider, g as applyReferenceTransformation, d as buildInitialFormValues, c as calculateReferenceFieldUpdates, m as checkFormFieldHasValue, _ as convertFormValuesToNamedFormat, M as defaultInputRenderers, G as defaultUI, H as evaluateCondition, W as evaluateConditions, h as fileToSerializable, f as filesToSerializable, U as findStartNode, z as getFlowRenderState, o as getStaticTranslations, s as getTranslatedText, l as isFieldEmpty, r as isGroupNode, i as isInputNode, L as isStartNode, a as isUINode, n as sanitize, t as sanitizeHttpResponse, u as serializableToFile, p as useTheme, V as useTreegeRenderer, B as useTreegeRendererConfig };
@@ -6,7 +6,7 @@ import { TreegeRendererProps } from '../../../types/renderer';
6
6
  * - Omits className (not used in React Native)
7
7
  * - Adds style and contentContainerStyle (React Native specific)
8
8
  */
9
- export type TreegeRendererNativeProps = Omit<TreegeRendererProps, "className"> & {
9
+ export type TreegeRendererNativeProps = Omit<TreegeRendererProps, "className" | "formId"> & {
10
10
  /**
11
11
  * Style for the ScrollView container
12
12
  */
@@ -15,7 +15,6 @@ import { default as DefaultTextareaInput } from './inputs/DefaultTextareaInput';
15
15
  import { default as DefaultTextInput } from './inputs/DefaultTextInput';
16
16
  import { default as DefaultTimeInput } from './inputs/DefaultTimeInput';
17
17
  import { default as DefaultTimeRangeInput } from './inputs/DefaultTimeRangeInput';
18
- import { InputExtraProps, InputFieldProps, InputRenderers } from '../../../../types/renderer';
18
+ import { InputRenderers } from '../../../../types/renderer';
19
19
  export { DefaultAddressInput, DefaultAutocompleteInput, DefaultCheckboxInput, DefaultDateInput, DefaultDateRangeInput, DefaultFileInput, DefaultHiddenInput, DefaultHttpInput, DefaultNumberInput, DefaultPasswordInput, DefaultRadioInput, DefaultSelectInput, DefaultSwitchInput, DefaultTextareaInput, DefaultTextInput, DefaultTimeInput, DefaultTimeRangeInput, };
20
- export declare const DefaultSubmitInput: (_field: InputFieldProps<"submit">, extra: InputExtraProps<"submit">) => import("react/jsx-runtime").JSX.Element;
21
20
  export declare const defaultInputRenderers: InputRenderers;
@@ -1,3 +1,3 @@
1
1
  import { StepRenderProps } from '../../../../types/renderer';
2
- declare const DefaultStep: ({ label, children, isFirstStep, isLastStep, canContinue, isSubmitting, onBack, onContinue }: StepRenderProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultStep: ({ step, label, children, canGoBack, isLastStep, canContinue, isSubmitting, onBack, onContinue }: StepRenderProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultStep;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultAddressInput: (field: InputFieldProps<"address">, extra: InputExtraProps<"address">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAddressInput: ({ field, extra }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAddressInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultAutocompleteInput: (field: InputFieldProps<"autocomplete">, extra: InputExtraProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAutocompleteInput: ({ field, extra }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAutocompleteInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultCheckboxInput: (field: InputFieldProps<"checkbox">, extra: InputExtraProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultCheckboxInput: ({ field, extra }: InputRenderProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultCheckboxInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultDateInput: (field: InputFieldProps<"date">, extra: InputExtraProps<"date">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateInput: ({ field, extra }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultDateInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultDateRangeInput: (field: InputFieldProps<"daterange">, extra: InputExtraProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateRangeInput: ({ field, extra }: InputRenderProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultDateRangeInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultFileInput: (field: InputFieldProps<"file">, extra: InputExtraProps<"file">) => import("react/jsx-runtime").JSX.Element | null;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultFileInput: ({ field, extra }: InputRenderProps<"file">) => import("react/jsx-runtime").JSX.Element | null;
3
3
  export default DefaultFileInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultHiddenInput: (_field: InputFieldProps<"hidden">, _extra: InputExtraProps<"hidden">) => null;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHiddenInput: (_props: InputRenderProps<"hidden">) => null;
3
3
  export default DefaultHiddenInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultHttpInput: (field: InputFieldProps<"http">, extra: InputExtraProps<"http">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHttpInput: ({ field, extra }: InputRenderProps<"http">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultHttpInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultNumberInput: (field: InputFieldProps<"number">, extra: InputExtraProps<"number">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultNumberInput: ({ field, extra }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultNumberInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultPasswordInput: (field: InputFieldProps<"password">, extra: InputExtraProps<"password">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultPasswordInput: ({ field, extra }: InputRenderProps<"password">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultPasswordInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultRadioInput: (field: InputFieldProps<"radio">, extra: InputExtraProps<"radio">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultRadioInput: ({ field, extra }: InputRenderProps<"radio">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultRadioInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultSelectInput: (field: InputFieldProps<"select">, extra: InputExtraProps<"select">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSelectInput: ({ field, extra }: InputRenderProps<"select">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultSelectInput;
@@ -0,0 +1,11 @@
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ /**
3
+ * The `submit` input node is declarative only: it marks where the flow submits
4
+ * and carries the optional custom label / `submitConfig`. The actual submit
5
+ * button is rendered once by the step (see `DefaultStep`), so the node itself
6
+ * renders nothing — guaranteeing a single, consistently-placed button whether
7
+ * submission comes from an explicit submit node, the default "Submit", or a
8
+ * "Continue" step.
9
+ */
10
+ declare const DefaultSubmitInput: (_props: InputRenderProps<"submit">) => null;
11
+ export default DefaultSubmitInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultSwitchInput: (field: InputFieldProps<"switch">, extra: InputExtraProps<"switch">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSwitchInput: ({ field, extra }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultSwitchInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTextInput: (field: InputFieldProps<"text">, extra: InputExtraProps<"text">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextInput: ({ field, extra }: InputRenderProps<"text">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTextInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTextareaInput: (field: InputFieldProps<"textarea">, extra: InputExtraProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextareaInput: ({ field, extra }: InputRenderProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTextareaInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTimeInput: (field: InputFieldProps<"time">, extra: InputExtraProps<"time">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeInput: ({ field, extra }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTimeRangeInput: (field: InputFieldProps<"timerange">, extra: InputExtraProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeRangeInput: ({ field, extra }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeRangeInput;
@@ -28,6 +28,7 @@ export declare const useTreegeRenderer: ({ baseUrl, components, flow, googleApiK
28
28
  components: {
29
29
  form: ((props: {
30
30
  children: import('react').ReactNode;
31
+ id?: string;
31
32
  onSubmit: (e: import('react').FormEvent<HTMLFormElement>) => void;
32
33
  }) => import('react').ReactNode) | undefined;
33
34
  inputs: {
@@ -55,6 +56,7 @@ export declare const useTreegeRenderer: ({ baseUrl, components, flow, googleApiK
55
56
  submitButton: ((props: {
56
57
  label?: string;
57
58
  disabled?: boolean;
59
+ isSubmitting?: boolean;
58
60
  [key: string]: unknown;
59
61
  } | {
60
62
  children?: import('react').ReactNode;
@@ -1,3 +1,3 @@
1
1
  import { TreegeRendererProps } from '../../../types/renderer';
2
- declare const TreegeRenderer: ({ baseUrl, components, className, flow, googleApiKey, headers, language, onChange, onSubmit, theme, validate, validationMode, initialValues, isLoading, }: TreegeRendererProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const TreegeRenderer: ({ baseUrl, components, className, flow, formId, googleApiKey, headers, language, onBack, onChange, onSubmit, theme, validate, validationMode, initialValues, isLoading, isSubmitting: isSubmittingProp, }: TreegeRendererProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default TreegeRenderer;
@@ -1,6 +1,7 @@
1
1
  import { FormEvent, ReactNode } from 'react';
2
- declare const DefaultFormWrapper: ({ children, onSubmit }: {
2
+ declare const DefaultFormWrapper: ({ children, id, onSubmit, }: {
3
3
  children: ReactNode;
4
+ id?: string;
4
5
  onSubmit: (e: FormEvent<HTMLFormElement>) => void;
5
6
  }) => import("react/jsx-runtime").JSX.Element;
6
7
  export default DefaultFormWrapper;
@@ -1,3 +1,3 @@
1
1
  import { StepRenderProps } from '../../../../types/renderer';
2
- declare const DefaultStep: ({ label, children, isFirstStep, isLastStep, canContinue, isSubmitting, onBack, onContinue, missingFields, }: StepRenderProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const DefaultStep: ({ step, label, children, canGoBack, isLastStep, canContinue, isSubmitting, onBack, onContinue, missingFields, }: StepRenderProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultStep;
@@ -1,6 +1,10 @@
1
1
  import { ButtonHTMLAttributes } from 'react';
2
2
  export interface SubmitButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
3
  label?: string;
4
+ /**
5
+ * When true, shows a spinner inside the button (and keeps it disabled).
6
+ */
7
+ isSubmitting?: boolean;
4
8
  }
5
9
  /**
6
10
  * Default submit button
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultAddressInput: (field: InputFieldProps<"address">, extra: InputExtraProps<"address">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAddressInput: ({ field, extra }: InputRenderProps<"address">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAddressInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultAutocompleteInput: (field: InputFieldProps<"autocomplete">, extra: InputExtraProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultAutocompleteInput: ({ field, extra }: InputRenderProps<"autocomplete">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultAutocompleteInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultCheckboxInput: (field: InputFieldProps<"checkbox">, extra: InputExtraProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultCheckboxInput: ({ field, extra }: InputRenderProps<"checkbox">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultCheckboxInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultDateInput: (field: InputFieldProps<"date">, extra: InputExtraProps<"date">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateInput: ({ field, extra }: InputRenderProps<"date">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultDateInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultDateRangeInput: (field: InputFieldProps<"daterange">, extra: InputExtraProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultDateRangeInput: ({ field, extra }: InputRenderProps<"daterange">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultDateRangeInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultFileInput: (field: InputFieldProps<"file">, extra: InputExtraProps<"file">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultFileInput: ({ field, extra }: InputRenderProps<"file">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultFileInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultHiddenInput: (field: InputFieldProps<"hidden">, _extra: InputExtraProps<"hidden">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHiddenInput: ({ field }: InputRenderProps<"hidden">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultHiddenInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultHttpInput: (field: InputFieldProps<"http">, extra: InputExtraProps<"http">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultHttpInput: ({ field, extra }: InputRenderProps<"http">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultHttpInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultNumberInput: (field: InputFieldProps<"number">, extra: InputExtraProps<"number">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultNumberInput: ({ field, extra }: InputRenderProps<"number">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultNumberInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultPasswordInput: (field: InputFieldProps<"password">, extra: InputExtraProps<"password">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultPasswordInput: ({ field, extra }: InputRenderProps<"password">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultPasswordInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultRadioInput: (field: InputFieldProps<"radio">, extra: InputExtraProps<"radio">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultRadioInput: ({ field, extra }: InputRenderProps<"radio">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultRadioInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultSelectInput: (field: InputFieldProps<"select">, extra: InputExtraProps<"select">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSelectInput: ({ field, extra }: InputRenderProps<"select">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultSelectInput;
@@ -1,3 +1,11 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultSubmitInput: (_field: InputFieldProps<"submit">, extra: InputExtraProps<"submit">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ /**
3
+ * The `submit` input node is declarative only: it marks where the flow submits
4
+ * and carries the optional custom label / `submitConfig`. The actual submit
5
+ * button is rendered once by the step (in its action row, next to Back) — see
6
+ * `DefaultStep` — so the node itself renders nothing. This guarantees a single,
7
+ * consistently-placed button whether submission comes from an explicit submit
8
+ * node, the default "Submit", or a "Continue" step.
9
+ */
10
+ declare const DefaultSubmitInput: (_props: InputRenderProps<"submit">) => null;
3
11
  export default DefaultSubmitInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultSwitchInput: (field: InputFieldProps<"switch">, extra: InputExtraProps<"switch">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultSwitchInput: ({ field, extra }: InputRenderProps<"switch">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultSwitchInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTextAreaInput: (field: InputFieldProps<"textarea">, extra: InputExtraProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextAreaInput: ({ field, extra }: InputRenderProps<"textarea">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTextAreaInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTextInput: (field: InputFieldProps<"text">, extra: InputExtraProps<"text">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTextInput: ({ field, extra }: InputRenderProps<"text">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTextInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTimeInput: (field: InputFieldProps<"time">, extra: InputExtraProps<"time">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeInput: ({ field, extra }: InputRenderProps<"time">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeInput;
@@ -1,3 +1,3 @@
1
- import { InputExtraProps, InputFieldProps } from '../../../../../types/renderer';
2
- declare const DefaultTimeRangeInput: (field: InputFieldProps<"timerange">, extra: InputExtraProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
1
+ import { InputRenderProps } from '../../../../../types/renderer';
2
+ declare const DefaultTimeRangeInput: ({ field, extra }: InputRenderProps<"timerange">) => import("react/jsx-runtime").JSX.Element;
3
3
  export default DefaultTimeRangeInput;
@@ -20,6 +20,7 @@ type UseRenderNodeParams = {
20
20
  formErrors: Record<string, string>;
21
21
  formValues: FormValues;
22
22
  inputNodes: Node<InputNodeData>[];
23
+ isSubmitting?: boolean;
23
24
  missingRequiredFields: string[];
24
25
  setFieldValue: (fieldId: string, value: unknown) => void;
25
26
  };
@@ -33,15 +34,17 @@ type UseRenderNodeParams = {
33
34
  * - SubmitButton: Submit button component with fallback
34
35
  * - SubmitButtonWrapper: Submit button wrapper component with fallback (web only, undefined for native)
35
36
  */
36
- export declare const useRenderNode: ({ DefaultFormWrapper, DefaultInputWrapper, DefaultSubmitButton, DefaultSubmitButtonWrapper, config, defaultInputRenderers, defaultUI, formErrors, formValues, inputNodes, missingRequiredFields, setFieldValue, }: UseRenderNodeParams) => {
37
+ export declare const useRenderNode: ({ DefaultFormWrapper, DefaultInputWrapper, DefaultSubmitButton, DefaultSubmitButtonWrapper, config, defaultInputRenderers, defaultUI, formErrors, formValues, inputNodes, isSubmitting, missingRequiredFields, setFieldValue, }: UseRenderNodeParams) => {
37
38
  FormWrapper: ((props: {
38
39
  children: ReactNode;
40
+ id?: string;
39
41
  onSubmit: (e: import('react').FormEvent<HTMLFormElement>) => void;
40
42
  }) => ReactNode) | AnyComponent;
41
43
  renderNode: (node: Node<TreegeNodeData>) => ReactNode;
42
44
  SubmitButton: ((props: {
43
45
  label?: string;
44
46
  disabled?: boolean;
47
+ isSubmitting?: boolean;
45
48
  [key: string]: unknown;
46
49
  } | {
47
50
  children?: ReactNode;
@@ -1,5 +1,5 @@
1
1
  import { Node } from '@xyflow/react';
2
- import { FormEvent, ReactNode } from 'react';
2
+ import { ComponentType, FormEvent, ReactNode } from 'react';
3
3
  import { SerializableFile } from '../utils/file';
4
4
  import { FlowStep } from '../utils/step';
5
5
  import { Flow, GroupNodeData, HttpHeaders, InputNodeData, InputOption, InputType, TreegeNodeData, UINodeData, UIType } from '../../shared/types/node';
@@ -143,11 +143,19 @@ export type InputExtraProps<T extends InputType = InputType> = {
143
143
  compactOptions?: boolean;
144
144
  };
145
145
  /**
146
- * An input renderer. Receives the spreadable `field` props (DOM-safe) and the
147
- * Treege `extra` props (state setters, translations, metadata) as two separate
148
- * arguments, so `field` can be spread onto a control: `<input {...field} />`.
146
+ * Props passed to an input renderer: the spreadable `field` props (DOM-safe, so
147
+ * `field` can be spread onto a control — `<input {...field} />`) and the Treege
148
+ * `extra` props (state setters, translations, metadata).
149
149
  */
150
- export type InputRenderer<T extends InputType = InputType> = (field: InputFieldProps<T>, extra: InputExtraProps<T>) => ReactNode;
150
+ export type InputRenderProps<T extends InputType = InputType> = {
151
+ field: InputFieldProps<T>;
152
+ extra: InputExtraProps<T>;
153
+ };
154
+ /**
155
+ * An input renderer — a React component, so it can use hooks and is rendered
156
+ * directly (`<Renderer field={field} extra={extra} />`) without a wrapper.
157
+ */
158
+ export type InputRenderer<T extends InputType = InputType> = ComponentType<InputRenderProps<T>>;
151
159
  export type UiRenderProps = {
152
160
  node: Node<UINodeData>;
153
161
  };
@@ -180,6 +188,13 @@ export type StepRenderProps = {
180
188
  totalSteps: number;
181
189
  /** True when this is the first step (Back should be hidden/disabled). */
182
190
  isFirstStep: boolean;
191
+ /**
192
+ * Whether a Back button should be shown. True on any step past the first, and
193
+ * also on the first step when the consumer passes an `onBack` prop (to bridge
194
+ * back-navigation to an outer flow, e.g. a parent modal's steps). Prefer this
195
+ * over `isFirstStep` to decide whether to render the Back control.
196
+ */
197
+ canGoBack: boolean;
183
198
  /**
184
199
  * True when this is the last visible step. The renderer turns Continue
185
200
  * into a submit action on the last step.
@@ -188,13 +203,25 @@ export type StepRenderProps = {
188
203
  /** Whether all required visible inputs of the step are filled. */
189
204
  canContinue: boolean;
190
205
  /**
191
- * Translated labels of required fields still empty. Only populated on the
192
- * last step so the step can show a tooltip explaining why submit is disabled.
206
+ * True when the step contains an explicit `submit` input node. Such a node is
207
+ * declarative it renders no button itself; the step renders the single
208
+ * submit button (reusing the node's label). Exposed for custom step
209
+ * implementations that need to know a submit node is present.
210
+ */
211
+ hasSubmitInput?: boolean;
212
+ /**
213
+ * Translated labels of the current step's required fields still empty. Lines
214
+ * up with `canContinue`, so the action button can show a tooltip explaining
215
+ * why Continue/Submit is disabled — on every step, not just the last.
193
216
  */
194
217
  missingFields?: string[];
195
218
  /** Submission in progress (passed through from `useTreegeRenderer`). */
196
219
  isSubmitting?: boolean;
197
- /** Advance to the previous step. No-op on the first step. */
220
+ /**
221
+ * Go back: advances to the previous step, or — on the first step, when the
222
+ * consumer passed an `onBack` prop — invokes that callback instead. No-op on
223
+ * the first step when no `onBack` prop was provided.
224
+ */
198
225
  onBack: () => void;
199
226
  /**
200
227
  * Advance to the next step (or trigger submit on the last step). The wrapper
@@ -226,20 +253,24 @@ export type TreegeRendererComponents = {
226
253
  */
227
254
  step?: (props: StepRenderProps) => ReactNode;
228
255
  /**
229
- * Custom form wrapper
256
+ * Custom form wrapper. `id` (when provided via the `formId` prop) should be
257
+ * forwarded to the underlying `<form>` element to keep external submit
258
+ * buttons working.
230
259
  */
231
260
  form?: (props: {
232
261
  children: ReactNode;
262
+ id?: string;
233
263
  onSubmit: (e: FormEvent<HTMLFormElement>) => void;
234
264
  }) => ReactNode;
235
265
  /**
236
266
  * Custom submit button (supports both web and native variants)
237
- * Web variant: { label?: string; disabled?: boolean; ...otherHTMLAttributes }
267
+ * Web variant: { label?: string; disabled?: boolean; isSubmitting?: boolean; ...otherHTMLAttributes }
238
268
  * Native variant: { children?: ReactNode; disabled?: boolean; isSubmitting?: boolean; onPress?: () => void }
239
269
  */
240
270
  submitButton?: (props: {
241
271
  label?: string;
242
272
  disabled?: boolean;
273
+ isSubmitting?: boolean;
243
274
  [key: string]: unknown;
244
275
  } | {
245
276
  children?: ReactNode;
@@ -332,7 +363,23 @@ export interface TreegeRendererProps extends TreegeRendererConfig {
332
363
  */
333
364
  flow?: Flow | null;
334
365
  /**
335
- * Initial form values
366
+ * Sets the `id` attribute on the underlying `<form>` element, so a submit
367
+ * button rendered outside the renderer can target it via the native HTML
368
+ * `form` attribute: `<button type="submit" form={formId}>`. Web only.
369
+ */
370
+ formId?: string;
371
+ /**
372
+ * Initial form values — use this to pre-fill the form when editing a record
373
+ * that was already submitted.
374
+ *
375
+ * Keys can be either `node.id` OR the same name-based keys you receive back in
376
+ * `onChange` / `onSubmit`, so the previously-submitted object can be fed
377
+ * straight back in without any remapping.
378
+ *
379
+ * Reactive: if this changes after mount (e.g. an async-fetched record resolves
380
+ * later), the form is re-seeded automatically. A new object literal of
381
+ * identical content does NOT reset the form, so in-progress user edits are
382
+ * preserved.
336
383
  */
337
384
  initialValues?: FormValues;
338
385
  /**
@@ -340,6 +387,21 @@ export interface TreegeRendererProps extends TreegeRendererConfig {
340
387
  * the flow is being fetched. Customizable via `components.loadingSkeleton`.
341
388
  */
342
389
  isLoading?: boolean;
390
+ /**
391
+ * When true, forces the submit/continue button into its loading state
392
+ * (spinner + disabled). Use this to keep the button busy while an async
393
+ * `onSubmit` is still resolving on the consumer side. It is OR-ed with the
394
+ * renderer's own internal submitting state, so it only ever adds to it.
395
+ */
396
+ isSubmitting?: boolean;
397
+ /**
398
+ * Called when the user clicks Back on the FIRST step. Provide this to bridge
399
+ * back-navigation to an outer flow (e.g. a parent modal's steps): when set, a
400
+ * Back button is shown on the first step and triggers this callback instead
401
+ * of being a no-op. Has no effect on later steps, which always navigate back
402
+ * internally.
403
+ */
404
+ onBack?: () => void;
343
405
  /**
344
406
  * Callback when form values change
345
407
  */