@uipath/apollo-react 7.2.2 → 7.3.1

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 (87) 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/components/Toolbox/ListView.cjs +3 -3
  69. package/dist/canvas/components/Toolbox/ListView.d.ts +1 -0
  70. package/dist/canvas/components/Toolbox/ListView.d.ts.map +1 -1
  71. package/dist/canvas/components/Toolbox/ListView.js +3 -3
  72. package/dist/canvas/components/Toolbox/SearchBox.cjs +6 -2
  73. package/dist/canvas/components/Toolbox/SearchBox.d.ts +2 -0
  74. package/dist/canvas/components/Toolbox/SearchBox.d.ts.map +1 -1
  75. package/dist/canvas/components/Toolbox/SearchBox.js +7 -3
  76. package/dist/canvas/components/Toolbox/Toolbox.cjs +9 -2
  77. package/dist/canvas/components/Toolbox/Toolbox.d.ts.map +1 -1
  78. package/dist/canvas/components/Toolbox/Toolbox.js +9 -2
  79. package/dist/canvas/constants.cjs +1 -1
  80. package/dist/canvas/constants.d.ts +1 -1
  81. package/dist/canvas/constants.js +1 -1
  82. package/dist/canvas/locales/en.cjs +1 -1
  83. package/dist/canvas/locales/en.d.ts.map +1 -1
  84. package/dist/canvas/locales/en.js +1 -1
  85. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  86. package/dist/chat/styles/tailwind.chat.css +1 -1
  87. package/package.json +1 -1
@@ -1,97 +1,24 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
1
+ import { useMemo } from "react";
2
2
  import { useGuardrailDefinitionCopy } from "./definitions-copy.js";
3
3
  import { enrichGuardrailDefinitions } from "./definitions-enrich.js";
4
4
  import { parseGuardrailDefinitions } from "./definitions-parse.js";
5
+ import { useGuardrailsRequest } from "./use-guardrails-request.js";
5
6
  const GUARDRAIL_DEFINITIONS_PATH = '/api/execution/guardrails/definitions';
6
7
  const EMPTY_RESULT = {
7
8
  definitions: [],
8
9
  invalid: []
9
10
  };
10
- const NOTHING_SETTLED = {
11
- key: 'none',
12
- result: EMPTY_RESULT,
13
- error: null
14
- };
15
11
  function useGuardrailDefinitions(ctx, options = {}) {
16
12
  const { definitions: provided, hiddenValidators, copy: copyOverride, enabled: enabledOption = true } = options;
17
13
  const linguiCopy = useGuardrailDefinitionCopy();
18
14
  const copy = copyOverride ?? linguiCopy;
19
- const requestKey = null === ctx ? '' : JSON.stringify({
20
- baseUrl: ctx.baseUrl,
21
- token: ctx.token,
22
- tenantId: ctx.tenantId,
23
- accountId: ctx.accountId,
24
- headers: ctx.headers
15
+ const { data: fetched, loading, error, refetch } = useGuardrailsRequest(ctx, {
16
+ path: GUARDRAIL_DEFINITIONS_PATH,
17
+ endpointName: 'Guardrail definitions',
18
+ parse: parseGuardrailDefinitions,
19
+ empty: EMPTY_RESULT,
20
+ enabled: enabledOption && void 0 === provided
25
21
  });
26
- const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
27
- requestKey
28
- ]);
29
- const fetchRef = useRef(ctx?.fetch);
30
- fetchRef.current = ctx?.fetch;
31
- const enabled = enabledOption && void 0 === provided && null !== request;
32
- const [settled, setSettled] = useState(NOTHING_SETTLED);
33
- const [inFlight, setInFlight] = useState(false);
34
- const abortRef = useRef(null);
35
- const isCurrent = enabled && settled.key === requestKey;
36
- const fetched = isCurrent ? settled.result : EMPTY_RESULT;
37
- const error = isCurrent ? settled.error : null;
38
- const loading = enabled && (inFlight || !isCurrent);
39
- const load = useCallback(async ()=>{
40
- if (!enabled || null === request) return;
41
- abortRef.current?.abort();
42
- const controller = new AbortController();
43
- abortRef.current = controller;
44
- const key = requestKey;
45
- setInFlight(true);
46
- const base = (request.baseUrl ?? '').replace(/\/$/, '');
47
- const headers = {
48
- Accept: 'application/json',
49
- 'X-UiPath-Internal-TenantId': request.tenantId
50
- };
51
- if (request.token) headers.Authorization = `Bearer ${request.token}`;
52
- if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
53
- Object.assign(headers, request.headers);
54
- const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
55
- try {
56
- const response = await doFetch(`${base}${GUARDRAIL_DEFINITIONS_PATH}`, {
57
- headers,
58
- signal: controller.signal
59
- });
60
- if (!response.ok) throw new Error(`Guardrail definitions API ${response.status} ${response.statusText}`);
61
- const payload = await response.json();
62
- if (!controller.signal.aborted) setSettled({
63
- key,
64
- result: parseGuardrailDefinitions(payload),
65
- error: null
66
- });
67
- } catch (err) {
68
- if (err?.name === 'AbortError') return;
69
- if (!controller.signal.aborted) setSettled((prev)=>({
70
- key,
71
- result: prev.key === key ? prev.result : EMPTY_RESULT,
72
- error: err instanceof Error ? err : new Error(String(err))
73
- }));
74
- } finally{
75
- if (!controller.signal.aborted) setInFlight(false);
76
- }
77
- }, [
78
- enabled,
79
- request,
80
- requestKey
81
- ]);
82
- useEffect(()=>{
83
- if (!enabled) {
84
- abortRef.current?.abort();
85
- setInFlight(false);
86
- setSettled((prev)=>prev === NOTHING_SETTLED ? prev : NOTHING_SETTLED);
87
- return;
88
- }
89
- load();
90
- return ()=>abortRef.current?.abort();
91
- }, [
92
- enabled,
93
- load
94
- ]);
95
22
  const parsed = useMemo(()=>void 0 === provided ? fetched : parseGuardrailDefinitions(provided), [
96
23
  provided,
97
24
  fetched
@@ -115,7 +42,7 @@ function useGuardrailDefinitions(ctx, options = {}) {
115
42
  inputError: parsed.inputError,
116
43
  loading,
117
44
  error,
118
- refetch: load
45
+ refetch
119
46
  };
120
47
  }
121
48
  export { GUARDRAIL_DEFINITIONS_PATH, useGuardrailDefinitions };
@@ -0,0 +1,133 @@
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
+ useGuardrailsRequest: ()=>useGuardrailsRequest
28
+ });
29
+ const external_react_namespaceObject = require("react");
30
+ const NOTHING_SETTLED_KEY = 'none';
31
+ function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
32
+ const requestKey = null === ctx ? '' : JSON.stringify({
33
+ baseUrl: ctx.baseUrl,
34
+ token: ctx.token,
35
+ tenantId: ctx.tenantId,
36
+ accountId: ctx.accountId,
37
+ headers: ctx.headers
38
+ });
39
+ const request = (0, external_react_namespaceObject.useMemo)(()=>'' === requestKey ? null : JSON.parse(requestKey), [
40
+ requestKey
41
+ ]);
42
+ const fetchRef = (0, external_react_namespaceObject.useRef)(ctx?.fetch);
43
+ fetchRef.current = ctx?.fetch;
44
+ const enabled = enabledOption && null !== request;
45
+ const nothingSettled = (0, external_react_namespaceObject.useMemo)(()=>({
46
+ key: NOTHING_SETTLED_KEY,
47
+ data: empty,
48
+ error: null
49
+ }), [
50
+ empty
51
+ ]);
52
+ const [settled, setSettled] = (0, external_react_namespaceObject.useState)(nothingSettled);
53
+ const [inFlight, setInFlight] = (0, external_react_namespaceObject.useState)(false);
54
+ const abortRef = (0, external_react_namespaceObject.useRef)(null);
55
+ const isCurrent = enabled && settled.key === requestKey;
56
+ const data = isCurrent ? settled.data : empty;
57
+ const error = isCurrent ? settled.error : null;
58
+ const loading = enabled && (inFlight || !isCurrent);
59
+ const load = (0, external_react_namespaceObject.useCallback)(async ()=>{
60
+ if (!enabled || null === request) return;
61
+ abortRef.current?.abort();
62
+ const controller = new AbortController();
63
+ abortRef.current = controller;
64
+ const key = requestKey;
65
+ setInFlight(true);
66
+ const base = (request.baseUrl ?? '').replace(/\/$/, '');
67
+ const headers = {
68
+ Accept: 'application/json',
69
+ 'X-UiPath-Internal-TenantId': request.tenantId
70
+ };
71
+ if (request.token) headers.Authorization = `Bearer ${request.token}`;
72
+ if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
73
+ Object.assign(headers, request.headers);
74
+ const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
75
+ try {
76
+ const response = await doFetch(`${base}${path}`, {
77
+ headers,
78
+ signal: controller.signal
79
+ });
80
+ if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
81
+ const payload = await response.json();
82
+ if (!controller.signal.aborted) setSettled({
83
+ key,
84
+ data: parse(payload),
85
+ error: null
86
+ });
87
+ } catch (err) {
88
+ if (err?.name === 'AbortError') return;
89
+ if (!controller.signal.aborted) setSettled((prev)=>({
90
+ key,
91
+ data: prev.key === key ? prev.data : empty,
92
+ error: err instanceof Error ? err : new Error(String(err))
93
+ }));
94
+ } finally{
95
+ if (!controller.signal.aborted) setInFlight(false);
96
+ }
97
+ }, [
98
+ enabled,
99
+ request,
100
+ requestKey,
101
+ path,
102
+ endpointName,
103
+ parse,
104
+ empty
105
+ ]);
106
+ (0, external_react_namespaceObject.useEffect)(()=>{
107
+ if (!enabled) {
108
+ abortRef.current?.abort();
109
+ setInFlight(false);
110
+ setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
111
+ return;
112
+ }
113
+ load();
114
+ return ()=>abortRef.current?.abort();
115
+ }, [
116
+ enabled,
117
+ load,
118
+ nothingSettled
119
+ ]);
120
+ return {
121
+ data,
122
+ loading,
123
+ error,
124
+ refetch: load
125
+ };
126
+ }
127
+ exports.useGuardrailsRequest = __webpack_exports__.useGuardrailsRequest;
128
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
129
+ "useGuardrailsRequest"
130
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
131
+ Object.defineProperty(exports, '__esModule', {
132
+ value: true
133
+ });
@@ -0,0 +1,23 @@
1
+ export interface GuardrailDefinitionsRequestContext {
2
+ baseUrl?: string;
3
+ token?: string;
4
+ tenantId: string;
5
+ accountId?: string;
6
+ headers?: Record<string, string>;
7
+ fetch?: typeof fetch;
8
+ }
9
+ interface GuardrailsRequestOptions<T> {
10
+ path: string;
11
+ endpointName: string;
12
+ parse: (payload: unknown) => T;
13
+ empty: T;
14
+ enabled: boolean;
15
+ }
16
+ export declare function useGuardrailsRequest<T>(ctx: GuardrailDefinitionsRequestContext | null, { path, endpointName, parse, empty, enabled: enabledOption }: GuardrailsRequestOptions<T>): {
17
+ data: T;
18
+ loading: boolean;
19
+ error: Error | null;
20
+ refetch: () => void;
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=use-guardrails-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-guardrails-request.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/use-guardrails-request.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kCAAkC;IAEjD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,UAAU,wBAAwB,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;CAClB;AAoBD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,kCAAkC,GAAG,IAAI,EAC9C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACxF;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA0HzE"}
@@ -0,0 +1,99 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ const NOTHING_SETTLED_KEY = 'none';
3
+ function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
4
+ const requestKey = null === ctx ? '' : JSON.stringify({
5
+ baseUrl: ctx.baseUrl,
6
+ token: ctx.token,
7
+ tenantId: ctx.tenantId,
8
+ accountId: ctx.accountId,
9
+ headers: ctx.headers
10
+ });
11
+ const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
12
+ requestKey
13
+ ]);
14
+ const fetchRef = useRef(ctx?.fetch);
15
+ fetchRef.current = ctx?.fetch;
16
+ const enabled = enabledOption && null !== request;
17
+ const nothingSettled = useMemo(()=>({
18
+ key: NOTHING_SETTLED_KEY,
19
+ data: empty,
20
+ error: null
21
+ }), [
22
+ empty
23
+ ]);
24
+ const [settled, setSettled] = useState(nothingSettled);
25
+ const [inFlight, setInFlight] = useState(false);
26
+ const abortRef = useRef(null);
27
+ const isCurrent = enabled && settled.key === requestKey;
28
+ const data = isCurrent ? settled.data : empty;
29
+ const error = isCurrent ? settled.error : null;
30
+ const loading = enabled && (inFlight || !isCurrent);
31
+ const load = useCallback(async ()=>{
32
+ if (!enabled || null === request) return;
33
+ abortRef.current?.abort();
34
+ const controller = new AbortController();
35
+ abortRef.current = controller;
36
+ const key = requestKey;
37
+ setInFlight(true);
38
+ const base = (request.baseUrl ?? '').replace(/\/$/, '');
39
+ const headers = {
40
+ Accept: 'application/json',
41
+ 'X-UiPath-Internal-TenantId': request.tenantId
42
+ };
43
+ if (request.token) headers.Authorization = `Bearer ${request.token}`;
44
+ if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
45
+ Object.assign(headers, request.headers);
46
+ const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
47
+ try {
48
+ const response = await doFetch(`${base}${path}`, {
49
+ headers,
50
+ signal: controller.signal
51
+ });
52
+ if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
53
+ const payload = await response.json();
54
+ if (!controller.signal.aborted) setSettled({
55
+ key,
56
+ data: parse(payload),
57
+ error: null
58
+ });
59
+ } catch (err) {
60
+ if (err?.name === 'AbortError') return;
61
+ if (!controller.signal.aborted) setSettled((prev)=>({
62
+ key,
63
+ data: prev.key === key ? prev.data : empty,
64
+ error: err instanceof Error ? err : new Error(String(err))
65
+ }));
66
+ } finally{
67
+ if (!controller.signal.aborted) setInFlight(false);
68
+ }
69
+ }, [
70
+ enabled,
71
+ request,
72
+ requestKey,
73
+ path,
74
+ endpointName,
75
+ parse,
76
+ empty
77
+ ]);
78
+ useEffect(()=>{
79
+ if (!enabled) {
80
+ abortRef.current?.abort();
81
+ setInFlight(false);
82
+ setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
83
+ return;
84
+ }
85
+ load();
86
+ return ()=>abortRef.current?.abort();
87
+ }, [
88
+ enabled,
89
+ load,
90
+ nothingSettled
91
+ ]);
92
+ return {
93
+ data,
94
+ loading,
95
+ error,
96
+ refetch: load
97
+ };
98
+ }
99
+ export { useGuardrailsRequest };
@@ -81,7 +81,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
81
81
  });
82
82
  return changed ? next : parameters;
83
83
  }
84
- function syncMapEnumParameters(parameters, definitions) {
84
+ function syncMapEnumParameters(parameters, definitions, options) {
85
+ const leaveUnset = new Set(options?.leaveUnsetIds);
85
86
  const selectionBySourceId = new Map();
86
87
  for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
87
88
  const defById = new Map(definitions.map((d)=>[
@@ -102,7 +103,8 @@ function syncMapEnumParameters(parameters, definitions) {
102
103
  const synced = {};
103
104
  for (const key of allowedKeys){
104
105
  const persisted = currentMap[key];
105
- synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
106
+ if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
107
+ else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
106
108
  }
107
109
  return {
108
110
  ...param,
@@ -2,7 +2,10 @@ import type { GuardrailDetectionScope, GuardrailParameterDefinition, GuardrailVa
2
2
  export declare function coerceParameterValueToType(value: unknown, paramDef: Pick<GuardrailParameterDefinition, 'type' | 'min'>): GuardrailValidatorParameter['value'];
3
3
  export declare function seedGuardrailParameters(definitions: GuardrailParameterDefinition[], existing?: GuardrailValidatorParameter[]): GuardrailValidatorParameter[];
4
4
  export declare function normalizeGuardrailParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
5
- export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
5
+ export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[], options?: SyncMapEnumParametersOptions): GuardrailValidatorParameter[];
6
+ export interface SyncMapEnumParametersOptions {
7
+ leaveUnsetIds?: readonly string[];
8
+ }
6
9
  export declare function dropEmptyOptionalParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
7
10
  export declare function getOutOfRangeParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
8
11
  export declare function getRequiredEmptyParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,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;AAED,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AAQvE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,uBAAuB,GAAG,SAAS,CAarC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,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;AAeD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,2BAA2B,EAAE,EACzC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,OAAO,CAAC,EAAE,4BAA4B,GACrC,2BAA2B,EAAE,CA6C/B;AAED,MAAM,WAAW,4BAA4B;IAK3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;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;AAED,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AAQvE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,uBAAuB,GAAG,SAAS,CAarC"}
@@ -45,7 +45,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
45
45
  });
46
46
  return changed ? next : parameters;
47
47
  }
48
- function syncMapEnumParameters(parameters, definitions) {
48
+ function syncMapEnumParameters(parameters, definitions, options) {
49
+ const leaveUnset = new Set(options?.leaveUnsetIds);
49
50
  const selectionBySourceId = new Map();
50
51
  for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
51
52
  const defById = new Map(definitions.map((d)=>[
@@ -66,7 +67,8 @@ function syncMapEnumParameters(parameters, definitions) {
66
67
  const synced = {};
67
68
  for (const key of allowedKeys){
68
69
  const persisted = currentMap[key];
69
- synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
70
+ if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
71
+ else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
70
72
  }
71
73
  return {
72
74
  ...param,
@@ -290,9 +290,9 @@ const ListItemSkeleton = ()=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)
290
290
  })
291
291
  ]
292
292
  });
293
- const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, enableSections = true, loadingSkeleton }, ref) {
293
+ const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRef)(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, searchPending = false, enableSections = true, loadingSkeleton }, ref) {
294
294
  const { isDarkMode } = (0, CanvasThemeContext_cjs_namespaceObject.useCanvasTheme)();
295
- const activeSkeleton = loadingSkeleton ?? (isLoading && 0 === items.length ? true : void 0);
295
+ const activeSkeleton = loadingSkeleton ?? ((isLoading || searchPending) && 0 === items.length ? true : void 0);
296
296
  const renderedItems = (0, external_react_namespaceObject.useMemo)(()=>buildRenderedItems(items, enableSections, activeSkeleton), [
297
297
  items,
298
298
  enableSections,
@@ -348,7 +348,7 @@ const ListViewInner = /*#__PURE__*/ (0, external_react_namespaceObject.forwardRe
348
348
  id: "toolbox-listbox",
349
349
  className: LIST_SCROLLBAR_CLASS,
350
350
  role: "listbox",
351
- "aria-busy": activeSkeleton ? true : void 0,
351
+ "aria-busy": activeSkeleton || searchPending ? true : void 0,
352
352
  listRef: listRef,
353
353
  rowProps: rowProps,
354
354
  rowComponent: ListViewRow,
@@ -72,6 +72,7 @@ interface ListViewProps<T extends ListItem> {
72
72
  emptyStateIcon?: string;
73
73
  renderEmptyState?: () => React.ReactElement | null;
74
74
  isLoading?: boolean;
75
+ searchPending?: boolean;
75
76
  enableSections?: boolean;
76
77
  loadingSkeleton?: boolean | ChildrenLoadingSpec;
77
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/ListView.tsx"],"names":[],"mappings":"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"}
@@ -255,9 +255,9 @@ const ListItemSkeleton = ()=>/*#__PURE__*/ jsxs("div", {
255
255
  })
256
256
  ]
257
257
  });
258
- const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, enableSections = true, loadingSkeleton }, ref) {
258
+ const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -1, listRef, onItemClick, onItemHover, onScroll, emptyStateMessage = 'No items found', emptyStateIcon = 'search-x', renderEmptyState, isLoading = false, searchPending = false, enableSections = true, loadingSkeleton }, ref) {
259
259
  const { isDarkMode } = useCanvasTheme();
260
- const activeSkeleton = loadingSkeleton ?? (isLoading && 0 === items.length ? true : void 0);
260
+ const activeSkeleton = loadingSkeleton ?? ((isLoading || searchPending) && 0 === items.length ? true : void 0);
261
261
  const renderedItems = useMemo(()=>buildRenderedItems(items, enableSections, activeSkeleton), [
262
262
  items,
263
263
  enableSections,
@@ -313,7 +313,7 @@ const ListViewInner = /*#__PURE__*/ forwardRef(function({ items, activeIndex = -
313
313
  id: "toolbox-listbox",
314
314
  className: LIST_SCROLLBAR_CLASS,
315
315
  role: "listbox",
316
- "aria-busy": activeSkeleton ? true : void 0,
316
+ "aria-busy": activeSkeleton || searchPending ? true : void 0,
317
317
  listRef: listRef,
318
318
  rowProps: rowProps,
319
319
  rowComponent: ListViewRow,
@@ -30,7 +30,7 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
30
  const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
31
31
  const external_react_namespaceObject = require("react");
32
32
  const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
33
- const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId }) {
33
+ const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId, pending = false, pendingLabel = 'Searching' }) {
34
34
  const internalRef = (0, external_react_namespaceObject.useRef)(null);
35
35
  const inputRef = externalInputRef ?? internalRef;
36
36
  (0, external_react_namespaceObject.useEffect)(()=>{
@@ -55,7 +55,11 @@ const SearchBox_SearchBox = /*#__PURE__*/ (0, external_react_namespaceObject.mem
55
55
  children: [
56
56
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.InputGroupAddon, {
57
57
  align: "inline-start",
58
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
58
+ children: pending ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(apollo_wind_namespaceObject.Spinner, {
59
+ size: "sm",
60
+ label: pendingLabel,
61
+ "data-testid": "toolbox-search-pending"
62
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
59
63
  icon: "search",
60
64
  size: 16
61
65
  })
@@ -9,6 +9,8 @@ interface SearchBoxProps {
9
9
  onNavigationKeyDown?: (e: React.KeyboardEvent) => void;
10
10
  navigateToFirstItem?: () => void;
11
11
  activeDescendantId?: string;
12
+ pending?: boolean;
13
+ pendingLabel?: string;
12
14
  }
13
15
  export declare const SearchBox: import("react").NamedExoticComponent<SearchBoxProps>;
14
16
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/SearchBox.tsx"],"names":[],"mappings":"AAUA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IACvD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,SAAS,sDA4EpB,CAAC"}
1
+ {"version":3,"file":"SearchBox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/SearchBox.tsx"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC3D,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IACvD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,SAAS,sDAoFpB,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "@uipath/apollo-wind";
2
+ import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, Spinner } from "@uipath/apollo-wind";
3
3
  import { memo, useEffect, useRef } from "react";
4
4
  import { CanvasIcon } from "../../utils/icon-registry.js";
5
- const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId }) {
5
+ const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear, placeholder = 'Search...', clearButtonAriaLabel = 'Clear search', inputRef: externalInputRef, clearButtonRef, onNavigationKeyDown, navigateToFirstItem, activeDescendantId, pending = false, pendingLabel = 'Searching' }) {
6
6
  const internalRef = useRef(null);
7
7
  const inputRef = externalInputRef ?? internalRef;
8
8
  useEffect(()=>{
@@ -27,7 +27,11 @@ const SearchBox_SearchBox = /*#__PURE__*/ memo(function({ value, onChange, clear
27
27
  children: [
28
28
  /*#__PURE__*/ jsx(InputGroupAddon, {
29
29
  align: "inline-start",
30
- children: /*#__PURE__*/ jsx(CanvasIcon, {
30
+ children: pending ? /*#__PURE__*/ jsx(Spinner, {
31
+ size: "sm",
32
+ label: pendingLabel,
33
+ "data-testid": "toolbox-search-pending"
34
+ }) : /*#__PURE__*/ jsx(CanvasIcon, {
31
35
  icon: "search",
32
36
  size: 16
33
37
  })
@@ -96,6 +96,10 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
96
96
  id: 'toolbox.search.clear',
97
97
  message: 'Clear search'
98
98
  });
99
+ const searchPendingLabel = _({
100
+ id: 'toolbox.search.pending',
101
+ message: 'Searching'
102
+ });
99
103
  const [items, setItems] = (0, external_react_namespaceObject.useState)(initialItems);
100
104
  const [search, setSearch] = (0, external_react_namespaceObject.useState)('');
101
105
  const [searchLoading, setSearchLoading] = (0, external_react_namespaceObject.useState)(false);
@@ -504,7 +508,9 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
504
508
  clearButtonRef: clearButtonRef,
505
509
  onNavigationKeyDown: handleNavigationKeyDown,
506
510
  navigateToFirstItem: navigateToFirstItem,
507
- activeDescendantId: activeDescendantId
511
+ activeDescendantId: activeDescendantId,
512
+ pending: searchLoading,
513
+ pendingLabel: searchPendingLabel
508
514
  }),
509
515
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
510
516
  className: "relative flex min-h-[50px] flex-1 flex-col overflow-hidden",
@@ -512,7 +518,8 @@ function Toolbox({ onClose, onBack, onItemSelect, onSearch, onItemHover, title,
512
518
  className: (0, external_utils_index_cjs_namespaceObject.cx)('flex min-h-[50px] flex-1 flex-col', isTransitioning && ENTER_ANIMATION_CLASS[animationDirection]),
513
519
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_ListView_cjs_namespaceObject.ListView, {
514
520
  ref: listViewRef,
515
- isLoading: awaitingChildren || searchLoading || loading,
521
+ isLoading: awaitingChildren || loading,
522
+ searchPending: searchLoading,
516
523
  items: displayedItems,
517
524
  activeIndex: activeIndex,
518
525
  listRef: listRef,
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA+D7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACrD,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC/B,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAEhC,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IAQd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAKnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAO3B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAOpC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAOhD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,GAClB,EAAE,YAAY,CAAC,CAAC,CAAC,2CA6jBjB"}
1
+ {"version":3,"file":"Toolbox.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Toolbox/Toolbox.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,QAAQ,EAAkD,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA+D7E,MAAM,MAAM,yBAAyB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACrD,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC/B,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAEhC,MAAM,MAAM,oBAAoB,CAAC,CAAC,GAAG,GAAG,IAAI,CAC1C,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,OAAO,EACzB,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE;IAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAC5E,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IAQd,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAKnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAO3B,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAOpC,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAOhD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgDD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACzB,OAAO,EACP,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAY,EACZ,OAAO,EACP,SAAiB,EACjB,UAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,GAClB,EAAE,YAAY,CAAC,CAAC,CAAC,2CAukBjB"}