@uipath/apollo-react 4.60.0 → 4.61.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 (126) hide show
  1. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  2. package/dist/material/components/ap-model-picker/ModelPicker.cjs +543 -0
  3. package/dist/material/components/ap-model-picker/ModelPicker.d.ts +56 -0
  4. package/dist/material/components/ap-model-picker/ModelPicker.d.ts.map +1 -0
  5. package/dist/material/components/ap-model-picker/ModelPicker.js +494 -0
  6. package/dist/material/components/ap-model-picker/ModelTagChip.cjs +140 -0
  7. package/dist/material/components/ap-model-picker/ModelTagChip.d.ts +11 -0
  8. package/dist/material/components/ap-model-picker/ModelTagChip.d.ts.map +1 -0
  9. package/dist/material/components/ap-model-picker/ModelTagChip.js +90 -0
  10. package/dist/material/components/ap-model-picker/badges.cjs +53 -0
  11. package/dist/material/components/ap-model-picker/badges.d.ts +9 -0
  12. package/dist/material/components/ap-model-picker/badges.d.ts.map +1 -0
  13. package/dist/material/components/ap-model-picker/badges.js +19 -0
  14. package/dist/material/components/ap-model-picker/i18n.cjs +187 -0
  15. package/dist/material/components/ap-model-picker/i18n.d.ts +53 -0
  16. package/dist/material/components/ap-model-picker/i18n.d.ts.map +1 -0
  17. package/dist/material/components/ap-model-picker/i18n.js +117 -0
  18. package/dist/material/components/ap-model-picker/index.cjs +112 -0
  19. package/dist/material/components/ap-model-picker/index.d.ts +31 -0
  20. package/dist/material/components/ap-model-picker/index.d.ts.map +1 -0
  21. package/dist/material/components/ap-model-picker/index.js +15 -0
  22. package/dist/material/components/ap-model-picker/locales/de.cjs +36 -0
  23. package/dist/material/components/ap-model-picker/locales/de.d.ts +3 -0
  24. package/dist/material/components/ap-model-picker/locales/de.d.ts.map +1 -0
  25. package/dist/material/components/ap-model-picker/locales/de.js +2 -0
  26. package/dist/material/components/ap-model-picker/locales/en.cjs +36 -0
  27. package/dist/material/components/ap-model-picker/locales/en.d.ts +3 -0
  28. package/dist/material/components/ap-model-picker/locales/en.d.ts.map +1 -0
  29. package/dist/material/components/ap-model-picker/locales/en.js +2 -0
  30. package/dist/material/components/ap-model-picker/locales/es-MX.cjs +36 -0
  31. package/dist/material/components/ap-model-picker/locales/es-MX.d.ts +3 -0
  32. package/dist/material/components/ap-model-picker/locales/es-MX.d.ts.map +1 -0
  33. package/dist/material/components/ap-model-picker/locales/es-MX.js +2 -0
  34. package/dist/material/components/ap-model-picker/locales/es.cjs +36 -0
  35. package/dist/material/components/ap-model-picker/locales/es.d.ts +3 -0
  36. package/dist/material/components/ap-model-picker/locales/es.d.ts.map +1 -0
  37. package/dist/material/components/ap-model-picker/locales/es.js +2 -0
  38. package/dist/material/components/ap-model-picker/locales/fr.cjs +36 -0
  39. package/dist/material/components/ap-model-picker/locales/fr.d.ts +3 -0
  40. package/dist/material/components/ap-model-picker/locales/fr.d.ts.map +1 -0
  41. package/dist/material/components/ap-model-picker/locales/fr.js +2 -0
  42. package/dist/material/components/ap-model-picker/locales/ja.cjs +36 -0
  43. package/dist/material/components/ap-model-picker/locales/ja.d.ts +3 -0
  44. package/dist/material/components/ap-model-picker/locales/ja.d.ts.map +1 -0
  45. package/dist/material/components/ap-model-picker/locales/ja.js +2 -0
  46. package/dist/material/components/ap-model-picker/locales/ko.cjs +36 -0
  47. package/dist/material/components/ap-model-picker/locales/ko.d.ts +3 -0
  48. package/dist/material/components/ap-model-picker/locales/ko.d.ts.map +1 -0
  49. package/dist/material/components/ap-model-picker/locales/ko.js +2 -0
  50. package/dist/material/components/ap-model-picker/locales/pt-BR.cjs +36 -0
  51. package/dist/material/components/ap-model-picker/locales/pt-BR.d.ts +3 -0
  52. package/dist/material/components/ap-model-picker/locales/pt-BR.d.ts.map +1 -0
  53. package/dist/material/components/ap-model-picker/locales/pt-BR.js +2 -0
  54. package/dist/material/components/ap-model-picker/locales/pt.cjs +36 -0
  55. package/dist/material/components/ap-model-picker/locales/pt.d.ts +3 -0
  56. package/dist/material/components/ap-model-picker/locales/pt.d.ts.map +1 -0
  57. package/dist/material/components/ap-model-picker/locales/pt.js +2 -0
  58. package/dist/material/components/ap-model-picker/locales/ru.cjs +36 -0
  59. package/dist/material/components/ap-model-picker/locales/ru.d.ts +3 -0
  60. package/dist/material/components/ap-model-picker/locales/ru.d.ts.map +1 -0
  61. package/dist/material/components/ap-model-picker/locales/ru.js +2 -0
  62. package/dist/material/components/ap-model-picker/locales/tr.cjs +36 -0
  63. package/dist/material/components/ap-model-picker/locales/tr.d.ts +3 -0
  64. package/dist/material/components/ap-model-picker/locales/tr.d.ts.map +1 -0
  65. package/dist/material/components/ap-model-picker/locales/tr.js +2 -0
  66. package/dist/material/components/ap-model-picker/locales/zh-CN.cjs +36 -0
  67. package/dist/material/components/ap-model-picker/locales/zh-CN.d.ts +3 -0
  68. package/dist/material/components/ap-model-picker/locales/zh-CN.d.ts.map +1 -0
  69. package/dist/material/components/ap-model-picker/locales/zh-CN.js +2 -0
  70. package/dist/material/components/ap-model-picker/locales/zh-TW.cjs +36 -0
  71. package/dist/material/components/ap-model-picker/locales/zh-TW.d.ts +3 -0
  72. package/dist/material/components/ap-model-picker/locales/zh-TW.d.ts.map +1 -0
  73. package/dist/material/components/ap-model-picker/locales/zh-TW.js +2 -0
  74. package/dist/material/components/ap-model-picker/primitives/FolderSwitcher.cjs +236 -0
  75. package/dist/material/components/ap-model-picker/primitives/FolderSwitcher.d.ts +15 -0
  76. package/dist/material/components/ap-model-picker/primitives/FolderSwitcher.d.ts.map +1 -0
  77. package/dist/material/components/ap-model-picker/primitives/FolderSwitcher.js +181 -0
  78. package/dist/material/components/ap-model-picker/primitives/GroupHeader.cjs +139 -0
  79. package/dist/material/components/ap-model-picker/primitives/GroupHeader.d.ts +16 -0
  80. package/dist/material/components/ap-model-picker/primitives/GroupHeader.d.ts.map +1 -0
  81. package/dist/material/components/ap-model-picker/primitives/GroupHeader.js +92 -0
  82. package/dist/material/components/ap-model-picker/primitives/ModelOptionRow.cjs +258 -0
  83. package/dist/material/components/ap-model-picker/primitives/ModelOptionRow.d.ts +29 -0
  84. package/dist/material/components/ap-model-picker/primitives/ModelOptionRow.d.ts.map +1 -0
  85. package/dist/material/components/ap-model-picker/primitives/ModelOptionRow.js +199 -0
  86. package/dist/material/components/ap-model-picker/primitives/OptionList.cjs +287 -0
  87. package/dist/material/components/ap-model-picker/primitives/OptionList.d.ts +31 -0
  88. package/dist/material/components/ap-model-picker/primitives/OptionList.d.ts.map +1 -0
  89. package/dist/material/components/ap-model-picker/primitives/OptionList.js +235 -0
  90. package/dist/material/components/ap-model-picker/primitives/PickerPopup.cjs +110 -0
  91. package/dist/material/components/ap-model-picker/primitives/PickerPopup.d.ts +16 -0
  92. package/dist/material/components/ap-model-picker/primitives/PickerPopup.d.ts.map +1 -0
  93. package/dist/material/components/ap-model-picker/primitives/PickerPopup.js +63 -0
  94. package/dist/material/components/ap-model-picker/primitives/PickerSearchInput.cjs +143 -0
  95. package/dist/material/components/ap-model-picker/primitives/PickerSearchInput.d.ts +18 -0
  96. package/dist/material/components/ap-model-picker/primitives/PickerSearchInput.d.ts.map +1 -0
  97. package/dist/material/components/ap-model-picker/primitives/PickerSearchInput.js +97 -0
  98. package/dist/material/components/ap-model-picker/primitives/PickerTrigger.cjs +195 -0
  99. package/dist/material/components/ap-model-picker/primitives/PickerTrigger.d.ts +25 -0
  100. package/dist/material/components/ap-model-picker/primitives/PickerTrigger.d.ts.map +1 -0
  101. package/dist/material/components/ap-model-picker/primitives/PickerTrigger.js +148 -0
  102. package/dist/material/components/ap-model-picker/types.cjs +18 -0
  103. package/dist/material/components/ap-model-picker/types.d.ts +77 -0
  104. package/dist/material/components/ap-model-picker/types.d.ts.map +1 -0
  105. package/dist/material/components/ap-model-picker/types.js +0 -0
  106. package/dist/material/components/ap-model-picker/useDiscoveryModels.cjs +113 -0
  107. package/dist/material/components/ap-model-picker/useDiscoveryModels.d.ts +9 -0
  108. package/dist/material/components/ap-model-picker/useDiscoveryModels.d.ts.map +1 -0
  109. package/dist/material/components/ap-model-picker/useDiscoveryModels.js +79 -0
  110. package/dist/material/components/ap-model-picker/useModelPickerState.cjs +175 -0
  111. package/dist/material/components/ap-model-picker/useModelPickerState.d.ts +40 -0
  112. package/dist/material/components/ap-model-picker/useModelPickerState.d.ts.map +1 -0
  113. package/dist/material/components/ap-model-picker/useModelPickerState.js +141 -0
  114. package/dist/material/components/ap-model-picker/usePlatformAccess.cjs +184 -0
  115. package/dist/material/components/ap-model-picker/usePlatformAccess.d.ts +32 -0
  116. package/dist/material/components/ap-model-picker/usePlatformAccess.d.ts.map +1 -0
  117. package/dist/material/components/ap-model-picker/usePlatformAccess.js +141 -0
  118. package/dist/material/components/ap-model-picker/utils.cjs +309 -0
  119. package/dist/material/components/ap-model-picker/utils.d.ts +23 -0
  120. package/dist/material/components/ap-model-picker/utils.d.ts.map +1 -0
  121. package/dist/material/components/ap-model-picker/utils.js +263 -0
  122. package/dist/material/components/index.cjs +31 -24
  123. package/dist/material/components/index.d.ts +1 -0
  124. package/dist/material/components/index.d.ts.map +1 -1
  125. package/dist/material/components/index.js +1 -0
  126. package/package.json +2 -1
@@ -0,0 +1,494 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import Add from "@mui/icons-material/Add";
3
+ import Box from "@mui/material/Box";
4
+ import ButtonBase from "@mui/material/ButtonBase";
5
+ import CircularProgress from "@mui/material/CircularProgress";
6
+ import Typography from "@mui/material/Typography";
7
+ import { Colors, FontFamily } from "@uipath/apollo-core";
8
+ import react from "react";
9
+ import { useSafeLingui } from "../../../i18n/index.js";
10
+ import { FolderSwitcher } from "./primitives/FolderSwitcher.js";
11
+ import { defaultRowActions } from "./primitives/ModelOptionRow.js";
12
+ import { GroupedOptionList, VirtualOptionList, optionDomId } from "./primitives/OptionList.js";
13
+ import { PickerPopup } from "./primitives/PickerPopup.js";
14
+ import { PickerSearchInput } from "./primitives/PickerSearchInput.js";
15
+ import { PickerTrigger } from "./primitives/PickerTrigger.js";
16
+ import { useModelPickerState } from "./useModelPickerState.js";
17
+ import { buildLlmConfigurationsUrl, platformNavigation, useCanManageByo, useUserFolders } from "./usePlatformAccess.js";
18
+ const REQUIRED_INDICATOR = '*';
19
+ const AUTO_VIRTUALIZE_THRESHOLD = 120;
20
+ const ModelPicker = /*#__PURE__*/ react.forwardRef(({ models, value, onChange, label, required, placeholder, disabled, invalid, errorText, variant = 'searchable', groupBy = "subscription", allowGroupingChange = true, homeRegion, recommendedModelIds, previewModelIds, filter, badgesFor, customTagsFor, customTagVariants, canManageByo, onUseCustomModel, requestContext, enableFolders = false, folders, folder = null, onFolderChange, allFoldersLabel, loading, error, showGroupHeaders = true, slots }, forwardedRef)=>{
21
+ const { _ } = useSafeLingui();
22
+ const i18n = react.useMemo(()=>({
23
+ _
24
+ }), [
25
+ _
26
+ ]);
27
+ const resolvedLabel = label ?? _({
28
+ id: 'modelPicker.label.default',
29
+ message: 'Model'
30
+ });
31
+ const resolvedPlaceholder = placeholder ?? _({
32
+ id: 'modelPicker.placeholder.selectAModel',
33
+ message: 'Select a model'
34
+ });
35
+ const initiallyCollapsedGroups = react.useMemo(()=>[], []);
36
+ const state = useModelPickerState({
37
+ models,
38
+ value,
39
+ onChange,
40
+ groupBy,
41
+ recommendedModelIds,
42
+ previewModelIds,
43
+ filter,
44
+ initiallyCollapsedGroups,
45
+ i18n
46
+ });
47
+ const { open, setOpen, query, setQuery, groupBy: activeGroupBy, setGroupBy, filtered, groupCounts, collapsedGroups, toggleGroup, selected, unknownValue, activeIndex, setActiveIndex, onSearchKeyDown, choose, id, triggerRef, searchRef } = state;
48
+ const listboxId = `${id}-listbox`;
49
+ const List = 'virtualized' === variant || filtered.length > AUTO_VIRTUALIZE_THRESHOLD ? VirtualOptionList : GroupedOptionList;
50
+ const handleTriggerRef = react.useCallback((node)=>{
51
+ triggerRef.current = node;
52
+ if ('function' == typeof forwardedRef) forwardedRef(node);
53
+ else if (forwardedRef) forwardedRef.current = node;
54
+ }, [
55
+ forwardedRef,
56
+ triggerRef
57
+ ]);
58
+ const closePopup = react.useCallback(()=>setOpen(false), [
59
+ setOpen
60
+ ]);
61
+ const slotCtx = react.useMemo(()=>({
62
+ selected,
63
+ close: closePopup
64
+ }), [
65
+ selected,
66
+ closePopup
67
+ ]);
68
+ const { canManage: isOrgAdmin } = useCanManageByo(void 0 === canManageByo && requestContext ? requestContext : null);
69
+ const effectiveCanManageByo = canManageByo ?? isOrgAdmin ?? false;
70
+ const { folders: fetchedFolders } = useUserFolders(enableFolders && !folders && requestContext ? requestContext : null);
71
+ const effectiveFolders = folders ?? (enableFolders ? fetchedFolders : void 0);
72
+ const selectedFolderNumericId = react.useMemo(()=>effectiveFolders?.find((f)=>f.id === folder)?.numericId, [
73
+ effectiveFolders,
74
+ folder
75
+ ]);
76
+ const navigateToLlmConfigurations = react.useMemo(()=>{
77
+ if (!requestContext) return;
78
+ return (link)=>{
79
+ platformNavigation.assign(buildLlmConfigurationsUrl(requestContext, {
80
+ ...link,
81
+ folderNumericId: selectedFolderNumericId
82
+ }));
83
+ };
84
+ }, [
85
+ requestContext,
86
+ selectedFolderNumericId
87
+ ]);
88
+ react.useEffect(()=>{
89
+ if ("u" < typeof process || 'production' === process.env['NODE_ENV'] || !effectiveFolders) return;
90
+ const seen = new Set();
91
+ for (const f of effectiveFolders){
92
+ if (seen.has(f.id)) return void console.warn(`[ModelPicker] Duplicate folder id "${f.id}" — folder selection will misbehave.`);
93
+ seen.add(f.id);
94
+ }
95
+ }, [
96
+ effectiveFolders
97
+ ]);
98
+ const tagContext = react.useMemo(()=>({
99
+ i18n,
100
+ homeRegion,
101
+ recommendedModelIds,
102
+ previewModelIds,
103
+ badgesFor,
104
+ customTagsFor
105
+ }), [
106
+ i18n,
107
+ homeRegion,
108
+ recommendedModelIds,
109
+ previewModelIds,
110
+ badgesFor,
111
+ customTagsFor
112
+ ]);
113
+ const rowHideTagKinds = react.useMemo(()=>"subscription" === activeGroupBy ? [
114
+ 'recommended',
115
+ 'preview'
116
+ ] : void 0, [
117
+ activeGroupBy
118
+ ]);
119
+ const renderRowActions = react.useMemo(()=>{
120
+ if (slots?.optionActions) return slots.optionActions;
121
+ if (!effectiveCanManageByo || !navigateToLlmConfigurations) return ()=>null;
122
+ return (m)=>defaultRowActions(m, {
123
+ i18n,
124
+ onEdit: (model)=>navigateToLlmConfigurations({
125
+ intent: 'edit',
126
+ configurationId: model.byomDetails?.productLlmConfigurationId
127
+ })
128
+ });
129
+ }, [
130
+ slots?.optionActions,
131
+ effectiveCanManageByo,
132
+ navigateToLlmConfigurations,
133
+ i18n
134
+ ]);
135
+ const footerNode = react.useMemo(()=>{
136
+ if (slots && Object.hasOwn(slots, 'popupFooter')) return slots.popupFooter ? slots.popupFooter(slotCtx) : null;
137
+ if (!effectiveCanManageByo) return null;
138
+ const activate = onUseCustomModel ?? (navigateToLlmConfigurations ? ()=>navigateToLlmConfigurations({
139
+ intent: 'add'
140
+ }) : void 0);
141
+ return /*#__PURE__*/ jsx(UseCustomModelFooter, {
142
+ onActivate: ()=>{
143
+ closePopup();
144
+ activate?.();
145
+ },
146
+ disabled: !activate
147
+ });
148
+ }, [
149
+ slots,
150
+ effectiveCanManageByo,
151
+ onUseCustomModel,
152
+ navigateToLlmConfigurations,
153
+ slotCtx,
154
+ closePopup
155
+ ]);
156
+ return /*#__PURE__*/ jsxs(Box, {
157
+ className: "apollo-model-picker",
158
+ sx: {
159
+ width: '100%',
160
+ fontFamily: FontFamily.FontNormal
161
+ },
162
+ children: [
163
+ /*#__PURE__*/ jsxs(Typography, {
164
+ component: "label",
165
+ htmlFor: `${id}-trigger`,
166
+ sx: {
167
+ display: 'block',
168
+ fontSize: 13,
169
+ fontWeight: 600,
170
+ color: `var(--color-foreground-de-emp, ${Colors.ColorGray550})`,
171
+ mb: 0.875
172
+ },
173
+ children: [
174
+ resolvedLabel,
175
+ required && /*#__PURE__*/ jsx(Box, {
176
+ component: "span",
177
+ "aria-hidden": true,
178
+ sx: {
179
+ color: `var(--color-error-text, ${Colors.ColorRed700})`,
180
+ ml: 0.25
181
+ },
182
+ children: REQUIRED_INDICATOR
183
+ })
184
+ ]
185
+ }),
186
+ /*#__PURE__*/ jsx(PickerTrigger, {
187
+ id: `${id}-trigger`,
188
+ triggerRef: handleTriggerRef,
189
+ selected: selected,
190
+ unknownValue: unknownValue,
191
+ placeholder: resolvedPlaceholder,
192
+ disabled: disabled,
193
+ invalid: !!invalid || !!error || !!unknownValue,
194
+ required: required,
195
+ open: open,
196
+ controlsId: listboxId,
197
+ describedById: errorText ?? error ? `${id}-error` : void 0,
198
+ tagContext: tagContext,
199
+ tagVariants: customTagVariants,
200
+ extra: slots?.triggerExtra?.(selected),
201
+ onClick: ()=>setOpen(!open)
202
+ }),
203
+ (errorText ?? error) && /*#__PURE__*/ jsx(Typography, {
204
+ id: `${id}-error`,
205
+ variant: "caption",
206
+ role: "alert",
207
+ sx: {
208
+ display: 'block',
209
+ color: `var(--color-error-text, ${Colors.ColorRed700})`,
210
+ mt: 0.5,
211
+ fontSize: 12
212
+ },
213
+ children: errorText ?? error?.message
214
+ }),
215
+ /*#__PURE__*/ jsxs(PickerPopup, {
216
+ open: open,
217
+ anchorEl: triggerRef.current,
218
+ onClose: closePopup,
219
+ header: /*#__PURE__*/ jsxs(Fragment, {
220
+ children: [
221
+ slots?.popupHeader?.(),
222
+ /*#__PURE__*/ jsx(PickerSearchInput, {
223
+ value: query,
224
+ onChange: (next)=>{
225
+ setQuery(next);
226
+ setActiveIndex(0);
227
+ },
228
+ onKeyDown: onSearchKeyDown,
229
+ inputRef: searchRef,
230
+ listboxId: listboxId,
231
+ activeDescendantId: filtered[activeIndex] ? optionDomId(listboxId, filtered[activeIndex].modelId) : void 0,
232
+ leading: slots?.searchLeading?.() ?? (effectiveFolders && effectiveFolders.length > 0 && onFolderChange ? /*#__PURE__*/ jsx(FolderSwitcher, {
233
+ folders: effectiveFolders,
234
+ value: folder ?? null,
235
+ onChange: onFolderChange,
236
+ allFoldersLabel: allFoldersLabel
237
+ }) : void 0),
238
+ trailing: allowGroupingChange ? /*#__PURE__*/ jsx(GroupBySegmented, {
239
+ value: activeGroupBy,
240
+ onChange: setGroupBy
241
+ }) : void 0
242
+ })
243
+ ]
244
+ }),
245
+ footer: footerNode,
246
+ children: [
247
+ loading && /*#__PURE__*/ jsx(Box, {
248
+ role: "status",
249
+ "aria-live": "polite",
250
+ "aria-label": _({
251
+ id: 'modelPicker.loading.label',
252
+ message: 'Loading models'
253
+ }),
254
+ sx: {
255
+ py: 3,
256
+ display: 'flex',
257
+ justifyContent: 'center',
258
+ color: `var(--color-foreground-de-emp, ${Colors.ColorGray550})`
259
+ },
260
+ children: /*#__PURE__*/ jsx(CircularProgress, {
261
+ size: 20
262
+ })
263
+ }),
264
+ error && !loading && /*#__PURE__*/ jsx(Box, {
265
+ role: "alert",
266
+ sx: {
267
+ py: 2,
268
+ px: 2,
269
+ textAlign: 'center',
270
+ color: `var(--color-error-text, ${Colors.ColorRed700})`,
271
+ fontSize: 13
272
+ },
273
+ children: error.message
274
+ }),
275
+ !loading && !error && 0 === filtered.length && /*#__PURE__*/ jsx(Box, {
276
+ role: "status",
277
+ "aria-live": "polite",
278
+ sx: {
279
+ py: 3,
280
+ textAlign: 'center',
281
+ color: `var(--color-foreground-de-emp, ${Colors.ColorGray550})`,
282
+ fontSize: 13
283
+ },
284
+ children: query.trim() ? _({
285
+ id: 'modelPicker.empty.noMatch',
286
+ message: 'No models match "{query}".',
287
+ values: {
288
+ query: query.trim()
289
+ }
290
+ }) : _({
291
+ id: 'modelPicker.empty.noModels',
292
+ message: 'No models available.'
293
+ })
294
+ }),
295
+ /*#__PURE__*/ jsx(Box, {
296
+ "aria-live": "polite",
297
+ "aria-atomic": "true",
298
+ sx: {
299
+ position: 'absolute',
300
+ width: '1px',
301
+ height: '1px',
302
+ margin: '-1px',
303
+ padding: 0,
304
+ overflow: 'hidden',
305
+ clip: 'rect(0 0 0 0)',
306
+ whiteSpace: 'nowrap',
307
+ border: 0
308
+ },
309
+ children: loading || error || !(filtered.length > 0) ? '' : 1 === filtered.length ? _({
310
+ id: 'modelPicker.count.one',
311
+ message: '{n} model',
312
+ values: {
313
+ n: filtered.length
314
+ }
315
+ }) : _({
316
+ id: 'modelPicker.count.many',
317
+ message: '{n} models',
318
+ values: {
319
+ n: filtered.length
320
+ }
321
+ })
322
+ }),
323
+ !loading && !error && filtered.length > 0 && /*#__PURE__*/ jsxs(Fragment, {
324
+ children: [
325
+ /*#__PURE__*/ jsx(List, {
326
+ id: listboxId,
327
+ options: filtered,
328
+ activeIndex: activeIndex,
329
+ setActiveIndex: setActiveIndex,
330
+ selectedId: value ?? null,
331
+ onSelect: choose,
332
+ tagContext: tagContext,
333
+ tagVariants: customTagVariants,
334
+ groupCounts: groupCounts,
335
+ collapsedGroups: collapsedGroups,
336
+ onGroupToggle: toggleGroup,
337
+ hideGroupHeaders: !showGroupHeaders || 'flat' === activeGroupBy,
338
+ hideTagKinds: rowHideTagKinds,
339
+ renderRowActions: renderRowActions,
340
+ renderRowMeta: slots?.optionMeta
341
+ }),
342
+ slots?.listFooter?.(slotCtx)
343
+ ]
344
+ })
345
+ ]
346
+ })
347
+ ]
348
+ });
349
+ });
350
+ ModelPicker.displayName = 'ModelPicker';
351
+ const GroupBySegmented = ({ value, onChange })=>{
352
+ const { _ } = useSafeLingui();
353
+ const groupByOptions = [
354
+ {
355
+ key: "subscription",
356
+ label: _({
357
+ id: 'modelPicker.groupBy.category',
358
+ message: 'Category'
359
+ })
360
+ },
361
+ {
362
+ key: 'vendor',
363
+ label: _({
364
+ id: 'modelPicker.groupBy.provider',
365
+ message: 'Provider'
366
+ })
367
+ }
368
+ ];
369
+ return /*#__PURE__*/ jsx(Box, {
370
+ role: "group",
371
+ "aria-label": _({
372
+ id: 'modelPicker.groupBy.ariaLabel',
373
+ message: 'Group models by'
374
+ }),
375
+ sx: {
376
+ display: 'inline-flex',
377
+ backgroundColor: `var(--color-background-secondary, ${Colors.ColorGray150})`,
378
+ borderRadius: '8px',
379
+ p: '3px',
380
+ gap: '3px'
381
+ },
382
+ children: groupByOptions.map((opt)=>{
383
+ const active = opt.key === value;
384
+ return /*#__PURE__*/ jsx(ButtonBase, {
385
+ onClick: ()=>onChange(opt.key),
386
+ "aria-pressed": active,
387
+ sx: {
388
+ fontSize: 12.5,
389
+ fontWeight: 600,
390
+ lineHeight: 1.2,
391
+ px: 1.25,
392
+ py: 0.625,
393
+ borderRadius: '6px',
394
+ color: active ? `var(--color-primary, ${Colors.ColorBlue500})` : `var(--color-foreground-de-emp, ${Colors.ColorGray550})`,
395
+ backgroundColor: active ? `var(--color-background-raised, ${Colors.ColorWhite})` : 'transparent',
396
+ boxShadow: active ? '0 1px 2px rgba(16, 24, 40, 0.14)' : 'none',
397
+ transition: 'background-color 120ms, color 120ms, box-shadow 120ms',
398
+ '&:hover': {
399
+ backgroundColor: active ? `var(--color-background-raised, ${Colors.ColorWhite})` : "var(--color-background-hover, rgba(82, 96, 105, 0.078))"
400
+ }
401
+ },
402
+ children: opt.label
403
+ }, opt.key);
404
+ })
405
+ });
406
+ };
407
+ const UseCustomModelFooter = ({ onActivate, disabled })=>{
408
+ const { _ } = useSafeLingui();
409
+ return /*#__PURE__*/ jsxs(ButtonBase, {
410
+ onClick: disabled ? void 0 : onActivate,
411
+ disabled: disabled,
412
+ title: disabled ? _({
413
+ id: 'modelPicker.useCustomModel.disabledHint',
414
+ message: 'Pass onUseCustomModel or a requestContext to the picker to wire this action.'
415
+ }) : void 0,
416
+ sx: {
417
+ width: '100%',
418
+ display: 'flex',
419
+ alignItems: 'center',
420
+ justifyContent: 'flex-start',
421
+ gap: 1.25,
422
+ px: 2,
423
+ py: 1.5,
424
+ textAlign: 'left',
425
+ color: `var(--color-primary, ${Colors.ColorBlue500})`,
426
+ transition: 'background-color 120ms',
427
+ '&:hover': {
428
+ backgroundColor: disabled ? 'transparent' : "var(--color-primary-lighter, rgba(0, 103, 223, 0.06))"
429
+ },
430
+ '&:focus-visible': {
431
+ outline: 'none',
432
+ boxShadow: "inset 0 0 0 2px var(--color-primary-focused, rgba(0, 103, 223, 0.2))"
433
+ },
434
+ '&.Mui-disabled': {
435
+ opacity: 0.55
436
+ }
437
+ },
438
+ children: [
439
+ /*#__PURE__*/ jsx(Box, {
440
+ sx: {
441
+ flexShrink: 0,
442
+ width: 30,
443
+ height: 30,
444
+ borderRadius: '8px',
445
+ display: 'flex',
446
+ alignItems: 'center',
447
+ justifyContent: 'center',
448
+ backgroundColor: "var(--color-primary-lighter, rgba(0, 103, 223, 0.10))",
449
+ color: `var(--color-primary, ${Colors.ColorBlue500})`
450
+ },
451
+ children: /*#__PURE__*/ jsx(Add, {
452
+ sx: {
453
+ fontSize: 18
454
+ }
455
+ })
456
+ }),
457
+ /*#__PURE__*/ jsxs(Box, {
458
+ sx: {
459
+ display: 'flex',
460
+ flexDirection: 'column',
461
+ minWidth: 0
462
+ },
463
+ children: [
464
+ /*#__PURE__*/ jsx(Box, {
465
+ component: "span",
466
+ sx: {
467
+ fontSize: 13.5,
468
+ fontWeight: 600,
469
+ lineHeight: 1.3
470
+ },
471
+ children: _({
472
+ id: 'modelPicker.useCustomModel.title',
473
+ message: 'Use custom model'
474
+ })
475
+ }),
476
+ /*#__PURE__*/ jsx(Box, {
477
+ component: "span",
478
+ sx: {
479
+ fontSize: 12,
480
+ color: `var(--color-foreground-de-emp, ${Colors.ColorGray550})`,
481
+ fontWeight: 400,
482
+ lineHeight: 1.3
483
+ },
484
+ children: _({
485
+ id: 'modelPicker.useCustomModel.subtitle',
486
+ message: 'Bring a model from your own connection'
487
+ })
488
+ })
489
+ ]
490
+ })
491
+ ]
492
+ });
493
+ };
494
+ export { ModelPicker };
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ ModelTagChip: ()=>ModelTagChip
37
+ });
38
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
39
+ const CheckCircleOutline_namespaceObject = require("@mui/icons-material/CheckCircleOutline");
40
+ var CheckCircleOutline_default = /*#__PURE__*/ __webpack_require__.n(CheckCircleOutline_namespaceObject);
41
+ const PublicOff_namespaceObject = require("@mui/icons-material/PublicOff");
42
+ var PublicOff_default = /*#__PURE__*/ __webpack_require__.n(PublicOff_namespaceObject);
43
+ const Route_namespaceObject = require("@mui/icons-material/Route");
44
+ var Route_default = /*#__PURE__*/ __webpack_require__.n(Route_namespaceObject);
45
+ const ScienceOutlined_namespaceObject = require("@mui/icons-material/ScienceOutlined");
46
+ var ScienceOutlined_default = /*#__PURE__*/ __webpack_require__.n(ScienceOutlined_namespaceObject);
47
+ const WarningAmberOutlined_namespaceObject = require("@mui/icons-material/WarningAmberOutlined");
48
+ var WarningAmberOutlined_default = /*#__PURE__*/ __webpack_require__.n(WarningAmberOutlined_namespaceObject);
49
+ const Chip_namespaceObject = require("@mui/material/Chip");
50
+ var Chip_default = /*#__PURE__*/ __webpack_require__.n(Chip_namespaceObject);
51
+ const Tooltip_namespaceObject = require("@mui/material/Tooltip");
52
+ var Tooltip_default = /*#__PURE__*/ __webpack_require__.n(Tooltip_namespaceObject);
53
+ const VARIANT_MAP = {
54
+ recommended: 'success-mini',
55
+ preview: 'info-mini',
56
+ deprecating: 'warning-mini',
57
+ substituted: 'warning-mini',
58
+ 'out-of-region': 'error-mini',
59
+ custom: 'mini',
60
+ thinking: 'info-mini',
61
+ 'cost-basic': 'mini',
62
+ 'cost-standard': 'mini',
63
+ 'cost-premium': 'mini'
64
+ };
65
+ const MINI_COLORS = {
66
+ mini: {
67
+ color: 'var(--color-foreground, #273139)',
68
+ backgroundColor: 'var(--color-background-secondary, #f4f5f7)'
69
+ },
70
+ 'info-mini': {
71
+ color: 'var(--color-info-foreground, #1665b3)',
72
+ backgroundColor: 'var(--color-info-background, #e9f1fa)'
73
+ },
74
+ 'success-mini': {
75
+ color: 'var(--color-success-text, #038108)',
76
+ backgroundColor: 'var(--color-success-background, #eeffe5)'
77
+ },
78
+ 'warning-mini': {
79
+ color: 'var(--color-warning-text, #9e6100)',
80
+ backgroundColor: 'var(--color-warning-background, #fff3db)'
81
+ },
82
+ 'error-mini': {
83
+ color: 'var(--color-error-text, #a6040a)',
84
+ backgroundColor: 'var(--color-error-background, #fff0f1)'
85
+ }
86
+ };
87
+ const ICON_MAP = {
88
+ recommended: CheckCircleOutline_default(),
89
+ preview: ScienceOutlined_default(),
90
+ deprecating: WarningAmberOutlined_default(),
91
+ substituted: Route_default(),
92
+ 'out-of-region': PublicOff_default()
93
+ };
94
+ const ModelTagChip = ({ tag, variants, icons })=>{
95
+ const variantClass = tag.variant ?? variants?.[tag.kind] ?? VARIANT_MAP[tag.kind] ?? 'mini';
96
+ const Icon = icons && tag.kind in icons ? icons[tag.kind] : ICON_MAP[tag.kind];
97
+ const colors = MINI_COLORS[variantClass] ?? MINI_COLORS['mini'];
98
+ const chip = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Chip_default(), {
99
+ size: "small",
100
+ label: tag.label,
101
+ className: variantClass,
102
+ icon: Icon ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Icon, {
103
+ fontSize: "inherit"
104
+ }) : void 0,
105
+ sx: {
106
+ height: '16px',
107
+ paddingLeft: 0,
108
+ paddingRight: 0,
109
+ fontSize: '10px',
110
+ lineHeight: '16px',
111
+ fontWeight: 600,
112
+ ...colors,
113
+ '& .MuiChip-label': {
114
+ px: 0.75
115
+ },
116
+ '& .MuiChip-icon': {
117
+ fontSize: 13,
118
+ marginLeft: 0.5,
119
+ marginRight: -0.25,
120
+ color: 'inherit'
121
+ }
122
+ }
123
+ });
124
+ if (tag.tooltip) return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Tooltip_default(), {
125
+ title: tag.tooltip,
126
+ arrow: true,
127
+ placement: "top",
128
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
129
+ children: chip
130
+ })
131
+ });
132
+ return chip;
133
+ };
134
+ exports.ModelTagChip = __webpack_exports__.ModelTagChip;
135
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
136
+ "ModelTagChip"
137
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
138
+ Object.defineProperty(exports, '__esModule', {
139
+ value: true
140
+ });
@@ -0,0 +1,11 @@
1
+ import type React from 'react';
2
+ import type { ModelTag } from './types';
3
+ export interface ModelTagChipProps {
4
+ tag: ModelTag;
5
+ variants?: Record<string, string>;
6
+ icons?: Record<string, React.ComponentType<{
7
+ fontSize?: 'inherit';
8
+ }> | null>;
9
+ }
10
+ export declare const ModelTagChip: React.FC<ModelTagChipProps>;
11
+ //# sourceMappingURL=ModelTagChip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelTagChip.d.ts","sourceRoot":"","sources":["../../../../src/material/components/ap-model-picker/ModelTagChip.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAyFxC,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,QAAQ,CAAC;IAOd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAOlC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9E;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+DpD,CAAC"}