@epam/ai-dial-chat-shared 1.2.0-dev.99 → 1.3.0-dev.5
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.
- package/components/ConfirmationDialog/ConfirmationDialog.js +34 -0
- package/components/ConfirmationIdentityCard/ConfirmationIdentityCard.js +21 -0
- package/components/ConfirmationIdentityCard/ConfirmationIdentityCard.module.scss.js +6 -0
- package/components/ConfirmationIdentityRow/ConfirmationIdentityRow.js +24 -0
- package/components/ConfirmationIdentityRow/ConfirmationIdentityRow.module.scss.js +3 -0
- package/components/ConfirmationView/ConfirmationFooter.js +42 -0
- package/components/ConfirmationView/ConfirmationView.js +39 -0
- package/components/ConfirmationView/ConfirmationView.module.scss.js +7 -0
- package/components/CopyButton/CopyButton.js +5 -5
- package/components/EntityHeader/EntityHeader.js +14 -13
- package/components/EntityTypeLabel/EntityTypeLabel.js +2 -2
- package/components/FeaturedChip/FeaturedChip.js +9 -14
- package/components/InitialsAvatar/InitialsAvatar.js +10 -27
- package/components/MarkdownRenderer/CodeBlock/CodeBlock.js +65 -64
- package/components/MarkdownRenderer/MDMessageViewer.js +25 -17
- package/components/MarkdownRenderer/MarkdownRenderer.js +119 -118
- package/components/MarkdownRenderer/MarkdownRenderer.module.scss.js +7 -7
- package/components/MarkdownRenderer/Math/MarkdownMathBlock.module.scss.js +2 -2
- package/components/MarkdownRenderer/PlainTextRenderer.js +21 -0
- package/components/MarkdownRenderer/Table/MarkdownTable.js +62 -65
- package/components/MarkdownRenderer/Table/MarkdownTable.module.scss.js +11 -11
- package/components/MarkdownRenderer/Table/TableHeader.js +18 -21
- package/components/MarkdownRenderer/ThinkingShimmer.js +14 -0
- package/components/MarkdownWithPlaceholders/MarkdownWithPlaceholders.js +3 -2
- package/components/PanelEmptyState/PanelEmptyState.js +2 -1
- package/components/TextRefinementField/TextRefinementField.js +86 -0
- package/constants/dial.js +2 -2
- package/constants/resizable-fields.js +2 -2
- package/file-manager/DialFileManagerShell/DialFileManagerShell.js +248 -236
- package/file-manager/FileManagerAttachModal/FileManagerAttachModal.js +17 -14
- package/file-manager/OperationLoaderModal/OperationLoaderModal.js +17 -20
- package/file-manager/upload-batch.js +2 -2
- package/file-manager/upload-queue.js +17 -0
- package/file-manager.d.ts +25 -14
- package/file-manager.js +4 -3
- package/hooks/useTextRefinement.js +66 -0
- package/hooks/useUnsavedChangesGuard.js +30 -0
- package/index.css +2 -2
- package/index.d.ts +510 -46
- package/index.js +73 -62
- package/markdown.d.ts +64 -8
- package/markdown.js +5 -4
- package/models/chat.js +4 -2
- package/package.json +5 -5
- package/utils/entity-field-limits.js +4 -0
- package/utils/entity-type.js +15 -0
- package/utils/format-price.js +13 -9
- package/utils/is-skill-selection-unsupported.js +4 -0
- package/utils/syntax-highlighting.js +13 -0
- package/components/InitialsAvatar/InitialsAvatar.module.scss.js +0 -6
- package/file-manager/UploadProgressModal/UploadProgressModal.js +0 -50
|
@@ -1,36 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { memo as
|
|
3
|
-
import { jsx as
|
|
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
|
|
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:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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__ */
|
|
18
|
+
children: [/* @__PURE__ */ r(t, {
|
|
22
19
|
size: 32,
|
|
23
20
|
fullWidth: !1,
|
|
24
|
-
ariaLabel:
|
|
25
|
-
}), /* @__PURE__ */
|
|
21
|
+
ariaLabel: n
|
|
22
|
+
}), /* @__PURE__ */ i("div", {
|
|
26
23
|
className: "flex flex-col gap-1",
|
|
27
|
-
children: [/* @__PURE__ */
|
|
24
|
+
children: [/* @__PURE__ */ r("div", { children: n }), /* @__PURE__ */ r("div", {
|
|
28
25
|
className: "dial-small-text text-secondary",
|
|
29
|
-
children:
|
|
26
|
+
children: a
|
|
30
27
|
})]
|
|
31
28
|
})]
|
|
32
29
|
})
|
|
33
30
|
});
|
|
34
|
-
|
|
31
|
+
n(a);
|
|
35
32
|
//#endregion
|
|
36
|
-
export {
|
|
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
|
@@ -13,6 +13,8 @@ import { FileManagerColumnKey } from '@epam/ai-dial-react-file-manager';
|
|
|
13
13
|
import { FileManagerGridRow } from '@epam/ai-dial-react-file-manager';
|
|
14
14
|
import { FileTreeOptions } from '@epam/ai-dial-react-file-manager';
|
|
15
15
|
import { ReactNode } from 'react';
|
|
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
|
|
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
|
-
/**
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
|
|
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. */
|
|
@@ -348,7 +352,7 @@ declare interface FileManagerController {
|
|
|
348
352
|
onSearchFiles: (folder: string, query: string) => void;
|
|
349
353
|
/** Search: true while a search request is in flight. */
|
|
350
354
|
isSearching: boolean;
|
|
351
|
-
/** Search: flat
|
|
355
|
+
/** Search: flat, unfiltered recursive listing of the current folder, or null when search is not active. */
|
|
352
356
|
searchResults: DialFile[] | null;
|
|
353
357
|
/** Search: clears results and exits search mode. */
|
|
354
358
|
clearSearchResults: () => void;
|
|
@@ -372,7 +376,9 @@ declare interface FileManagerController {
|
|
|
372
376
|
uploadBatchState: FileUploadBatchState | null;
|
|
373
377
|
/** Upload: abort all in-flight and queued uploads. */
|
|
374
378
|
cancelUpload: () => void;
|
|
375
|
-
/** Upload:
|
|
379
|
+
/** Upload: abort one queued or in-flight upload by its entry id. */
|
|
380
|
+
cancelUploadFile: (id: string) => void;
|
|
381
|
+
/** Upload: empty the upload queue. */
|
|
376
382
|
clearUploadBatch: () => void;
|
|
377
383
|
/** Folder creation: called when user confirms a new folder name. */
|
|
378
384
|
onCreateFolder: (file: DialUploadFileItem, folderPath: string, fileId: string) => Promise<void>;
|
|
@@ -434,6 +440,8 @@ declare interface FileManagerController {
|
|
|
434
440
|
onGetInfo: (file: DialFile) => void;
|
|
435
441
|
/** Metadata: resets fileMetadata/isFileMetadataLoading; passed to fileMetadataPopupOptions.clearMetadata. */
|
|
436
442
|
clearMetadata: () => void;
|
|
443
|
+
/** Source tab of the browsed folder, never `All`; omitted by single-source controllers. */
|
|
444
|
+
sectionTab?: DialFileManagerTabs;
|
|
437
445
|
}
|
|
438
446
|
|
|
439
447
|
/**
|
|
@@ -452,11 +460,11 @@ declare interface FileManagerSelectableNode {
|
|
|
452
460
|
contentLength?: number;
|
|
453
461
|
}
|
|
454
462
|
|
|
455
|
-
/** State of
|
|
463
|
+
/** State of the upload queue, as returned by `useDialFileUploadBatch`. */
|
|
456
464
|
declare interface FileUploadBatchState {
|
|
457
|
-
/**
|
|
465
|
+
/** Every file uploaded since the queue was last cleared, settled ones included. */
|
|
458
466
|
files: FileUploadEntry[];
|
|
459
|
-
/** Whether the upload
|
|
467
|
+
/** Whether the upload queue should be visible. */
|
|
460
468
|
isOpen: boolean;
|
|
461
469
|
}
|
|
462
470
|
|
|
@@ -492,4 +500,7 @@ declare interface FileUploadValidationResult {
|
|
|
492
500
|
/** Validation messages shown during inline rename editing. */
|
|
493
501
|
declare type RenameValidationMessages = NonNullable<DialFileManagerComponentProps['renameValidationMessages']>;
|
|
494
502
|
|
|
503
|
+
/** Maps upload entries onto the UI kit's `TransferQueue` rows. */
|
|
504
|
+
export declare const toUploadQueueItems: (files: FileUploadEntry[]) => TransferQueueItem[];
|
|
505
|
+
|
|
495
506
|
export { }
|
package/file-manager.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
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))}.
|
|
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}.end-2{inset-inline-end:.5rem}.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}.
|
|
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_pkxew_1{--rs-bg:var(--bg-info,#e1eaf9)}._danger_pkxew_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_1ql91_1{0%{background-position:200%}to{background-position:-200%}}._thinking_1ql91_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_1ql91_1}._h6_1ql91_18{color:var(--cm-h6-text,var(--text-secondary,#57647a))}._codeInline_1ql91_22{background:var(--cm-code-inline-bg,var(--bg-layer-raised,#fcfcfc));color:var(--cm-code-inline-text,var(--text-primary,#161b2d))}._secondaryBorder_1ql91_27{border-color:var(--cm-markdown-border,var(--stroke-secondary,#d1dbea))}._blockquote_1ql91_31{border-color:var(--cm-blockquote-border,var(--stroke-primary,#57647a));color:var(--cm-blockquote-text,var(--text-secondary,#57647a))}._link_1ql91_36{color:var(--cm-link-text,var(--text-accent,#1d4ed8))}._link_1ql91_36:focus-visible{outline-color:var(--cm-link-focus,var(--stroke-focus,#161b2d))}._scrollContainer_n2oom_1{scrollbar-width:thin;scrollbar-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_n2oom_1::-webkit-scrollbar{height:4px}._scrollContainer_n2oom_1::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_n2oom_1::-webkit-scrollbar-thumb{background-color:var(--cm-math-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._scrollContainer_n2oom_1:focus-visible{outline:1px solid var(--cm-math-focus,var(--stroke-focus,#161b2d));outline-offset:2px}._mathContent_n2oom_24{width:max-content;min-width:100%;display:block}._tableContainer_1qw2e_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_1qw2e_6{background:var(--cm-code-block-bg,var(--bg-layer-base,#f5f7fa))}._copiedIcon_1qw2e_10{color:var(--cm-code-block-copied,var(--text-success,#007274))}._scrollContainer_1qw2e_14{scrollbar-width:thin;scrollbar-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a)) transparent}._scrollContainer_1qw2e_14::-webkit-scrollbar{width:4px;height:4px}._scrollContainer_1qw2e_14::-webkit-scrollbar-track{background-color:#0000}._scrollContainer_1qw2e_14::-webkit-scrollbar-thumb{background-color:var(--cm-table-scrollbar,var(--stroke-primary,#57647a));border-radius:4px}._tableHeaderCell_1qw2e_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_1qw2e_37 td{background:var(--cm-code-block-header-bg,var(--bg-layer-raised,#fcfcfc))}._rowDivider_1qw2e_41{border-block-end:.5px solid var(--cm-table-row-divider,var(--stroke-tertiary,#e0e6f0))}tbody ._row_1qw2e_41:hover td{background:var(--cm-table-row-hover-bg,var(--bg-control-accent-alpha-hover,#2764d924))}._tableScrollFadeEnd_1qw2e_51{-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to right, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%)}[dir=rtl] ._tableScrollFadeEnd_1qw2e_51{-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%);-webkit-mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%);mask-image:linear-gradient(to left, var(--cm-table-fade,var(--stroke-black,#161b2d)) 0, var(--cm-table-fade,var(--stroke-black,#161b2d)) calc(100% - 1rem), transparent 100%)}._tableScrollFadeStart_1qw2e_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_1qw2e_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_1qw2e_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-base{background-color:var(--bg-layer-base,#f5f7fa)}.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\: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}
|