@uipath/apollo-react 6.45.3 → 6.46.0

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 (141) hide show
  1. package/dist/canvas/components/Guardrails/builder-types.cjs +47 -0
  2. package/dist/canvas/components/Guardrails/builder-types.d.ts +129 -0
  3. package/dist/canvas/components/Guardrails/builder-types.d.ts.map +1 -0
  4. package/dist/canvas/components/Guardrails/builder-types.js +10 -0
  5. package/dist/canvas/components/Guardrails/builder-utils.cjs +144 -0
  6. package/dist/canvas/components/Guardrails/builder-utils.d.ts +18 -0
  7. package/dist/canvas/components/Guardrails/builder-utils.d.ts.map +1 -0
  8. package/dist/canvas/components/Guardrails/builder-utils.js +98 -0
  9. package/dist/canvas/components/Guardrails/components/enum-list-chips-field.cjs +85 -0
  10. package/dist/canvas/components/Guardrails/components/enum-list-chips-field.d.ts +3 -0
  11. package/dist/canvas/components/Guardrails/components/enum-list-chips-field.d.ts.map +1 -0
  12. package/dist/canvas/components/Guardrails/components/enum-list-chips-field.js +51 -0
  13. package/dist/canvas/components/Guardrails/components/escalate-action-fields.cjs +268 -0
  14. package/dist/canvas/components/Guardrails/components/escalate-action-fields.d.ts +23 -0
  15. package/dist/canvas/components/Guardrails/components/escalate-action-fields.d.ts.map +1 -0
  16. package/dist/canvas/components/Guardrails/components/escalate-action-fields.js +234 -0
  17. package/dist/canvas/components/Guardrails/components/field-shell.cjs +46 -0
  18. package/dist/canvas/components/Guardrails/components/field-shell.d.ts +7 -0
  19. package/dist/canvas/components/Guardrails/components/field-shell.d.ts.map +1 -0
  20. package/dist/canvas/components/Guardrails/components/field-shell.js +12 -0
  21. package/dist/canvas/components/Guardrails/components/guardrail-action-section.cjs +173 -0
  22. package/dist/canvas/components/Guardrails/components/guardrail-action-section.d.ts +22 -0
  23. package/dist/canvas/components/Guardrails/components/guardrail-action-section.d.ts.map +1 -0
  24. package/dist/canvas/components/Guardrails/components/guardrail-action-section.js +139 -0
  25. package/dist/canvas/components/Guardrails/components/guardrail-chip.cjs +63 -0
  26. package/dist/canvas/components/Guardrails/components/guardrail-chip.d.ts +11 -0
  27. package/dist/canvas/components/Guardrails/components/guardrail-chip.d.ts.map +1 -0
  28. package/dist/canvas/components/Guardrails/components/guardrail-chip.js +26 -0
  29. package/dist/canvas/components/Guardrails/components/guardrail-scope-selector.cjs +217 -0
  30. package/dist/canvas/components/Guardrails/components/guardrail-scope-selector.d.ts +15 -0
  31. package/dist/canvas/components/Guardrails/components/guardrail-scope-selector.d.ts.map +1 -0
  32. package/dist/canvas/components/Guardrails/components/guardrail-scope-selector.js +183 -0
  33. package/dist/canvas/components/Guardrails/components/guardrail-status-banner.cjs +61 -0
  34. package/dist/canvas/components/Guardrails/components/guardrail-status-banner.d.ts +6 -0
  35. package/dist/canvas/components/Guardrails/components/guardrail-status-banner.d.ts.map +1 -0
  36. package/dist/canvas/components/Guardrails/components/guardrail-status-banner.js +27 -0
  37. package/dist/canvas/components/Guardrails/components/map-enum-field.cjs +116 -0
  38. package/dist/canvas/components/Guardrails/components/map-enum-field.d.ts +3 -0
  39. package/dist/canvas/components/Guardrails/components/map-enum-field.d.ts.map +1 -0
  40. package/dist/canvas/components/Guardrails/components/map-enum-field.js +82 -0
  41. package/dist/canvas/components/Guardrails/components/mixed-scopes-banner.cjs +69 -0
  42. package/dist/canvas/components/Guardrails/components/mixed-scopes-banner.d.ts +10 -0
  43. package/dist/canvas/components/Guardrails/components/mixed-scopes-banner.d.ts.map +1 -0
  44. package/dist/canvas/components/Guardrails/components/mixed-scopes-banner.js +35 -0
  45. package/dist/canvas/components/Guardrails/components/parameter-label.cjs +60 -0
  46. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts +11 -0
  47. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts.map +1 -0
  48. package/dist/canvas/components/Guardrails/components/parameter-label.js +26 -0
  49. package/dist/canvas/components/Guardrails/form-schema-builder.cjs +246 -0
  50. package/dist/canvas/components/Guardrails/form-schema-builder.d.ts +15 -0
  51. package/dist/canvas/components/Guardrails/form-schema-builder.d.ts.map +1 -0
  52. package/dist/canvas/components/Guardrails/form-schema-builder.js +197 -0
  53. package/dist/canvas/components/Guardrails/guardrail-builder.cjs +369 -0
  54. package/dist/canvas/components/Guardrails/guardrail-builder.d.ts +41 -0
  55. package/dist/canvas/components/Guardrails/guardrail-builder.d.ts.map +1 -0
  56. package/dist/canvas/components/Guardrails/guardrail-builder.js +335 -0
  57. package/dist/canvas/components/Guardrails/guardrail-form-layout.cjs +138 -0
  58. package/dist/canvas/components/Guardrails/guardrail-form-layout.d.ts +24 -0
  59. package/dist/canvas/components/Guardrails/guardrail-form-layout.d.ts.map +1 -0
  60. package/dist/canvas/components/Guardrails/guardrail-form-layout.js +104 -0
  61. package/dist/canvas/components/Guardrails/guardrail-validator-form.cjs +199 -0
  62. package/dist/canvas/components/Guardrails/guardrail-validator-form.d.ts +3 -0
  63. package/dist/canvas/components/Guardrails/guardrail-validator-form.d.ts.map +1 -0
  64. package/dist/canvas/components/Guardrails/guardrail-validator-form.js +165 -0
  65. package/dist/canvas/components/Guardrails/i18n.cjs +436 -0
  66. package/dist/canvas/components/Guardrails/i18n.d.ts +76 -0
  67. package/dist/canvas/components/Guardrails/i18n.d.ts.map +1 -0
  68. package/dist/canvas/components/Guardrails/i18n.js +384 -0
  69. package/dist/canvas/components/Guardrails/index.cjs +112 -0
  70. package/dist/canvas/components/Guardrails/index.d.ts +16 -0
  71. package/dist/canvas/components/Guardrails/index.d.ts.map +1 -0
  72. package/dist/canvas/components/Guardrails/index.js +9 -0
  73. package/dist/canvas/components/Guardrails/render-parameter-bridge.cjs +60 -0
  74. package/dist/canvas/components/Guardrails/render-parameter-bridge.d.ts +13 -0
  75. package/dist/canvas/components/Guardrails/render-parameter-bridge.d.ts.map +1 -0
  76. package/dist/canvas/components/Guardrails/render-parameter-bridge.js +23 -0
  77. package/dist/canvas/components/Guardrails/types.cjs +18 -0
  78. package/dist/canvas/components/Guardrails/types.d.ts +69 -0
  79. package/dist/canvas/components/Guardrails/types.d.ts.map +1 -0
  80. package/dist/canvas/components/Guardrails/types.js +0 -0
  81. package/dist/canvas/components/Guardrails/use-metadata-form-bridge.cjs +144 -0
  82. package/dist/canvas/components/Guardrails/use-metadata-form-bridge.d.ts +13 -0
  83. package/dist/canvas/components/Guardrails/use-metadata-form-bridge.d.ts.map +1 -0
  84. package/dist/canvas/components/Guardrails/use-metadata-form-bridge.js +110 -0
  85. package/dist/canvas/components/Guardrails/utils.cjs +174 -0
  86. package/dist/canvas/components/Guardrails/utils.d.ts +9 -0
  87. package/dist/canvas/components/Guardrails/utils.d.ts.map +1 -0
  88. package/dist/canvas/components/Guardrails/utils.js +122 -0
  89. package/dist/canvas/components/index.cjs +41 -34
  90. package/dist/canvas/components/index.d.ts +1 -0
  91. package/dist/canvas/components/index.d.ts.map +1 -1
  92. package/dist/canvas/components/index.js +1 -0
  93. package/dist/canvas/locales/de.cjs +1 -1
  94. package/dist/canvas/locales/de.d.ts.map +1 -1
  95. package/dist/canvas/locales/de.js +1 -1
  96. package/dist/canvas/locales/en.cjs +1 -1
  97. package/dist/canvas/locales/en.d.ts.map +1 -1
  98. package/dist/canvas/locales/en.js +1 -1
  99. package/dist/canvas/locales/es-MX.cjs +1 -1
  100. package/dist/canvas/locales/es-MX.d.ts.map +1 -1
  101. package/dist/canvas/locales/es-MX.js +1 -1
  102. package/dist/canvas/locales/es.cjs +1 -1
  103. package/dist/canvas/locales/es.d.ts.map +1 -1
  104. package/dist/canvas/locales/es.js +1 -1
  105. package/dist/canvas/locales/fr.cjs +1 -1
  106. package/dist/canvas/locales/fr.d.ts.map +1 -1
  107. package/dist/canvas/locales/fr.js +1 -1
  108. package/dist/canvas/locales/ja.cjs +1 -1
  109. package/dist/canvas/locales/ja.d.ts.map +1 -1
  110. package/dist/canvas/locales/ja.js +1 -1
  111. package/dist/canvas/locales/ko.cjs +1 -1
  112. package/dist/canvas/locales/ko.d.ts.map +1 -1
  113. package/dist/canvas/locales/ko.js +1 -1
  114. package/dist/canvas/locales/pt-BR.cjs +1 -1
  115. package/dist/canvas/locales/pt-BR.d.ts.map +1 -1
  116. package/dist/canvas/locales/pt-BR.js +1 -1
  117. package/dist/canvas/locales/pt.cjs +1 -1
  118. package/dist/canvas/locales/pt.d.ts.map +1 -1
  119. package/dist/canvas/locales/pt.js +1 -1
  120. package/dist/canvas/locales/ro.cjs +1 -1
  121. package/dist/canvas/locales/ro.d.ts.map +1 -1
  122. package/dist/canvas/locales/ro.js +1 -1
  123. package/dist/canvas/locales/ru.cjs +1 -1
  124. package/dist/canvas/locales/ru.d.ts.map +1 -1
  125. package/dist/canvas/locales/ru.js +1 -1
  126. package/dist/canvas/locales/tr.cjs +1 -1
  127. package/dist/canvas/locales/tr.d.ts.map +1 -1
  128. package/dist/canvas/locales/tr.js +1 -1
  129. package/dist/canvas/locales/zh-CN.cjs +1 -1
  130. package/dist/canvas/locales/zh-CN.d.ts.map +1 -1
  131. package/dist/canvas/locales/zh-CN.js +1 -1
  132. package/dist/canvas/locales/zh-TW.cjs +1 -1
  133. package/dist/canvas/locales/zh-TW.d.ts.map +1 -1
  134. package/dist/canvas/locales/zh-TW.js +1 -1
  135. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  136. package/dist/i18n/index.cjs +5 -1
  137. package/dist/i18n/index.d.ts +1 -0
  138. package/dist/i18n/index.d.ts.map +1 -1
  139. package/dist/i18n/index.js +2 -1
  140. package/dist/test/setup.d.ts.map +1 -1
  141. package/package.json +11 -3
@@ -0,0 +1,69 @@
1
+ import type * as React from 'react';
2
+ import type { GuardrailValidatorFormLabels } from './i18n';
3
+ export type GuardrailValidatorParameter = {
4
+ $parameterType: 'number';
5
+ id: string;
6
+ value: number;
7
+ } | {
8
+ $parameterType: 'text';
9
+ id: string;
10
+ value: string;
11
+ } | {
12
+ $parameterType: 'boolean';
13
+ id: string;
14
+ value: boolean;
15
+ } | {
16
+ $parameterType: 'enum';
17
+ id: string;
18
+ value: string;
19
+ } | {
20
+ $parameterType: 'enum-list';
21
+ id: string;
22
+ value: string[];
23
+ } | {
24
+ $parameterType: 'text-list';
25
+ id: string;
26
+ value: string[];
27
+ } | {
28
+ $parameterType: 'map-enum';
29
+ id: string;
30
+ value: Record<string, number>;
31
+ };
32
+ export type GuardrailParameterType = GuardrailValidatorParameter['$parameterType'];
33
+ export interface GuardrailParameterDefinition {
34
+ id: string;
35
+ type: GuardrailParameterType;
36
+ label: string;
37
+ required: boolean;
38
+ defaultValue: unknown;
39
+ tooltip?: string;
40
+ options?: string[];
41
+ optionLabels?: Record<string, string>;
42
+ keySource?: string;
43
+ min?: number;
44
+ max?: number;
45
+ step?: number;
46
+ maxLength?: number;
47
+ maxItems?: number;
48
+ }
49
+ export interface GuardrailParameterRenderContext {
50
+ definition: GuardrailParameterDefinition;
51
+ value: GuardrailValidatorParameter['value'] | undefined;
52
+ error?: string;
53
+ parameters: GuardrailValidatorParameter[];
54
+ onValueChange: (value: GuardrailValidatorParameter['value']) => void;
55
+ onParametersChange: (parameters: GuardrailValidatorParameter[]) => void;
56
+ }
57
+ export interface GuardrailValidatorFormProps {
58
+ parameterDefinitions: GuardrailParameterDefinition[];
59
+ parameters: GuardrailValidatorParameter[];
60
+ onChange: (parameters: GuardrailValidatorParameter[]) => void;
61
+ errors?: Record<string, string>;
62
+ onClearError?: (paramId: string) => void;
63
+ renderParameter?: (ctx: GuardrailParameterRenderContext) => React.ReactNode | undefined;
64
+ overrideParameterIds?: readonly string[];
65
+ validateLive?: boolean;
66
+ labels?: Partial<GuardrailValidatorFormLabels>;
67
+ className?: string;
68
+ }
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/types.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ useMetadataFormBridge: ()=>useMetadataFormBridge
28
+ });
29
+ const external_react_namespaceObject = require("react");
30
+ function valuesEqual(a, b) {
31
+ if (Object.is(a, b)) return true;
32
+ if ('object' != typeof a || 'object' != typeof b || null === a || null === b) return false;
33
+ if (Array.isArray(a) || Array.isArray(b)) {
34
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
35
+ return a.every((item, index)=>valuesEqual(item, b[index]));
36
+ }
37
+ const aEntries = Object.entries(a);
38
+ const bRecord = b;
39
+ if (aEntries.length !== Object.keys(bRecord).length) return false;
40
+ return aEntries.every(([key, value])=>Object.hasOwn(bRecord, key) && valuesEqual(value, bRecord[key]));
41
+ }
42
+ function useMetadataFormBridge({ values, errors, onValueChange, components, validateLive = true }) {
43
+ const formRef = (0, external_react_namespaceObject.useRef)(null);
44
+ const syncingRef = (0, external_react_namespaceObject.useRef)(false);
45
+ const onValueChangeRef = (0, external_react_namespaceObject.useRef)(onValueChange);
46
+ onValueChangeRef.current = onValueChange;
47
+ const pendingValuesRef = (0, external_react_namespaceObject.useRef)(null);
48
+ const syncValuesIn = (form, next)=>{
49
+ syncingRef.current = true;
50
+ try {
51
+ for (const [name, value] of Object.entries(next))if (!valuesEqual(form.getValues(name), value)) form.setValue(name, value);
52
+ } finally{
53
+ syncingRef.current = false;
54
+ }
55
+ };
56
+ const syncValuesInRef = (0, external_react_namespaceObject.useRef)(syncValuesIn);
57
+ syncValuesInRef.current = syncValuesIn;
58
+ const plugins = (0, external_react_namespaceObject.useMemo)(()=>[
59
+ {
60
+ name: 'guardrail-host-bridge',
61
+ components,
62
+ onFormInit: (context)=>{
63
+ formRef.current = context.form;
64
+ const pending = pendingValuesRef.current;
65
+ if (pending) {
66
+ pendingValuesRef.current = null;
67
+ syncValuesInRef.current(context.form, pending);
68
+ }
69
+ },
70
+ onValueChange: (name, value)=>{
71
+ if (syncingRef.current) return;
72
+ onValueChangeRef.current(name, value);
73
+ }
74
+ }
75
+ ], [
76
+ components
77
+ ]);
78
+ (0, external_react_namespaceObject.useEffect)(()=>{
79
+ const form = formRef.current;
80
+ if (!form) {
81
+ pendingValuesRef.current = values;
82
+ return;
83
+ }
84
+ syncValuesInRef.current(form, values);
85
+ }, [
86
+ values
87
+ ]);
88
+ const appliedRef = (0, external_react_namespaceObject.useRef)({});
89
+ const applyHostError = (form, name, message)=>{
90
+ const current = form.getFieldState(name).error;
91
+ if (current?.type === 'external' && current.message === message) return;
92
+ form.setError(name, {
93
+ type: 'external',
94
+ message
95
+ });
96
+ };
97
+ (0, external_react_namespaceObject.useEffect)(()=>{
98
+ const form = formRef.current;
99
+ if (!form) return;
100
+ const next = {};
101
+ for (const [name, message] of Object.entries(errors ?? {}))if (message) {
102
+ next[name] = message;
103
+ applyHostError(form, name, message);
104
+ }
105
+ for (const name of Object.keys(appliedRef.current))if (!next[name] && form.getFieldState(name).error?.type === 'external') form.clearErrors(name);
106
+ appliedRef.current = next;
107
+ }, [
108
+ errors
109
+ ]);
110
+ (0, external_react_namespaceObject.useEffect)(()=>{
111
+ const form = formRef.current;
112
+ if (!form) return;
113
+ return form.subscribe({
114
+ formState: {
115
+ values: true
116
+ },
117
+ callback: ()=>{
118
+ const current = formRef.current;
119
+ if (!current) return;
120
+ for (const [name, message] of Object.entries(appliedRef.current))applyHostError(current, name, message);
121
+ }
122
+ });
123
+ }, []);
124
+ const wasValidatingLiveRef = (0, external_react_namespaceObject.useRef)(validateLive);
125
+ (0, external_react_namespaceObject.useEffect)(()=>{
126
+ const openedGate = validateLive && !wasValidatingLiveRef.current;
127
+ wasValidatingLiveRef.current = validateLive;
128
+ if (!openedGate) return;
129
+ formRef.current?.trigger();
130
+ }, [
131
+ validateLive
132
+ ]);
133
+ return {
134
+ plugins,
135
+ schemaMode: validateLive ? 'onChange' : 'onSubmit'
136
+ };
137
+ }
138
+ exports.useMetadataFormBridge = __webpack_exports__.useMetadataFormBridge;
139
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
140
+ "useMetadataFormBridge"
141
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
142
+ Object.defineProperty(exports, '__esModule', {
143
+ value: true
144
+ });
@@ -0,0 +1,13 @@
1
+ import type { FormPlugin, FormSchema } from '@uipath/apollo-wind';
2
+ export interface MetadataFormBridgeOptions {
3
+ values: Record<string, unknown>;
4
+ errors?: Record<string, string>;
5
+ onValueChange: (name: string, value: unknown) => void;
6
+ components: FormPlugin['components'];
7
+ validateLive?: boolean;
8
+ }
9
+ export declare function useMetadataFormBridge({ values, errors, onValueChange, components, validateLive, }: MetadataFormBridgeOptions): {
10
+ plugins: FormPlugin[];
11
+ schemaMode: FormSchema['mode'];
12
+ };
13
+ //# sourceMappingURL=use-metadata-form-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-metadata-form-bridge.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/use-metadata-form-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAsB/E,MAAM,WAAW,yBAAyB;IAExC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtD,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAErC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiCD,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,MAAM,EACN,aAAa,EACb,UAAU,EACV,YAAmB,GACpB,EAAE,yBAAyB,GAAG;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;CAAE,CA8IvF"}
@@ -0,0 +1,110 @@
1
+ import { useEffect, useMemo, useRef } from "react";
2
+ function valuesEqual(a, b) {
3
+ if (Object.is(a, b)) return true;
4
+ if ('object' != typeof a || 'object' != typeof b || null === a || null === b) return false;
5
+ if (Array.isArray(a) || Array.isArray(b)) {
6
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
7
+ return a.every((item, index)=>valuesEqual(item, b[index]));
8
+ }
9
+ const aEntries = Object.entries(a);
10
+ const bRecord = b;
11
+ if (aEntries.length !== Object.keys(bRecord).length) return false;
12
+ return aEntries.every(([key, value])=>Object.hasOwn(bRecord, key) && valuesEqual(value, bRecord[key]));
13
+ }
14
+ function useMetadataFormBridge({ values, errors, onValueChange, components, validateLive = true }) {
15
+ const formRef = useRef(null);
16
+ const syncingRef = useRef(false);
17
+ const onValueChangeRef = useRef(onValueChange);
18
+ onValueChangeRef.current = onValueChange;
19
+ const pendingValuesRef = useRef(null);
20
+ const syncValuesIn = (form, next)=>{
21
+ syncingRef.current = true;
22
+ try {
23
+ for (const [name, value] of Object.entries(next))if (!valuesEqual(form.getValues(name), value)) form.setValue(name, value);
24
+ } finally{
25
+ syncingRef.current = false;
26
+ }
27
+ };
28
+ const syncValuesInRef = useRef(syncValuesIn);
29
+ syncValuesInRef.current = syncValuesIn;
30
+ const plugins = useMemo(()=>[
31
+ {
32
+ name: 'guardrail-host-bridge',
33
+ components,
34
+ onFormInit: (context)=>{
35
+ formRef.current = context.form;
36
+ const pending = pendingValuesRef.current;
37
+ if (pending) {
38
+ pendingValuesRef.current = null;
39
+ syncValuesInRef.current(context.form, pending);
40
+ }
41
+ },
42
+ onValueChange: (name, value)=>{
43
+ if (syncingRef.current) return;
44
+ onValueChangeRef.current(name, value);
45
+ }
46
+ }
47
+ ], [
48
+ components
49
+ ]);
50
+ useEffect(()=>{
51
+ const form = formRef.current;
52
+ if (!form) {
53
+ pendingValuesRef.current = values;
54
+ return;
55
+ }
56
+ syncValuesInRef.current(form, values);
57
+ }, [
58
+ values
59
+ ]);
60
+ const appliedRef = useRef({});
61
+ const applyHostError = (form, name, message)=>{
62
+ const current = form.getFieldState(name).error;
63
+ if (current?.type === 'external' && current.message === message) return;
64
+ form.setError(name, {
65
+ type: 'external',
66
+ message
67
+ });
68
+ };
69
+ useEffect(()=>{
70
+ const form = formRef.current;
71
+ if (!form) return;
72
+ const next = {};
73
+ for (const [name, message] of Object.entries(errors ?? {}))if (message) {
74
+ next[name] = message;
75
+ applyHostError(form, name, message);
76
+ }
77
+ for (const name of Object.keys(appliedRef.current))if (!next[name] && form.getFieldState(name).error?.type === 'external') form.clearErrors(name);
78
+ appliedRef.current = next;
79
+ }, [
80
+ errors
81
+ ]);
82
+ useEffect(()=>{
83
+ const form = formRef.current;
84
+ if (!form) return;
85
+ return form.subscribe({
86
+ formState: {
87
+ values: true
88
+ },
89
+ callback: ()=>{
90
+ const current = formRef.current;
91
+ if (!current) return;
92
+ for (const [name, message] of Object.entries(appliedRef.current))applyHostError(current, name, message);
93
+ }
94
+ });
95
+ }, []);
96
+ const wasValidatingLiveRef = useRef(validateLive);
97
+ useEffect(()=>{
98
+ const openedGate = validateLive && !wasValidatingLiveRef.current;
99
+ wasValidatingLiveRef.current = validateLive;
100
+ if (!openedGate) return;
101
+ formRef.current?.trigger();
102
+ }, [
103
+ validateLive
104
+ ]);
105
+ return {
106
+ plugins,
107
+ schemaMode: validateLive ? 'onChange' : 'onSubmit'
108
+ };
109
+ }
110
+ export { useMetadataFormBridge };
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ coerceParameterValueToType: ()=>coerceParameterValueToType,
28
+ dropEmptyOptionalParameters: ()=>dropEmptyOptionalParameters,
29
+ getOutOfRangeParameterIds: ()=>getOutOfRangeParameterIds,
30
+ getRequiredEmptyParameterIds: ()=>getRequiredEmptyParameterIds,
31
+ normalizeGuardrailParameters: ()=>normalizeGuardrailParameters,
32
+ seedGuardrailParameters: ()=>seedGuardrailParameters,
33
+ syncMapEnumParameters: ()=>syncMapEnumParameters
34
+ });
35
+ function coerceParameterValueToType(value, paramDef) {
36
+ switch(paramDef.type){
37
+ case 'text':
38
+ case 'enum':
39
+ return 'string' == typeof value ? value : '';
40
+ case 'boolean':
41
+ return 'boolean' == typeof value ? value : false;
42
+ case 'number':
43
+ return 'number' != typeof value || Number.isNaN(value) ? paramDef.min ?? 0 : value;
44
+ case 'text-list':
45
+ case 'enum-list':
46
+ return Array.isArray(value) ? value.filter((v)=>'string' == typeof v) : [];
47
+ case 'map-enum':
48
+ return value && 'object' == typeof value && !Array.isArray(value) ? value : {};
49
+ default:
50
+ return value;
51
+ }
52
+ }
53
+ function seedGuardrailParameters(definitions, existing) {
54
+ if (existing) return normalizeGuardrailParameters(existing, definitions);
55
+ return definitions.map((paramDef)=>({
56
+ $parameterType: paramDef.type,
57
+ id: paramDef.id,
58
+ value: coerceParameterValueToType(paramDef.defaultValue, paramDef)
59
+ }));
60
+ }
61
+ function normalizeGuardrailParameters(parameters, definitions) {
62
+ const defById = new Map(definitions.map((d)=>[
63
+ d.id,
64
+ d
65
+ ]));
66
+ let changed = false;
67
+ const next = parameters.map((param)=>{
68
+ const paramDef = defById.get(param.id);
69
+ if (!paramDef) return param;
70
+ const value = coerceParameterValueToType(param.value, paramDef);
71
+ const type = paramDef.type;
72
+ if (value === param.value && type === param.$parameterType) return param;
73
+ changed = true;
74
+ return {
75
+ ...param,
76
+ $parameterType: type,
77
+ value
78
+ };
79
+ });
80
+ return changed ? next : parameters;
81
+ }
82
+ function syncMapEnumParameters(parameters, definitions) {
83
+ const selectionBySourceId = new Map();
84
+ for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
85
+ const defById = new Map(definitions.map((d)=>[
86
+ d.id,
87
+ d
88
+ ]));
89
+ return parameters.map((param)=>{
90
+ if ('map-enum' !== param.$parameterType) return param;
91
+ const def = defById.get(param.id);
92
+ const keySource = def?.keySource;
93
+ if (!keySource) return param;
94
+ const sourceDef = defById.get(keySource);
95
+ const allowedKeys = selectionBySourceId.get(keySource) ?? (Array.isArray(sourceDef?.defaultValue) ? sourceDef.defaultValue : void 0);
96
+ if (!allowedKeys) return param;
97
+ const currentMap = param.value && 'object' == typeof param.value && !Array.isArray(param.value) ? param.value : {};
98
+ const defaults = def?.defaultValue ?? {};
99
+ const fallback = def?.min ?? 0;
100
+ const synced = {};
101
+ for (const key of allowedKeys){
102
+ const persisted = currentMap[key];
103
+ synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
104
+ }
105
+ return {
106
+ ...param,
107
+ value: synced
108
+ };
109
+ });
110
+ }
111
+ function dropEmptyOptionalParameters(parameters, definitions) {
112
+ return parameters.filter((param)=>{
113
+ const parameterDefinition = definitions.find((p)=>p.id === param.id);
114
+ if (!parameterDefinition || parameterDefinition.required) return true;
115
+ const isEmpty = 'string' == typeof param.value && '' === param.value || Array.isArray(param.value) && 0 === param.value.length;
116
+ return !isEmpty;
117
+ });
118
+ }
119
+ function getOutOfRangeParameterIds(definitions, parameters) {
120
+ const isOutOfRange = (value, paramDef)=>null != paramDef.min && value < paramDef.min || null != paramDef.max && value > paramDef.max;
121
+ const ids = [];
122
+ for (const paramDef of definitions){
123
+ if ('number' !== paramDef.type && 'map-enum' !== paramDef.type) continue;
124
+ if (null == paramDef.min && null == paramDef.max) continue;
125
+ const value = parameters.find((p)=>p.id === paramDef.id)?.value;
126
+ if ('number' === paramDef.type) {
127
+ if ('number' != typeof value || Number.isNaN(value)) continue;
128
+ if (isOutOfRange(value, paramDef)) ids.push(paramDef.id);
129
+ continue;
130
+ }
131
+ if (null == value || 'object' != typeof value || Array.isArray(value)) continue;
132
+ const entries = Object.values(value);
133
+ if (entries.some((entry)=>'number' == typeof entry && !Number.isNaN(entry) && isOutOfRange(entry, paramDef))) ids.push(paramDef.id);
134
+ }
135
+ return ids;
136
+ }
137
+ function getRequiredEmptyParameterIds(definitions, parameters) {
138
+ const emptyIds = [];
139
+ for (const paramDef of definitions){
140
+ if (!paramDef.required) continue;
141
+ const param = parameters.find((p)=>p.id === paramDef.id);
142
+ if (!param) {
143
+ emptyIds.push(paramDef.id);
144
+ continue;
145
+ }
146
+ const value = param.value;
147
+ let isEmpty = false;
148
+ if ('enum-list' === paramDef.type && Array.isArray(value)) isEmpty = 0 === value.length;
149
+ else if ('text-list' === paramDef.type && Array.isArray(value)) isEmpty = value.every((entry)=>'string' == typeof entry && 0 === entry.trim().length);
150
+ else if (('text' === paramDef.type || 'enum' === paramDef.type) && 'string' == typeof value) isEmpty = 0 === value.trim().length;
151
+ else if ('map-enum' === paramDef.type && 'object' == typeof value && null !== value && !Array.isArray(value)) isEmpty = 0 === Object.keys(value).length;
152
+ if (isEmpty) emptyIds.push(paramDef.id);
153
+ }
154
+ return emptyIds;
155
+ }
156
+ exports.coerceParameterValueToType = __webpack_exports__.coerceParameterValueToType;
157
+ exports.dropEmptyOptionalParameters = __webpack_exports__.dropEmptyOptionalParameters;
158
+ exports.getOutOfRangeParameterIds = __webpack_exports__.getOutOfRangeParameterIds;
159
+ exports.getRequiredEmptyParameterIds = __webpack_exports__.getRequiredEmptyParameterIds;
160
+ exports.normalizeGuardrailParameters = __webpack_exports__.normalizeGuardrailParameters;
161
+ exports.seedGuardrailParameters = __webpack_exports__.seedGuardrailParameters;
162
+ exports.syncMapEnumParameters = __webpack_exports__.syncMapEnumParameters;
163
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
164
+ "coerceParameterValueToType",
165
+ "dropEmptyOptionalParameters",
166
+ "getOutOfRangeParameterIds",
167
+ "getRequiredEmptyParameterIds",
168
+ "normalizeGuardrailParameters",
169
+ "seedGuardrailParameters",
170
+ "syncMapEnumParameters"
171
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
172
+ Object.defineProperty(exports, '__esModule', {
173
+ value: true
174
+ });
@@ -0,0 +1,9 @@
1
+ import type { GuardrailParameterDefinition, GuardrailValidatorParameter } from './types';
2
+ export declare function coerceParameterValueToType(value: unknown, paramDef: Pick<GuardrailParameterDefinition, 'type' | 'min'>): GuardrailValidatorParameter['value'];
3
+ export declare function seedGuardrailParameters(definitions: GuardrailParameterDefinition[], existing?: GuardrailValidatorParameter[]): GuardrailValidatorParameter[];
4
+ export declare function normalizeGuardrailParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
5
+ export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
6
+ export declare function dropEmptyOptionalParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
7
+ export declare function getOutOfRangeParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
8
+ export declare function getRequiredEmptyParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAczF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,KAAK,CAAC,GAC3D,2BAA2B,CAAC,OAAO,CAAC,CAmBtC;AAQD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,GACvC,2BAA2B,EAAE,CAU/B;AAWD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAoB/B;AAcD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,2BAA2B,EAAE,EACzC,WAAW,EAAE,4BAA4B,EAAE,GAC1C,2BAA2B,EAAE,CA2C/B;AAQD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAW/B;AAeD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA6BV;AAUD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA+BV"}
@@ -0,0 +1,122 @@
1
+ function coerceParameterValueToType(value, paramDef) {
2
+ switch(paramDef.type){
3
+ case 'text':
4
+ case 'enum':
5
+ return 'string' == typeof value ? value : '';
6
+ case 'boolean':
7
+ return 'boolean' == typeof value ? value : false;
8
+ case 'number':
9
+ return 'number' != typeof value || Number.isNaN(value) ? paramDef.min ?? 0 : value;
10
+ case 'text-list':
11
+ case 'enum-list':
12
+ return Array.isArray(value) ? value.filter((v)=>'string' == typeof v) : [];
13
+ case 'map-enum':
14
+ return value && 'object' == typeof value && !Array.isArray(value) ? value : {};
15
+ default:
16
+ return value;
17
+ }
18
+ }
19
+ function seedGuardrailParameters(definitions, existing) {
20
+ if (existing) return normalizeGuardrailParameters(existing, definitions);
21
+ return definitions.map((paramDef)=>({
22
+ $parameterType: paramDef.type,
23
+ id: paramDef.id,
24
+ value: coerceParameterValueToType(paramDef.defaultValue, paramDef)
25
+ }));
26
+ }
27
+ function normalizeGuardrailParameters(parameters, definitions) {
28
+ const defById = new Map(definitions.map((d)=>[
29
+ d.id,
30
+ d
31
+ ]));
32
+ let changed = false;
33
+ const next = parameters.map((param)=>{
34
+ const paramDef = defById.get(param.id);
35
+ if (!paramDef) return param;
36
+ const value = coerceParameterValueToType(param.value, paramDef);
37
+ const type = paramDef.type;
38
+ if (value === param.value && type === param.$parameterType) return param;
39
+ changed = true;
40
+ return {
41
+ ...param,
42
+ $parameterType: type,
43
+ value
44
+ };
45
+ });
46
+ return changed ? next : parameters;
47
+ }
48
+ function syncMapEnumParameters(parameters, definitions) {
49
+ const selectionBySourceId = new Map();
50
+ for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
51
+ const defById = new Map(definitions.map((d)=>[
52
+ d.id,
53
+ d
54
+ ]));
55
+ return parameters.map((param)=>{
56
+ if ('map-enum' !== param.$parameterType) return param;
57
+ const def = defById.get(param.id);
58
+ const keySource = def?.keySource;
59
+ if (!keySource) return param;
60
+ const sourceDef = defById.get(keySource);
61
+ const allowedKeys = selectionBySourceId.get(keySource) ?? (Array.isArray(sourceDef?.defaultValue) ? sourceDef.defaultValue : void 0);
62
+ if (!allowedKeys) return param;
63
+ const currentMap = param.value && 'object' == typeof param.value && !Array.isArray(param.value) ? param.value : {};
64
+ const defaults = def?.defaultValue ?? {};
65
+ const fallback = def?.min ?? 0;
66
+ const synced = {};
67
+ for (const key of allowedKeys){
68
+ const persisted = currentMap[key];
69
+ synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
70
+ }
71
+ return {
72
+ ...param,
73
+ value: synced
74
+ };
75
+ });
76
+ }
77
+ function dropEmptyOptionalParameters(parameters, definitions) {
78
+ return parameters.filter((param)=>{
79
+ const parameterDefinition = definitions.find((p)=>p.id === param.id);
80
+ if (!parameterDefinition || parameterDefinition.required) return true;
81
+ const isEmpty = 'string' == typeof param.value && '' === param.value || Array.isArray(param.value) && 0 === param.value.length;
82
+ return !isEmpty;
83
+ });
84
+ }
85
+ function getOutOfRangeParameterIds(definitions, parameters) {
86
+ const isOutOfRange = (value, paramDef)=>null != paramDef.min && value < paramDef.min || null != paramDef.max && value > paramDef.max;
87
+ const ids = [];
88
+ for (const paramDef of definitions){
89
+ if ('number' !== paramDef.type && 'map-enum' !== paramDef.type) continue;
90
+ if (null == paramDef.min && null == paramDef.max) continue;
91
+ const value = parameters.find((p)=>p.id === paramDef.id)?.value;
92
+ if ('number' === paramDef.type) {
93
+ if ('number' != typeof value || Number.isNaN(value)) continue;
94
+ if (isOutOfRange(value, paramDef)) ids.push(paramDef.id);
95
+ continue;
96
+ }
97
+ if (null == value || 'object' != typeof value || Array.isArray(value)) continue;
98
+ const entries = Object.values(value);
99
+ if (entries.some((entry)=>'number' == typeof entry && !Number.isNaN(entry) && isOutOfRange(entry, paramDef))) ids.push(paramDef.id);
100
+ }
101
+ return ids;
102
+ }
103
+ function getRequiredEmptyParameterIds(definitions, parameters) {
104
+ const emptyIds = [];
105
+ for (const paramDef of definitions){
106
+ if (!paramDef.required) continue;
107
+ const param = parameters.find((p)=>p.id === paramDef.id);
108
+ if (!param) {
109
+ emptyIds.push(paramDef.id);
110
+ continue;
111
+ }
112
+ const value = param.value;
113
+ let isEmpty = false;
114
+ if ('enum-list' === paramDef.type && Array.isArray(value)) isEmpty = 0 === value.length;
115
+ else if ('text-list' === paramDef.type && Array.isArray(value)) isEmpty = value.every((entry)=>'string' == typeof entry && 0 === entry.trim().length);
116
+ else if (('text' === paramDef.type || 'enum' === paramDef.type) && 'string' == typeof value) isEmpty = 0 === value.trim().length;
117
+ else if ('map-enum' === paramDef.type && 'object' == typeof value && null !== value && !Array.isArray(value)) isEmpty = 0 === Object.keys(value).length;
118
+ if (isEmpty) emptyIds.push(paramDef.id);
119
+ }
120
+ return emptyIds;
121
+ }
122
+ export { coerceParameterValueToType, dropEmptyOptionalParameters, getOutOfRangeParameterIds, getRequiredEmptyParameterIds, normalizeGuardrailParameters, seedGuardrailParameters, syncMapEnumParameters };