@jini-ai/chat 0.3.2 → 0.3.4

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 (84) hide show
  1. package/README.md +1 -1
  2. package/dist/react/components/Composer.d.ts +36 -1
  3. package/dist/react/components/Composer.d.ts.map +1 -1
  4. package/dist/react/components/Composer.js +57 -7
  5. package/dist/react/components/Composer.js.map +1 -1
  6. package/dist/react/components/MessageList.d.ts +14 -1
  7. package/dist/react/components/MessageList.d.ts.map +1 -1
  8. package/dist/react/components/MessageList.js +10 -8
  9. package/dist/react/components/MessageList.js.map +1 -1
  10. package/dist/react/components/MessageRow.d.ts +8 -0
  11. package/dist/react/components/MessageRow.d.ts.map +1 -1
  12. package/dist/react/components/MessageRow.js +31 -2
  13. package/dist/react/components/MessageRow.js.map +1 -1
  14. package/dist/react/features/chat-pane/components/AgentRuntimePicker.d.ts.map +1 -1
  15. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js +1 -1
  16. package/dist/react/features/chat-pane/components/AgentRuntimePicker.js.map +1 -1
  17. package/dist/react/features/chat-pane/components/ChatPane.d.ts +1 -1
  18. package/dist/react/features/chat-pane/components/ChatPane.d.ts.map +1 -1
  19. package/dist/react/features/chat-pane/components/ChatPane.js +98 -12
  20. package/dist/react/features/chat-pane/components/ChatPane.js.map +1 -1
  21. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts +15 -0
  22. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.d.ts.map +1 -1
  23. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js +66 -5
  24. package/dist/react/features/chat-pane/hooks/useChatPane.hooks.js.map +1 -1
  25. package/dist/react/features/chat-pane/rules.d.ts +14 -0
  26. package/dist/react/features/chat-pane/rules.d.ts.map +1 -1
  27. package/dist/react/features/chat-pane/rules.js +16 -0
  28. package/dist/react/features/chat-pane/rules.js.map +1 -1
  29. package/dist/react/features/chat-pane/styles.d.ts +1 -1
  30. package/dist/react/features/chat-pane/styles.d.ts.map +1 -1
  31. package/dist/react/features/chat-pane/styles.js +144 -0
  32. package/dist/react/features/chat-pane/styles.js.map +1 -1
  33. package/dist/react/features/chat-pane/types.d.ts +29 -0
  34. package/dist/react/features/chat-pane/types.d.ts.map +1 -1
  35. package/dist/react/styles/reference.css +15 -0
  36. package/package.json +3 -3
  37. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts +0 -12
  38. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.d.ts.map +0 -1
  39. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js +0 -102
  40. package/dist/react/features/chat-pane/react/components/AgentRuntimePicker.js.map +0 -1
  41. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts +0 -10
  42. package/dist/react/features/chat-pane/react/components/ChatPane.d.ts.map +0 -1
  43. package/dist/react/features/chat-pane/react/components/ChatPane.js +0 -137
  44. package/dist/react/features/chat-pane/react/components/ChatPane.js.map +0 -1
  45. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts +0 -133
  46. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.d.ts.map +0 -1
  47. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js +0 -258
  48. package/dist/react/features/chat-pane/react/hooks/useAgentRuntimePicker.hooks.js.map +0 -1
  49. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts +0 -66
  50. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.d.ts.map +0 -1
  51. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js +0 -223
  52. package/dist/react/features/chat-pane/react/hooks/useChatPane.hooks.js.map +0 -1
  53. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts +0 -38
  54. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.d.ts.map +0 -1
  55. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js +0 -252
  56. package/dist/react/features/chat-pane/react/hooks/useChatPaneAgentControl.hooks.js.map +0 -1
  57. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts +0 -26
  58. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.d.ts.map +0 -1
  59. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js +0 -60
  60. package/dist/react/features/chat-pane/react/hooks/useChatPaneFileDrop.hooks.js.map +0 -1
  61. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts +0 -25
  62. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.d.ts.map +0 -1
  63. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js +0 -83
  64. package/dist/react/features/chat-pane/react/hooks/useChatPaneRuntimeInventory.hooks.js.map +0 -1
  65. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts +0 -38
  66. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.d.ts.map +0 -1
  67. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js +0 -184
  68. package/dist/react/features/chat-pane/react/hooks/useChatPaneWorkingDirectory.hooks.js.map +0 -1
  69. package/dist/react/features/chat-pane/react/styles.d.ts +0 -2
  70. package/dist/react/features/chat-pane/react/styles.d.ts.map +0 -1
  71. package/dist/react/features/chat-pane/react/styles.js +0 -863
  72. package/dist/react/features/chat-pane/react/styles.js.map +0 -1
  73. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts +0 -7
  74. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.d.ts.map +0 -1
  75. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js +0 -20
  76. package/dist/react/features/model-picker/react/components/CredentialStatusBadge.js.map +0 -1
  77. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts +0 -9
  78. package/dist/react/features/model-picker/react/components/ModelPicker.d.ts.map +0 -1
  79. package/dist/react/features/model-picker/react/components/ModelPicker.js +0 -34
  80. package/dist/react/features/model-picker/react/components/ModelPicker.js.map +0 -1
  81. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts +0 -27
  82. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.d.ts.map +0 -1
  83. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js +0 -62
  84. package/dist/react/features/model-picker/react/hooks/useModelPicker.hooks.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../src/react/features/chat-pane/react/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA61B/B,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { CredentialStatus } from '../../types.js';
2
- export interface CredentialStatusBadgeProps {
3
- status: CredentialStatus;
4
- className?: string;
5
- }
6
- export declare function CredentialStatusBadge({ status, className }: CredentialStatusBadgeProps): import("react").JSX.Element;
7
- //# sourceMappingURL=CredentialStatusBadge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CredentialStatusBadge.d.ts","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/components/CredentialStatusBadge.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,qBAAqB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAUtF"}
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @module CredentialStatusBadge
4
- *
5
- * A provider's credential status as a small pill — ported from
6
- * `NewProjectPanel.tsx`'s inline `newproj-provider-badge` span
7
- * ("Configured"/"Integrated"/"Unsupported"), de-branded and relabeled to
8
- * this feature's generic `CredentialStatus` union.
9
- */
10
- import { useT } from '../../../../hooks/context.js';
11
- const STATUS_LABEL = {
12
- configured: 'Configured',
13
- available: 'Available',
14
- unconfigured: 'Not configured',
15
- };
16
- export function CredentialStatusBadge({ status, className }) {
17
- const t = useT();
18
- return (_jsx("span", { className: `model-picker-status-badge model-picker-status-badge--${status}${className ? ` ${className}` : ''}`, "data-status": status, children: t(STATUS_LABEL[status]) }));
19
- }
20
- //# sourceMappingURL=CredentialStatusBadge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CredentialStatusBadge.js","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/components/CredentialStatusBadge.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAQpD,MAAM,YAAY,GAAqC;IACrD,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,gBAAgB;CAC/B,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,EAAE,MAAM,EAAE,SAAS,EAA8B;IACrF,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,OAAO,CACL,eACE,SAAS,EAAE,wDAAwD,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,iBACjG,MAAM,YAElB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GACnB,CACR,CAAC;AACJ,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { UseModelPickerOptions } from '../hooks/useModelPicker.hooks.js';
2
- export interface ModelPickerProps extends UseModelPickerOptions {
3
- label: string;
4
- searchPlaceholder?: string;
5
- className?: string;
6
- 'data-testid'?: string;
7
- }
8
- export declare function ModelPicker({ label, searchPlaceholder, className, 'data-testid': testId, ...pickerOptions }: ModelPickerProps): import("react").JSX.Element;
9
- //# sourceMappingURL=ModelPicker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/components/ModelPicker.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAG9E,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,GAAG,aAAa,EACjB,EAAE,gBAAgB,+BAgFlB"}
@@ -1,34 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * @module ModelPicker
4
- *
5
- * A generic, provider-grouped, credential-status-badged, searchable model
6
- * picker: trigger button + inline popover. Consolidates two independently
7
- * re-implemented OD shapes that R6 confirmed share this exact pattern —
8
- * `NewProjectPanel.tsx`'s `MediaModelCards` (provider grouping + status
9
- * badges + search) and `modelOptions.tsx`'s `SearchableModelSelect`
10
- * (searchable trigger/popover with outside-click/Escape dismissal, folded
11
- * into `useModelPicker`). Unlike `SearchableModelSelect`, the popover
12
- * renders inline rather than via a `document.body` portal — this package
13
- * has no fixed-positioning collision-avoidance primitive of its own, and an
14
- * inline popover keeps the component trivially testable; a host embedding
15
- * this inside a clipping/overflow container can override positioning with
16
- * its own CSS. See `source-map.md`.
17
- */
18
- import { useT } from '../../../../hooks/context.js';
19
- import { Icon } from '../../../../components/Icon.js';
20
- import { modelSubtitle } from '../../rules.js';
21
- import { useModelPicker } from '../hooks/useModelPicker.hooks.js';
22
- import { CredentialStatusBadge } from './CredentialStatusBadge.js';
23
- export function ModelPicker({ label, searchPlaceholder, className, 'data-testid': testId, ...pickerOptions }) {
24
- const t = useT();
25
- const { open, query, filteredGroups, selection, shouldShowSearch, containerRef, setQuery, toggle, select } = useModelPicker(pickerOptions);
26
- const triggerTitle = selection?.model.label ?? t('No model selected');
27
- const triggerSubtitle = selection ? modelSubtitle(selection) : t('Choose a model');
28
- const totalMatches = filteredGroups.reduce((count, group) => count + group.models.length, 0);
29
- return (_jsxs("div", { className: `model-picker${className ? ` ${className}` : ''}`, ref: containerRef, "data-testid": testId, children: [_jsx("span", { className: "model-picker-label", children: t(label) }), _jsxs("button", { type: "button", className: `model-picker-trigger${open ? ' is-open' : ''}${selection ? '' : ' is-empty'}`, onClick: toggle, "aria-haspopup": "listbox", "aria-expanded": open, "data-testid": testId ? `${testId}-trigger` : undefined, children: [_jsxs("span", { className: "model-picker-trigger-meta", children: [_jsx("span", { className: "model-picker-trigger-title", children: triggerTitle }), _jsx("span", { className: "model-picker-trigger-subtitle", children: triggerSubtitle })] }), _jsx(Icon, { name: "chevron-down", size: 14, className: "model-picker-trigger-chevron" })] }), open ? (_jsxs("div", { className: "model-picker-popover", role: "listbox", "data-testid": testId ? `${testId}-popover` : undefined, children: [shouldShowSearch ? (_jsx("div", { className: "model-picker-search-row", children: _jsx("input", { type: "search", className: "model-picker-search", value: query, placeholder: t(searchPlaceholder ?? 'Search models'), "aria-label": t(searchPlaceholder ?? 'Search models'), "data-testid": testId ? `${testId}-search` : undefined, onChange: (event) => setQuery(event.target.value) }) })) : null, _jsx("div", { className: "model-picker-list", children: totalMatches === 0 ? (_jsx("div", { className: "model-picker-empty", children: t('No matching models') })) : (filteredGroups.map((group) => (_jsxs("div", { className: "model-picker-group", children: [_jsxs("div", { className: "model-picker-group-head", children: [_jsx("span", { children: t(group.provider.label) }), _jsx(CredentialStatusBadge, { status: group.status })] }), group.models.map((model) => {
30
- const active = selection?.model.id === model.id;
31
- return (_jsxs("button", { type: "button", role: "option", "aria-selected": active, className: `model-picker-option${active ? ' is-active' : ''}`, "data-testid": testId ? `${testId}-option-${model.id}` : undefined, onClick: () => select(model.id), children: [_jsxs("span", { className: "model-picker-option-title", children: [model.label, model.default ? _jsx("span", { className: "model-picker-option-badge", children: t('Recommended') }) : null] }), model.hint ? _jsx("span", { className: "model-picker-option-hint", children: model.hint }) : null] }, model.id));
32
- })] }, group.provider.id)))) })] })) : null] }));
33
- }
34
- //# sourceMappingURL=ModelPicker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/components/ModelPicker.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AASnE,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,iBAAiB,EACjB,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,GAAG,aAAa,EACC;IACjB,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GACxG,cAAc,CAAC,aAAa,CAAC,CAAC;IAEhC,MAAM,YAAY,GAAG,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE7F,OAAO,CACL,eAAK,SAAS,EAAE,eAAe,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,iBAAe,MAAM,aACvG,eAAM,SAAS,EAAC,oBAAoB,YAAE,CAAC,CAAC,KAAK,CAAC,GAAQ,EACtD,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,uBAAuB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EACzF,OAAO,EAAE,MAAM,mBACD,SAAS,mBACR,IAAI,iBACN,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,SAAS,aAErD,gBAAM,SAAS,EAAC,2BAA2B,aACzC,eAAM,SAAS,EAAC,4BAA4B,YAAE,YAAY,GAAQ,EAClE,eAAM,SAAS,EAAC,+BAA+B,YAAE,eAAe,GAAQ,IACnE,EACP,KAAC,IAAI,IAAC,IAAI,EAAC,cAAc,EAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,8BAA8B,GAAG,IACxE,EAER,IAAI,CAAC,CAAC,CAAC,CACN,eAAK,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,SAAS,iBAAc,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,SAAS,aACvG,gBAAgB,CAAC,CAAC,CAAC,CAClB,cAAK,SAAS,EAAC,yBAAyB,YACtC,gBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,qBAAqB,EAC/B,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,CAAC,CAAC,iBAAiB,IAAI,eAAe,CAAC,gBACxC,CAAC,CAAC,iBAAiB,IAAI,eAAe,CAAC,iBACtC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,SAAS,EACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACjD,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,mBAAmB,YAC/B,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CACpB,cAAK,SAAS,EAAC,oBAAoB,YAAE,CAAC,CAAC,oBAAoB,CAAC,GAAO,CACpE,CAAC,CAAC,CAAC,CACF,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B,eAAK,SAAS,EAAC,oBAAoB,aACjC,eAAK,SAAS,EAAC,yBAAyB,aACtC,yBAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAQ,EACtC,KAAC,qBAAqB,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAI,IAC3C,EACL,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oCAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;oCAChD,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,mBACE,MAAM,EACrB,SAAS,EAAE,sBAAsB,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,iBAChD,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAChE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,aAE/B,gBAAM,SAAS,EAAC,2BAA2B,aACxC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,2BAA2B,YAAE,CAAC,CAAC,aAAa,CAAC,GAAQ,CAAC,CAAC,CAAC,IAAI,IACxF,EACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,0BAA0B,YAAE,KAAK,CAAC,IAAI,GAAQ,CAAC,CAAC,CAAC,IAAI,KAZ9E,KAAK,CAAC,EAAE,CAaN,CACV,CAAC;gCACJ,CAAC,CAAC,KAxBqC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAyBpD,CACP,CAAC,CACH,GACG,IACF,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,27 +0,0 @@
1
- import type { RefObject } from 'react';
2
- import type { CredentialStatus, ModelOption, ModelPickerGroup, ModelPickerSelection, ModelProvider } from '../../types.js';
3
- export interface UseModelPickerOptions {
4
- models: readonly ModelOption[];
5
- providers: readonly ModelProvider[];
6
- statusByProviderId: Readonly<Record<string, CredentialStatus>>;
7
- value: string;
8
- onChange: (modelId: string) => void;
9
- /** When true, auto-selects the first available model whenever `value` doesn't match any model. Defaults to false. */
10
- autoSelectFirst?: boolean;
11
- minSearchableOptions?: number;
12
- }
13
- export interface ModelPickerController {
14
- open: boolean;
15
- query: string;
16
- groups: ModelPickerGroup[];
17
- filteredGroups: ModelPickerGroup[];
18
- selection: ModelPickerSelection | null;
19
- shouldShowSearch: boolean;
20
- containerRef: RefObject<HTMLDivElement | null>;
21
- setQuery: (query: string) => void;
22
- toggle: () => void;
23
- close: () => void;
24
- select: (modelId: string) => void;
25
- }
26
- export declare function useModelPicker({ models, providers, statusByProviderId, value, onChange, autoSelectFirst, minSearchableOptions, }: UseModelPickerOptions): ModelPickerController;
27
- //# sourceMappingURL=useModelPicker.hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useModelPicker.hooks.d.ts","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/hooks/useModelPicker.hooks.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE3H,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,qHAAqH;IACrH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,KAAK,EACL,QAAQ,EACR,eAAuB,EACvB,oBAAqD,GACtD,EAAE,qBAAqB,GAAG,qBAAqB,CAuD/C"}
@@ -1,62 +0,0 @@
1
- /**
2
- * @module useModelPicker
3
- *
4
- * Headless controller for the model-picker feature: open/query state,
5
- * derived provider groups + current selection, and the outside-click/
6
- * Escape dismissal that `InlineModelSwitcher.tsx`'s popover and
7
- * `modelOptions.tsx`'s `SearchableModelSelect` both hand-roll. All grouping/
8
- * filtering/selection logic is delegated to the pure `rules.ts` — this hook
9
- * only owns React state and the DOM-subscription effect.
10
- */
11
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
12
- import { DEFAULT_MIN_SEARCHABLE_OPTIONS } from '../../constants.js';
13
- import { filterModelGroups, findSelectedModel, firstAvailableModelId, groupModelsByProvider } from '../../rules.js';
14
- export function useModelPicker({ models, providers, statusByProviderId, value, onChange, autoSelectFirst = false, minSearchableOptions = DEFAULT_MIN_SEARCHABLE_OPTIONS, }) {
15
- const [open, setOpen] = useState(false);
16
- const [query, setQuery] = useState('');
17
- const containerRef = useRef(null);
18
- const groups = useMemo(() => groupModelsByProvider(models, providers, statusByProviderId), [models, providers, statusByProviderId]);
19
- const filteredGroups = useMemo(() => filterModelGroups(groups, query), [groups, query]);
20
- const selection = useMemo(() => findSelectedModel(groups, value), [groups, value]);
21
- const totalOptionCount = useMemo(() => groups.reduce((count, group) => count + group.models.length, 0), [groups]);
22
- const shouldShowSearch = totalOptionCount >= minSearchableOptions;
23
- useEffect(() => {
24
- if (!autoSelectFirst || selection)
25
- return;
26
- const fallbackId = firstAvailableModelId(groups);
27
- if (fallbackId)
28
- onChange(fallbackId);
29
- }, [autoSelectFirst, groups, onChange, selection]);
30
- const close = useCallback(() => {
31
- setOpen(false);
32
- setQuery('');
33
- }, []);
34
- const toggle = useCallback(() => {
35
- setOpen((prev) => !prev);
36
- }, []);
37
- const select = useCallback((modelId) => {
38
- onChange(modelId);
39
- close();
40
- }, [close, onChange]);
41
- useEffect(() => {
42
- if (!open)
43
- return;
44
- const onPointerDown = (event) => {
45
- if (containerRef.current?.contains(event.target))
46
- return;
47
- close();
48
- };
49
- const onKeyDown = (event) => {
50
- if (event.key === 'Escape')
51
- close();
52
- };
53
- document.addEventListener('mousedown', onPointerDown);
54
- document.addEventListener('keydown', onKeyDown);
55
- return () => {
56
- document.removeEventListener('mousedown', onPointerDown);
57
- document.removeEventListener('keydown', onKeyDown);
58
- };
59
- }, [open, close]);
60
- return { open, query, groups, filteredGroups, selection, shouldShowSearch, containerRef, setQuery, toggle, close, select };
61
- }
62
- //# sourceMappingURL=useModelPicker.hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useModelPicker.hooks.js","sourceRoot":"","sources":["../../../../../../src/react/features/model-picker/react/hooks/useModelPicker.hooks.ts"],"names":[],"mappings":"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"}