@openviking/react 0.1.6 → 0.1.7
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/README.md +2 -0
- package/dist/2~0.js +6 -5
- package/dist/3c~0.js +10 -4
- package/dist/3~0.js +18 -8
- package/dist/ae~0.js +8 -1
- package/dist/ark-message-list-view~0.js +9 -4
- package/dist/a~0.js +12 -6
- package/dist/c7r~0.js +50 -0
- package/dist/ck~0.js +3 -0
- package/dist/client/paths.d.ts +6 -0
- package/dist/client/provider.d.ts +6 -1
- package/dist/components/agent-connect/style.css +222 -35
- package/dist/components/directory-tour/style.css +221 -21
- package/dist/components/directory-tour.js +1 -1
- package/dist/components/experience-dashboard/style.css +227 -12
- package/dist/components/experience-dashboard.js +1 -1
- package/dist/components/file-browser-entries/style.css +325 -80
- package/dist/components/file-preview/style.css +221 -76
- package/dist/components/file-tree/file-tree-toolbar.d.ts +3 -3
- package/dist/components/file-tree/locales/en-US.d.ts +3 -0
- package/dist/components/file-tree/locales/zh-CN.d.ts +3 -0
- package/dist/components/file-tree/style.css +311 -86
- package/dist/components/file-tree/types.d.ts +13 -4
- package/dist/components/scope-switcher/style.css +366 -37
- package/dist/components/scope-switcher.js +1 -1
- package/dist/components/style.css +3329 -640
- package/dist/components/tui/style.css +267 -35
- package/dist/components/viking-bot/interaction/style.css +143 -22
- package/dist/components/viking-bot/style.css +945 -295
- package/dist/components/wiki-dashboard/style.css +227 -12
- package/dist/c~0.js +16 -8
- package/dist/ep~0.js +345 -0
- package/dist/e~0.js +33 -328
- package/dist/fj~0.js +8 -4
- package/dist/fl~0.js +709 -0
- package/dist/f~0.js +302 -663
- package/dist/index.js +3 -3
- package/dist/lk~0.js +6 -3
- package/dist/l~0.js +1874 -437
- package/dist/modules/console/style.css +1471 -351
- package/dist/modules/file-browser/acl/acl-add-principal.d.ts +12 -0
- package/dist/modules/file-browser/acl/acl-candidate.d.ts +8 -0
- package/dist/modules/file-browser/acl/acl-client.d.ts +13 -0
- package/dist/modules/file-browser/acl/acl-confirmation.d.ts +6 -0
- package/dist/modules/file-browser/acl/acl-entry.d.ts +13 -0
- package/dist/modules/file-browser/acl/acl-labels.d.ts +47 -0
- package/dist/modules/file-browser/acl/acl-menu.d.ts +10 -0
- package/dist/modules/file-browser/acl/acl-modal.d.ts +17 -0
- package/dist/modules/file-browser/acl/acl-model.d.ts +17 -0
- package/dist/modules/file-browser/acl/acl-principal-tabs.d.ts +6 -0
- package/dist/modules/file-browser/acl/acl-tag.d.ts +7 -0
- package/dist/modules/file-browser/acl/locales/en-US.d.ts +44 -0
- package/dist/modules/file-browser/acl/locales/zh-CN.d.ts +44 -0
- package/dist/modules/file-browser/acl/use-acl-principals.d.ts +17 -0
- package/dist/modules/file-browser/acl/use-acl-report.d.ts +27 -0
- package/dist/modules/file-browser/acl-types.d.ts +86 -0
- package/dist/modules/file-browser/dashboard-model.d.ts +3 -0
- package/dist/modules/file-browser/file-browser-detail.d.ts +4 -1
- package/dist/modules/file-browser/file-browser-labels.d.ts +1 -1
- package/dist/modules/file-browser/file-browser-search.d.ts +20 -0
- package/dist/modules/file-browser/file-browser-toolbar.d.ts +3 -10
- package/dist/modules/file-browser/file-browser-tree-pane.d.ts +2 -6
- package/dist/modules/file-browser/file-browser.d.ts +1 -1
- package/dist/modules/file-browser/fs-directories.d.ts +1 -0
- package/dist/modules/file-browser/fs-model.d.ts +3 -1
- package/dist/modules/file-browser/index.d.ts +1 -0
- package/dist/modules/file-browser/locales/en-US.d.ts +5 -0
- package/dist/modules/file-browser/locales/zh-CN.d.ts +5 -0
- package/dist/modules/file-browser/style.css +2409 -603
- package/dist/modules/file-browser/types.d.ts +20 -20
- package/dist/modules/file-browser/use-file-browser-acl.d.ts +15 -0
- package/dist/modules/file-browser/use-file-browser.d.ts +5 -7
- package/dist/modules/file-browser/use-fs-tree.d.ts +1 -0
- package/dist/modules/scope-cascade/style.css +535 -37
- package/dist/modules/style.css +12227 -8757
- package/dist/n~0.js +60 -36
- package/dist/rt~0.js +107 -4
- package/dist/r~0.js +1 -1
- package/dist/shared/components/button/button.d.ts +20 -0
- package/dist/shared/components/input/input.d.ts +17 -0
- package/dist/shared/components/modal/locales/en-US.d.ts +4 -0
- package/dist/shared/components/modal/locales/zh-CN.d.ts +4 -0
- package/dist/shared/components/modal/modal.d.ts +2 -0
- package/dist/shared/components/modal/types.d.ts +18 -0
- package/dist/shared/components/overlay/lock-body-scroll.d.ts +1 -0
- package/dist/style.css +7776 -1571
- package/dist/s~0.js +16 -0
- package/dist/u~0.js +15 -6
- package/dist/viking-bot-composer~0.js +29 -11
- package/dist/viking-bot-interaction~0.js +2 -1
- package/package.json +3 -2
- package/dist/fi~0.js +0 -354
- package/dist/modules/file-browser/fs-selection.d.ts +0 -4
- package/dist/o~0.js +0 -106
package/README.md
CHANGED
|
@@ -98,3 +98,5 @@ Built-in translations live alongside each component or module in `locales/en-US.
|
|
|
98
98
|
Dynamic messages use typed formatter functions; dates and numbers use `Intl`. `npm test` checks matching keys, string placeholders and formatter arity across languages, while type checking validates parameter types. Undefined `labels` entries inherit the selected language; empty strings remain explicit overrides.
|
|
99
99
|
|
|
100
100
|
Set `locale` on `OpenVikingProvider` for a subtree. Optional module and component Props override the nearest scope, then fall back to `en-US`. Standalone Hooks also inherit the Provider. The private `src/shared/locale-context.tsx` is shared across public entries and remains separate from request-client configuration, so language changes preserve requests and state.
|
|
101
|
+
|
|
102
|
+
The internal Input, Button, Modal and Drawer adapt Arco Design logic (MIT); its notice ships in `LICENSE.arco-design`. Input and Button visual rules are adapted from the console's `@arco-design/theme-ve-o-aml-design@0.0.36` (MIT), rather than Arco's default skin. They have no public component entry.
|
package/dist/2~0.js
CHANGED
|
@@ -8,6 +8,7 @@ import { resolveLocale } from "./nx~0.js";
|
|
|
8
8
|
import { removereact } from "./4~0.js";
|
|
9
9
|
import { usePortalTheme } from "./9~0.js";
|
|
10
10
|
import { useLocale } from "./28~0.js";
|
|
11
|
+
import { button_Button } from "./e~0.js";
|
|
11
12
|
import { AgentConnect } from "./u~0.js";
|
|
12
13
|
import * as __rspack_external_react from "react";
|
|
13
14
|
__webpack_require__.add({
|
|
@@ -2282,8 +2283,8 @@ function FileBrowserEntries({ locale: localeProp, agentConnect, onConnectAgent,
|
|
|
2282
2283
|
const [drawerOpen, setDrawerOpen] = useState(false);
|
|
2283
2284
|
const text = resolveFileBrowserEntriesLabels(locale, labels);
|
|
2284
2285
|
const showConnect = Boolean(agentConnect || onConnectAgent);
|
|
2285
|
-
const importButton = /*#__PURE__*/ jsxs(
|
|
2286
|
-
|
|
2286
|
+
const importButton = /*#__PURE__*/ jsxs(button_Button, {
|
|
2287
|
+
htmlType: "button",
|
|
2287
2288
|
className: "ov-file-browser-entries__entry",
|
|
2288
2289
|
onClick: onImportResources,
|
|
2289
2290
|
children: [
|
|
@@ -2308,9 +2309,9 @@ function FileBrowserEntries({ locale: localeProp, agentConnect, onConnectAgent,
|
|
|
2308
2309
|
className
|
|
2309
2310
|
].filter(Boolean).join(' '),
|
|
2310
2311
|
children: [
|
|
2311
|
-
showConnect ? /*#__PURE__*/ jsxs(
|
|
2312
|
+
showConnect ? /*#__PURE__*/ jsxs(button_Button, {
|
|
2312
2313
|
ref: triggerRef,
|
|
2313
|
-
|
|
2314
|
+
htmlType: "button",
|
|
2314
2315
|
className: "ov-file-browser-entries__entry",
|
|
2315
2316
|
"aria-haspopup": agentConnect ? 'dialog' : void 0,
|
|
2316
2317
|
"aria-controls": agentConnect ? drawerId : void 0,
|
|
@@ -2360,4 +2361,4 @@ function FileBrowserEntries({ locale: localeProp, agentConnect, onConnectAgent,
|
|
|
2360
2361
|
]
|
|
2361
2362
|
});
|
|
2362
2363
|
}
|
|
2363
|
-
export { FileBrowserEntries };
|
|
2364
|
+
export { FileBrowserEntries, es2015, lockBodyScroll };
|
package/dist/3c~0.js
CHANGED
|
@@ -6,6 +6,7 @@ import { ArrowRightIcon } from "./k~0.js";
|
|
|
6
6
|
import { resolveLocale } from "./nx~0.js";
|
|
7
7
|
import { checkreact } from "./0~0.js";
|
|
8
8
|
import { Tooltip } from "./rt~0.js";
|
|
9
|
+
import { button_Button } from "./e~0.js";
|
|
9
10
|
import { useLocale } from "./28~0.js";
|
|
10
11
|
function getTuiCommandInputText(command) {
|
|
11
12
|
return command.inputText?.trim() || command.name;
|
|
@@ -1170,8 +1171,11 @@ function TuiCopyButton({ text, label, copiedLabel, onCopy, className }) {
|
|
|
1170
1171
|
};
|
|
1171
1172
|
return /*#__PURE__*/ jsx(Tooltip, {
|
|
1172
1173
|
content: copied ? copiedLabel : label,
|
|
1173
|
-
children: /*#__PURE__*/ jsx(
|
|
1174
|
-
|
|
1174
|
+
children: /*#__PURE__*/ jsx(button_Button, {
|
|
1175
|
+
size: "mini",
|
|
1176
|
+
type: "text",
|
|
1177
|
+
iconOnly: true,
|
|
1178
|
+
htmlType: "button",
|
|
1175
1179
|
className: [
|
|
1176
1180
|
'ov-tui__copy',
|
|
1177
1181
|
className
|
|
@@ -1537,8 +1541,10 @@ function TuiResourceTree({ content, onOpenUri, loadMoreLabel, noResultLabel, res
|
|
|
1537
1541
|
})
|
|
1538
1542
|
}, item.id))
|
|
1539
1543
|
}),
|
|
1540
|
-
hiddenCount > 0 ? /*#__PURE__*/ jsxs(
|
|
1541
|
-
|
|
1544
|
+
hiddenCount > 0 ? /*#__PURE__*/ jsxs(button_Button, {
|
|
1545
|
+
size: "small",
|
|
1546
|
+
type: "default",
|
|
1547
|
+
htmlType: "button",
|
|
1542
1548
|
className: "ov-tui__load-more",
|
|
1543
1549
|
onClick: ()=>setVisibleCount((count)=>count + PAGE_SIZE),
|
|
1544
1550
|
children: [
|
package/dist/3~0.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Fragment as external_react_Fragment, Suspense, forwardRef, lazy, useCallback, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { button_Button } from "./e~0.js";
|
|
3
4
|
import { Tooltip } from "./rt~0.js";
|
|
4
5
|
import { resolveLocale, mergeLabels } from "./nx~0.js";
|
|
5
6
|
import { useLocale } from "./28~0.js";
|
|
@@ -37,8 +38,10 @@ function FilePreviewEditor({ draft, text, loading, failed, saveFailed, saving, o
|
|
|
37
38
|
className: "ov-file-preview__state-title",
|
|
38
39
|
children: text.loadFailed
|
|
39
40
|
}),
|
|
40
|
-
/*#__PURE__*/ jsx(
|
|
41
|
-
|
|
41
|
+
/*#__PURE__*/ jsx(button_Button, {
|
|
42
|
+
size: "small",
|
|
43
|
+
type: "default",
|
|
44
|
+
htmlType: "button",
|
|
42
45
|
className: "ov-file-preview__button",
|
|
43
46
|
onClick: onCancel,
|
|
44
47
|
children: text.leaveEditing
|
|
@@ -140,8 +143,10 @@ function LoadFailedState({ text, description, onRetry }) {
|
|
|
140
143
|
return /*#__PURE__*/ jsx(StatePanel, {
|
|
141
144
|
title: text.loadFailed,
|
|
142
145
|
description: description,
|
|
143
|
-
action: onRetry ? /*#__PURE__*/ jsx(
|
|
144
|
-
|
|
146
|
+
action: onRetry ? /*#__PURE__*/ jsx(button_Button, {
|
|
147
|
+
size: "small",
|
|
148
|
+
type: "default",
|
|
149
|
+
htmlType: "button",
|
|
145
150
|
className: "ov-file-preview__button",
|
|
146
151
|
onClick: onRetry,
|
|
147
152
|
children: text.retry
|
|
@@ -151,8 +156,10 @@ function LoadFailedState({ text, description, onRetry }) {
|
|
|
151
156
|
function UnsupportedState({ text, onDownload }) {
|
|
152
157
|
return /*#__PURE__*/ jsx(StatePanel, {
|
|
153
158
|
title: text.unsupported,
|
|
154
|
-
action: onDownload ? /*#__PURE__*/ jsx(
|
|
155
|
-
|
|
159
|
+
action: onDownload ? /*#__PURE__*/ jsx(button_Button, {
|
|
160
|
+
size: "small",
|
|
161
|
+
type: "default",
|
|
162
|
+
htmlType: "button",
|
|
156
163
|
className: "ov-file-preview__button",
|
|
157
164
|
onClick: onDownload,
|
|
158
165
|
children: text.download
|
|
@@ -451,8 +458,11 @@ function FilePreviewBreadcrumb({ hiddenPathLabel, segments, title, canOpen, disa
|
|
|
451
458
|
function FilePreviewCopyPath({ label, disabled, onClick }) {
|
|
452
459
|
return /*#__PURE__*/ jsx(Tooltip, {
|
|
453
460
|
content: label,
|
|
454
|
-
children: /*#__PURE__*/ jsx(
|
|
455
|
-
|
|
461
|
+
children: /*#__PURE__*/ jsx(button_Button, {
|
|
462
|
+
size: "small",
|
|
463
|
+
type: "text",
|
|
464
|
+
iconOnly: true,
|
|
465
|
+
htmlType: "button",
|
|
456
466
|
className: "ov-file-preview__action",
|
|
457
467
|
"aria-label": label,
|
|
458
468
|
disabled: disabled,
|
package/dist/ae~0.js
CHANGED
|
@@ -488,4 +488,11 @@ function useOvClient() {
|
|
|
488
488
|
function useOvSignal() {
|
|
489
489
|
return useContext(OvClientContext)?.base.signal;
|
|
490
490
|
}
|
|
491
|
-
|
|
491
|
+
function useOvIdentity(options) {
|
|
492
|
+
const base = useContext(OvClientContext)?.base.identity;
|
|
493
|
+
return {
|
|
494
|
+
accountId: options?.accountId ?? base?.accountId,
|
|
495
|
+
userId: options?.userId ?? base?.userId
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
export { OpenVikingProvider, OvClientError, createOvClient, isOvClientError, useOvClient, useOvIdentity, useOvSignal };
|
|
@@ -9,6 +9,7 @@ import { DocumentIcon } from "./k~0.js";
|
|
|
9
9
|
import { VikingBotIcon } from "./lg~0.js";
|
|
10
10
|
import { groupActivityParts, mergeToolResults, resolveVikingBotLabels, toRenderItems } from "./c~0.js";
|
|
11
11
|
import { groupByActivity, messageText, groupMessages } from "./h~0.js";
|
|
12
|
+
import { button_Button } from "./e~0.js";
|
|
12
13
|
const PREFIX = '#viking-uri=';
|
|
13
14
|
const RESOURCE = /viking:\/\/[^\s<>"'`]+/gi;
|
|
14
15
|
const PROSE_RESOURCE = /viking:\/\/[^\s<>"'`,。;!?)\]]+/gi;
|
|
@@ -532,8 +533,10 @@ function MessageFooter({ message, showTime, labels, locale, onCopy }) {
|
|
|
532
533
|
dateTime: message.createdAt,
|
|
533
534
|
children: time
|
|
534
535
|
}) : null,
|
|
535
|
-
canCopy ? onCopy ? /*#__PURE__*/ jsx(
|
|
536
|
-
|
|
536
|
+
canCopy ? onCopy ? /*#__PURE__*/ jsx(button_Button, {
|
|
537
|
+
size: "mini",
|
|
538
|
+
type: "text",
|
|
539
|
+
htmlType: "button",
|
|
537
540
|
className: "ov-viking-bot__copy",
|
|
538
541
|
onClick: ()=>onCopy(text),
|
|
539
542
|
children: labels.copy
|
|
@@ -560,8 +563,10 @@ function MessageActions({ message, onMessageAction }) {
|
|
|
560
563
|
if (0 === actions.length) return null;
|
|
561
564
|
return /*#__PURE__*/ jsx("div", {
|
|
562
565
|
className: "ov-viking-bot__message-actions",
|
|
563
|
-
children: actions.map(({ messageId, action })=>/*#__PURE__*/ jsx(
|
|
564
|
-
|
|
566
|
+
children: actions.map(({ messageId, action })=>/*#__PURE__*/ jsx(button_Button, {
|
|
567
|
+
size: "small",
|
|
568
|
+
type: "default",
|
|
569
|
+
htmlType: "button",
|
|
565
570
|
className: "ov-viking-bot__message-action",
|
|
566
571
|
disabled: Boolean(action.disabledReason) || 'pending' === action.status || 'success' === action.status,
|
|
567
572
|
title: action.disabledReason,
|
package/dist/a~0.js
CHANGED
|
@@ -5,8 +5,8 @@ import { resolveLocale, mergeLabels } from "./nx~0.js";
|
|
|
5
5
|
import { useOvSignal, useOvClient, createOvClient, isOvClientError } from "./ae~0.js";
|
|
6
6
|
import { useLocale, LocaleProvider } from "./28~0.js";
|
|
7
7
|
import { new_sessionreact, historyreact } from "./lg~0.js";
|
|
8
|
-
import { useOverlayPosition } from "./
|
|
9
|
-
import {
|
|
8
|
+
import { Tooltip, useOverlayPosition } from "./rt~0.js";
|
|
9
|
+
import { button_Button } from "./e~0.js";
|
|
10
10
|
import { VikingBotSessionActions, VikingBot } from "./c~0.js";
|
|
11
11
|
import { Tui } from "./3c~0.js";
|
|
12
12
|
const command_specs_uri = {
|
|
@@ -1066,9 +1066,12 @@ function ConsoleHistory({ records, isExecuting, locale, labels, onRecall }) {
|
|
|
1066
1066
|
/*#__PURE__*/ jsx(Tooltip, {
|
|
1067
1067
|
content: labels.history,
|
|
1068
1068
|
className: "ov-console__action-tooltip",
|
|
1069
|
-
children: /*#__PURE__*/ jsx(
|
|
1069
|
+
children: /*#__PURE__*/ jsx(button_Button, {
|
|
1070
|
+
size: "small",
|
|
1071
|
+
type: "text",
|
|
1072
|
+
iconOnly: true,
|
|
1070
1073
|
...invoker,
|
|
1071
|
-
|
|
1074
|
+
htmlType: "button",
|
|
1072
1075
|
className: "ov-console__action",
|
|
1073
1076
|
"aria-label": labels.history,
|
|
1074
1077
|
"aria-haspopup": "dialog",
|
|
@@ -1181,9 +1184,12 @@ function ConsoleToolbar({ mode, panelId, locale, labels, records, isExecuting, o
|
|
|
1181
1184
|
/*#__PURE__*/ jsx(Tooltip, {
|
|
1182
1185
|
content: labels.clear,
|
|
1183
1186
|
className: "ov-console__action-tooltip",
|
|
1184
|
-
children: /*#__PURE__*/ jsx(
|
|
1187
|
+
children: /*#__PURE__*/ jsx(button_Button, {
|
|
1188
|
+
size: "small",
|
|
1189
|
+
type: "text",
|
|
1190
|
+
iconOnly: true,
|
|
1185
1191
|
className: "ov-console__action",
|
|
1186
|
-
|
|
1192
|
+
htmlType: "button",
|
|
1187
1193
|
"aria-label": labels.clear,
|
|
1188
1194
|
onClick: ()=>{
|
|
1189
1195
|
setSessionVersion((version)=>version + 1);
|
package/dist/c7r~0.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
const input_Input = /*#__PURE__*/ forwardRef(function({ size = 'default', prefix, suffix, className, style, disabled, ...rest }, ref) {
|
|
4
|
+
return /*#__PURE__*/ jsxs("span", {
|
|
5
|
+
role: "presentation",
|
|
6
|
+
className: [
|
|
7
|
+
'ov-input',
|
|
8
|
+
`ov-input--${size}`,
|
|
9
|
+
disabled && 'ov-input--disabled',
|
|
10
|
+
className
|
|
11
|
+
].filter(Boolean).join(' '),
|
|
12
|
+
style: style,
|
|
13
|
+
onMouseDown: (event)=>{
|
|
14
|
+
if (event.target !== event.currentTarget.querySelector('input')) event.preventDefault();
|
|
15
|
+
},
|
|
16
|
+
onClick: (event)=>{
|
|
17
|
+
const input = event.currentTarget.querySelector('input');
|
|
18
|
+
if (!disabled && !event.defaultPrevented && event.target !== input) input?.focus();
|
|
19
|
+
},
|
|
20
|
+
children: [
|
|
21
|
+
null != prefix ? /*#__PURE__*/ jsx("span", {
|
|
22
|
+
className: "ov-input__affix",
|
|
23
|
+
"aria-hidden": "true",
|
|
24
|
+
children: prefix
|
|
25
|
+
}) : null,
|
|
26
|
+
/*#__PURE__*/ jsx("input", {
|
|
27
|
+
...rest,
|
|
28
|
+
ref: ref,
|
|
29
|
+
disabled: disabled,
|
|
30
|
+
className: "ov-input__element"
|
|
31
|
+
}),
|
|
32
|
+
null != suffix ? /*#__PURE__*/ jsx("span", {
|
|
33
|
+
className: "ov-input__affix",
|
|
34
|
+
"aria-hidden": "true",
|
|
35
|
+
children: suffix
|
|
36
|
+
}) : null
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
const input_TextArea = /*#__PURE__*/ forwardRef(function({ className, ...rest }, ref) {
|
|
41
|
+
return /*#__PURE__*/ jsx("textarea", {
|
|
42
|
+
...rest,
|
|
43
|
+
ref: ref,
|
|
44
|
+
className: [
|
|
45
|
+
'ov-textarea',
|
|
46
|
+
className
|
|
47
|
+
].filter(Boolean).join(' ')
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
export { input_Input, input_TextArea };
|
package/dist/ck~0.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const OV_PATHS = {
|
|
2
|
+
acl: '/api/v1/acl',
|
|
2
3
|
fsLs: '/api/v1/fs/ls',
|
|
3
4
|
fsAttrs: '/api/v1/fs/attrs',
|
|
4
5
|
compileConfigs: '/api/v1/compile/configs',
|
|
@@ -21,6 +22,8 @@ const OV_PATHS = {
|
|
|
21
22
|
botChatStream: '/bot/v1/chat/stream'
|
|
22
23
|
};
|
|
23
24
|
const OV_PATH_BUILDERS = {
|
|
25
|
+
accountUsers: (accountId)=>`/api/v1/admin/accounts/${encodeURIComponent(accountId)}/users`,
|
|
26
|
+
accountGroups: (accountId)=>`/api/v1/admin/accounts/${encodeURIComponent(accountId)}/groups`,
|
|
24
27
|
session: (sessionId)=>`${OV_PATHS.sessions}/${encodeURIComponent(sessionId)}`,
|
|
25
28
|
sessionMessages: (sessionId)=>`${OV_PATH_BUILDERS.session(sessionId)}/messages`
|
|
26
29
|
};
|
package/dist/client/paths.d.ts
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* `verbatimModuleSyntax` cannot use.
|
|
17
17
|
*/
|
|
18
18
|
export declare const OV_PATHS: {
|
|
19
|
+
/** 资源访问控制。Resource access control. */
|
|
20
|
+
readonly acl: '/api/v1/acl';
|
|
19
21
|
/** 列出目录内容。List directory contents. */
|
|
20
22
|
readonly fsLs: '/api/v1/fs/ls';
|
|
21
23
|
readonly fsAttrs: '/api/v1/fs/attrs';
|
|
@@ -61,6 +63,10 @@ export type OvPath = (typeof OV_PATHS)[keyof typeof OV_PATHS];
|
|
|
61
63
|
* containing `/` is not read as a path separator.
|
|
62
64
|
*/
|
|
63
65
|
export declare const OV_PATH_BUILDERS: {
|
|
66
|
+
/** 账号用户目录(可关闭凭证返回)。Account user directory. */
|
|
67
|
+
readonly accountUsers: (accountId: string) => string;
|
|
68
|
+
/** 账号用户组目录。Account group directory. */
|
|
69
|
+
readonly accountGroups: (accountId: string) => string;
|
|
64
70
|
/** 单个会话。One session. */
|
|
65
71
|
readonly session: (sessionId: string) => string;
|
|
66
72
|
/** 会话的消息。Messages of one session. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { Locale } from '../shared/locale.js';
|
|
3
|
-
import type { OvClient, OvClientOptions } from './types.js';
|
|
3
|
+
import type { OvClient, OvClientOptions, OvRequestOptions } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* {@link OpenVikingProvider} 的属性。请求字段与 {@link OvClientOptions} 同形,另可设置界面语言:
|
|
6
6
|
* 服务地址、身份与作用域、Cookie 策略,都按字段传值。
|
|
@@ -56,3 +56,8 @@ export declare function OpenVikingProvider({ baseURL, apiKey, accountId, userId,
|
|
|
56
56
|
export declare function useOvClient(): OvClient | null;
|
|
57
57
|
/** Internal: modules compose their request lifetime with the inherited signal. */
|
|
58
58
|
export declare function useOvSignal(): AbortSignal | undefined;
|
|
59
|
+
/** Internal identity inheritance for account-scoped principal directories. */
|
|
60
|
+
export declare function useOvIdentity(options?: OvRequestOptions): {
|
|
61
|
+
accountId: import("./types.js").OvIdentityValue | undefined;
|
|
62
|
+
userId: import("./types.js").OvIdentityValue | undefined;
|
|
63
|
+
};
|
|
@@ -1,4 +1,173 @@
|
|
|
1
|
-
.ov-
|
|
1
|
+
.ov-button {
|
|
2
|
+
--ov-ui-button-height: 32px;
|
|
3
|
+
--ov-ui-button-padding: 16px;
|
|
4
|
+
--ov-ui-button-primary: var(--ov-ui-color-primary, var(--ov-ui-primary-default));
|
|
5
|
+
--ov-ui-button-text: var(--ov-ui-color-text-2, var(--ov-ui-text-2-default));
|
|
6
|
+
--ov-ui-button-fill: var(--ov-ui-color-bg-5, var(--ov-ui-bg-5-default));
|
|
7
|
+
--ov-ui-button-fill-hover: var(--ov-ui-color-bg-11, var(--ov-ui-bg-11-default));
|
|
8
|
+
--ov-ui-button-focus-ring: var(--ov-ui-color-neutral-4, var(--ov-ui-neutral-4-default));
|
|
9
|
+
appearance: none;
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
height: var(--ov-ui-button-height);
|
|
12
|
+
padding: 0 var(--ov-ui-button-padding);
|
|
13
|
+
background: var(--ov-ui-button-fill);
|
|
14
|
+
color: var(--ov-ui-button-text);
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
-webkit-user-select: none;
|
|
18
|
+
user-select: none;
|
|
19
|
+
border: 1px solid #0000;
|
|
20
|
+
border-radius: 6px;
|
|
21
|
+
flex-shrink: 0;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
align-items: center;
|
|
24
|
+
gap: 8px;
|
|
25
|
+
margin: 0;
|
|
26
|
+
font-family: inherit;
|
|
27
|
+
font-size: 13px;
|
|
28
|
+
font-weight: 500;
|
|
29
|
+
line-height: 1.53846;
|
|
30
|
+
text-decoration: none;
|
|
31
|
+
transition: background-color .1s cubic-bezier(0, 0, 1, 1), border-color .1s cubic-bezier(0, 0, 1, 1), color .1s cubic-bezier(0, 0, 1, 1);
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ov-button--mini {
|
|
36
|
+
--ov-ui-button-height: 24px;
|
|
37
|
+
--ov-ui-button-padding: 12px;
|
|
38
|
+
gap: 4px;
|
|
39
|
+
font-size: 12px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ov-button--small {
|
|
43
|
+
--ov-ui-button-height: 28px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.ov-button--large {
|
|
47
|
+
--ov-ui-button-height: 36px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ov-button--icon-only {
|
|
51
|
+
width: var(--ov-ui-button-height);
|
|
52
|
+
padding: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.ov-button--circle {
|
|
56
|
+
border-radius: 50%;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.ov-button--long {
|
|
60
|
+
width: 100%;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.ov-button:not(:disabled):not([aria-disabled="true"]):hover {
|
|
64
|
+
background: var(--ov-ui-button-fill-hover);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ov-button:not(:disabled):not([aria-disabled="true"]):active {
|
|
68
|
+
background: var(--ov-ui-button-fill);
|
|
69
|
+
color: var(--ov-ui-color-text-1, var(--ov-ui-text-1-default));
|
|
70
|
+
transition: none;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ov-button:focus-visible {
|
|
74
|
+
box-shadow: 0 0 0 2px var(--ov-ui-button-focus-ring);
|
|
75
|
+
outline: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ov-button:disabled:not(.ov-button--loading), .ov-button.ov-button--disabled, .ov-button[aria-disabled="true"] {
|
|
79
|
+
background: var(--ov-ui-color-bg-4, var(--ov-ui-bg-4-default));
|
|
80
|
+
cursor: not-allowed;
|
|
81
|
+
color: var(--ov-ui-color-text-disabled, var(--ov-ui-text-disabled-default));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ov-button--primary, .ov-button--outline {
|
|
85
|
+
--ov-ui-button-focus-ring: var(--ov-ui-color-primary-disabled, var(--ov-ui-primary-disabled-default));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.ov-button--primary {
|
|
89
|
+
background: var(--ov-ui-button-primary);
|
|
90
|
+
color: var(--ov-ui-color-text-on-primary, var(--ov-ui-text-on-primary-default));
|
|
91
|
+
border-style: dashed;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.ov-button--primary:not(:disabled):not([aria-disabled="true"]):hover {
|
|
95
|
+
background: var(--ov-ui-color-primary-strong, var(--ov-ui-primary-strong-default));
|
|
96
|
+
color: var(--ov-ui-color-text-on-primary, var(--ov-ui-text-on-primary-default));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.ov-button--primary:not(:disabled):not([aria-disabled="true"]):active {
|
|
100
|
+
background: var(--ov-ui-button-primary);
|
|
101
|
+
color: var(--ov-ui-color-text-on-primary, var(--ov-ui-text-on-primary-default));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.ov-button--primary:disabled:not(.ov-button--loading), .ov-button--primary.ov-button--disabled, .ov-button--primary[aria-disabled="true"] {
|
|
105
|
+
background: var(--ov-ui-color-primary-disabled, var(--ov-ui-primary-disabled-default));
|
|
106
|
+
color: var(--ov-ui-color-text-on-primary-disabled, var(--ov-ui-on-primary-disabled-default));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.ov-button--outline, .ov-button--outline:disabled:not(.ov-button--loading), .ov-button--outline.ov-button--disabled, .ov-button--outline[aria-disabled="true"] {
|
|
110
|
+
border-color: var(--ov-ui-color-border-3, var(--ov-ui-border-3-default));
|
|
111
|
+
background: none;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.ov-button--outline:not(:disabled):not([aria-disabled="true"]):hover, .ov-button--outline:not(:disabled):not([aria-disabled="true"]):active {
|
|
115
|
+
background: var(--ov-ui-color-bg-7, var(--ov-ui-bg-7-default));
|
|
116
|
+
color: var(--ov-ui-button-text);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.ov-button--outline:not(:disabled):not([aria-disabled="true"]):active {
|
|
120
|
+
border-color: var(--ov-ui-color-border-4, var(--ov-ui-border-4-default));
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ov-button--text {
|
|
124
|
+
color: var(--ov-ui-color-link, var(--ov-ui-link-default));
|
|
125
|
+
background: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.ov-button--text:not(:disabled):not([aria-disabled="true"]):hover, .ov-button--text:disabled:not(.ov-button--loading), .ov-button--text.ov-button--disabled, .ov-button--text[aria-disabled="true"] {
|
|
129
|
+
color: var(--ov-ui-color-primary-muted, var(--ov-ui-primary-muted-default));
|
|
130
|
+
background: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.ov-button--text:not(:disabled):not([aria-disabled="true"]):active {
|
|
134
|
+
color: var(--ov-ui-color-link-active, var(--ov-ui-link-active-default));
|
|
135
|
+
background: none;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.ov-button__icon {
|
|
139
|
+
flex: none;
|
|
140
|
+
align-items: center;
|
|
141
|
+
display: inline-flex;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.ov-button__spinner {
|
|
145
|
+
box-sizing: border-box;
|
|
146
|
+
border: 1.5px solid;
|
|
147
|
+
border-inline-start-color: #0000;
|
|
148
|
+
border-radius: 50%;
|
|
149
|
+
width: 1em;
|
|
150
|
+
height: 1em;
|
|
151
|
+
animation: 1s linear infinite ov-button-spin;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@keyframes ov-button-spin {
|
|
155
|
+
to {
|
|
156
|
+
transform: rotate(360deg);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@media (prefers-reduced-motion: reduce) {
|
|
161
|
+
.ov-button {
|
|
162
|
+
transition: none;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.ov-button__spinner {
|
|
166
|
+
animation: none;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.ov-button, .ov-input, .ov-textarea, .ov-directory-tour, .ov-wiki-dashboard, .ov-experience-dashboard, .ov-agent-connect, .ov-console, .ov-divider, .ov-file-browser-entries, .ov-drawer, .ov-modal, .ov-file-browser, .ov-file-preview, .ov-file-tree, .ov-module-placeholder, .ov-popover, .ov-scope-switcher, .ov-tooltip, .ov-tui, .ov-viking-bot, .ov-viking-bot__popover, .ov-viking-bot__reference-picker--mention, .ov-viking-bot__interaction {
|
|
2
171
|
--ov-ui-tour-shadow-default: 0 15px 35px #0000000d, 0 5px 15px #0000000d;
|
|
3
172
|
--ov-ui-tour-highlight-default: #5252ff14;
|
|
4
173
|
--ov-ui-primary-default: #5252ff;
|
|
@@ -57,7 +226,7 @@
|
|
|
57
226
|
#bd9cff 100%);
|
|
58
227
|
}
|
|
59
228
|
|
|
60
|
-
.dark .ov-directory-tour, html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, .dark .ov-agent-connect, .dark .ov-console, .dark .ov-divider, .dark .ov-file-browser-entries, .dark .ov-drawer, .dark .ov-file-browser, .dark .ov-file-preview, .dark .ov-file-tree, .dark .ov-module-placeholder, .dark .ov-popover, .dark .ov-scope-switcher, .dark .ov-tooltip, .dark .ov-tui, .dark .ov-viking-bot, .dark .ov-viking-bot__popover, .dark .ov-viking-bot__reference-picker--mention, .dark .ov-viking-bot__interaction {
|
|
229
|
+
html.dark .ov-button, html.dark .ov-input, html.dark .ov-textarea, .dark .ov-directory-tour, html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, .dark .ov-agent-connect, .dark .ov-console, .dark .ov-divider, .dark .ov-file-browser-entries, .dark .ov-drawer, .dark .ov-modal, .dark .ov-file-browser, .dark .ov-file-preview, .dark .ov-file-tree, .dark .ov-module-placeholder, .dark .ov-popover, .dark .ov-scope-switcher, .dark .ov-tooltip, .dark .ov-tui, .dark .ov-viking-bot, .dark .ov-viking-bot__popover, .dark .ov-viking-bot__reference-picker--mention, .dark .ov-viking-bot__interaction {
|
|
61
230
|
--ov-ui-primary-default: #5f5fff;
|
|
62
231
|
--ov-ui-primary-hover-default: #7075ff;
|
|
63
232
|
--ov-ui-primary-active-default: #4242ba;
|
|
@@ -87,6 +256,52 @@
|
|
|
87
256
|
--ov-ui-tooltip-text-default: #f0f1f3;
|
|
88
257
|
}
|
|
89
258
|
|
|
259
|
+
.ov-button, .ov-input, .ov-textarea {
|
|
260
|
+
--ov-ui-bg-white-default: var(--ov-ui-bg-1-default);
|
|
261
|
+
--ov-ui-bg-2-default: #fafbfd;
|
|
262
|
+
--ov-ui-bg-7-default: var(--ov-ui-border-1-default);
|
|
263
|
+
--ov-ui-bg-11-default: #e1e3ef;
|
|
264
|
+
--ov-ui-border-4-default: #acb0c5;
|
|
265
|
+
--ov-ui-neutral-4-default: #c9cdd4;
|
|
266
|
+
--ov-ui-primary-muted-default: #8e96ff;
|
|
267
|
+
--ov-ui-primary-strong-default: var(--ov-ui-primary-active-default);
|
|
268
|
+
--ov-ui-link-default: var(--ov-ui-primary-default);
|
|
269
|
+
--ov-ui-link-active-default: var(--ov-ui-primary-active-default);
|
|
270
|
+
--ov-ui-text-5-default: #c9c9d4;
|
|
271
|
+
--ov-ui-on-primary-disabled-default: var(--ov-ui-text-on-primary-default);
|
|
272
|
+
--ov-ui-input-focus-ring-default: color-mix(in srgb,
|
|
273
|
+
var(--ov-ui-color-primary, var(--ov-ui-primary-default)) 30%,
|
|
274
|
+
transparent);
|
|
275
|
+
--ov-ui-error-default: #e31b54;
|
|
276
|
+
--ov-ui-error-bg-default: #ffecec;
|
|
277
|
+
--ov-ui-error-border-default: #ffa3a0;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
html.dark .ov-button, html.dark .ov-input, html.dark .ov-textarea {
|
|
281
|
+
--ov-ui-bg-white-default: #fff0;
|
|
282
|
+
--ov-ui-bg-2-default: #fcfdfe03;
|
|
283
|
+
--ov-ui-bg-4-default: #f6f8fa0f;
|
|
284
|
+
--ov-ui-bg-5-default: #f1f3f514;
|
|
285
|
+
--ov-ui-bg-7-default: #1a1b1e;
|
|
286
|
+
--ov-ui-bg-11-default: #1e2023;
|
|
287
|
+
--ov-ui-border-2-default: #dde2e926;
|
|
288
|
+
--ov-ui-border-3-default: #dde2e94d;
|
|
289
|
+
--ov-ui-border-4-default: #6d6d6d;
|
|
290
|
+
--ov-ui-neutral-4-default: #5f5f60;
|
|
291
|
+
--ov-ui-primary-disabled-default: #3f3a89;
|
|
292
|
+
--ov-ui-primary-muted-default: #4c48b4;
|
|
293
|
+
--ov-ui-primary-strong-default: var(--ov-ui-primary-hover-default);
|
|
294
|
+
--ov-ui-link-default: #787dff;
|
|
295
|
+
--ov-ui-link-active-default: #949cff;
|
|
296
|
+
--ov-ui-text-disabled-default: #42464e;
|
|
297
|
+
--ov-ui-text-5-default: #e1e3ef;
|
|
298
|
+
--ov-ui-on-primary-disabled-default: #ffffff4d;
|
|
299
|
+
--ov-ui-input-focus-ring-default: #4583ff4d;
|
|
300
|
+
--ov-ui-error-default: #ff706d;
|
|
301
|
+
--ov-ui-error-bg-default: #9f211c33;
|
|
302
|
+
--ov-ui-error-border-default: #ff706d4d;
|
|
303
|
+
}
|
|
304
|
+
|
|
90
305
|
.dark .ov-viking-bot {
|
|
91
306
|
--ov-ui-code-bg-default: var(--ov-ui-bg-3-default);
|
|
92
307
|
}
|
|
@@ -165,7 +380,7 @@ html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, html.dark .ov-
|
|
|
165
380
|
display: flex;
|
|
166
381
|
}
|
|
167
382
|
|
|
168
|
-
.ov-agent-connect__code-actions button {
|
|
383
|
+
.ov-agent-connect__code-actions button:not(.ov-button) {
|
|
169
384
|
width: 24px;
|
|
170
385
|
height: 24px;
|
|
171
386
|
color: var(--ov-ui-agent-connect-secondary);
|
|
@@ -179,11 +394,11 @@ html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, html.dark .ov-
|
|
|
179
394
|
display: inline-flex;
|
|
180
395
|
}
|
|
181
396
|
|
|
182
|
-
.ov-agent-connect__code-actions button:hover {
|
|
397
|
+
.ov-agent-connect__code-actions button:not(.ov-button):hover {
|
|
183
398
|
color: var(--ov-ui-agent-connect-primary);
|
|
184
399
|
}
|
|
185
400
|
|
|
186
|
-
.ov-agent-connect__code-actions button:disabled {
|
|
401
|
+
.ov-agent-connect__code-actions button:not(.ov-button):disabled {
|
|
187
402
|
opacity: .6;
|
|
188
403
|
cursor: wait;
|
|
189
404
|
}
|
|
@@ -279,12 +494,12 @@ html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, html.dark .ov-
|
|
|
279
494
|
box-sizing: border-box;
|
|
280
495
|
}
|
|
281
496
|
|
|
282
|
-
.ov-agent-connect :where(button) {
|
|
497
|
+
.ov-agent-connect :where(button:not(.ov-button)) {
|
|
283
498
|
font: inherit;
|
|
284
499
|
cursor: pointer;
|
|
285
500
|
}
|
|
286
501
|
|
|
287
|
-
.ov-agent-connect button:focus-visible, .ov-agent-connect a:focus-visible {
|
|
502
|
+
.ov-agent-connect button:not(.ov-button):focus-visible, .ov-agent-connect a:focus-visible {
|
|
288
503
|
outline: 2px solid var(--ov-ui-color-focus, var(--ov-ui-focus-default));
|
|
289
504
|
outline-offset: 2px;
|
|
290
505
|
}
|
|
@@ -475,40 +690,12 @@ html.dark .ov-wiki-dashboard, html.dark .ov-experience-dashboard, html.dark .ov-
|
|
|
475
690
|
line-height: 22px;
|
|
476
691
|
}
|
|
477
692
|
|
|
478
|
-
.ov-agent-connect__copy {
|
|
479
|
-
background: var(--ov-ui-agent-connect-primary);
|
|
480
|
-
height: 34px;
|
|
481
|
-
color: var(--ov-ui-color-on-primary, var(--ov-ui-on-primary-default));
|
|
482
|
-
border: 0;
|
|
483
|
-
border-radius: 8px;
|
|
484
|
-
justify-content: center;
|
|
485
|
-
align-items: center;
|
|
486
|
-
gap: 6px;
|
|
487
|
-
padding: 5px 16px;
|
|
488
|
-
font-size: 13px;
|
|
489
|
-
line-height: 22px;
|
|
490
|
-
display: inline-flex;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
693
|
.ov-agent-connect__copy svg {
|
|
494
694
|
flex: 0 0 16px;
|
|
495
695
|
width: 16px;
|
|
496
696
|
height: 16px;
|
|
497
697
|
}
|
|
498
698
|
|
|
499
|
-
.ov-agent-connect__copy:hover {
|
|
500
|
-
background: var(--ov-ui-color-primary-hover, var(--ov-ui-primary-hover-default));
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
.ov-agent-connect__copy:active {
|
|
504
|
-
background: var(--ov-ui-color-primary-active, var(--ov-ui-primary-active-default));
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
.ov-agent-connect__copy:disabled {
|
|
508
|
-
opacity: .6;
|
|
509
|
-
cursor: wait;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
699
|
.ov-agent-connect__body {
|
|
513
700
|
box-shadow: inset 0 0 0 1px var(--ov-ui-agent-connect-border);
|
|
514
701
|
background: var(--ov-ui-agent-connect-card);
|