@epam/ai-dial-chat-shared 1.2.0-dev.28 → 1.2.0-dev.284

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 (55) hide show
  1. package/components/ConfirmationDialog/ConfirmationDialog.js +34 -0
  2. package/components/ConfirmationIdentityCard/ConfirmationIdentityCard.js +21 -0
  3. package/components/ConfirmationIdentityCard/ConfirmationIdentityCard.module.scss.js +6 -0
  4. package/components/ConfirmationIdentityRow/ConfirmationIdentityRow.js +24 -0
  5. package/components/ConfirmationIdentityRow/ConfirmationIdentityRow.module.scss.js +3 -0
  6. package/components/ConfirmationView/ConfirmationFooter.js +42 -0
  7. package/components/ConfirmationView/ConfirmationView.js +39 -0
  8. package/components/ConfirmationView/ConfirmationView.module.scss.js +7 -0
  9. package/components/FeaturedChip/FeaturedChip.js +9 -14
  10. package/components/InitialsAvatar/InitialsAvatar.js +10 -27
  11. package/components/MarkdownRenderer/CodeBlock/CodeBlock.js +65 -63
  12. package/components/MarkdownRenderer/CodeBlock/CodeBlock.module.scss.js +6 -6
  13. package/components/MarkdownRenderer/MDMessageViewer.js +23 -17
  14. package/components/MarkdownRenderer/MarkdownRenderer.js +88 -90
  15. package/components/MarkdownRenderer/Math/MarkdownMathBlock.js +19 -18
  16. package/components/MarkdownRenderer/PlainTextRenderer.js +21 -0
  17. package/components/MarkdownRenderer/Table/MarkdownTable.js +71 -56
  18. package/components/MarkdownRenderer/Table/MarkdownTable.module.scss.js +11 -11
  19. package/components/MarkdownRenderer/Table/TableHeader.js +18 -21
  20. package/components/MarkdownRenderer/Table/table-serialization.js +23 -3
  21. package/components/MarkdownRenderer/Table/useMarkdownTableActions/useMarkdownTableActions.js +48 -62
  22. package/components/MarkdownRenderer/ThinkingShimmer.js +14 -0
  23. package/components/PanelEmptyState/PanelEmptyState.js +2 -1
  24. package/components/TextRefinementField/TextRefinementField.js +86 -0
  25. package/constants/dial.js +2 -2
  26. package/constants/mime-types.js +49 -2
  27. package/constants/public-class-names.js +10 -0
  28. package/constants/resizable-fields.js +2 -2
  29. package/file-manager/DialFileManagerShell/DialFileManagerShell.js +251 -234
  30. package/file-manager/FileManagerAttachModal/FileManagerAttachModal.js +36 -32
  31. package/file-manager/OperationLoaderModal/OperationLoaderModal.js +17 -20
  32. package/file-manager/upload-batch.js +2 -2
  33. package/file-manager/upload-queue.js +17 -0
  34. package/file-manager.d.ts +35 -20
  35. package/file-manager.js +4 -3
  36. package/hooks/useTextRefinement.js +66 -0
  37. package/hooks/useUnsavedChangesGuard.js +30 -0
  38. package/index.css +2 -2
  39. package/index.d.ts +531 -44
  40. package/index.js +73 -61
  41. package/markdown.d.ts +61 -8
  42. package/markdown.js +13 -11
  43. package/models/chat.js +4 -2
  44. package/package.json +5 -5
  45. package/types/attachment.js +1 -1
  46. package/utils/entity-field-limits.js +4 -0
  47. package/utils/entity-type.js +15 -0
  48. package/utils/file-download.js +6 -6
  49. package/utils/is-skill-selection-unsupported.js +4 -0
  50. package/utils/latex.js +5 -3
  51. package/utils/merge-class.js +5 -4
  52. package/utils/mime-type.js +10 -6
  53. package/utils/syntax-highlighting.js +13 -0
  54. package/components/InitialsAvatar/InitialsAvatar.module.scss.js +0 -6
  55. package/file-manager/UploadProgressModal/UploadProgressModal.js +0 -56
@@ -1,42 +1,42 @@
1
1
  import { isHiddenPath as e } from "../path.js";
2
2
  import { DialFileManagerShell as t } from "../DialFileManagerShell/DialFileManagerShell.js";
3
- import { Popup as n, PopupSize as r, PrimaryButton as i } from "@epam/ai-dial-ui-kit";
3
+ import { ButtonVariant as n, Popup as r, PopupSize as i } from "@epam/ai-dial-ui-kit";
4
4
  import { memo as a, useCallback as o, useMemo as s } from "react";
5
5
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
6
  import { DialFileNodeType as u } from "@epam/ai-dial-react-file-manager";
7
7
  //#region src/file-manager/FileManagerAttachModal/FileManagerAttachModal.tsx
8
- var d = a(({ isOpen: a, onClose: d, onAttach: f, onSkippedUnsupportedFiles: p, onCountLimitExceeded: m, controller: h, isAnyOperationInProgress: g, activeTab: _, tabs: v, onTabChange: y, labels: b, variant: x, actionProfile: S, selectedPaths: C, onSelectedPathsChange: w, resolveFolderPath: T, isFileTypeAllowed: E, maxSelectableFileSize: D, maximumAttachmentsAmount: O, existingAttachmentsAmount: k = 0, isRowSelectable: A, getDisabledTooltip: j, unsupportedFileTypeTooltip: M, allowedFileTypes: N, autoSelectUploadedItems: P = !1 }) => {
9
- let { items: F, isLoading: I, searchResults: L } = h, R = s(() => {
8
+ var d = a(({ isOpen: a, onClose: d, onAttach: f, onSkippedUnsupportedFiles: p, onCountLimitExceeded: m, controller: h, isAnyOperationInProgress: g, activeTab: _, tabs: v, onTabChange: y, labels: b, variant: x, actionProfile: S, selectedPaths: C, onSelectedPathsChange: w, resolveFolderPath: T, isFileTypeAllowed: E, maxSelectableFileSize: D, maximumAttachmentsAmount: O, existingAttachmentsAmount: k = 0, isRowSelectable: A, getDisabledTooltip: j, unsupportedFileTypeTooltip: M, allowedFileTypes: N, autoSelectUploadedItems: P = !1, oversizedUploadMessage: F }) => {
9
+ let { items: I, isLoading: L, searchResults: R } = h, z = s(() => {
10
10
  let e = /* @__PURE__ */ new Map(), t = (n) => {
11
11
  n.forEach((n) => {
12
12
  (n.nodeType === u.ITEM || n.nodeType === u.FOLDER) && (e.set(n.path, n), n.id && e.set(n.id, n)), n.items && t(n.items);
13
13
  });
14
14
  };
15
- return t(F), L?.forEach((t) => {
15
+ return t(I), R?.forEach((t) => {
16
16
  e.set(t.path, t), t.id && e.set(t.id, t);
17
17
  }), e;
18
- }, [F, L]), z = s(() => Array.from(C).map((e) => R.get(e)).filter((e) => e != null), [R, C]), B = o((e) => {
18
+ }, [I, R]), B = s(() => Array.from(C).map((e) => z.get(e)).filter((e) => e != null), [z, C]), V = o((e) => {
19
19
  if (A == null) {
20
20
  w(new Set(e));
21
21
  return;
22
22
  }
23
23
  let t = /* @__PURE__ */ new Set();
24
24
  for (let n of e) {
25
- let e = R.get(n);
25
+ let e = z.get(n);
26
26
  e != null && A({ data: e }) && t.add(n);
27
27
  }
28
28
  w(t);
29
29
  }, [
30
- R,
30
+ z,
31
31
  A,
32
32
  w
33
- ]), V = o(() => {
33
+ ]), H = o(() => {
34
34
  let t = [], n = [];
35
- for (let r of z) e(r.path) || (r.nodeType === u.FOLDER ? t.push(r.path) : n.push(r));
35
+ for (let r of B) e(r.path) || (r.nodeType === u.FOLDER ? t.push(r.path) : n.push(r));
36
36
  let r = t.filter((e) => !t.some((t) => t !== e && e.startsWith(`${t}/`))), i = n.filter((t) => !(e(t.path) || E != null && t.contentType != null && !E(t.contentType))), a = i.filter((e) => !r.some((t) => e.path.startsWith(`${t}/`)));
37
37
  n.length - i.length > 0 && p?.();
38
38
  let o = r.flatMap((e) => {
39
- let t = R.get(e);
39
+ let t = z.get(e);
40
40
  if (t == null) return [];
41
41
  let n = T(t);
42
42
  return n == null ? [] : [n];
@@ -53,44 +53,47 @@ var d = a(({ isOpen: a, onClose: d, onAttach: f, onSkippedUnsupportedFiles: p, o
53
53
  f,
54
54
  p,
55
55
  m,
56
- z,
56
+ B,
57
57
  E,
58
58
  O,
59
59
  k,
60
- R,
60
+ z,
61
61
  T
62
- ]), { title: H, attachLabel: U, headerDescription: W, ...G } = b;
63
- return /* @__PURE__ */ c(n, {
62
+ ]), { title: U, attachLabel: W, headerDescription: G, ...K } = b;
63
+ return /* @__PURE__ */ c(r, {
64
64
  open: a,
65
- header: /* @__PURE__ */ l("div", {
66
- className: "flex flex-col gap-1",
67
- children: [/* @__PURE__ */ c("span", { children: H }), W != null && /* @__PURE__ */ c("p", {
65
+ header: G == null ? U : /* @__PURE__ */ l("div", {
66
+ className: "flex min-w-0 flex-1 flex-col gap-1",
67
+ children: [/* @__PURE__ */ c("h3", {
68
+ className: "dial-h1-text truncate text-primary",
69
+ children: U
70
+ }), /* @__PURE__ */ c("p", {
68
71
  className: "dial-small-text text-start",
69
- children: W
72
+ children: G
70
73
  })]
71
74
  }),
72
- ariaLabel: H,
73
- size: r.Lg,
75
+ ariaLabel: U,
76
+ size: i.Lg,
74
77
  className: "flex !h-[min(800px,100dvh)] w-full flex-col !bg-layer-sunken",
78
+ headerClassName: "pb-0",
79
+ footerClassName: "pt-0",
75
80
  onClose: d,
76
- footer: /* @__PURE__ */ c("div", {
77
- className: "flex justify-end px-6 py-4",
78
- children: /* @__PURE__ */ c(i, {
79
- label: U,
80
- disabled: z.length === 0 || I || g,
81
- onClick: V
82
- })
83
- }),
81
+ mainButtons: [{
82
+ label: W,
83
+ variant: n.Primary,
84
+ disabled: B.length === 0 || L || g,
85
+ onClick: H
86
+ }],
84
87
  children: /* @__PURE__ */ c("div", {
85
- className: "flex min-h-0 flex-col",
88
+ className: "flex h-full min-h-0 flex-col",
86
89
  children: /* @__PURE__ */ c(t, {
87
90
  controller: h,
88
- labels: G,
91
+ labels: K,
89
92
  activeTab: _,
90
93
  tabs: v,
91
94
  onTabChange: y,
92
95
  selectedPaths: C,
93
- onSelectedPathsChange: B,
96
+ onSelectedPathsChange: V,
94
97
  variant: x,
95
98
  actionProfile: S,
96
99
  autoSelectUploadedItems: P,
@@ -98,7 +101,8 @@ var d = a(({ isOpen: a, onClose: d, onAttach: f, onSkippedUnsupportedFiles: p, o
98
101
  maxSelectableFileSize: D,
99
102
  isRowSelectable: A,
100
103
  getDisabledTooltip: j,
101
- unsupportedFileTypeTooltip: M
104
+ unsupportedFileTypeTooltip: M,
105
+ oversizedUploadMessage: F
102
106
  })
103
107
  })
104
108
  });
@@ -1,36 +1,33 @@
1
- import { NeutralButton as e, Popup as t, Spinner as n } from "@epam/ai-dial-ui-kit";
2
- import { memo as r } from "react";
3
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
1
+ import { Popup as e, Spinner as t } from "@epam/ai-dial-ui-kit";
2
+ import { memo as n } from "react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
4
  //#region src/file-manager/OperationLoaderModal/OperationLoaderModal.tsx
5
- var o = ({ title: r, text: o, cancelLabel: s, onCancel: c }) => /* @__PURE__ */ i(t, {
5
+ var a = ({ title: n, text: a, cancelLabel: o, onCancel: s }) => /* @__PURE__ */ r(e, {
6
6
  className: "!h-fit !max-h-full !w-[400px]",
7
7
  open: !0,
8
8
  closeOnOutsideClick: !1,
9
9
  hideClose: !0,
10
- onClose: c,
11
- footer: /* @__PURE__ */ i("div", {
12
- className: "flex justify-end gap-2 px-6 py-4",
13
- children: /* @__PURE__ */ i(e, {
14
- label: s,
15
- onClick: c
16
- })
17
- }),
18
- children: /* @__PURE__ */ a("div", {
10
+ onClose: s,
11
+ mainButtons: [{
12
+ label: o,
13
+ onClick: s
14
+ }],
15
+ children: /* @__PURE__ */ i("div", {
19
16
  "aria-live": "polite",
20
17
  className: "flex flex-col items-center gap-4 px-6 py-4 text-center",
21
- children: [/* @__PURE__ */ i(n, {
18
+ children: [/* @__PURE__ */ r(t, {
22
19
  size: 32,
23
20
  fullWidth: !1,
24
- ariaLabel: r
25
- }), /* @__PURE__ */ a("div", {
21
+ ariaLabel: n
22
+ }), /* @__PURE__ */ i("div", {
26
23
  className: "flex flex-col gap-1",
27
- children: [/* @__PURE__ */ i("div", { children: r }), /* @__PURE__ */ i("div", {
24
+ children: [/* @__PURE__ */ r("div", { children: n }), /* @__PURE__ */ r("div", {
28
25
  className: "dial-small-text text-secondary",
29
- children: o
26
+ children: a
30
27
  })]
31
28
  })]
32
29
  })
33
30
  });
34
- r(o);
31
+ n(a);
35
32
  //#endregion
36
- export { o as OperationLoaderModal };
33
+ export { a as OperationLoaderModal };
@@ -1,6 +1,6 @@
1
1
  //#region src/file-manager/upload-batch.ts
2
2
  var e = /* @__PURE__ */ function(e) {
3
3
  return e.Queued = "queued", e.Uploading = "uploading", e.Completed = "completed", e.Failed = "failed", e.Cancelled = "cancelled", e;
4
- }({});
4
+ }({}), t = (e) => e?.files.some((e) => e.status === "queued" || e.status === "uploading") ?? !1;
5
5
  //#endregion
6
- export { e as FileUploadStatus };
6
+ export { e as FileUploadStatus, t as isUploadInProgress };
@@ -0,0 +1,17 @@
1
+ import { FileUploadStatus as e } from "./upload-batch.js";
2
+ import { TransferQueueItemStatus as t } from "@epam/ai-dial-ui-kit";
3
+ //#region src/file-manager/upload-queue.ts
4
+ var n = {
5
+ [e.Queued]: t.InProgress,
6
+ [e.Uploading]: t.InProgress,
7
+ [e.Completed]: t.Success,
8
+ [e.Failed]: t.Failed,
9
+ [e.Cancelled]: t.Canceled
10
+ }, r = (e) => e.map((e) => ({
11
+ id: e.id,
12
+ name: e.name,
13
+ status: n[e.status],
14
+ percent: e.percent
15
+ }));
16
+ //#endregion
17
+ export { r as toUploadQueueItems };
package/file-manager.d.ts CHANGED
@@ -11,8 +11,10 @@ import { DialUploadFileItem } from '@epam/ai-dial-react-file-manager';
11
11
  import { FC } from 'react';
12
12
  import { FileManagerColumnKey } from '@epam/ai-dial-react-file-manager';
13
13
  import { FileManagerGridRow } from '@epam/ai-dial-react-file-manager';
14
+ import { FileTreeOptions } from '@epam/ai-dial-react-file-manager';
14
15
  import { ReactNode } from 'react';
15
- import { ToolbarOptions } from '@epam/ai-dial-react-file-manager';
16
+ import { TransferQueueItem } from '@epam/ai-dial-ui-kit';
17
+ import { TransferQueueLabels } from '@epam/ai-dial-ui-kit';
16
18
 
17
19
  /** Result returned by the file-manager attach modal when the user confirms a selection. */
18
20
  declare interface AttachResult {
@@ -62,7 +64,7 @@ declare interface DialFileManagerShellLabels {
62
64
  showHiddenFilesLabel: string;
63
65
  /** Label shown when hidden files are currently hidden. */
64
66
  hideHiddenFilesLabel: string;
65
- /** Returns a bulk-selection count label (e.g. "3 selected"). */
67
+ /** Returns the text shown after the selection-count badge; the file manager renders the count itself, so omit it (e.g. "items selected"). */
66
68
  getSelectionLabel: (count: number) => string;
67
69
  /** Label for the "Upload files" action in the New menu. */
68
70
  uploadFilesLabel: string;
@@ -114,20 +116,20 @@ declare interface DialFileManagerShellLabels {
114
116
  operationLoaderMoveTitle: string;
115
117
  /** Cancel-button label in the operation loader modal. */
116
118
  operationLoaderCancelLabel: string;
117
- /** Returns the delete confirmation dialog title for the given item names. */
118
- deleteConfirmTitle: (names: string[]) => ReactNode;
119
+ /** Returns the delete confirmation dialog title for the given item names and items; the items carry `nodeType`, so a folder and a file can be titled differently. */
120
+ deleteConfirmTitle: (names: string[], items: DialFile[]) => ReactNode;
119
121
  /** Returns the delete confirmation dialog body for the given item names. */
120
122
  deleteConfirmBody: (names: string[]) => ReactNode;
121
123
  /** Confirm-button label in the delete confirmation dialog. */
122
124
  deleteConfirmLabel: string;
123
125
  /** Cancel-button label in the delete confirmation dialog. */
124
126
  deleteCancelLabel: string;
125
- /** Title for the upload progress modal. */
126
- uploadProgressTitle: string;
127
- /** Cancel-button label in the upload progress modal. */
128
- cancelLabel: string;
129
- /** Returns upload progress text (e.g. "3 of 5 uploaded"). */
130
- getUploadProgressText: (done: number, total: number) => string;
127
+ /** Accessible name of the delete confirmation dialog's close control. Unset falls back to the file manager's English default. */
128
+ deleteCloseLabel?: string;
129
+ /** Returns the upload queue heading for the number of files in it (e.g. "Uploading 5 files"). */
130
+ getUploadQueueTitle: (count: number) => string;
131
+ /** Translated strings for the upload `TransferQueue`; unset ones fall back to the kit's English defaults. */
132
+ uploadQueueLabels?: Partial<TransferQueueLabels>;
131
133
  /** Empty-state title when a search yields no results. */
132
134
  searchEmptyStateTitle: string;
133
135
  /** Empty-state title for an empty subfolder. */
@@ -138,6 +140,8 @@ declare interface DialFileManagerShellLabels {
138
140
  emptyStateByTab: Record<DialFileManagerTabs, EmptyStateCopy>;
139
141
  /** Per-tab tree header label. */
140
142
  treeHeaderByTab: Record<DialFileManagerTabs, string>;
143
+ /** Search field placeholder per source tab of the browsed folder; a tab without an entry keeps the file manager's default. */
144
+ searchPlaceholderByTab?: Partial<Record<DialFileManagerTabs, string>>;
141
145
  /** Messages for inline rename validation. */
142
146
  renameValidationMessages: RenameValidationMessages;
143
147
  /** Options for the conflict resolution popup. */
@@ -174,8 +178,8 @@ export declare interface DialFileManagerShellProps {
174
178
  labels: DialFileManagerShellLabels;
175
179
  /** Currently active tab. */
176
180
  activeTab: DialFileManagerTabs;
177
- /** Tab configuration for the toolbar. */
178
- tabs: ToolbarOptions['tabs'];
181
+ /** Filter chips scoping the tree and the grid, rendered above the folder tree. */
182
+ tabs: FileTreeOptions['tabs'];
179
183
  /** Called when the user switches tabs. */
180
184
  onTabChange: (tab: DialFileManagerTabs) => void;
181
185
  /** Set of currently selected file/folder virtual paths. */
@@ -190,8 +194,10 @@ export declare interface DialFileManagerShellProps {
190
194
  autoSelectUploadedItems?: boolean;
191
195
  /** MIME type filters for selectable files. */
192
196
  allowedFileTypes?: DialFileAcceptType[];
193
- /** Maximum file size in bytes for selectable files. */
197
+ /** Maximum file size in bytes for selectable files, and — reused as the ui-kit's own `maxFileSize` — the maximum size accepted for a newly-uploaded file. */
194
198
  maxSelectableFileSize?: number;
199
+ /** Pre-translated message shown by the ui-kit when a newly-selected file exceeds `maxSelectableFileSize`. Omit to leave upload-size validation unrestricted regardless of `maxSelectableFileSize`. */
200
+ oversizedUploadMessage?: string;
195
201
  /** Custom row-selectability predicate, forwarded to the grid's row selection. */
196
202
  isRowSelectable?: (node: {
197
203
  data?: FileManagerSelectableNode | null;
@@ -261,8 +267,8 @@ export declare interface FileManagerAttachModalProps {
261
267
  isAnyOperationInProgress: boolean;
262
268
  /** Currently active tab. */
263
269
  activeTab: DialFileManagerTabs;
264
- /** Tab configuration for the toolbar. */
265
- tabs: ToolbarOptions['tabs'];
270
+ /** Filter chips scoping the tree and the grid, rendered above the folder tree. */
271
+ tabs: FileTreeOptions['tabs'];
266
272
  /**
267
273
  * Called when the user switches tabs.
268
274
  * The host is responsible for resetting `selectedPaths` to an empty set.
@@ -316,6 +322,8 @@ export declare interface FileManagerAttachModalProps {
316
322
  allowedFileTypes?: DialFileAcceptType[];
317
323
  /** Whether to auto-select items immediately after upload. Defaults to `false`. */
318
324
  autoSelectUploadedItems?: boolean;
325
+ /** Pre-translated message shown by the ui-kit when a newly-selected file exceeds `maxSelectableFileSize`. Omit to leave upload-size validation unrestricted regardless of `maxSelectableFileSize`. */
326
+ oversizedUploadMessage?: string;
319
327
  }
320
328
 
321
329
  /**
@@ -344,7 +352,7 @@ declare interface FileManagerController {
344
352
  onSearchFiles: (folder: string, query: string) => void;
345
353
  /** Search: true while a search request is in flight. */
346
354
  isSearching: boolean;
347
- /** Search: flat list of matching files, or null when search is not active. */
355
+ /** Search: flat, unfiltered recursive listing of the current folder, or null when search is not active. */
348
356
  searchResults: DialFile[] | null;
349
357
  /** Search: clears results and exits search mode. */
350
358
  clearSearchResults: () => void;
@@ -368,7 +376,9 @@ declare interface FileManagerController {
368
376
  uploadBatchState: FileUploadBatchState | null;
369
377
  /** Upload: abort all in-flight and queued uploads. */
370
378
  cancelUpload: () => void;
371
- /** Upload: dismiss the progress modal after the batch has settled. */
379
+ /** Upload: abort one queued or in-flight upload by its entry id. */
380
+ cancelUploadFile: (id: string) => void;
381
+ /** Upload: empty the upload queue. */
372
382
  clearUploadBatch: () => void;
373
383
  /** Folder creation: called when user confirms a new folder name. */
374
384
  onCreateFolder: (file: DialUploadFileItem, folderPath: string, fileId: string) => Promise<void>;
@@ -430,6 +440,8 @@ declare interface FileManagerController {
430
440
  onGetInfo: (file: DialFile) => void;
431
441
  /** Metadata: resets fileMetadata/isFileMetadataLoading; passed to fileMetadataPopupOptions.clearMetadata. */
432
442
  clearMetadata: () => void;
443
+ /** Source tab of the browsed folder, never `All`; omitted by single-source controllers. */
444
+ sectionTab?: DialFileManagerTabs;
433
445
  }
434
446
 
435
447
  /**
@@ -448,11 +460,11 @@ declare interface FileManagerSelectableNode {
448
460
  contentLength?: number;
449
461
  }
450
462
 
451
- /** State of an in-progress or just-settled upload batch, as returned by `useDialFileUploadBatch`. */
463
+ /** State of the upload queue, as returned by `useDialFileUploadBatch`. */
452
464
  declare interface FileUploadBatchState {
453
- /** Individual file entries in this batch. */
465
+ /** Every file uploaded since the queue was last cleared, settled ones included. */
454
466
  files: FileUploadEntry[];
455
- /** Whether the upload progress modal should be visible. */
467
+ /** Whether the upload queue should be visible. */
456
468
  isOpen: boolean;
457
469
  }
458
470
 
@@ -488,4 +500,7 @@ declare interface FileUploadValidationResult {
488
500
  /** Validation messages shown during inline rename editing. */
489
501
  declare type RenameValidationMessages = NonNullable<DialFileManagerComponentProps['renameValidationMessages']>;
490
502
 
503
+ /** Maps upload entries onto the UI kit's `TransferQueue` rows. */
504
+ export declare const toUploadQueueItems: (files: FileUploadEntry[]) => TransferQueueItem[];
505
+
491
506
  export { }
package/file-manager.js CHANGED
@@ -1,3 +1,4 @@
1
- import { DialFileManagerShell as e } from "./file-manager/DialFileManagerShell/DialFileManagerShell.js";
2
- import { FileManagerAttachModal as t } from "./file-manager/FileManagerAttachModal/FileManagerAttachModal.js";
3
- export { e as DialFileManagerShell, t as FileManagerAttachModal };
1
+ import { toUploadQueueItems as e } from "./file-manager/upload-queue.js";
2
+ import { DialFileManagerShell as t } from "./file-manager/DialFileManagerShell/DialFileManagerShell.js";
3
+ import { FileManagerAttachModal as n } from "./file-manager/FileManagerAttachModal/FileManagerAttachModal.js";
4
+ export { t as DialFileManagerShell, n as FileManagerAttachModal, e as toUploadQueueItems };
@@ -0,0 +1,66 @@
1
+ import { useCallback as e, useLayoutEffect as t, useRef as n, useState as r } from "react";
2
+ //#region src/hooks/useTextRefinement.ts
3
+ var i = /* @__PURE__ */ function(e) {
4
+ return e.Idle = "idle", e.Pending = "pending", e.Success = "success", e.Error = "error", e.Restored = "restored", e.Unchanged = "unchanged", e;
5
+ }({}), a = (i) => {
6
+ let [a, o] = r("idle"), [s, c] = r(!1), l = n(i), u = n(!1), d = n({
7
+ value: i.value,
8
+ resetKey: i.resetKey,
9
+ generation: 0,
10
+ controller: void 0,
11
+ baseline: void 0,
12
+ expected: void 0
13
+ }), f = e(() => {
14
+ let e = d.current;
15
+ e.generation++, e.controller?.abort(), e.controller = void 0, e.baseline = void 0, e.expected = void 0;
16
+ }, []), p = e(() => {
17
+ f(), u.current && (o("idle"), c(!1));
18
+ }, [f]);
19
+ t(() => (u.current = !0, () => {
20
+ u.current = !1, f();
21
+ }), [f]), t(() => {
22
+ let e = l.current, t = d.current;
23
+ l.current = i;
24
+ let n = t.value !== i.value, r = n && t.expected === i.value;
25
+ t.resetKey !== i.resetKey || e.onRefine && !i.onRefine || !e.disabled && i.disabled || n && !r ? p() : r && (t.expected = void 0), t.value = i.value, t.resetKey = i.resetKey;
26
+ });
27
+ let m = e(async () => {
28
+ let e = l.current, t = d.current;
29
+ if (!u.current || !e.onRefine || e.disabled || !e.value.trim() || t.controller || t.expected !== void 0) return;
30
+ let n = new AbortController();
31
+ t.controller = n;
32
+ let r = ++t.generation, i = e.value, a = () => u.current && r === t.generation && !n.signal.aborted && l.current.value === i;
33
+ o("pending");
34
+ try {
35
+ let r = await e.onRefine(i, n.signal);
36
+ if (!a()) return;
37
+ if (typeof r != "string" || !r.trim()) throw Error("Empty refinement");
38
+ if (r === i) {
39
+ o("unchanged");
40
+ return;
41
+ }
42
+ t.baseline ??= i, t.expected = r, c(!0), o("success"), l.current.onChange(r);
43
+ } catch (e) {
44
+ if (!a()) return;
45
+ typeof e == "object" && e && "name" in e && e.name === "AbortError" ? o("idle") : o("error");
46
+ } finally {
47
+ r === t.generation && (t.controller = void 0);
48
+ }
49
+ }, []), h = e(() => {
50
+ let e = d.current;
51
+ if (!u.current || l.current.disabled || e.controller || e.baseline === void 0) return;
52
+ let t = e.baseline;
53
+ e.baseline = void 0, e.expected = t, c(!1), o("restored"), l.current.onChange(t);
54
+ }, []);
55
+ return {
56
+ state: a,
57
+ isPending: a === "pending",
58
+ canRefine: !!(i.onRefine && !i.disabled && i.value.trim() && a !== "pending"),
59
+ canUndo: s,
60
+ refine: m,
61
+ undo: h,
62
+ reset: p
63
+ };
64
+ };
65
+ //#endregion
66
+ export { i as TextRefinementState, a as useTextRefinement };
@@ -0,0 +1,30 @@
1
+ import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
2
+ //#region src/hooks/useUnsavedChangesGuard.ts
3
+ var i = (i) => {
4
+ let [a, o] = r(!1), s = n(null);
5
+ return t(() => {
6
+ if (!i) return;
7
+ let e = (e) => {
8
+ e.preventDefault();
9
+ };
10
+ return window.addEventListener("beforeunload", e), () => window.removeEventListener("beforeunload", e);
11
+ }, [i]), {
12
+ guard: e((e) => {
13
+ if (!i) {
14
+ e();
15
+ return;
16
+ }
17
+ s.current = e, o(!0);
18
+ }, [i]),
19
+ isConfirmOpen: a,
20
+ confirm: e(() => {
21
+ let e = s.current;
22
+ s.current = null, o(!1), e?.();
23
+ }, []),
24
+ dismiss: e(() => {
25
+ s.current = null, o(!1);
26
+ }, [])
27
+ };
28
+ };
29
+ //#endregion
30
+ export { i as useUnsavedChangesGuard };
package/index.css CHANGED
@@ -1,2 +1,2 @@
1
- ._agentIconBadge_1ger8_1{background:var(--di-icon-bg,var(--bg-layer-sunken,#eef1f7))}._badge_1ko75_1{background:var(--ia-bg,var(--bg-visual-green-1,#cde8e5))}._initials_1ko75_5{color:var(--ia-fg,var(--text-visual-green-2,#0d6e72))}._title_11w3i_1{color:var(--ih-title-color,var(--text-primary,#161b2d))}._count_11w3i_5{color:var(--ih-count-color,var(--text-secondary,#57647a))}._container_spugt_1{background:var(--cm-code-block-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-code-block-border,var(--stroke-secondary,#d1dbea))}._containerLight_spugt_6{background:var(--cm-code-block-bg,var(--bg-layer-base,#f5f7fa))}._header_spugt_10{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-code-block-border,var(--stroke-secondary,#d1dbea))}._languageLabel_spugt_15{color:var(--cm-code-block-language,var(--text-secondary,#57647a))}._copiedIcon_spugt_19{color:var(--cm-code-block-copied,var(--text-success,#007274))}._scrollContainer_spugt_23 .token.table,._scrollContainer_spugt_23 .token.table-header-row,._scrollContainer_spugt_23 .token.table-line,._scrollContainer_spugt_23 .token.table-data-rows{display:inline}._scrollContainer_spugt_23{scrollbar-width:thin;scrollbar-color:var(--cm-code-block-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_spugt_23::-webkit-scrollbar{width:4px;height:4px}._scrollContainer_spugt_23::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_spugt_23::-webkit-scrollbar-thumb{background-color:var(--cm-code-block-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}@keyframes _cm-shimmer_1g29w_1{0%{background-position:200%}to{background-position:-200%}}._thinking_1g29w_9{background:linear-gradient(270deg, var(--cm-thinking-inverted,var(--text-primary,#161b2d)) 0%, var(--cm-thinking-secondary,var(--text-secondary,#57647a)) 40%, var(--cm-thinking-inverted,var(--text-primary,#161b2d)) 80%);color:#0000;background-size:200%;-webkit-background-clip:text;background-clip:text;animation:2s linear infinite _cm-shimmer_1g29w_1}._h6_1g29w_18{color:var(--cm-h6-text,var(--text-secondary,#57647a))}._codeInline_1g29w_22{background:var(--cm-code-inline-bg,var(--bg-layer-raised,#fcfcfc));color:var(--cm-code-inline-text,var(--text-primary,#161b2d))}._secondaryBorder_1g29w_27{border-color:var(--cm-markdown-border,var(--stroke-secondary,#d1dbea))}._blockquote_1g29w_31{border-color:var(--cm-blockquote-border,var(--stroke-primary,#57647a));color:var(--cm-blockquote-text,var(--text-secondary,#57647a))}._link_1g29w_36{color:var(--cm-link-text,var(--text-accent,#1d4ed8))}._link_1g29w_36:focus-visible{outline-color:var(--cm-link-focus,var(--stroke-focus-black,#161b2d))}._scrollContainer_1f433_1{scrollbar-width:thin;scrollbar-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_1f433_1::-webkit-scrollbar{height:4px}._scrollContainer_1f433_1::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_1f433_1::-webkit-scrollbar-thumb{background-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._scrollContainer_1f433_1:focus-visible{outline:1px solid var(--cm-math-focus,var(--stroke-focus-black,#161b2d));outline-offset:2px}._mathContent_1f433_24{width:max-content;min-width:100%;display:block}._tableContainer_187t3_1{background:var(--cm-code-block-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-markdown-border,var(--cm-code-block-border,var(--stroke-secondary,#d1dbea)))}._tableContainerLight_187t3_6{background:var(--cm-code-block-bg,var(--bg-layer-base,#f5f7fa))}._copiedIcon_187t3_10{color:var(--cm-code-block-copied,var(--text-success,#007274))}._scrollContainer_187t3_14{scrollbar-width:thin;scrollbar-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_187t3_14::-webkit-scrollbar{width:4px;height:4px}._scrollContainer_187t3_14::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_187t3_14::-webkit-scrollbar-thumb{background-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._tableHeaderCell_187t3_30{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));color:var(--cm-table-header-text,var(--text-secondary,#57647a))}._sectionRow_187t3_35 td{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc))}tbody ._row_187t3_39:nth-child(2n) td{background:var(--cm-table-row-zebra-bg,var(--bg-layer-base,#f5f7fa))}._rowDivider_187t3_43{border-block-end:.5px solid var(--cm-table-row-divider,var(--stroke-tertiary,#e0e6f0))}tbody ._row_187t3_39:hover td{background:var(--cm-table-row-hover-bg,var(--bg-control-accent-alpha-hover,#2764d924))}._tableScrollFadeEnd_187t3_53{-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}[dir=rtl] ._tableScrollFadeEnd_187t3_53{-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}._tableScrollFadeStart_187t3_61{-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%)}[dir=rtl] ._tableScrollFadeStart_187t3_61{-webkit-mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);-webkit-mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%)}._tableScrollFadeBoth_187t3_69{-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}._tableHeader_1qvg8_1{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-markdown-border,var(--cm-code-block-border,var(--stroke-secondary,#d1dbea)))}._label_12p89_1{color:var(--pes-label-color,var(--text-primary,#161b2d))}._row_1csuq_1{border-color:var(--rs-border,var(--stroke-tertiary,#e0e6f0));background:var(--rs-bg,var(--bg-layer-sunken,#eef1f7))}._versionTag_1csuq_7{border-color:var(--rs-version-tag-border,var(--stroke-tertiary,#e0e6f0))!important;background:var(--rs-version-tag-bg,var(--bg-control-accent-alpha,#2764d90f))!important;color:var(--rs-version-tag-text,var(--text-accent,#1d4ed8))!important}
2
- /*$vite$:1*/.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.end-0{inset-inline-end:0}.top-0{top:0}.top-\[-6px\]{top:-6px}.z-\[2\]{z-index:2}.z-\[52\]{z-index:52}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.me-1{margin-inline-end:.25rem}.me-1\.5{margin-inline-end:.375rem}.ms-auto{margin-inline-start:auto}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-full{height:100%;width:100%}.\!h-\[min\(800px\2c 100dvh\)\]{height:min(800px,100dvh)!important}.\!h-fit{height:-moz-fit-content!important;height:fit-content!important}.h-1{height:.25rem}.h-\[24px\]{height:24px}.h-full{height:100%}.\!max-h-full{max-height:100%!important}.max-h-\[344px\]{max-height:344px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.\!w-\[400px\]{width:400px!important}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0}.min-w-full{min-width:100%}.max-w-96{max-width:24rem}.max-w-\[30\%\]{max-width:30%}.max-w-\[45\%\]{max-width:45%}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.break-words{overflow-wrap:break-word}.rounded{border-radius:4px}.rounded-2xl{border-radius:1rem}.rounded-\[14px\]{border-radius:14px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-s-2{border-inline-start-width:2px}.border-t{border-top-width:1px}.border-none{border-style:none}.\!bg-layer-sunken{background-color:var(--bg-layer-sunken,#eef1f7)!important}.bg-backdrop{background-color:var(--bg-backdrop,#161b2d4d)}.bg-control-accent{background-color:var(--bg-control-accent,#1d4ed8)}.bg-control-disable-primary{background-color:var(--bg-control-disable-primary,#dce0e8)}.bg-layer-raised{background-color:var(--bg-layer-raised,#fcfcfc)}.bg-layer-sunken{background-color:var(--bg-layer-sunken,#eef1f7)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-4{padding-bottom:1rem;padding-top:1rem}.ps-4{padding-inline-start:1rem}.ps-\[2em\]{padding-inline-start:2em}.pt-1{padding-top:.25rem}.text-center{text-align:center}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.uppercase{text-transform:uppercase}.italic{font-style:italic}.text-secondary{color:var(--text-secondary,#57647a)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid;outline-width:1px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.\[text-wrap\:balance\]{text-wrap:balance}.\[text-wrap\:pretty\]{text-wrap:pretty}.first\:mt-0:first-child{margin-top:0}.last\:mb-0:last-child{margin-bottom:0}.hover\:decoration-current:hover{text-decoration-color:currentColor}.focus-visible\:outline:focus-visible{outline-style:solid;outline-width:1px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}@media (max-width:1279px){.mobile\:\!w-full{width:100%!important}}@media (min-width:1280px){.desktop\:\!max-h-\[693px\]{max-height:693px!important}.desktop\:p-4{padding:1rem}}.\[\&_\.w-md-editor\]\:max-h-\[var\(--resizable-field-max-height\2c 70vh\)\] .w-md-editor{max-height:var(--resizable-field-max-height,70vh)}.\[\&_\.wmde-markdown\>ol\]\:list-decimal .wmde-markdown>ol{list-style-type:decimal}.\[\&_\.wmde-markdown_ul\]\:list-disc .wmde-markdown ul{list-style-type:disc}.\[\&_\.wmde-markdown_ul_ul\]\:list-\[circle\] .wmde-markdown ul ul{list-style-type:circle}.\[\&_\.wmde-markdown_ul_ul_ul\]\:list-\[square\] .wmde-markdown ul ul ul{list-style-type:square}
1
+ ._message_1iqfi_1{color:var(--cfm-message-text,var(--text-primary,#161b2d))}._consequences_1iqfi_5{color:var(--cfm-consequence-text,var(--text-secondary,#57647a))}._footer_1iqfi_9{border-block-start:1px solid var(--cfm-footer-border,var(--stroke-tertiary,#e0e6f0))}._info_vyo7p_1{--rs-bg:var(--bg-info,#d6e2f9)}._danger_vyo7p_5{--rs-bg:var(--bg-control-error-alpha-active,#f7646433);--rs-border:var(--stroke-error-alpha,#ae2f2f73)}._agentIconBadge_1ger8_1{background:var(--di-icon-bg,var(--bg-layer-sunken,#eef1f7))}._title_11w3i_1{color:var(--ih-title-color,var(--text-primary,#161b2d))}._count_11w3i_5{color:var(--ih-count-color,var(--text-secondary,#57647a))}._row_1csuq_1{border-color:var(--rs-border,var(--stroke-tertiary,#e0e6f0));background:var(--rs-bg,var(--bg-layer-sunken,#eef1f7))}._versionTag_1csuq_7{border-color:var(--rs-version-tag-border,var(--stroke-tertiary,#e0e6f0))!important;background:var(--rs-version-tag-bg,var(--bg-control-accent-alpha,#2764d90f))!important;color:var(--rs-version-tag-text,var(--text-accent,#1d4ed8))!important}._typeLabel_17nhs_1{color:var(--cir-type-label-text,var(--text-secondary,#57647a))}._container_sqe5k_1{background:var(--cm-code-block-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-code-block-border,var(--stroke-secondary,#d1dbea))}._containerLight_sqe5k_6{background:var(--cm-code-block-bg,var(--bg-layer-raised,#fcfcfc))}._header_sqe5k_10{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-code-block-border,var(--stroke-secondary,#d1dbea))}._languageLabel_sqe5k_15{color:var(--cm-code-block-language,var(--text-secondary,#57647a))}._copiedIcon_sqe5k_19{color:var(--cm-code-block-copied,var(--text-success,#007274))}._scrollContainer_sqe5k_23 .token.table,._scrollContainer_sqe5k_23 .token.table-header-row,._scrollContainer_sqe5k_23 .token.table-line,._scrollContainer_sqe5k_23 .token.table-data-rows{display:inline}._scrollContainer_sqe5k_23{scrollbar-width:thin;scrollbar-color:var(--cm-code-block-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_sqe5k_23::-webkit-scrollbar{width:4px;height:4px}._scrollContainer_sqe5k_23::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_sqe5k_23::-webkit-scrollbar-thumb{background-color:var(--cm-code-block-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}@keyframes _cm-shimmer_1g29w_1{0%{background-position:200%}to{background-position:-200%}}._thinking_1g29w_9{background:linear-gradient(270deg, var(--cm-thinking-inverted,var(--text-primary,#161b2d)) 0%, var(--cm-thinking-secondary,var(--text-secondary,#57647a)) 40%, var(--cm-thinking-inverted,var(--text-primary,#161b2d)) 80%);color:#0000;background-size:200%;-webkit-background-clip:text;background-clip:text;animation:2s linear infinite _cm-shimmer_1g29w_1}._h6_1g29w_18{color:var(--cm-h6-text,var(--text-secondary,#57647a))}._codeInline_1g29w_22{background:var(--cm-code-inline-bg,var(--bg-layer-raised,#fcfcfc));color:var(--cm-code-inline-text,var(--text-primary,#161b2d))}._secondaryBorder_1g29w_27{border-color:var(--cm-markdown-border,var(--stroke-secondary,#d1dbea))}._blockquote_1g29w_31{border-color:var(--cm-blockquote-border,var(--stroke-primary,#57647a));color:var(--cm-blockquote-text,var(--text-secondary,#57647a))}._link_1g29w_36{color:var(--cm-link-text,var(--text-accent,#1d4ed8))}._link_1g29w_36:focus-visible{outline-color:var(--cm-link-focus,var(--stroke-focus-black,#161b2d))}._scrollContainer_1f433_1{scrollbar-width:thin;scrollbar-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_1f433_1::-webkit-scrollbar{height:4px}._scrollContainer_1f433_1::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_1f433_1::-webkit-scrollbar-thumb{background-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._scrollContainer_1f433_1:focus-visible{outline:1px solid var(--cm-math-focus,var(--stroke-focus-black,#161b2d));outline-offset:2px}._mathContent_1f433_24{width:max-content;min-width:100%;display:block}._tableContainer_1fwnj_1{background:var(--cm-code-block-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-markdown-border,var(--cm-code-block-border,var(--stroke-secondary,#d1dbea)))}._tableContainerLight_1fwnj_6{background:var(--cm-code-block-bg,var(--bg-layer-base,#f5f7fa))}._copiedIcon_1fwnj_10{color:var(--cm-code-block-copied,var(--text-success,#007274))}._scrollContainer_1fwnj_14{scrollbar-width:thin;scrollbar-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_1fwnj_14::-webkit-scrollbar{width:4px;height:4px}._scrollContainer_1fwnj_14::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_1fwnj_14::-webkit-scrollbar-thumb{background-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._tableHeaderCell_1fwnj_30{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));height:3rem;color:var(--cm-table-header-text,var(--text-secondary,#57647a))}._sectionRow_1fwnj_37 td{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc))}._rowDivider_1fwnj_41{border-block-end:.5px solid var(--cm-table-row-divider,var(--stroke-tertiary,#e0e6f0))}tbody ._row_1fwnj_41:hover td{background:var(--cm-table-row-hover-bg,var(--bg-control-accent-alpha-hover,#2764d924))}._tableScrollFadeEnd_1fwnj_51{-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}[dir=rtl] ._tableScrollFadeEnd_1fwnj_51{-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}._tableScrollFadeStart_1fwnj_59{-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%)}[dir=rtl] ._tableScrollFadeStart_1fwnj_59{-webkit-mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);-webkit-mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%);mask-image:linear-gradient(to left, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 100%)}._tableScrollFadeBoth_1fwnj_67{-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to right, transparent 0, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) 1rem, var(--cm-table-fade,var(--stroke-focus-black,#161b2d)) calc(100% - 1rem), transparent 100%)}._tableHeader_1qvg8_1{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cm-markdown-border,var(--cm-code-block-border,var(--stroke-secondary,#d1dbea)))}._label_12p89_1{color:var(--pes-label-color,var(--text-primary,#161b2d))}
2
+ /*$vite$:1*/.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-4{bottom:1rem}.end-0{inset-inline-end:0}.end-2{inset-inline-end:.5rem}.end-4{inset-inline-end:1rem}.top-0{top:0}.top-2{top:.5rem}.top-\[-6px\]{top:-6px}.z-10{z-index:10}.z-\[2\]{z-index:2}.z-\[52\]{z-index:52}.z-\[70\]{z-index:70}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.me-1\.5{margin-inline-end:.375rem}.ms-auto{margin-inline-start:auto}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-full{height:100%;width:100%}.\!h-\[min\(800px\2c 100dvh\)\]{height:min(800px,100dvh)!important}.\!h-fit{height:-moz-fit-content!important;height:fit-content!important}.h-0{height:0}.h-\[24px\]{height:24px}.h-full{height:100%}.\!max-h-full{max-height:100%!important}.max-h-\[344px\]{max-height:344px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.\!w-\[400px\]{width:400px!important}.w-\[360px\]{width:360px}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0}.min-w-full{min-width:100%}.max-w-96{max-width:24rem}.max-w-\[30\%\]{max-width:30%}.max-w-\[45\%\]{max-width:45%}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:4px}.rounded-\[14px\]{border-radius:14px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-s-2{border-inline-start-width:2px}.border-t{border-top-width:1px}.border-tertiary{border-color:var(--stroke-tertiary,#e0e6f0)}.\!bg-layer-sunken{background-color:var(--bg-layer-sunken,#eef1f7)!important}.bg-backdrop{background-color:var(--bg-backdrop,#161b2d4d)}.bg-layer-raised{background-color:var(--bg-layer-raised,#fcfcfc)}.bg-layer-sunken{background-color:var(--bg-layer-sunken,#eef1f7)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-\[7px\]{padding-bottom:7px;padding-top:7px}.pb-0{padding-bottom:0}.ps-4{padding-inline-start:1rem}.ps-5{padding-inline-start:1.25rem}.ps-\[2em\]{padding-inline-start:2em}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.text-center{text-align:center}.text-start{text-align:start}.text-end{text-align:end}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.uppercase{text-transform:uppercase}.italic{font-style:italic}.text-primary{color:var(--text-primary,#161b2d)}.text-secondary{color:var(--text-secondary,#57647a)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-chat-button{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-chat-button{--tw-shadow:0 2px 12px 0 var(--shadow-xs-1,#2764d933),0 2px 6px 0 var(--shadow-xs-2,#161b2d08);--tw-shadow-colored:0 2px 12px 0 var(--tw-shadow-color),0 2px 6px 0 var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 8px 10px 0 var(--shadow-sm,#2764d914);--tw-shadow-colored:0 8px 10px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xs{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 4px 0 var(--shadow-xs-1,#2764d933),0 1px 2px 0 var(--shadow-xs-2,#161b2d08);--tw-shadow-colored:0 1px 4px 0 var(--tw-shadow-color),0 1px 2px 0 var(--tw-shadow-color)}.outline{outline-style:solid;outline-width:1px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.\[overflow\:clip\]{overflow:clip}.\[text-wrap\:balance\]{text-wrap:balance}.\[text-wrap\:pretty\]{text-wrap:pretty}.first\:mt-0:first-child{margin-top:0}.last\:mb-0:last-child{margin-bottom:0}.focus-within\:opacity-100:focus-within{opacity:1}.hover\:decoration-current:hover{text-decoration-color:currentColor}.focus-visible\:outline:focus-visible{outline-style:solid;outline-width:1px}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.group\/table:hover .group-hover\/table\:opacity-100{opacity:1}@media (min-width:1280px){.desktop\:p-4{padding:1rem}}.rtl\:flex-row-reverse:where([dir=rtl],[dir=rtl] *){flex-direction:row-reverse}.rtl\:justify-start:where([dir=rtl],[dir=rtl] *){justify-content:flex-start}.\[\&_\.w-md-editor-bar\]\:hidden .w-md-editor-bar{display:none}.\[\&_\.w-md-editor\:not\(\.w-md-editor-fullscreen\)\]\:\!h-\[var\(--resizable-field-max-height\2c 70vh\)\] .w-md-editor:not(.w-md-editor-fullscreen){height:var(--resizable-field-max-height,70vh)!important}.\[\&_\.w-md-editor\:not\(\.w-md-editor-fullscreen\)\]\:max-h-\[var\(--resizable-field-max-height\2c 70vh\)\] .w-md-editor:not(.w-md-editor-fullscreen){max-height:var(--resizable-field-max-height,70vh)}.\[\&_\.wmde-markdown\>ol\]\:list-decimal .wmde-markdown>ol{list-style-type:decimal}.\[\&_\.wmde-markdown_ul\]\:list-disc .wmde-markdown ul{list-style-type:disc}.\[\&_\.wmde-markdown_ul_ul\]\:list-\[circle\] .wmde-markdown ul ul{list-style-type:circle}.\[\&_\.wmde-markdown_ul_ul_ul\]\:list-\[square\] .wmde-markdown ul ul ul{list-style-type:square}