@uipath/apollo-react 7.2.1 → 7.3.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 (73) hide show
  1. package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts +3 -0
  2. package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts.map +1 -0
  3. package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts +2 -0
  4. package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts.map +1 -1
  5. package/dist/canvas/components/Guardrails/__fixtures__/host-copy-baselines.d.ts.map +1 -1
  6. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.cjs +220 -0
  7. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts +13 -0
  8. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts.map +1 -0
  9. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.js +186 -0
  10. package/dist/canvas/components/Guardrails/classifier-question-picker.cjs +316 -0
  11. package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts +15 -0
  12. package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts.map +1 -0
  13. package/dist/canvas/components/Guardrails/classifier-question-picker.js +282 -0
  14. package/dist/canvas/components/Guardrails/classifier-utils.cjs +139 -0
  15. package/dist/canvas/components/Guardrails/classifier-utils.d.ts +25 -0
  16. package/dist/canvas/components/Guardrails/classifier-utils.d.ts.map +1 -0
  17. package/dist/canvas/components/Guardrails/classifier-utils.js +87 -0
  18. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.cjs +98 -0
  19. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts +9 -0
  20. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts.map +1 -0
  21. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.js +64 -0
  22. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts +1 -1
  23. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts.map +1 -1
  24. package/dist/canvas/components/Guardrails/definitions-copy.cjs +66 -1
  25. package/dist/canvas/components/Guardrails/definitions-copy.d.ts +1 -0
  26. package/dist/canvas/components/Guardrails/definitions-copy.d.ts.map +1 -1
  27. package/dist/canvas/components/Guardrails/definitions-copy.js +66 -1
  28. package/dist/canvas/components/Guardrails/definitions-parse.cjs +66 -1
  29. package/dist/canvas/components/Guardrails/definitions-parse.d.ts +11 -1
  30. package/dist/canvas/components/Guardrails/definitions-parse.d.ts.map +1 -1
  31. package/dist/canvas/components/Guardrails/definitions-parse.js +63 -1
  32. package/dist/canvas/components/Guardrails/definitions-wire.d.ts +11 -0
  33. package/dist/canvas/components/Guardrails/definitions-wire.d.ts.map +1 -1
  34. package/dist/canvas/components/Guardrails/guardrail-builder.cjs +12 -4
  35. package/dist/canvas/components/Guardrails/guardrail-builder.d.ts.map +1 -1
  36. package/dist/canvas/components/Guardrails/guardrail-builder.js +12 -4
  37. package/dist/canvas/components/Guardrails/guardrail-validator-form.cjs +4 -1
  38. package/dist/canvas/components/Guardrails/guardrail-validator-form.d.ts.map +1 -1
  39. package/dist/canvas/components/Guardrails/guardrail-validator-form.js +4 -1
  40. package/dist/canvas/components/Guardrails/i18n.cjs +181 -3
  41. package/dist/canvas/components/Guardrails/i18n.d.ts +39 -0
  42. package/dist/canvas/components/Guardrails/i18n.d.ts.map +1 -1
  43. package/dist/canvas/components/Guardrails/i18n.js +168 -2
  44. package/dist/canvas/components/Guardrails/index.cjs +54 -4
  45. package/dist/canvas/components/Guardrails/index.d.ts +14 -3
  46. package/dist/canvas/components/Guardrails/index.d.ts.map +1 -1
  47. package/dist/canvas/components/Guardrails/index.js +7 -2
  48. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.cjs +136 -0
  49. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts +18 -0
  50. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts.map +1 -0
  51. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.js +102 -0
  52. package/dist/canvas/components/Guardrails/use-classifier-questions.cjs +97 -0
  53. package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts +34 -0
  54. package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts.map +1 -0
  55. package/dist/canvas/components/Guardrails/use-classifier-questions.js +60 -0
  56. package/dist/canvas/components/Guardrails/use-guardrail-definitions.cjs +8 -81
  57. package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts +2 -8
  58. package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts.map +1 -1
  59. package/dist/canvas/components/Guardrails/use-guardrail-definitions.js +9 -82
  60. package/dist/canvas/components/Guardrails/use-guardrails-request.cjs +133 -0
  61. package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts +23 -0
  62. package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts.map +1 -0
  63. package/dist/canvas/components/Guardrails/use-guardrails-request.js +99 -0
  64. package/dist/canvas/components/Guardrails/utils.cjs +4 -2
  65. package/dist/canvas/components/Guardrails/utils.d.ts +4 -1
  66. package/dist/canvas/components/Guardrails/utils.d.ts.map +1 -1
  67. package/dist/canvas/components/Guardrails/utils.js +4 -2
  68. package/dist/canvas/locales/en.cjs +1 -1
  69. package/dist/canvas/locales/en.d.ts.map +1 -1
  70. package/dist/canvas/locales/en.js +1 -1
  71. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  72. package/dist/chat/styles/tailwind.chat.css +1 -1
  73. package/package.json +2 -2
@@ -0,0 +1,3 @@
1
+ import type { ClassifierQuestionGroupWire } from '../definitions-wire';
2
+ export declare const CLASSIFIER_QUESTIONS_WIRE: ClassifierQuestionGroupWire[];
3
+ //# sourceMappingURL=classifier-questions.fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier-questions.fixtures.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAGvE,eAAO,MAAM,yBAAyB,EAAE,2BAA2B,EAsIlE,CAAC"}
@@ -11,6 +11,8 @@ export declare const LLM_AS_JUDGE_WIRE: GuardrailDefinitionWire;
11
11
  export declare const SENTIMENT_OPTIONS: string[];
12
12
  export declare const SENTIMENT_LANGUAGE_OPTIONS: string[];
13
13
  export declare const SENTIMENT_WIRE: GuardrailDefinitionWire;
14
+ export declare const CLASSIFIER_QUESTION_NAMES: string[];
15
+ export declare const CLASSIFIER_WIRE: GuardrailDefinitionWire;
14
16
  export declare const BYO_WIRE: GuardrailDefinitionWire;
15
17
  export declare const UNCURATED_WIRE: GuardrailDefinitionWire;
16
18
  export declare const ALL_BUILT_IN_WIRE: GuardrailDefinitionWire[];
@@ -1 +1 @@
1
- {"version":3,"file":"definitions-wire.fixtures.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAUnE,eAAO,MAAM,kBAAkB,EAAE,MAAM,EA0BtC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAuI9C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,uBAsBhC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,uBAWxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,uBAuBlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,uBAenC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,uBAKtC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,uBAaxC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,uBA6C/B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAiD,CAAC;AAGxF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EA6B9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,uBA4B5B,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAE,uBAuBtB,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,uBAc5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,uBAAuB,EAQtD,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,OAgBpC,CAAC"}
1
+ {"version":3,"file":"definitions-wire.fixtures.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAUnE,eAAO,MAAM,kBAAkB,EAAE,MAAM,EA0BtC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAuI9C,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,uBAsBhC,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,uBAWxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,uBAuBlC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,uBAenC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,uBAKtC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,uBAaxC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,uBA6C/B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAiD,CAAC;AAGxF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EA6B9C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,uBA4B5B,CAAC;AAGF,eAAO,MAAM,yBAAyB,EAAE,MAAM,EA2B7C,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,uBAiD7B,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAE,uBAuBtB,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,uBAc5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,uBAAuB,EAStD,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,OAgBpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"host-copy-baselines.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Guardrails/__fixtures__/host-copy-baselines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA0D9D,eAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyInE,CAAC;AAaF,eAAO,MAAM,cAAc,EAAE,kBAyI5B,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,kBA+D1B,CAAC"}
1
+ {"version":3,"file":"host-copy-baselines.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Guardrails/__fixtures__/host-copy-baselines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA2D9D,eAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyInE,CAAC;AAaF,eAAO,MAAM,cAAc,EAAE,kBAkK5B,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,kBA+D1B,CAAC"}
@@ -0,0 +1,220 @@
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
+ ClassifierCustomQuestionsEditor: ()=>ClassifierCustomQuestionsEditor
28
+ });
29
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
+ const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
31
+ const external_lucide_react_namespaceObject = require("lucide-react");
32
+ const external_react_namespaceObject = require("react");
33
+ const external_classifier_utils_cjs_namespaceObject = require("./classifier-utils.cjs");
34
+ const classifier_threshold_slider_cjs_namespaceObject = require("./components/classifier-threshold-slider.cjs");
35
+ const parameter_label_cjs_namespaceObject = require("./components/parameter-label.cjs");
36
+ const external_i18n_cjs_namespaceObject = require("./i18n.cjs");
37
+ const CRITERIA_MAX_LENGTH = 500;
38
+ const serialize = (rows)=>JSON.stringify((0, external_classifier_utils_cjs_namespaceObject.sanitizeClassifierCustomQuestions)(rows));
39
+ function ClassifierCustomQuestionsEditor({ parameter, rows: persistedRows, onRowsChange, error, labels: labelOverrides, className }) {
40
+ const labels = (0, external_i18n_cjs_namespaceObject.useGuardrailClassifierLabels)(labelOverrides);
41
+ const uid = (0, external_react_namespaceObject.useId)();
42
+ const [rows, setRows] = (0, external_react_namespaceObject.useState)(()=>[
43
+ ...persistedRows
44
+ ]);
45
+ const lastKey = (0, external_react_namespaceObject.useRef)(0);
46
+ const newKey = ()=>++lastKey.current;
47
+ const [keys, setKeys] = (0, external_react_namespaceObject.useState)(()=>persistedRows.map(newKey));
48
+ const incoming = serialize(persistedRows);
49
+ const [seededFrom, setSeededFrom] = (0, external_react_namespaceObject.useState)(incoming);
50
+ if (incoming !== seededFrom) {
51
+ setSeededFrom(incoming);
52
+ if (incoming !== serialize(rows)) {
53
+ setRows([
54
+ ...persistedRows
55
+ ]);
56
+ setKeys(persistedRows.map(newKey));
57
+ }
58
+ }
59
+ const update = (next, nextKeys = keys)=>{
60
+ setRows(next);
61
+ setKeys(nextKeys);
62
+ onRowsChange(next);
63
+ };
64
+ const updateRow = (index, patch)=>update(rows.map((row, i)=>i === index ? {
65
+ ...row,
66
+ ...patch
67
+ } : row));
68
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(apollo_wind_namespaceObject.FormField, {
69
+ "data-slot": "classifier-custom-questions-editor",
70
+ className: (0, apollo_wind_namespaceObject.cn)('gap-2', className),
71
+ children: [
72
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
73
+ className: "flex items-center justify-between gap-2",
74
+ children: [
75
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(parameter_label_cjs_namespaceObject.ParameterLabel, {
76
+ paramDef: parameter,
77
+ labels: labels,
78
+ asTextHeader: true
79
+ }),
80
+ rows.length < (parameter.maxItems ?? 1 / 0) && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(apollo_wind_namespaceObject.Button, {
81
+ type: "button",
82
+ variant: "ghost",
83
+ size: "2xs",
84
+ onClick: ()=>update([
85
+ ...rows,
86
+ {
87
+ question: ''
88
+ }
89
+ ], [
90
+ ...keys,
91
+ newKey()
92
+ ]),
93
+ children: [
94
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.Plus, {
95
+ "aria-hidden": "true"
96
+ }),
97
+ labels.addQuestion
98
+ ]
99
+ })
100
+ ]
101
+ }),
102
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
103
+ className: "grid gap-3",
104
+ children: rows.map((row, index)=>{
105
+ const key = keys[index];
106
+ const named = (template)=>(0, external_i18n_cjs_namespaceObject.formatGuardrailFormMessage)(template, {
107
+ label: parameter.label,
108
+ position: index + 1
109
+ });
110
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
111
+ role: "group",
112
+ "aria-labelledby": `${uid}-title-${key}`,
113
+ className: "grid gap-3 rounded-lg border border-border p-3",
114
+ children: [
115
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
116
+ className: "flex items-center justify-between",
117
+ children: [
118
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
119
+ id: `${uid}-title-${key}`,
120
+ className: "text-xs font-medium text-muted-foreground",
121
+ children: (0, external_i18n_cjs_namespaceObject.formatGuardrailFormMessage)(labels.customQuestionTitle, {
122
+ position: index + 1
123
+ })
124
+ }),
125
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Button, {
126
+ type: "button",
127
+ variant: "ghost",
128
+ size: "3xs",
129
+ icon: true,
130
+ "aria-label": named(labels.removeCustomQuestion),
131
+ className: "text-destructive future:text-destructive hover:text-destructive future:hover:text-destructive",
132
+ onClick: ()=>update(rows.filter((_, i)=>i !== index), keys.filter((_, i)=>i !== index)),
133
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.Trash2, {
134
+ "aria-hidden": "true"
135
+ })
136
+ })
137
+ ]
138
+ }),
139
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Textarea, {
140
+ value: row.question,
141
+ rows: 2,
142
+ placeholder: labels.questionPlaceholder,
143
+ "aria-label": named(labels.customQuestion),
144
+ "aria-invalid": error ? true : void 0,
145
+ "aria-describedby": error ? `${uid}-error` : void 0,
146
+ maxLength: parameter.maxLength,
147
+ className: "resize-y",
148
+ onChange: (e)=>updateRow(index, {
149
+ question: e.target.value
150
+ })
151
+ }),
152
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
153
+ className: "grid gap-2",
154
+ children: [
155
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(classifier_threshold_slider_cjs_namespaceObject.ClassifierThresholdSlider, {
156
+ value: row.threshold ?? external_classifier_utils_cjs_namespaceObject.CLASSIFIER_DEFAULT_THRESHOLD,
157
+ ariaLabel: named(labels.customQuestionStrictness),
158
+ labels: labels,
159
+ onChange: (threshold)=>updateRow(index, {
160
+ threshold
161
+ })
162
+ }),
163
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
164
+ className: "grid gap-1",
165
+ children: [
166
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Label, {
167
+ htmlFor: `${uid}-yes-${key}`,
168
+ variant: "muted",
169
+ children: labels.criteriaTrueLabel
170
+ }),
171
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Input, {
172
+ id: `${uid}-yes-${key}`,
173
+ value: row.criteriaTrue ?? '',
174
+ placeholder: labels.criteriaTruePlaceholder,
175
+ maxLength: CRITERIA_MAX_LENGTH,
176
+ onChange: (e)=>updateRow(index, {
177
+ criteriaTrue: e.target.value
178
+ })
179
+ })
180
+ ]
181
+ }),
182
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
183
+ className: "grid gap-1",
184
+ children: [
185
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Label, {
186
+ htmlFor: `${uid}-no-${key}`,
187
+ variant: "muted",
188
+ children: labels.criteriaFalseLabel
189
+ }),
190
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Input, {
191
+ id: `${uid}-no-${key}`,
192
+ value: row.criteriaFalse ?? '',
193
+ placeholder: labels.criteriaFalsePlaceholder,
194
+ maxLength: CRITERIA_MAX_LENGTH,
195
+ onChange: (e)=>updateRow(index, {
196
+ criteriaFalse: e.target.value
197
+ })
198
+ })
199
+ ]
200
+ })
201
+ ]
202
+ })
203
+ ]
204
+ }, key);
205
+ })
206
+ }),
207
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.FormFieldError, {
208
+ id: `${uid}-error`,
209
+ children: error
210
+ })
211
+ ]
212
+ });
213
+ }
214
+ exports.ClassifierCustomQuestionsEditor = __webpack_exports__.ClassifierCustomQuestionsEditor;
215
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
216
+ "ClassifierCustomQuestionsEditor"
217
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
218
+ Object.defineProperty(exports, '__esModule', {
219
+ value: true
220
+ });
@@ -0,0 +1,13 @@
1
+ import { type ClassifierCustomQuestion } from './classifier-utils';
2
+ import { type GuardrailClassifierLabels } from './i18n';
3
+ import type { GuardrailParameterDefinition } from './types';
4
+ export interface ClassifierCustomQuestionsEditorProps {
5
+ parameter: GuardrailParameterDefinition;
6
+ rows: readonly ClassifierCustomQuestion[];
7
+ onRowsChange: (rows: ClassifierCustomQuestion[]) => void;
8
+ error?: string;
9
+ labels?: Partial<GuardrailClassifierLabels>;
10
+ className?: string;
11
+ }
12
+ export declare function ClassifierCustomQuestionsEditor({ parameter, rows: persistedRows, onRowsChange, error, labels: labelOverrides, className, }: ClassifierCustomQuestionsEditorProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=classifier-custom-questions-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier-custom-questions-editor.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/classifier-custom-questions-editor.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAK5D,MAAM,WAAW,oCAAoC;IAEnD,SAAS,EAAE,4BAA4B,CAAC;IAExC,IAAI,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAE1C,YAAY,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,KAAK,IAAI,CAAC;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,wBAAgB,+BAA+B,CAAC,EAC9C,SAAS,EACT,IAAI,EAAE,aAAa,EACnB,YAAY,EACZ,KAAK,EACL,MAAM,EAAE,cAAc,EACtB,SAAS,GACV,EAAE,oCAAoC,2CAqItC"}
@@ -0,0 +1,186 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Button, FormField, FormFieldError, Input, Label, Textarea, cn } from "@uipath/apollo-wind";
3
+ import { Plus, Trash2 } from "lucide-react";
4
+ import { useId, useRef, useState } from "react";
5
+ import { CLASSIFIER_DEFAULT_THRESHOLD, sanitizeClassifierCustomQuestions } from "./classifier-utils.js";
6
+ import { ClassifierThresholdSlider } from "./components/classifier-threshold-slider.js";
7
+ import { ParameterLabel } from "./components/parameter-label.js";
8
+ import { formatGuardrailFormMessage, useGuardrailClassifierLabels } from "./i18n.js";
9
+ const CRITERIA_MAX_LENGTH = 500;
10
+ const serialize = (rows)=>JSON.stringify(sanitizeClassifierCustomQuestions(rows));
11
+ function ClassifierCustomQuestionsEditor({ parameter, rows: persistedRows, onRowsChange, error, labels: labelOverrides, className }) {
12
+ const labels = useGuardrailClassifierLabels(labelOverrides);
13
+ const uid = useId();
14
+ const [rows, setRows] = useState(()=>[
15
+ ...persistedRows
16
+ ]);
17
+ const lastKey = useRef(0);
18
+ const newKey = ()=>++lastKey.current;
19
+ const [keys, setKeys] = useState(()=>persistedRows.map(newKey));
20
+ const incoming = serialize(persistedRows);
21
+ const [seededFrom, setSeededFrom] = useState(incoming);
22
+ if (incoming !== seededFrom) {
23
+ setSeededFrom(incoming);
24
+ if (incoming !== serialize(rows)) {
25
+ setRows([
26
+ ...persistedRows
27
+ ]);
28
+ setKeys(persistedRows.map(newKey));
29
+ }
30
+ }
31
+ const update = (next, nextKeys = keys)=>{
32
+ setRows(next);
33
+ setKeys(nextKeys);
34
+ onRowsChange(next);
35
+ };
36
+ const updateRow = (index, patch)=>update(rows.map((row, i)=>i === index ? {
37
+ ...row,
38
+ ...patch
39
+ } : row));
40
+ return /*#__PURE__*/ jsxs(FormField, {
41
+ "data-slot": "classifier-custom-questions-editor",
42
+ className: cn('gap-2', className),
43
+ children: [
44
+ /*#__PURE__*/ jsxs("div", {
45
+ className: "flex items-center justify-between gap-2",
46
+ children: [
47
+ /*#__PURE__*/ jsx(ParameterLabel, {
48
+ paramDef: parameter,
49
+ labels: labels,
50
+ asTextHeader: true
51
+ }),
52
+ rows.length < (parameter.maxItems ?? 1 / 0) && /*#__PURE__*/ jsxs(Button, {
53
+ type: "button",
54
+ variant: "ghost",
55
+ size: "2xs",
56
+ onClick: ()=>update([
57
+ ...rows,
58
+ {
59
+ question: ''
60
+ }
61
+ ], [
62
+ ...keys,
63
+ newKey()
64
+ ]),
65
+ children: [
66
+ /*#__PURE__*/ jsx(Plus, {
67
+ "aria-hidden": "true"
68
+ }),
69
+ labels.addQuestion
70
+ ]
71
+ })
72
+ ]
73
+ }),
74
+ /*#__PURE__*/ jsx("div", {
75
+ className: "grid gap-3",
76
+ children: rows.map((row, index)=>{
77
+ const key = keys[index];
78
+ const named = (template)=>formatGuardrailFormMessage(template, {
79
+ label: parameter.label,
80
+ position: index + 1
81
+ });
82
+ return /*#__PURE__*/ jsxs("div", {
83
+ role: "group",
84
+ "aria-labelledby": `${uid}-title-${key}`,
85
+ className: "grid gap-3 rounded-lg border border-border p-3",
86
+ children: [
87
+ /*#__PURE__*/ jsxs("div", {
88
+ className: "flex items-center justify-between",
89
+ children: [
90
+ /*#__PURE__*/ jsx("span", {
91
+ id: `${uid}-title-${key}`,
92
+ className: "text-xs font-medium text-muted-foreground",
93
+ children: formatGuardrailFormMessage(labels.customQuestionTitle, {
94
+ position: index + 1
95
+ })
96
+ }),
97
+ /*#__PURE__*/ jsx(Button, {
98
+ type: "button",
99
+ variant: "ghost",
100
+ size: "3xs",
101
+ icon: true,
102
+ "aria-label": named(labels.removeCustomQuestion),
103
+ className: "text-destructive future:text-destructive hover:text-destructive future:hover:text-destructive",
104
+ onClick: ()=>update(rows.filter((_, i)=>i !== index), keys.filter((_, i)=>i !== index)),
105
+ children: /*#__PURE__*/ jsx(Trash2, {
106
+ "aria-hidden": "true"
107
+ })
108
+ })
109
+ ]
110
+ }),
111
+ /*#__PURE__*/ jsx(Textarea, {
112
+ value: row.question,
113
+ rows: 2,
114
+ placeholder: labels.questionPlaceholder,
115
+ "aria-label": named(labels.customQuestion),
116
+ "aria-invalid": error ? true : void 0,
117
+ "aria-describedby": error ? `${uid}-error` : void 0,
118
+ maxLength: parameter.maxLength,
119
+ className: "resize-y",
120
+ onChange: (e)=>updateRow(index, {
121
+ question: e.target.value
122
+ })
123
+ }),
124
+ /*#__PURE__*/ jsxs("div", {
125
+ className: "grid gap-2",
126
+ children: [
127
+ /*#__PURE__*/ jsx(ClassifierThresholdSlider, {
128
+ value: row.threshold ?? CLASSIFIER_DEFAULT_THRESHOLD,
129
+ ariaLabel: named(labels.customQuestionStrictness),
130
+ labels: labels,
131
+ onChange: (threshold)=>updateRow(index, {
132
+ threshold
133
+ })
134
+ }),
135
+ /*#__PURE__*/ jsxs("div", {
136
+ className: "grid gap-1",
137
+ children: [
138
+ /*#__PURE__*/ jsx(Label, {
139
+ htmlFor: `${uid}-yes-${key}`,
140
+ variant: "muted",
141
+ children: labels.criteriaTrueLabel
142
+ }),
143
+ /*#__PURE__*/ jsx(Input, {
144
+ id: `${uid}-yes-${key}`,
145
+ value: row.criteriaTrue ?? '',
146
+ placeholder: labels.criteriaTruePlaceholder,
147
+ maxLength: CRITERIA_MAX_LENGTH,
148
+ onChange: (e)=>updateRow(index, {
149
+ criteriaTrue: e.target.value
150
+ })
151
+ })
152
+ ]
153
+ }),
154
+ /*#__PURE__*/ jsxs("div", {
155
+ className: "grid gap-1",
156
+ children: [
157
+ /*#__PURE__*/ jsx(Label, {
158
+ htmlFor: `${uid}-no-${key}`,
159
+ variant: "muted",
160
+ children: labels.criteriaFalseLabel
161
+ }),
162
+ /*#__PURE__*/ jsx(Input, {
163
+ id: `${uid}-no-${key}`,
164
+ value: row.criteriaFalse ?? '',
165
+ placeholder: labels.criteriaFalsePlaceholder,
166
+ maxLength: CRITERIA_MAX_LENGTH,
167
+ onChange: (e)=>updateRow(index, {
168
+ criteriaFalse: e.target.value
169
+ })
170
+ })
171
+ ]
172
+ })
173
+ ]
174
+ })
175
+ ]
176
+ }, key);
177
+ })
178
+ }),
179
+ /*#__PURE__*/ jsx(FormFieldError, {
180
+ id: `${uid}-error`,
181
+ children: error
182
+ })
183
+ ]
184
+ });
185
+ }
186
+ export { ClassifierCustomQuestionsEditor };