@choubo/kerthus-web-admin-shell 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +51 -2
  2. package/dist/agent/AgentApprovalCard.vue.d.ts +34 -0
  3. package/dist/agent/AgentAttachmentList.vue.d.ts +42 -0
  4. package/dist/agent/AgentComposer.vue.d.ts +120 -0
  5. package/dist/agent/AgentModelSelect.vue.d.ts +53 -0
  6. package/dist/agent/types.d.ts +21 -0
  7. package/dist/application/AdminAppSwitcher.vue.d.ts +69 -0
  8. package/dist/application/AdminFullscreenButton.vue.d.ts +34 -0
  9. package/dist/application/AdminNotificationCenter.vue.d.ts +63 -0
  10. package/dist/application/AdminUserMenu.vue.d.ts +33 -0
  11. package/dist/application/AppDarkModeToggle.vue.d.ts +35 -0
  12. package/dist/application/AppLocalePicker.vue.d.ts +39 -0
  13. package/dist/application/AppLogo.vue.d.ts +35 -0
  14. package/dist/application/AppProvider.vue.d.ts +45 -0
  15. package/dist/application/AppSearch.vue.d.ts +2 -0
  16. package/dist/application/useAppContext.d.ts +9 -0
  17. package/dist/index.d.ts +50 -0
  18. package/dist/index.js +2632 -0
  19. package/dist/layout/AdminLayout.vue.d.ts +146 -0
  20. package/dist/locales/index.d.ts +62 -0
  21. package/dist/locales/legacy-messages.d.ts +367 -0
  22. package/dist/menu/AdminMenuNode.d.ts +17 -0
  23. package/dist/menu/BasicMenu.vue.d.ts +65 -0
  24. package/dist/menu/SimpleMenu.vue.d.ts +55 -0
  25. package/dist/menu/SimpleMenuTag.vue.d.ts +38 -0
  26. package/dist/menu/paths.d.ts +3 -0
  27. package/dist/menu/runtime.d.ts +8 -0
  28. package/dist/menu/types.d.ts +39 -0
  29. package/dist/pages/AdminAboutView.vue.d.ts +66 -0
  30. package/dist/pages/AdminBreadcrumb.vue.d.ts +23 -0
  31. package/dist/pages/AdminErrorLogView.vue.d.ts +77 -0
  32. package/dist/pages/AdminExceptionView.vue.d.ts +25 -0
  33. package/dist/pages/AdminIframeView.vue.d.ts +51 -0
  34. package/dist/pages/AdminLockView.vue.d.ts +64 -0
  35. package/dist/pages/AdminLoginView.vue.d.ts +77 -0
  36. package/dist/pages/AdminPasswordForm.vue.d.ts +96 -0
  37. package/dist/pages/AdminProfileForm.vue.d.ts +94 -0
  38. package/dist/pages/AdminProfileTabs.vue.d.ts +55 -0
  39. package/dist/pages/AdminSecuritySettings.vue.d.ts +41 -0
  40. package/dist/settings/AdminSettingsDrawer.vue.d.ts +56 -0
  41. package/dist/settings/SettingsPanel.vue.d.ts +21 -0
  42. package/dist/settings/types.d.ts +38 -0
  43. package/dist/style.css +1 -0
  44. package/dist/tabs/AdminTabs.vue.d.ts +47 -0
  45. package/dist/tabs/actions.d.ts +4 -0
  46. package/dist/tabs/types.d.ts +16 -0
  47. package/package.json +37 -4
@@ -0,0 +1,94 @@
1
+ export interface ProfileFormValue {
2
+ name: string;
3
+ email: string;
4
+ currentPassword?: string;
5
+ }
6
+ declare function __VLS_template(): {
7
+ avatar?(_: {}): any;
8
+ };
9
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
10
+ name: string;
11
+ email: string;
12
+ phone?: string;
13
+ requireCurrentPassword?: boolean;
14
+ saving?: boolean;
15
+ error?: string;
16
+ labels?: {
17
+ name: string;
18
+ email: string;
19
+ phone: string;
20
+ currentPassword: string;
21
+ save: string;
22
+ saving: string;
23
+ };
24
+ }>, {
25
+ labels: () => {
26
+ name: string;
27
+ email: string;
28
+ phone: string;
29
+ currentPassword: string;
30
+ save: string;
31
+ saving: string;
32
+ };
33
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
34
+ submit: (value: ProfileFormValue) => void;
35
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
36
+ name: string;
37
+ email: string;
38
+ phone?: string;
39
+ requireCurrentPassword?: boolean;
40
+ saving?: boolean;
41
+ error?: string;
42
+ labels?: {
43
+ name: string;
44
+ email: string;
45
+ phone: string;
46
+ currentPassword: string;
47
+ save: string;
48
+ saving: string;
49
+ };
50
+ }>, {
51
+ labels: () => {
52
+ name: string;
53
+ email: string;
54
+ phone: string;
55
+ currentPassword: string;
56
+ save: string;
57
+ saving: string;
58
+ };
59
+ }>>> & Readonly<{
60
+ onSubmit?: ((value: ProfileFormValue) => any) | undefined;
61
+ }>, {
62
+ labels: {
63
+ name: string;
64
+ email: string;
65
+ phone: string;
66
+ currentPassword: string;
67
+ save: string;
68
+ saving: string;
69
+ };
70
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
71
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
72
+ export default _default;
73
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
74
+ type __VLS_TypePropsToRuntimeProps<T> = {
75
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
76
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
77
+ } : {
78
+ type: import('vue').PropType<T[K]>;
79
+ required: true;
80
+ };
81
+ };
82
+ type __VLS_WithDefaults<P, D> = {
83
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
84
+ default: D[K];
85
+ }> : P[K];
86
+ };
87
+ type __VLS_Prettify<T> = {
88
+ [K in keyof T]: T[K];
89
+ } & {};
90
+ type __VLS_WithTemplateSlots<T, S> = T & {
91
+ new (): {
92
+ $slots: S;
93
+ };
94
+ };
@@ -0,0 +1,55 @@
1
+ import { Component } from 'vue';
2
+
3
+ export interface ProfileTab {
4
+ key: string;
5
+ label: string;
6
+ component: Component;
7
+ }
8
+ declare function __VLS_template(): {
9
+ default?(_: {}): any;
10
+ };
11
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
12
+ tabs: ProfileTab[];
13
+ activeKey: string;
14
+ label?: string;
15
+ notice?: string;
16
+ }>, {
17
+ label: string;
18
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
19
+ "update:activeKey": (key: string) => void;
20
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
21
+ tabs: ProfileTab[];
22
+ activeKey: string;
23
+ label?: string;
24
+ notice?: string;
25
+ }>, {
26
+ label: string;
27
+ }>>> & Readonly<{
28
+ "onUpdate:activeKey"?: ((key: string) => any) | undefined;
29
+ }>, {
30
+ label: string;
31
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
32
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
33
+ export default _default;
34
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
35
+ type __VLS_TypePropsToRuntimeProps<T> = {
36
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
37
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
38
+ } : {
39
+ type: import('vue').PropType<T[K]>;
40
+ required: true;
41
+ };
42
+ };
43
+ type __VLS_WithDefaults<P, D> = {
44
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
45
+ default: D[K];
46
+ }> : P[K];
47
+ };
48
+ type __VLS_Prettify<T> = {
49
+ [K in keyof T]: T[K];
50
+ } & {};
51
+ type __VLS_WithTemplateSlots<T, S> = T & {
52
+ new (): {
53
+ $slots: S;
54
+ };
55
+ };
@@ -0,0 +1,41 @@
1
+ export interface SecuritySettingItem {
2
+ key: string;
3
+ title: string;
4
+ description: string;
5
+ action?: string;
6
+ }
7
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
8
+ items: SecuritySettingItem[];
9
+ label?: string;
10
+ }>, {
11
+ label: string;
12
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
13
+ action: (key: string) => void;
14
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
15
+ items: SecuritySettingItem[];
16
+ label?: string;
17
+ }>, {
18
+ label: string;
19
+ }>>> & Readonly<{
20
+ onAction?: ((key: string) => any) | undefined;
21
+ }>, {
22
+ label: string;
23
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
24
+ export default _default;
25
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
26
+ type __VLS_TypePropsToRuntimeProps<T> = {
27
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
28
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
29
+ } : {
30
+ type: import('vue').PropType<T[K]>;
31
+ required: true;
32
+ };
33
+ };
34
+ type __VLS_WithDefaults<P, D> = {
35
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
36
+ default: D[K];
37
+ }> : P[K];
38
+ };
39
+ type __VLS_Prettify<T> = {
40
+ [K in keyof T]: T[K];
41
+ } & {};
@@ -0,0 +1,56 @@
1
+ import { SettingSection, SettingValue } from './types';
2
+
3
+ declare function __VLS_template(): {
4
+ footer?(_: {}): any;
5
+ };
6
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
7
+ open: boolean;
8
+ title: string;
9
+ sections: SettingSection[];
10
+ width?: number;
11
+ resetLabel?: string;
12
+ }>, {
13
+ width: number;
14
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
15
+ "update:open": (value: boolean) => void;
16
+ change: (key: string, value: SettingValue) => void;
17
+ reset: () => void;
18
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
19
+ open: boolean;
20
+ title: string;
21
+ sections: SettingSection[];
22
+ width?: number;
23
+ resetLabel?: string;
24
+ }>, {
25
+ width: number;
26
+ }>>> & Readonly<{
27
+ onReset?: (() => any) | undefined;
28
+ onChange?: ((key: string, value: SettingValue) => any) | undefined;
29
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
30
+ }>, {
31
+ width: number;
32
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
33
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
34
+ export default _default;
35
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
36
+ type __VLS_TypePropsToRuntimeProps<T> = {
37
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
38
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
39
+ } : {
40
+ type: import('vue').PropType<T[K]>;
41
+ required: true;
42
+ };
43
+ };
44
+ type __VLS_WithDefaults<P, D> = {
45
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
46
+ default: D[K];
47
+ }> : P[K];
48
+ };
49
+ type __VLS_Prettify<T> = {
50
+ [K in keyof T]: T[K];
51
+ } & {};
52
+ type __VLS_WithTemplateSlots<T, S> = T & {
53
+ new (): {
54
+ $slots: S;
55
+ };
56
+ };
@@ -0,0 +1,21 @@
1
+ import { SettingSection, SettingValue } from './types';
2
+
3
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
+ sections: SettingSection[];
5
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
6
+ change: (key: string, value: SettingValue) => void;
7
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
8
+ sections: SettingSection[];
9
+ }>>> & Readonly<{
10
+ onChange?: ((key: string, value: SettingValue) => any) | undefined;
11
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
12
+ export default _default;
13
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
14
+ type __VLS_TypePropsToRuntimeProps<T> = {
15
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
16
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
17
+ } : {
18
+ type: import('vue').PropType<T[K]>;
19
+ required: true;
20
+ };
21
+ };
@@ -0,0 +1,38 @@
1
+ export interface SettingOption {
2
+ label: string;
3
+ value: string | number;
4
+ icon?: string;
5
+ }
6
+ interface SettingBase {
7
+ key: string;
8
+ label: string;
9
+ disabled?: boolean;
10
+ }
11
+ export type SettingField = (SettingBase & {
12
+ type: 'switch';
13
+ value: boolean;
14
+ }) | (SettingBase & {
15
+ type: 'select';
16
+ value: string | number;
17
+ options: SettingOption[];
18
+ }) | (SettingBase & {
19
+ type: 'number';
20
+ value: number;
21
+ min?: number;
22
+ max?: number;
23
+ step?: number;
24
+ }) | (SettingBase & {
25
+ type: 'color';
26
+ value: string;
27
+ colors: string[];
28
+ }) | (SettingBase & {
29
+ type: 'mode';
30
+ value: string | number;
31
+ options: SettingOption[];
32
+ });
33
+ export interface SettingSection {
34
+ title: string;
35
+ items: SettingField[];
36
+ }
37
+ export type SettingValue = string | number | boolean;
38
+ export {};
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ html.gray-mode{filter:grayscale(100%)}html.color-weak{filter:invert(80%)}html.gray-mode.color-weak{filter:grayscale(100%) invert(80%)}.dsea-basic-menu{width:100%}.dsea-basic-menu .ant-menu-item,.dsea-basic-menu .ant-menu-submenu{transition:none}.dsea-basic-menu .ant-menu-inline.ant-menu-sub{box-shadow:none}.dsea-basic-menu-item-content{display:inline-flex;align-items:center}.dsea-basic-menu-item-content-wrapper__icon{margin-right:8px}.app-top-menu-popup{min-width:150px}.dsea-simple-menu-tag{margin-left:8px;padding:2px 3px;border-radius:2px;color:#fff;font-size:10px;line-height:14px}.dsea-simple-menu-tag--dot{width:6px;height:6px;padding:0;border-radius:50%}.dsea-simple-menu-tag--primary{background:var(--ant-primary-color, #0960bd)}.dsea-simple-menu-tag--error{background:#ff4d4f}.dsea-simple-menu-tag--success{background:#52c41a}.dsea-simple-menu-tag--warn{background:#faad14}.dsea-app-logo[data-v-f9695ead]{display:flex;align-items:center;padding-left:7px;cursor:pointer;transition:all .2s ease}.dsea-app-logo.collapsed-show-title[data-v-f9695ead]{padding-left:20px}.dsea-app-logo.light[data-v-f9695ead]{border-bottom:1px solid var(--ant-border-color-base, #d9d9d9)}.dsea-app-logo.light .dsea-app-logo__title[data-v-f9695ead]{color:var(--ant-primary-color, #0960bd)}.dsea-app-logo.dark .dsea-app-logo__title[data-v-f9695ead]{color:#fff}.dsea-app-logo__title[data-v-f9695ead]{font-size:16px;font-weight:700;line-height:normal;transition:all .5s}.dsea-app-locale-picker{display:inline-flex;align-items:center;gap:4px;cursor:pointer}.app-locale-picker-overlay .ant-dropdown-menu-item{min-width:160px}.dsea-dark-switch[data-v-bc7f2cad]{position:relative;display:flex;width:50px;height:26px;padding:0 6px;margin-left:auto;background:#151515;border:0;border-radius:30px;color:#fff;cursor:pointer;justify-content:space-between;align-items:center}.dsea-dark-switch-inner[data-v-bc7f2cad]{position:absolute;z-index:1;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .5s}.dsea-dark-switch--dark .dsea-dark-switch-inner[data-v-bc7f2cad]{transform:translate(calc(100% + 2px))}.dsea-icon-command[data-v-1787f599]{display:inline-grid;width:36px;height:36px;place-items:center;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}.dsea-icon-command[data-v-1787f599]:hover{background:#eef3f6}.dsea-app-switcher[data-v-29d987c2]{position:relative}.dsea-app-switcher summary[data-v-29d987c2]{display:grid;width:36px;height:36px;place-items:center;border-radius:4px;cursor:pointer;list-style:none}.dsea-app-switcher summary[data-v-29d987c2]::-webkit-details-marker{display:none}.dsea-app-switcher summary[data-v-29d987c2]:hover{background:#eef3f6}.dsea-app-switcher__panel[data-v-29d987c2]{position:absolute;top:calc(100% + 6px);right:0;z-index:60;width:min(320px,90vw);max-height:min(480px,70vh);overflow-y:auto;padding:8px;border:1px solid #d8e0e6;border-radius:4px;background:#fff;box-shadow:0 8px 24px #1f293324}.dsea-app-switcher__panel p[data-v-29d987c2]{margin:8px;color:#52606d}.dsea-app-switcher__panel ul[data-v-29d987c2]{margin:0;padding:0;list-style:none}.dsea-app-switcher__panel button[data-v-29d987c2],.dsea-app-switcher__panel a[data-v-29d987c2]{display:flex;width:100%;min-height:50px;align-items:center;gap:10px;padding:7px;border:0;border-radius:3px;background:transparent;color:#25333f;text-align:left;text-decoration:none;cursor:pointer}.dsea-app-switcher__panel button[data-v-29d987c2]:hover,.dsea-app-switcher__panel a[data-v-29d987c2]:hover{background:#edf3f6}.dsea-app-switcher__panel button[data-v-29d987c2]:disabled{cursor:default;opacity:.65}.dsea-app-switcher__panel img[data-v-29d987c2]{width:30px;height:30px;flex:none;border-radius:4px;object-fit:contain}.dsea-app-switcher__panel span[data-v-29d987c2]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsea-app-switcher__panel small[data-v-29d987c2]{display:block;overflow:hidden;color:#667583;text-overflow:ellipsis}.dsea-app-search-trigger[data-v-2b474f9e]{display:inline-flex;width:32px;height:32px;align-items:center;justify-content:center;background:transparent;border:0;cursor:pointer}.dsea-app-search-backdrop[data-v-2b474f9e]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:800;display:flex;justify-content:center;padding:50px 12px 12px;background:rgb(0 0 0 / 25%)}.dsea-app-search-modal[data-v-2b474f9e]{width:min(632px,100%);height:fit-content;max-height:min(600px,90vh);overflow:hidden;background:#fff;border-radius:8px;box-shadow:0 25px 50px -12px #00000040}.dsea-app-search-input-row[data-v-2b474f9e]{display:flex;height:62px;align-items:center;gap:12px;padding:0 16px;border-bottom:1px solid #e5e7eb}.dsea-app-search-input-row input[data-v-2b474f9e]{width:100%;min-width:0;border:0;outline:0;font-size:16px}.dsea-app-search-close[data-v-2b474f9e]{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border:0;background:transparent;cursor:pointer}.dsea-app-search-results[data-v-2b474f9e]{max-height:472px;margin:0;padding:8px;overflow:auto;list-style:none}.dsea-app-search-results li[data-v-2b474f9e]{display:flex;min-height:44px;align-items:center;gap:10px;padding:8px 12px;border-radius:4px;cursor:pointer}.dsea-app-search-results li span[data-v-2b474f9e]{flex:1}.dsea-app-search-results li.active[data-v-2b474f9e]{color:#fff;background:var(--ant-primary-color, #0960bd)}.dsea-app-search-empty[data-v-2b474f9e]{padding:32px 16px;text-align:center;color:#6b7280}@media (max-width: 640px){.dsea-app-search-backdrop[data-v-2b474f9e]{padding:0}.dsea-app-search-modal[data-v-2b474f9e]{width:100%;height:100%;max-height:none;border-radius:0}.dsea-app-search-results[data-v-2b474f9e]{max-height:calc(100vh - 62px)}}.dsea-user-menu[data-v-d193d9f3]{position:relative}.dsea-user-menu summary[data-v-d193d9f3]{display:flex;min-height:36px;align-items:center;gap:8px;padding:2px 6px;border-radius:4px;cursor:pointer;list-style:none}.dsea-user-menu summary[data-v-d193d9f3]::-webkit-details-marker{display:none}.dsea-user-menu summary[data-v-d193d9f3]:hover{background:#eef3f6}.dsea-user-menu img[data-v-d193d9f3],.dsea-user-menu__initial[data-v-d193d9f3]{display:grid;width:28px;height:28px;flex:none;place-items:center;border-radius:50%;background:#2a756e;color:#fff;object-fit:cover;font-size:13px;font-weight:700}.dsea-user-menu__name[data-v-d193d9f3]{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsea-user-menu ul[data-v-d193d9f3]{position:absolute;top:calc(100% + 4px);right:0;z-index:60;width:172px;margin:0;padding:4px;border:1px solid #d8e0e6;border-radius:4px;background:#fff;box-shadow:0 8px 24px #1f293324;list-style:none}.dsea-user-menu button[data-v-d193d9f3]{display:flex;width:100%;min-height:36px;align-items:center;gap:9px;padding:6px 8px;border:0;border-radius:3px;background:transparent;color:#25333f;text-align:left;cursor:pointer}.dsea-user-menu button[data-v-d193d9f3]:hover{background:#edf3f6}.dsea-notifications[data-v-c5c5a82f]{position:relative}.dsea-notifications summary[data-v-c5c5a82f]{position:relative;display:grid;width:36px;height:36px;place-items:center;border-radius:4px;cursor:pointer;list-style:none}.dsea-notifications summary[data-v-c5c5a82f]::-webkit-details-marker{display:none}.dsea-notifications summary[data-v-c5c5a82f]:hover{background:#eef3f6}.dsea-notifications__count[data-v-c5c5a82f]{position:absolute;top:-1px;right:-2px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:#c5543e;color:#fff;font-size:10px;line-height:16px;text-align:center}.dsea-notifications__panel[data-v-c5c5a82f]{position:absolute;top:calc(100% + 4px);right:0;z-index:60;width:min(340px,90vw);max-height:430px;overflow:auto;border:1px solid #d8e0e6;border-radius:4px;background:#fff;box-shadow:0 8px 24px #1f293324}.dsea-notifications__panel header[data-v-c5c5a82f]{padding:12px;font-weight:600}.dsea-notifications__tabs[data-v-c5c5a82f]{display:flex;border-bottom:1px solid #dce3e8}.dsea-notifications__tabs button[data-v-c5c5a82f]{min-height:34px;flex:1;border:0;border-bottom:2px solid transparent;background:transparent;color:#576574;cursor:pointer}.dsea-notifications__tabs button[aria-selected=true][data-v-c5c5a82f]{border-bottom-color:var(--ant-primary-color, #0960bd);color:var(--ant-primary-color, #0960bd)}.dsea-notifications ul[data-v-c5c5a82f]{margin:0;padding:0;list-style:none}.dsea-notifications li[data-v-c5c5a82f]{border-bottom:1px solid #edf1f4}.dsea-notifications li.is-read[data-v-c5c5a82f]{opacity:.65}.dsea-notifications li button[data-v-c5c5a82f]{display:grid;width:100%;gap:4px;padding:10px 12px;border:0;background:transparent;color:#25333f;text-align:left;cursor:pointer}.dsea-notifications li button[data-v-c5c5a82f]:hover{background:#f5f8fa}.dsea-notifications li strong[data-v-c5c5a82f]{font-size:13px}.dsea-notifications li span[data-v-c5c5a82f],.dsea-notifications li small[data-v-c5c5a82f]{color:#64727f;font-size:12px}.dsea-notifications__empty[data-v-c5c5a82f]{padding:24px 12px;color:#64727f;text-align:center}.dsea-notifications__mark[data-v-c5c5a82f]{width:100%;min-height:34px;border:0;background:#f5f8fa;color:var(--ant-primary-color, #0960bd);cursor:pointer}.dsea-admin-layout{--dsea-sidebar-width: 232px;--dsea-collapsed-width: 64px;--dsea-header-height: 48px;display:grid;grid-template-columns:var(--dsea-sidebar-width) minmax(0,1fr);min-height:100vh;background:var(--ant-layout-body-background, #f6f8fa);color:var(--ant-text-color, #1f2328)}.dsea-admin-layout--collapsed{grid-template-columns:var(--dsea-collapsed-width) minmax(0,1fr)}.dsea-admin-layout--no-sidebar{grid-template-columns:minmax(0,1fr)}.dsea-admin-layout__sidebar{position:sticky;top:0;display:flex;height:100vh;min-width:0;flex-direction:column;overflow:hidden;background:#17212b;color:#fff}.dsea-admin-layout__resize{position:absolute;top:0;right:0;z-index:5;width:5px;height:100%;cursor:col-resize}.dsea-admin-layout__resize:hover,.dsea-admin-layout__resize:focus-visible{background:var(--ant-primary-color, #338eaf);outline:0}.dsea-admin-layout__brand{display:flex;min-height:var(--dsea-header-height);align-items:center;overflow:hidden}.dsea-admin-layout__navigation{min-height:0;flex:1;overflow:auto}.dsea-admin-layout__sidebar-footer{flex:none}.dsea-admin-layout__main{display:flex;min-width:0;min-height:100vh;flex-direction:column}.dsea-admin-layout__header{position:sticky;top:0;z-index:20;display:flex;min-height:var(--dsea-header-height);align-items:center;gap:12px;padding:0 16px;border-bottom:1px solid #dce2e8;background:#fff}.dsea-admin-layout__toggle{display:inline-flex;width:32px;height:32px;flex:none;align-items:center;justify-content:center;border:0;background:transparent;color:inherit;cursor:pointer}.dsea-admin-layout__header-actions{display:flex;margin-left:auto;align-items:center;gap:8px}.dsea-admin-layout__top-navigation{min-width:0;flex:1;overflow-x:auto}.dsea-admin-layout__top-navigation .ant-menu-horizontal{border-bottom:0}.dsea-admin-layout__tabs{min-height:0}.dsea-admin-layout__content{min-width:0;flex:1}.dsea-admin-layout__footer{flex:none}.dsea-admin-layout__scrim{display:none}.dsea-admin-layout--mobile{display:block}.dsea-admin-layout--mobile .dsea-admin-layout__sidebar{position:fixed;z-index:42;width:min(var(--dsea-sidebar-width),86vw);transform:translate(-100%);transition:transform .2s ease}.dsea-admin-layout--mobile .dsea-admin-layout__sidebar--open{transform:translate(0)}.dsea-admin-layout--mobile .dsea-admin-layout__scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:41;display:block;width:100%;border:0;background:rgb(0 0 0 / 42%)}.dsea-breadcrumb ol[data-v-49bfd66c]{display:flex;min-width:0;align-items:center;gap:8px;margin:0;padding:0;list-style:none}.dsea-breadcrumb li[data-v-49bfd66c]{display:flex;min-width:0;align-items:center;gap:8px;white-space:nowrap}.dsea-breadcrumb li span[data-v-49bfd66c]:last-child,.dsea-breadcrumb button[data-v-49bfd66c]{overflow:hidden;text-overflow:ellipsis}.dsea-breadcrumb button[data-v-49bfd66c]{padding:0;border:0;background:none;color:#576574;cursor:pointer}.dsea-breadcrumb button[data-v-49bfd66c]:hover{color:var(--ant-primary-color, #0960bd)}.dsea-breadcrumb__separator[data-v-49bfd66c]{color:#a1aab4}.dsea-iframe-view[data-v-b964cc57]{width:100%;height:100%;min-height:420px}.dsea-iframe-view iframe[data-v-b964cc57]{display:block;width:100%;height:100%;min-height:420px;border:0;background:#fff}.dsea-login-view[data-v-65bdd32a]{display:grid;min-height:100vh;place-items:center;padding:24px;background:#f4f7f9;color:#1f2933}.dsea-login-view__form[data-v-65bdd32a]{display:grid;width:min(100%,380px);gap:10px;padding:30px;border:1px solid #dce3e8;border-radius:8px;background:#fff;box-shadow:0 8px 28px #1f293314}.dsea-login-view__identity[data-v-65bdd32a]:empty{display:none}.dsea-login-view h1[data-v-65bdd32a]{margin:0 0 4px;font-size:22px;line-height:1.3}.dsea-login-view__subtitle[data-v-65bdd32a]{margin:0 0 10px;color:#5d6b78}.dsea-login-view label[data-v-65bdd32a]{margin-top:7px;font-size:13px;font-weight:600}.dsea-login-view input[data-v-65bdd32a]{width:100%;min-height:40px;padding:8px 10px;border:1px solid #c8d3db;border-radius:4px;background:#fff;color:inherit}.dsea-login-view input[data-v-65bdd32a]:focus{outline:2px solid var(--ant-primary-color, #0960bd);outline-offset:1px}.dsea-login-view button[data-v-65bdd32a]{min-height:40px;margin-top:10px;border:0;border-radius:4px;background:var(--ant-primary-color, #0960bd);color:#fff;font-weight:600;cursor:pointer}.dsea-login-view button[data-v-65bdd32a]:disabled{opacity:.6;cursor:wait}.dsea-login-view__error[data-v-65bdd32a]{margin:0;color:#b42318;font-size:13px}.dsea-login-view__footer[data-v-65bdd32a]{margin-top:8px}@media (max-width: 480px){.dsea-login-view[data-v-65bdd32a]{align-items:start;padding:10vh 16px 24px}.dsea-login-view__form[data-v-65bdd32a]{padding:24px}}.dsea-lock-view[data-v-e70aeaca]{display:grid;min-height:100vh;place-items:center;padding:24px;background:#17212b;color:#f6f8fa}.dsea-lock-view__form[data-v-e70aeaca]{display:grid;width:min(100%,340px);gap:12px;text-align:center}.dsea-lock-view h1[data-v-e70aeaca]{margin:0;font-size:22px}.dsea-lock-view p[data-v-e70aeaca]{margin:0;color:#b8c4cc}.dsea-lock-view label[data-v-e70aeaca]{margin-top:16px;text-align:left;font-size:13px}.dsea-lock-view input[data-v-e70aeaca]{width:100%;min-height:42px;padding:8px 12px;border:1px solid #718493;border-radius:4px;background:#fff;color:#1f2933}.dsea-lock-view button[data-v-e70aeaca]{min-height:42px;border:0;border-radius:4px;background:#299f82;color:#fff;font-weight:600;cursor:pointer}.dsea-lock-view button[data-v-e70aeaca]:disabled{opacity:.6;cursor:wait}.dsea-lock-view .dsea-lock-view__switch[data-v-e70aeaca]{background:transparent;color:#d6e0e6}.dsea-lock-view .dsea-lock-view__error[data-v-e70aeaca]{color:#ffb9b3}.dsea-exception-view[data-v-b9e53f59]{display:grid;min-height:65vh;place-items:center;padding:32px 20px;color:#1f2933;text-align:center}.dsea-exception-view__content[data-v-b9e53f59]{max-width:500px}.dsea-exception-view__status[data-v-b9e53f59]{margin:0 0 12px;color:#c5543e;font-size:64px;font-weight:700;line-height:1}.dsea-exception-view h1[data-v-b9e53f59]{margin:0 0 12px;font-size:24px}.dsea-exception-view__description[data-v-b9e53f59]{margin:0 0 24px;color:#62717e}.dsea-exception-view button[data-v-b9e53f59]{min-height:38px;padding:0 18px;border:0;border-radius:4px;background:var(--ant-primary-color, #0960bd);color:#fff;cursor:pointer}.dsea-profile-tabs[data-v-55c2076e]{padding:16px}.dsea-profile-tabs__notice[data-v-55c2076e]{margin:0 0 16px;padding:10px 12px;border-left:3px solid #338eaf;background:#eaf5f9;color:#254b5b}.dsea-profile-tabs__body[data-v-55c2076e]{display:grid;grid-template-columns:160px minmax(0,1fr);gap:24px}.dsea-profile-tabs nav[data-v-55c2076e]{display:flex;flex-direction:column;gap:2px}.dsea-profile-tabs nav button[data-v-55c2076e]{min-height:38px;padding:7px 12px;border:0;border-radius:4px;background:transparent;color:#4f5f6b;text-align:left;cursor:pointer}.dsea-profile-tabs nav button[aria-current=page][data-v-55c2076e]{background:#e9f2f7;color:var(--ant-primary-color, #0960bd);font-weight:600}.dsea-profile-tabs section[data-v-55c2076e]{min-width:0}@media (max-width: 640px){.dsea-profile-tabs__body[data-v-55c2076e]{grid-template-columns:1fr;gap:16px}.dsea-profile-tabs nav[data-v-55c2076e]{flex-direction:row;overflow-x:auto}.dsea-profile-tabs nav button[data-v-55c2076e]{flex:none}}.dsea-profile-form[data-v-4dc61808]{display:grid;max-width:520px;gap:16px}.dsea-profile-form label[data-v-4dc61808]{display:grid;gap:5px;color:#37434f;font-size:13px}.dsea-profile-form input[data-v-4dc61808]{min-height:36px;padding:6px 10px;border:1px solid #c9d4dd;border-radius:4px;background:#fff;color:#1f2328;font:inherit}.dsea-profile-form input[data-v-4dc61808]:disabled{background:#f3f5f7;color:#667583}.dsea-profile-form button[data-v-4dc61808]{justify-self:start;min-height:36px;padding:6px 14px;border:0;border-radius:4px;background:#216e7d;color:#fff;cursor:pointer}.dsea-profile-form button[data-v-4dc61808]:disabled{opacity:.6;cursor:wait}.dsea-profile-form p[data-v-4dc61808]{margin:0;color:#b42318}.dsea-password-form[data-v-3eb63418]{display:grid;max-width:520px;gap:16px}.dsea-password-form label[data-v-3eb63418]{display:grid;gap:5px;color:#37434f;font-size:13px}.dsea-password-form input[data-v-3eb63418]{min-height:36px;padding:6px 10px;border:1px solid #c9d4dd;border-radius:4px;background:#fff;color:#1f2328;font:inherit}.dsea-password-form button[data-v-3eb63418]{justify-self:start;min-height:36px;padding:6px 14px;border:0;border-radius:4px;background:#216e7d;color:#fff;cursor:pointer}.dsea-password-form button[data-v-3eb63418]:disabled{opacity:.6;cursor:wait}.dsea-password-form p[data-v-3eb63418]{margin:0;color:#b42318}.dsea-security-settings__row[data-v-9de763c2]{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;padding:12px 0;border-bottom:1px solid #e3e8ec}.dsea-security-settings strong[data-v-9de763c2]{font-size:14px}.dsea-security-settings p[data-v-9de763c2]{margin:4px 0 0;color:#667583;font-size:13px}.dsea-security-settings button[data-v-9de763c2]{flex:none;border:0;background:transparent;color:#216e7d;cursor:pointer}.dsea-error-log[data-v-c1b52346]{padding:16px;color:#25333f}.dsea-error-log>header[data-v-c1b52346]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.dsea-error-log h1[data-v-c1b52346]{margin:0;font-size:18px}.dsea-error-log>header button[data-v-c1b52346]{min-height:34px;padding:0 12px;border:1px solid #c8d3db;border-radius:4px;background:#fff;cursor:pointer}.dsea-error-log button[data-v-c1b52346]:disabled{opacity:.5;cursor:default}.dsea-error-log__table-wrap[data-v-c1b52346]{overflow-x:auto}.dsea-error-log table[data-v-c1b52346]{width:100%;border-collapse:collapse;text-align:left;font-size:13px}.dsea-error-log th[data-v-c1b52346],.dsea-error-log td[data-v-c1b52346]{padding:10px 12px;border-bottom:1px solid #e5eaee}.dsea-error-log th[data-v-c1b52346]{background:#f4f7f9;color:#5d6b78;font-weight:600}.dsea-error-log td[data-v-c1b52346]:first-child{white-space:nowrap}.dsea-error-log td[data-v-c1b52346]:nth-child(2){max-width:440px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsea-error-log td button[data-v-c1b52346]{border:0;background:none;color:var(--ant-primary-color, #0960bd);cursor:pointer}.dsea-error-log__empty[data-v-c1b52346]{padding:28px;color:#64727f;text-align:center}.dsea-error-log__backdrop[data-v-c1b52346]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:16px;background:rgb(0 0 0 / 35%)}.dsea-error-log__dialog[data-v-c1b52346]{width:min(680px,100%);max-height:80vh;overflow:auto;padding:20px;border-radius:6px;background:#fff}.dsea-error-log__dialog header[data-v-c1b52346]{display:flex;align-items:start;justify-content:space-between;gap:12px}.dsea-error-log__dialog h2[data-v-c1b52346]{margin:0;font-size:17px;overflow-wrap:anywhere}.dsea-error-log__dialog header button[data-v-c1b52346]{border:0;background:none;font-size:24px;cursor:pointer}.dsea-error-log__dialog dl[data-v-c1b52346]{display:grid;grid-template-columns:100px 1fr;gap:6px;font-size:13px}.dsea-error-log__dialog dt[data-v-c1b52346]{color:#64727f}.dsea-error-log__dialog dd[data-v-c1b52346]{margin:0;overflow-wrap:anywhere}.dsea-error-log__dialog pre[data-v-c1b52346]{max-height:45vh;overflow:auto;padding:12px;background:#f4f7f9;white-space:pre-wrap;overflow-wrap:anywhere}.dsea-about-view[data-v-c800d903]{max-width:1100px;padding:24px;color:#25333f}.dsea-about-view header[data-v-c800d903]{margin-bottom:24px}.dsea-about-view h1[data-v-c800d903]{margin:0 0 8px;font-size:22px}.dsea-about-view header p[data-v-c800d903]{margin:0;color:#5d6b78}.dsea-about-view__info[data-v-c800d903],.dsea-about-view__dependencies dl[data-v-c800d903]{display:grid;grid-template-columns:minmax(110px,180px) minmax(0,1fr);gap:0;margin:0;border-top:1px solid #e3e9ed}.dsea-about-view dt[data-v-c800d903],.dsea-about-view dd[data-v-c800d903]{min-width:0;margin:0;padding:10px 8px;border-bottom:1px solid #e3e9ed;overflow-wrap:anywhere}.dsea-about-view dt[data-v-c800d903]{color:#64727f}.dsea-about-view a[data-v-c800d903]{color:var(--ant-primary-color, #0960bd)}.dsea-about-view__dependencies[data-v-c800d903]{margin-top:28px}.dsea-about-view h2[data-v-c800d903]{font-size:16px}@media (max-width: 480px){.dsea-about-view[data-v-c800d903]{padding:16px}.dsea-about-view__info[data-v-c800d903],.dsea-about-view__dependencies dl[data-v-c800d903]{grid-template-columns:1fr}.dsea-about-view dt[data-v-c800d903]{padding-bottom:0;border-bottom:0}.dsea-about-view dd[data-v-c800d903]{padding-top:2px}}.dsea-agent-attachments[data-v-23c5547e]{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.dsea-agent-attachments li[data-v-23c5547e]{display:flex;max-width:100%;min-height:28px;align-items:center;gap:5px;padding:3px 6px;border:1px solid #d8e0e6;border-radius:4px;background:#f7f9fa;font-size:12px}.dsea-agent-attachments__name[data-v-23c5547e]{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsea-agent-attachments small[data-v-23c5547e]{color:#64727f;white-space:nowrap}.dsea-agent-attachments button[data-v-23c5547e]{display:inline-flex;width:20px;height:20px;align-items:center;justify-content:center;padding:0;border:0;background:transparent;cursor:pointer}.dsea-agent-model-select[data-v-bd9414ff]{display:flex;min-width:120px;max-width:260px;align-items:center;gap:6px}.dsea-agent-model-select__label[data-v-bd9414ff]{color:#5d6b78;font-size:12px;white-space:nowrap}.dsea-agent-model-select select[data-v-bd9414ff]{min-width:0;min-height:34px;flex:1;padding:5px 6px;border:1px solid #c8d3db;border-radius:4px;background:#fff;color:#1f2933}.dsea-agent-composer[data-v-f5f922c2]{display:grid;gap:8px;padding:12px;border:1px solid #cdd9e0;border-radius:6px;background:#fff}.dsea-agent-composer[data-v-f5f922c2]:focus-within{border-color:var(--ant-primary-color, #0960bd)}.dsea-agent-composer textarea[data-v-f5f922c2]{width:100%;min-height:56px;max-height:170px;padding:6px 4px;border:0;outline:0;resize:vertical;font:inherit}.dsea-agent-composer__toolbar[data-v-f5f922c2]{display:flex;min-width:0;align-items:center;gap:8px}.dsea-agent-composer__toolbar select[data-v-f5f922c2]{min-width:0;max-width:150px;min-height:34px;padding:5px;border:1px solid #c8d3db;border-radius:4px;background:#fff}.dsea-agent-composer__toolbar[data-v-f5f922c2] .dsea-agent-model-select{margin-left:auto}.dsea-agent-composer__file-input[data-v-f5f922c2]{display:none}.dsea-agent-composer__icon[data-v-f5f922c2],.dsea-agent-composer__send[data-v-f5f922c2]{display:inline-flex;width:34px;height:34px;flex:none;align-items:center;justify-content:center;border:0;border-radius:4px;cursor:pointer}.dsea-agent-composer__icon[data-v-f5f922c2]{background:transparent;color:#4f5f6b}.dsea-agent-composer__send[data-v-f5f922c2]{background:var(--ant-primary-color, #0960bd);color:#fff}.dsea-agent-composer button[data-v-f5f922c2]:disabled{opacity:.5;cursor:default}@media (max-width: 580px){.dsea-agent-composer__toolbar[data-v-f5f922c2]{flex-wrap:wrap}.dsea-agent-composer__toolbar[data-v-f5f922c2] .dsea-agent-model-select{max-width:none;flex:1}}.dsea-agent-approval[data-v-88695aee]{padding:14px;border:1px solid #d5dfe5;border-left:3px solid #c48d33;border-radius:6px;background:#fff;color:#25333f}.dsea-agent-approval--succeeded[data-v-88695aee],.dsea-agent-approval--completed[data-v-88695aee]{border-left-color:#299f82}.dsea-agent-approval--failed[data-v-88695aee],.dsea-agent-approval--rejected[data-v-88695aee]{border-left-color:#c5543e}.dsea-agent-approval header[data-v-88695aee]{display:flex;align-items:start;justify-content:space-between;gap:12px}.dsea-agent-approval h2[data-v-88695aee]{margin:0;font-size:15px}.dsea-agent-approval p[data-v-88695aee]{margin:6px 0 0;font-size:13px}.dsea-agent-approval__status[data-v-88695aee]{padding:3px 6px;border-radius:3px;background:#fff3d9;color:#705222;font-size:12px;white-space:nowrap}.dsea-agent-approval__tool[data-v-88695aee],.dsea-agent-approval__meta[data-v-88695aee]{color:#5d6b78}.dsea-agent-approval details[data-v-88695aee]{margin-top:12px;font-size:13px}.dsea-agent-approval summary[data-v-88695aee]{cursor:pointer}.dsea-agent-approval pre[data-v-88695aee]{max-height:180px;overflow:auto;padding:8px;background:#f4f7f9;white-space:pre-wrap;overflow-wrap:anywhere}.dsea-agent-approval__reason[data-v-88695aee]{color:#a4372c}.dsea-agent-approval footer[data-v-88695aee]{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}.dsea-agent-approval button[data-v-88695aee]{min-height:32px;padding:0 12px;border:1px solid #c6d1d9;border-radius:4px;background:#fff;cursor:pointer}.dsea-agent-approval button.dsea-agent-approval__approve[data-v-88695aee]{border-color:var(--ant-primary-color, #0960bd);background:var(--ant-primary-color, #0960bd);color:#fff}.dsea-agent-approval button[data-v-88695aee]:disabled{opacity:.5;cursor:wait}.dsea-admin-tabs{display:flex;min-width:0;height:38px;align-items:stretch;border-bottom:1px solid #dce2e8;background:#fff}.dsea-admin-tabs__list{display:flex;min-width:0;flex:1;gap:3px;overflow-x:auto;padding:4px 8px 0;scrollbar-width:thin}.dsea-admin-tabs__item{display:flex;min-width:72px;max-width:220px;height:34px;flex:none;align-items:center;border:1px solid #dce2e8;border-bottom:0;border-radius:4px 4px 0 0;background:#f6f8fa}.dsea-admin-tabs__item--active{border-color:#b9c8d4;background:#fff;color:var(--ant-primary-color, #0960bd)}.dsea-admin-tabs__select{display:inline-flex;min-width:0;flex:1;align-items:center;gap:6px;overflow:hidden;padding:0 10px;border:0;background:transparent;color:inherit;cursor:pointer;white-space:nowrap}.dsea-admin-tabs__select span{overflow:hidden;text-overflow:ellipsis}.dsea-admin-tabs__close,.dsea-admin-tabs__tools button{display:inline-flex;width:28px;height:28px;flex:none;align-items:center;justify-content:center;border:0;background:transparent;color:inherit;cursor:pointer}.dsea-admin-tabs__close:hover,.dsea-admin-tabs__tools button:hover{background:#e9eef2}.dsea-admin-tabs__tools{display:flex;flex:none;align-items:center;gap:2px;padding:0 6px;border-left:1px solid #e8edf1}.dsea-settings-panel{display:grid;gap:20px;padding:8px 0 20px}.dsea-settings-panel__section h3{margin:0 0 8px;padding-bottom:8px;border-bottom:1px solid #e6eaee;font-size:13px;font-weight:600}.dsea-settings-panel__row{display:flex;min-height:42px;align-items:center;justify-content:space-between;gap:14px}.dsea-settings-panel__row label,.dsea-settings-panel__row>span{min-width:0;font-size:13px}.dsea-settings-panel__row--stacked{display:block;padding:8px 0}.dsea-settings-panel__row--stacked>span{display:block;margin-bottom:10px}.dsea-settings-panel__select,.dsea-settings-panel__number{width:132px;flex:none}.dsea-settings-panel__colors,.dsea-settings-panel__modes{display:flex;flex-wrap:wrap;gap:8px}.dsea-settings-panel__swatch{display:inline-flex;width:28px;height:28px;align-items:center;justify-content:center;border:1px solid #adb7c1;border-radius:4px;color:#fff;cursor:pointer}.dsea-settings-panel__swatch--active{outline:2px solid var(--ant-primary-color, #0960bd);outline-offset:2px}.dsea-settings-panel__modes button{display:inline-flex;min-height:32px;align-items:center;gap:6px;padding:4px 10px;border:1px solid #cbd3da;border-radius:4px;background:#fff;color:inherit;cursor:pointer}.dsea-settings-panel__modes button.active{border-color:var(--ant-primary-color, #0960bd);color:var(--ant-primary-color, #0960bd)}.dsea-settings-panel__modes button:disabled,.dsea-settings-panel__swatch:disabled{opacity:.5;cursor:not-allowed}.dsea-settings-drawer__reset{width:100%;min-height:32px;border:1px solid #cbd3da;border-radius:4px;background:#fff;cursor:pointer}
@@ -0,0 +1,47 @@
1
+ import { AdminTab, AdminTabLabels, TabCloseAction } from './types';
2
+
3
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
4
+ tabs: AdminTab[];
5
+ activeKey: string;
6
+ labels: AdminTabLabels;
7
+ navigateOnSelect?: boolean;
8
+ }>, {
9
+ navigateOnSelect: boolean;
10
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
11
+ select: (key: string) => void;
12
+ close: (key: string) => void;
13
+ refresh: (key: string) => void;
14
+ closeAction: (action: TabCloseAction, activeKey: string) => void;
15
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
16
+ tabs: AdminTab[];
17
+ activeKey: string;
18
+ labels: AdminTabLabels;
19
+ navigateOnSelect?: boolean;
20
+ }>, {
21
+ navigateOnSelect: boolean;
22
+ }>>> & Readonly<{
23
+ onSelect?: ((key: string) => any) | undefined;
24
+ onClose?: ((key: string) => any) | undefined;
25
+ onRefresh?: ((key: string) => any) | undefined;
26
+ onCloseAction?: ((action: TabCloseAction, activeKey: string) => any) | undefined;
27
+ }>, {
28
+ navigateOnSelect: boolean;
29
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
30
+ export default _default;
31
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
32
+ type __VLS_TypePropsToRuntimeProps<T> = {
33
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
34
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
35
+ } : {
36
+ type: import('vue').PropType<T[K]>;
37
+ required: true;
38
+ };
39
+ };
40
+ type __VLS_WithDefaults<P, D> = {
41
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
42
+ default: D[K];
43
+ }> : P[K];
44
+ };
45
+ type __VLS_Prettify<T> = {
46
+ [K in keyof T]: T[K];
47
+ } & {};
@@ -0,0 +1,4 @@
1
+ import { AdminTab, TabCloseAction } from './types';
2
+
3
+ export declare function closeTabs(tabs: readonly AdminTab[], activeKey: string, action: TabCloseAction): AdminTab[];
4
+ export declare function nextActiveTab(tabs: readonly AdminTab[], previousKey: string): string | undefined;
@@ -0,0 +1,16 @@
1
+ export interface AdminTab {
2
+ key: string;
3
+ label: string;
4
+ icon?: string;
5
+ affix?: boolean;
6
+ }
7
+ export type TabCloseAction = 'current' | 'left' | 'right' | 'others' | 'all';
8
+ export interface AdminTabLabels {
9
+ refresh: string;
10
+ actions: string;
11
+ close: string;
12
+ closeLeft: string;
13
+ closeRight: string;
14
+ closeOthers: string;
15
+ closeAll: string;
16
+ }
package/package.json CHANGED
@@ -1,6 +1,39 @@
1
1
  {
2
2
  "name": "@choubo/kerthus-web-admin-shell",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "Shared Vue admin navigation and application shell",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./style.css": "./dist/style.css"
15
+ },
16
+ "files": ["dist", "README.md"],
17
+ "dependencies": {
18
+ "@choubo/kerthus-web-core": "0.3.0",
19
+ "@choubo/kerthus-web-vue-runtime": "0.2.0",
20
+ "@choubo/kerthus-web-vue-ui": "0.1.0"
21
+ },
22
+ "peerDependencies": {
23
+ "ant-design-vue": "^3.2.15",
24
+ "vue": "^3.2.47"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "registry": "https://registry.npmjs.org"
29
+ },
30
+ "scripts": {
31
+ "build": "vite build && node ../../scripts/check-package-exports.mjs .",
32
+ "type:check": "vue-tsc --noEmit",
33
+ "test": "yarn build && node --test test/*.test.mjs"
34
+ },
35
+ "devDependencies": {
36
+ "@vue/server-renderer": "^3.2.47",
37
+ "jsdom": "^16.7.0"
38
+ }
39
+ }