@synopackageland/sdk 0.9.7 → 0.9.9

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 (76) hide show
  1. package/README.md +12 -1
  2. package/dist/i18n/background/de.json +0 -1
  3. package/dist/i18n/background/en.json +0 -1
  4. package/dist/i18n/background/es.json +0 -1
  5. package/dist/i18n/background/fr.json +0 -1
  6. package/dist/i18n/background/it.json +0 -1
  7. package/dist/i18n/background/ja.json +2 -3
  8. package/dist/i18n/background/ko.json +0 -1
  9. package/dist/i18n/background/zh-CN.json +0 -1
  10. package/dist/i18n/background/zh-TW.json +0 -1
  11. package/dist/i18n/delegate/de.json +10 -2
  12. package/dist/i18n/delegate/en.json +10 -2
  13. package/dist/i18n/delegate/es.json +10 -2
  14. package/dist/i18n/delegate/fr.json +10 -2
  15. package/dist/i18n/delegate/it.json +10 -2
  16. package/dist/i18n/delegate/ja.json +10 -2
  17. package/dist/i18n/delegate/ko.json +10 -2
  18. package/dist/i18n/delegate/zh-CN.json +10 -2
  19. package/dist/i18n/delegate/zh-TW.json +10 -2
  20. package/dist/i18n/files/de.json +1 -0
  21. package/dist/i18n/files/en.json +1 -0
  22. package/dist/i18n/files/es.json +1 -0
  23. package/dist/i18n/files/fr.json +1 -0
  24. package/dist/i18n/files/it.json +1 -0
  25. package/dist/i18n/files/ja.json +1 -0
  26. package/dist/i18n/files/ko.json +1 -0
  27. package/dist/i18n/files/zh-CN.json +1 -0
  28. package/dist/i18n/files/zh-TW.json +1 -0
  29. package/dist/i18n/identity/de.json +2 -0
  30. package/dist/i18n/identity/en.json +2 -0
  31. package/dist/i18n/identity/es.json +2 -0
  32. package/dist/i18n/identity/fr.json +2 -0
  33. package/dist/i18n/identity/it.json +2 -0
  34. package/dist/i18n/identity/ja.json +2 -0
  35. package/dist/i18n/identity/ko.json +2 -0
  36. package/dist/i18n/identity/zh-CN.json +2 -0
  37. package/dist/i18n/identity/zh-TW.json +2 -0
  38. package/dist/i18n/portal/de.json +21 -0
  39. package/dist/i18n/portal/en.json +21 -0
  40. package/dist/i18n/portal/es.json +21 -0
  41. package/dist/i18n/portal/fr.json +21 -0
  42. package/dist/i18n/portal/it.json +21 -0
  43. package/dist/i18n/portal/ja.json +21 -0
  44. package/dist/i18n/portal/ko.json +21 -0
  45. package/dist/i18n/portal/zh-CN.json +21 -0
  46. package/dist/i18n/portal/zh-TW.json +21 -0
  47. package/dist/i18n/save/de.json +12 -2
  48. package/dist/i18n/save/en.json +12 -2
  49. package/dist/i18n/save/es.json +12 -2
  50. package/dist/i18n/save/fr.json +12 -2
  51. package/dist/i18n/save/it.json +12 -2
  52. package/dist/i18n/save/ja.json +12 -2
  53. package/dist/i18n/save/ko.json +12 -2
  54. package/dist/i18n/save/zh-CN.json +12 -2
  55. package/dist/i18n/save/zh-TW.json +12 -2
  56. package/dist/index.js +2622 -2162
  57. package/dist/src/background/BackgroundPanel.vue.d.ts +4 -1
  58. package/dist/src/background/i18n.d.ts +0 -1
  59. package/dist/src/background/picker-provider.d.ts +1 -1
  60. package/dist/src/context.d.ts +4 -1
  61. package/dist/src/delegate/BackgroundSavePanel.vue.d.ts +6 -1
  62. package/dist/src/delegate/DelegatePanel.vue.d.ts +3 -1
  63. package/dist/src/delegate/ExecutorSettings.vue.d.ts +4 -1
  64. package/dist/src/delegate/copy.d.ts +18 -2
  65. package/dist/src/delegate/save-copy.d.ts +34 -4
  66. package/dist/src/i18n.d.ts +2 -0
  67. package/dist/src/identity/i18n.d.ts +2 -0
  68. package/dist/src/index.d.ts +4 -1
  69. package/dist/src/nas/NasPicker.vue.d.ts +3 -0
  70. package/dist/src/nas/locale.d.ts +1 -0
  71. package/dist/src/nas/provider.d.ts +2 -2
  72. package/dist/src/portal/access.d.ts +16 -0
  73. package/dist/src/portal/i18n.d.ts +3 -0
  74. package/dist/style.css +1 -1
  75. package/dist/vue.js +1828 -1574
  76. package/package.json +3 -3
@@ -2,6 +2,9 @@ import type { Context } from '../context';
2
2
  type __VLS_Props = {
3
3
  ctx: Pick<Context, 'call' | 'locale'>;
4
4
  };
5
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare function refresh(): Promise<void>;
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
7
+ refresh: typeof refresh;
8
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
9
  declare const _default: typeof __VLS_export;
7
10
  export default _default;
@@ -11,7 +11,6 @@ export declare const backgroundCatalogs: Record<import("..").UiLocale, {
11
11
  pickerTitle: string;
12
12
  pickerConsent: string;
13
13
  submit: string;
14
- refresh: string;
15
14
  cancel: string;
16
15
  result: string;
17
16
  download: string;
@@ -1,3 +1,3 @@
1
1
  import type { Context } from '../context';
2
2
  import type { NasProvider } from '../nas/contract';
3
- export declare function createBackgroundPickerProvider(ctx: Pick<Context, 'call'>): NasProvider;
3
+ export declare function createBackgroundPickerProvider(ctx: Pick<Context, 'call' | 'requestTimeout'>): NasProvider;
@@ -73,7 +73,7 @@ export interface PortalAccess {
73
73
  register?(): Promise<PortalStatus>;
74
74
  unregister?(): Promise<PortalStatus>;
75
75
  openControlPanel(): void;
76
- mountPanel(element: HTMLElement): {
76
+ mountPanel?(element: HTMLElement): {
77
77
  refresh(): Promise<void>;
78
78
  dispose(): void;
79
79
  };
@@ -90,7 +90,10 @@ export interface AuthorizationAccess {
90
90
  request(): Promise<AuthorizationStatus>;
91
91
  revoke(): Promise<AuthorizationStatus>;
92
92
  }
93
+ export declare const DEFAULT_REQUEST_TIMEOUT = 20000;
94
+ export declare function clientTimeout(requestTimeout?: number): number;
93
95
  export interface Context {
96
+ requestTimeout?: number;
94
97
  authorization?: AuthorizationAccess;
95
98
  delegate?: import('./delegate/long-running').BackgroundSaveFacade;
96
99
  files?: {
@@ -7,9 +7,14 @@ type __VLS_Props = {
7
7
  picker?: {
8
8
  provider: NasProvider;
9
9
  keys: string[];
10
+ labels?: Record<string, string>;
10
11
  };
12
+ pickerErrorText?: (error: unknown) => string | undefined;
13
+ sampleSave?: boolean;
11
14
  };
12
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
16
+ refresh: () => Promise<void>;
17
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
18
  authorized: (grant: DestinationGrant) => any;
14
19
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
20
  onAuthorized?: ((grant: DestinationGrant) => any) | undefined;
@@ -2,6 +2,8 @@ import type { Context } from '../context';
2
2
  type __VLS_Props = {
3
3
  ctx: Pick<Context, 'call' | 'locale'>;
4
4
  };
5
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
6
+ refresh: () => Promise<void>;
7
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
8
  declare const _default: typeof __VLS_export;
7
9
  export default _default;
@@ -4,7 +4,10 @@ type __VLS_Props = {
4
4
  locale?: string;
5
5
  ctx?: Pick<Context, 'call'>;
6
6
  };
7
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
+ declare function refresh(): Promise<void>;
8
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
9
+ refresh: typeof refresh;
10
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
11
  confirmed: () => any;
9
12
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
13
  onConfirmed?: (() => any) | undefined;
@@ -15,7 +15,6 @@ export declare const delegateCatalogs: Record<import("..").UiLocale, {
15
15
  blocked: string;
16
16
  loading: string;
17
17
  details: string;
18
- refresh: string;
19
18
  revoke: string;
20
19
  cancel: string;
21
20
  noDelegations: string;
@@ -49,6 +48,15 @@ export declare const delegateCatalogs: Record<import("..").UiLocale, {
49
48
  scopeChangeHelp: string;
50
49
  confirmScope: string;
51
50
  waiting_executor: string;
51
+ status: string;
52
+ statusReady: string;
53
+ statusNeeds: string;
54
+ statusScope: string;
55
+ statusBlocked: string;
56
+ statusConfirming: string;
57
+ hintPassword: string;
58
+ hintUnchanged: string;
59
+ retry: string;
52
60
  }>;
53
61
  export declare function delegateCopy(locale?: string): {
54
62
  title: string;
@@ -65,7 +73,6 @@ export declare function delegateCopy(locale?: string): {
65
73
  blocked: string;
66
74
  loading: string;
67
75
  details: string;
68
- refresh: string;
69
76
  revoke: string;
70
77
  cancel: string;
71
78
  noDelegations: string;
@@ -99,5 +106,14 @@ export declare function delegateCopy(locale?: string): {
99
106
  scopeChangeHelp: string;
100
107
  confirmScope: string;
101
108
  waiting_executor: string;
109
+ status: string;
110
+ statusReady: string;
111
+ statusNeeds: string;
112
+ statusScope: string;
113
+ statusBlocked: string;
114
+ statusConfirming: string;
115
+ hintPassword: string;
116
+ hintUnchanged: string;
117
+ retry: string;
102
118
  };
103
119
  export declare function errorCopy(error: unknown, copy: DelegateCopy): string;
@@ -10,7 +10,6 @@ export declare const saveCatalogs: Record<import("..").UiLocale, {
10
10
  choose: string;
11
11
  needs: string;
12
12
  cancel: string;
13
- refresh: string;
14
13
  disable: string;
15
14
  enable: string;
16
15
  disableHelp: string;
@@ -30,8 +29,10 @@ export declare const saveCatalogs: Record<import("..").UiLocale, {
30
29
  loading: string;
31
30
  denied: string;
32
31
  permission: string;
32
+ permissionSelect: string;
33
33
  missing: string;
34
34
  appPrivilege: string;
35
+ appPrivilegeSelect: string;
35
36
  session: string;
36
37
  conflict: string;
37
38
  space: string;
@@ -42,6 +43,15 @@ export declare const saveCatalogs: Record<import("..").UiLocale, {
42
43
  reselect: string;
43
44
  example: string;
44
45
  exampleHelp: string;
46
+ statusEnabled: string;
47
+ statusDisabled: string;
48
+ statusNeedsScope: string;
49
+ status: string;
50
+ file: string;
51
+ size: string;
52
+ location: string;
53
+ openFolder: string;
54
+ retry: string;
45
55
  }>;
46
56
  export declare function saveCopy(locale?: string): {
47
57
  title: string;
@@ -55,7 +65,6 @@ export declare function saveCopy(locale?: string): {
55
65
  choose: string;
56
66
  needs: string;
57
67
  cancel: string;
58
- refresh: string;
59
68
  disable: string;
60
69
  enable: string;
61
70
  disableHelp: string;
@@ -75,8 +84,10 @@ export declare function saveCopy(locale?: string): {
75
84
  loading: string;
76
85
  denied: string;
77
86
  permission: string;
87
+ permissionSelect: string;
78
88
  missing: string;
79
89
  appPrivilege: string;
90
+ appPrivilegeSelect: string;
80
91
  session: string;
81
92
  conflict: string;
82
93
  space: string;
@@ -87,6 +98,15 @@ export declare function saveCopy(locale?: string): {
87
98
  reselect: string;
88
99
  example: string;
89
100
  exampleHelp: string;
101
+ statusEnabled: string;
102
+ statusDisabled: string;
103
+ statusNeedsScope: string;
104
+ status: string;
105
+ file: string;
106
+ size: string;
107
+ location: string;
108
+ openFolder: string;
109
+ retry: string;
90
110
  };
91
111
  export declare function saveError(error: unknown, copy?: {
92
112
  title: string;
@@ -100,7 +120,6 @@ export declare function saveError(error: unknown, copy?: {
100
120
  choose: string;
101
121
  needs: string;
102
122
  cancel: string;
103
- refresh: string;
104
123
  disable: string;
105
124
  enable: string;
106
125
  disableHelp: string;
@@ -120,8 +139,10 @@ export declare function saveError(error: unknown, copy?: {
120
139
  loading: string;
121
140
  denied: string;
122
141
  permission: string;
142
+ permissionSelect: string;
123
143
  missing: string;
124
144
  appPrivilege: string;
145
+ appPrivilegeSelect: string;
125
146
  session: string;
126
147
  conflict: string;
127
148
  space: string;
@@ -132,4 +153,13 @@ export declare function saveError(error: unknown, copy?: {
132
153
  reselect: string;
133
154
  example: string;
134
155
  exampleHelp: string;
135
- }): string;
156
+ statusEnabled: string;
157
+ statusDisabled: string;
158
+ statusNeedsScope: string;
159
+ status: string;
160
+ file: string;
161
+ size: string;
162
+ location: string;
163
+ openFolder: string;
164
+ retry: string;
165
+ }, situation?: 'save' | 'select'): string;
@@ -22,3 +22,5 @@ export type Message = string | {
22
22
  /** Fills {key} placeholders from values; a placeholder without a value stays
23
23
  * visible. Plural forms are chosen by values.count in the given locale. */
24
24
  export declare function format(message: Message, values: Record<string, string | number>, locale?: string): string;
25
+ /** The colon between a label and its value: full-width in Chinese and Japanese. */
26
+ export declare function labelSeparator(locale: string): string;
@@ -20,6 +20,8 @@ export declare const identityCatalogs: Record<import("..").UiLocale, {
20
20
  https_required: string;
21
21
  auth_unavailable: string;
22
22
  session_required: string;
23
+ cross_origin: string;
24
+ origin_required: string;
23
25
  failed: string;
24
26
  };
25
27
  notices: {
@@ -1,4 +1,5 @@
1
1
  export type * from './context';
2
+ export { DEFAULT_REQUEST_TIMEOUT, clientTimeout } from './context';
2
3
  export type * from './delegate/long-running';
3
4
  export type * from './delegate/executor-setup';
4
5
  export type * from './nas/contract';
@@ -12,7 +13,7 @@ export { createBackgroundPickerProvider } from './background/picker-provider';
12
13
  export { scopedPicker } from './delegate/scoped-picker';
13
14
  export { requestKey } from './background/request-key';
14
15
  export { shellPages, activePage, type ShellPage, type ShellFeatureFlags } from './shell/pages';
15
- export { uiLocale, uiLocales, catalogs, mergeCatalogs, format, type Message, type UiLocale } from './i18n';
16
+ export { uiLocale, uiLocales, catalogs, mergeCatalogs, format, labelSeparator, type Message, type UiLocale } from './i18n';
16
17
  export { nasCopy, nasErrorCopy, nasCatalogs, type NasCopy } from './nas/locale';
17
18
  export { shellCopy, shellCatalogs, type ShellCopy } from './shell/i18n';
18
19
  export { identityCopy, identityCatalogs, type IdentityCopy, type IdentityNotice } from './identity/i18n';
@@ -20,5 +21,7 @@ export { backgroundCopy, backgroundErrorCopy, backgroundCatalogs, type Backgroun
20
21
  export { delegateCopy, errorCopy, delegateCatalogs, type DelegateCopy } from './delegate/copy';
21
22
  export { saveCopy, saveError, saveCatalogs } from './delegate/save-copy';
22
23
  export { authorizationCopy, authorizationCatalogs } from './authorization/i18n';
24
+ export { portalMessages, portalCatalogs } from './portal/i18n';
25
+ export { createPortalAccess, type PortalOptions } from './portal/access';
23
26
  export * from './protocol/v1';
24
27
  export { encodeRequest, decodeResponse, type ProtocolAuth, type ProtocolResponse } from './protocol/codec';
@@ -8,15 +8,18 @@ type __VLS_Props = {
8
8
  title?: string;
9
9
  description?: string;
10
10
  destination?: DestinationSelection;
11
+ errorText?: (error: unknown) => string | undefined;
11
12
  };
12
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
14
  selected: (path: string) => any;
14
15
  "update:open": (value: boolean) => any;
15
16
  authorized: (grant: DestinationGrant) => any;
17
+ refused: (error: unknown) => any;
16
18
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
17
19
  onSelected?: ((path: string) => any) | undefined;
18
20
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
19
21
  onAuthorized?: ((grant: DestinationGrant) => any) | undefined;
22
+ onRefused?: ((error: unknown) => any) | undefined;
20
23
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
21
24
  declare const _default: typeof __VLS_export;
22
25
  export default _default;
@@ -26,6 +26,7 @@ export declare const nasCatalogs: Record<import("..").UiLocale, {
26
26
  errorUnavailable: string;
27
27
  errorCanceled: string;
28
28
  errorTimeout: string;
29
+ errorOrigin: string;
29
30
  metadata: string;
30
31
  fileKind: string;
31
32
  directoryKind: string;
@@ -1,3 +1,3 @@
1
- import type { Context } from '../context';
1
+ import { type Context } from '../context';
2
2
  import type { NasProvider } from './contract';
3
- export declare function createNasProvider(ctx: Pick<Context, 'call' | 'files'>): NasProvider;
3
+ export declare function createNasProvider(ctx: Pick<Context, 'call' | 'files' | 'requestTimeout'>): NasProvider;
@@ -0,0 +1,16 @@
1
+ import type { PortalAccess } from '../context';
2
+ export interface PortalOptions {
3
+ appId: string;
4
+ defaultAlias: string;
5
+ locale: string;
6
+ location: {
7
+ protocol: string;
8
+ host: string;
9
+ };
10
+ call(method: 'portal.status' | 'portal.register' | 'portal.unregister', params: Record<string, never>): Promise<unknown>;
11
+ send(api: string, method: string, version: number, params: Record<string, unknown>): Promise<unknown>;
12
+ isAdmin(): boolean;
13
+ launch(app: string, params: Record<string, string>): void;
14
+ entry?: boolean;
15
+ }
16
+ export declare function createPortalAccess(options: PortalOptions): PortalAccess;
@@ -0,0 +1,3 @@
1
+ export declare const portalCatalogs: Record<string, Record<string, string>>;
2
+ /** PortalAccess.messages: the panel text in a DSM or BCP-47 language, keyed without the portal. prefix. */
3
+ export declare function portalMessages(locale: string): Record<string, string>;
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .app-shell[data-v-05f63ca5]{height:100%;min-width:0;grid-template-rows:minmax(0,1fr)}.app-shell[data-v-05f63ca5]>div{min-height:0}.app-shell[data-v-05f63ca5] main{display:flex;flex-direction:column;overflow:hidden}.app-page[data-v-05f63ca5]{flex:1 1 auto;min-height:0;overflow-y:auto}.app-page-content[data-v-05f63ca5]{padding-bottom:var(--ui-space-6, 24px)}.file-browser[data-v-c689761c]{min-width:0;color:var(--ui-text)}.file-toolbar[data-v-c689761c]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px);margin-block:var(--ui-space-3, 12px)}.file-location[data-v-c689761c]{flex-wrap:nowrap;align-items:center;gap:var(--ui-space-1, 4px)}.file-path[data-v-c689761c]{flex:1;min-width:0;margin-inline-start:var(--ui-space-2, 8px)}.file-columns[data-v-c689761c]{display:grid;grid-template-columns:minmax(140px,1fr) minmax(0,3fr);gap:var(--ui-space-3, 12px);height:clamp(240px,60vh,400px)}.file-tree[data-v-c689761c]{min-width:0;overflow:auto;border-inline-end:1px solid var(--ui-border)}.file-content[data-v-c689761c]{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:auto}.file-empty[data-v-c689761c]{display:flex;flex-direction:column;align-items:center;gap:var(--ui-space-2, 8px);padding-block:var(--ui-space-6, 24px);color:var(--ui-text-muted)}.file-name[data-v-c689761c]{display:inline-flex;align-items:center;gap:var(--ui-space-2, 8px);overflow-wrap:anywhere}.file-bytes[data-v-c689761c]{font-variant-numeric:tabular-nums}.file-selection[data-v-c689761c]{overflow-wrap:anywhere}@media(max-width:600px){.file-columns[data-v-c689761c]{grid-template-columns:minmax(0,1fr);height:auto}.file-content[data-v-c689761c] th:nth-child(2),.file-content[data-v-c689761c] td:nth-child(2),.file-content[data-v-c689761c] th:nth-child(3),.file-content[data-v-c689761c] td:nth-child(3){display:none}.file-tree[data-v-c689761c]{height:clamp(96px,25vh,180px);border-inline-end:0;border-bottom:1px solid var(--ui-border)}.file-content[data-v-c689761c]{height:clamp(200px,45vh,360px)}}.nas-picker-content[data-v-535a0e54]{max-height:65vh;overflow:auto}.save-message[data-v-535a0e54]{--ui-text-secondary:var(--ui-text)}.save-consent[data-v-535a0e54]{color:var(--ui-text);margin-block:0 var(--ui-space-4,16px)}.files-actions[data-v-699931fa]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.files-path[data-v-699931fa]{overflow-wrap:anywhere}.identity-login[data-v-f7afcf5e]{max-width:36rem;margin-inline:auto;padding:var(--ui-space-4, 16px);overflow:auto;max-height:100%;color:var(--ui-text);font-family:var(--ui-font-sans);font-size:13px;line-height:1.5}.identity-login p[data-v-f7afcf5e]{margin-block:var(--ui-space-4, 16px);overflow-wrap:anywhere}.integration-jobs[data-v-c2688562]{overflow-wrap:anywhere;min-width:0}.bg-schedules[data-v-c2688562]{margin-block-start:var(--ui-space-6,24px);min-width:0;overflow-wrap:anywhere}.bg-schedules .integration-jobs[data-v-c2688562]{display:grid;gap:var(--ui-space-4,16px);padding-inline-start:var(--ui-space-5,20px)}.bg-schedules .integration-jobs li[data-v-c2688562]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--ui-space-2,8px);min-width:0}.bg-schedules p[data-v-c2688562],.bg-schedules li>span[data-v-c2688562]{min-width:0;max-width:100%}.bg-schedules h3[data-v-c2688562]{font-size:15px;font-weight:600}.bg-schedule-form[data-v-c2688562]{margin-block:var(--ui-space-4,16px)}.delegate-panel[data-v-d79ee942]{min-width:0;overflow-wrap:anywhere}h3[data-v-d79ee942]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.section-heading[data-v-d79ee942]{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px)}.records[data-v-d79ee942]{list-style:none;padding:0;margin:0}.records li[data-v-d79ee942]{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border)}.records li>div[data-v-d79ee942],.records li>span[data-v-d79ee942],.destination[data-v-d79ee942]{min-width:0;max-width:100%;overflow-wrap:anywhere}.records p[data-v-d79ee942]{margin:var(--ui-space-2,8px) 0 0}.background-save-panel[data-v-c38db985]{min-width:0;overflow-wrap:anywhere}.save-message[data-v-c38db985]{--ui-text-secondary:var(--ui-text)}h3[data-v-c38db985]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.save-actions[data-v-c38db985],.save-records li[data-v-c38db985]{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px)}.save-actions[data-v-c38db985]{justify-content:flex-start}.save-records[data-v-c38db985]{list-style:none;margin:0;padding:0}.save-records li[data-v-c38db985]{padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border)}.save-records li>div[data-v-c38db985]{min-width:0;max-width:100%}.save-records p[data-v-c38db985]{margin:var(--ui-space-2,8px) 0}.authorization-view[data-v-e16b5f7d]{display:flex;flex-direction:column;gap:12px}.authorization-body[data-v-e16b5f7d]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text);text-wrap:pretty}.authorization-status[data-v-e16b5f7d],.authorization-failed[data-v-e16b5f7d]{color:var(--ui-text)}.authorization-content[data-v-e16b5f7d]{display:flex;flex-direction:column;height:100%;min-height:0}.authorization-content[data-v-e16b5f7d] .app-shell{flex:1;min-height:0;height:auto}.authorization-setting[data-v-f031e7c7]{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.authorization-revoke-body[data-v-f031e7c7]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text)}.authorization-state[data-v-f031e7c7]{display:inline-flex;align-items:center;gap:6px;color:var(--ui-text)}
1
+ .app-shell[data-v-05f63ca5]{height:100%;min-width:0;grid-template-rows:minmax(0,1fr)}.app-shell[data-v-05f63ca5]>div{min-height:0}.app-shell[data-v-05f63ca5] main{display:flex;flex-direction:column;overflow:hidden}.app-page[data-v-05f63ca5]{flex:1 1 auto;min-height:0;overflow-y:auto}.app-page-content[data-v-05f63ca5]{padding-bottom:var(--ui-space-6, 24px)}.file-browser[data-v-c689761c]{min-width:0;color:var(--ui-text)}.file-toolbar[data-v-c689761c]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px);margin-block:var(--ui-space-3, 12px)}.file-location[data-v-c689761c]{flex-wrap:nowrap;align-items:center;gap:var(--ui-space-1, 4px)}.file-path[data-v-c689761c]{flex:1;min-width:0;margin-inline-start:var(--ui-space-2, 8px)}.file-columns[data-v-c689761c]{display:grid;grid-template-columns:minmax(140px,1fr) minmax(0,3fr);gap:var(--ui-space-3, 12px);height:clamp(240px,60vh,400px)}.file-tree[data-v-c689761c]{min-width:0;overflow:auto;border-inline-end:1px solid var(--ui-border)}.file-content[data-v-c689761c]{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:auto}.file-empty[data-v-c689761c]{display:flex;flex-direction:column;align-items:center;gap:var(--ui-space-2, 8px);padding-block:var(--ui-space-6, 24px);color:var(--ui-text-muted)}.file-name[data-v-c689761c]{display:inline-flex;align-items:center;gap:var(--ui-space-2, 8px);overflow-wrap:anywhere}.file-bytes[data-v-c689761c]{font-variant-numeric:tabular-nums}.file-selection[data-v-c689761c]{overflow-wrap:anywhere}@media(max-width:600px){.file-columns[data-v-c689761c]{grid-template-columns:minmax(0,1fr);height:auto}.file-content[data-v-c689761c] th:nth-child(2),.file-content[data-v-c689761c] td:nth-child(2),.file-content[data-v-c689761c] th:nth-child(3),.file-content[data-v-c689761c] td:nth-child(3){display:none}.file-tree[data-v-c689761c]{height:clamp(96px,25vh,180px);border-inline-end:0;border-bottom:1px solid var(--ui-border)}.file-content[data-v-c689761c]{height:clamp(200px,45vh,360px)}}.nas-picker-content[data-v-6ed8b8f6]{max-height:65vh;overflow:auto}.save-message[data-v-6ed8b8f6]{--ui-text-secondary:var(--ui-text)}.save-consent[data-v-6ed8b8f6]{color:var(--ui-text);margin-block:0 var(--ui-space-4,16px)}.files-actions[data-v-15f9eb8e]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.files-path[data-v-15f9eb8e]{display:flex;min-width:0}p[data-v-d803ac7c]{margin:0 0 var(--ui-space-3,12px);max-width:72ch}.portal-form[data-v-d803ac7c]{max-width:28rem}.identity-login[data-v-1c0358cd]{max-width:36rem;margin-inline:auto;padding:var(--ui-space-4, 16px);overflow:auto;max-height:100%;color:var(--ui-text);font-family:var(--ui-font-sans);font-size:13px;line-height:1.5}.identity-login p[data-v-1c0358cd]{margin-block:var(--ui-space-4, 16px);overflow-wrap:anywhere}.bg-cards[data-v-fa2b6101]{display:grid;gap:var(--ui-space-3,12px);min-width:0;overflow-wrap:anywhere}.bg-card-body[data-v-fa2b6101]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--ui-space-2,8px);min-width:0}.bg-card-body>span[data-v-fa2b6101]{min-width:0;max-width:100%}.integration-actions[data-v-fa2b6101]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.bg-schedules[data-v-fa2b6101]{margin-block-start:var(--ui-space-6,24px);min-width:0;overflow-wrap:anywhere}.bg-schedules p[data-v-fa2b6101]{min-width:0;max-width:100%}.bg-schedules h3[data-v-fa2b6101]{font-size:15px;font-weight:600}.bg-schedule-form[data-v-fa2b6101]{margin-block:var(--ui-space-4,16px)}.bg-path[data-v-fa2b6101]{display:flex;align-items:center;gap:var(--ui-space-2,8px);min-width:0;max-width:100%}.executor-help[data-v-868f9f3a]{margin:0 0 var(--ui-space-3,12px);max-width:72ch;color:var(--ui-text-secondary)}.executor-summary[data-v-868f9f3a]{margin-bottom:var(--ui-space-3,12px)}.executor-form[data-v-868f9f3a]{margin-top:var(--ui-space-4,16px);max-width:28rem}.executor-hint[data-v-868f9f3a]{font-size:12px;color:var(--ui-text-secondary)}.executor-alert[data-v-868f9f3a]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.delegate-panel[data-v-c590f505]{min-width:0;overflow-wrap:anywhere}h3[data-v-c590f505]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.records[data-v-c590f505]{list-style:none;padding:0;margin:0}.records li[data-v-c590f505]{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-3,12px);padding-block:var(--ui-space-4,16px);border-bottom:1px solid var(--ui-border)}.records li>div[data-v-c590f505],.records li>span[data-v-c590f505],.destination[data-v-c590f505]{min-width:0;max-width:100%;overflow-wrap:anywhere}.records p[data-v-c590f505]{margin:var(--ui-space-2,8px) 0 0}.destination[data-v-c590f505]{display:flex;align-items:center;gap:var(--ui-space-2,8px)}.background-save-panel[data-v-5ef5e256]{min-width:0;overflow-wrap:anywhere}.save-message[data-v-5ef5e256]{--ui-text-secondary:var(--ui-text)}.save-help[data-v-5ef5e256]{margin:0 0 var(--ui-space-3,12px);max-width:72ch;color:var(--ui-text-secondary)}.save-summary[data-v-5ef5e256]{margin-bottom:var(--ui-space-3,12px)}h3[data-v-5ef5e256]{font-size:var(--ui-font-size-base,14px);font-weight:600;margin:var(--ui-space-6,24px) 0 var(--ui-space-3,12px)}.save-actions[data-v-5ef5e256],.save-records li[data-v-5ef5e256],.save-danger[data-v-5ef5e256]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.save-actions[data-v-5ef5e256]{justify-content:flex-start;margin-top:var(--ui-space-3,12px)}.save-records[data-v-5ef5e256]{list-style:none;margin:0;padding:0}.save-records li[data-v-5ef5e256]{padding-block:var(--ui-space-2,8px);border-bottom:1px solid var(--ui-border)}.save-record[data-v-5ef5e256]{display:flex;flex-direction:column;align-items:flex-start;min-width:0;flex:1}.save-name[data-v-5ef5e256]{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.save-note[data-v-5ef5e256]{margin:var(--ui-space-1,4px) 0 0;font-size:12px;color:var(--ui-text-secondary);white-space:normal}.save-alert[data-v-5ef5e256]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.save-icon[data-v-5ef5e256]{width:16px;height:16px}[data-save-operations][data-v-5ef5e256] table{table-layout:fixed}[data-save-operations][data-v-5ef5e256] th,[data-save-operations][data-v-5ef5e256] td{overflow-wrap:normal;white-space:nowrap}[data-save-operations][data-v-5ef5e256] td{padding-block:var(--ui-space-2,8px)}.save-example[data-v-5ef5e256]{margin-top:var(--ui-space-5,20px)}.save-pages[data-v-5ef5e256]{margin-top:var(--ui-space-3,12px)}.save-danger[data-v-5ef5e256]{flex:1;margin-top:var(--ui-space-2,8px);padding-top:var(--ui-space-4,16px);border-top:1px solid var(--ui-border)}.save-danger p[data-v-5ef5e256]{margin:0;flex:1 1 20rem;max-width:72ch;color:var(--ui-text-secondary)}.authorization-view[data-v-e16b5f7d]{display:flex;flex-direction:column;gap:12px}.authorization-body[data-v-e16b5f7d]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text);text-wrap:pretty}.authorization-status[data-v-e16b5f7d],.authorization-failed[data-v-e16b5f7d]{color:var(--ui-text)}.authorization-content[data-v-e16b5f7d]{display:flex;flex-direction:column;height:100%;min-height:0}.authorization-content[data-v-e16b5f7d] .app-shell{flex:1;min-height:0;height:auto}.authorization-setting[data-v-f031e7c7]{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.authorization-revoke-body[data-v-f031e7c7]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text)}.authorization-state[data-v-f031e7c7]{display:inline-flex;align-items:center;gap:6px;color:var(--ui-text)}