@synopackageland/sdk 0.15.1 → 0.16.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 (70) hide show
  1. package/README.md +4 -0
  2. package/dist/i18n/authorization/en.json +1 -1
  3. package/dist/i18n/background/de.json +1 -1
  4. package/dist/i18n/background/en.json +1 -1
  5. package/dist/i18n/background/es.json +1 -1
  6. package/dist/i18n/background/fr.json +1 -1
  7. package/dist/i18n/background/it.json +1 -1
  8. package/dist/i18n/background/ja.json +1 -1
  9. package/dist/i18n/background/ko.json +1 -1
  10. package/dist/i18n/background/zh-CN.json +1 -1
  11. package/dist/i18n/background/zh-TW.json +1 -1
  12. package/dist/i18n/delegate/de.json +2 -2
  13. package/dist/i18n/delegate/en.json +2 -2
  14. package/dist/i18n/delegate/es.json +2 -2
  15. package/dist/i18n/delegate/fr.json +2 -2
  16. package/dist/i18n/delegate/it.json +2 -2
  17. package/dist/i18n/delegate/ja.json +2 -2
  18. package/dist/i18n/delegate/ko.json +2 -2
  19. package/dist/i18n/delegate/zh-CN.json +2 -2
  20. package/dist/i18n/delegate/zh-TW.json +2 -2
  21. package/dist/i18n/files/de.json +1 -1
  22. package/dist/i18n/files/en.json +1 -1
  23. package/dist/i18n/files/es.json +1 -1
  24. package/dist/i18n/files/fr.json +1 -1
  25. package/dist/i18n/files/it.json +1 -1
  26. package/dist/i18n/files/ja.json +1 -1
  27. package/dist/i18n/files/ko.json +1 -1
  28. package/dist/i18n/files/zh-CN.json +1 -1
  29. package/dist/i18n/files/zh-TW.json +1 -1
  30. package/dist/i18n/portal/de.json +3 -3
  31. package/dist/i18n/portal/en.json +3 -3
  32. package/dist/i18n/portal/es.json +3 -3
  33. package/dist/i18n/portal/fr.json +3 -3
  34. package/dist/i18n/portal/it.json +3 -3
  35. package/dist/i18n/portal/ja.json +3 -3
  36. package/dist/i18n/portal/ko.json +3 -3
  37. package/dist/i18n/portal/zh-CN.json +3 -3
  38. package/dist/i18n/portal/zh-TW.json +3 -3
  39. package/dist/i18n/save/de.json +2 -2
  40. package/dist/i18n/save/en.json +2 -2
  41. package/dist/i18n/save/es.json +2 -2
  42. package/dist/i18n/save/fr.json +2 -2
  43. package/dist/i18n/save/it.json +2 -2
  44. package/dist/i18n/save/ja.json +2 -2
  45. package/dist/i18n/save/ko.json +2 -2
  46. package/dist/i18n/save/zh-CN.json +2 -2
  47. package/dist/i18n/save/zh-TW.json +2 -2
  48. package/dist/i18n/sharedfolder/de.json +27 -0
  49. package/dist/i18n/sharedfolder/en.json +27 -0
  50. package/dist/i18n/sharedfolder/es.json +27 -0
  51. package/dist/i18n/sharedfolder/fr.json +27 -0
  52. package/dist/i18n/sharedfolder/it.json +27 -0
  53. package/dist/i18n/sharedfolder/ja.json +27 -0
  54. package/dist/i18n/sharedfolder/ko.json +27 -0
  55. package/dist/i18n/sharedfolder/zh-CN.json +27 -0
  56. package/dist/i18n/sharedfolder/zh-TW.json +27 -0
  57. package/dist/index.js +2999 -2686
  58. package/dist/src/context.d.ts +25 -0
  59. package/dist/src/delegate/dtos-gen.d.ts +76 -0
  60. package/dist/src/delegate/facade.d.ts +3 -4
  61. package/dist/src/delegate/long-running.d.ts +2 -37
  62. package/dist/src/index.d.ts +2 -0
  63. package/dist/src/native/dsm-version.d.ts +1 -1
  64. package/dist/src/shared-folder/SharedFolderSettings.vue.d.ts +8 -0
  65. package/dist/src/shared-folder/access.d.ts +12 -0
  66. package/dist/src/shared-folder/i18n.d.ts +3 -0
  67. package/dist/src/vue.d.ts +1 -0
  68. package/dist/style.css +1 -1
  69. package/dist/vue.js +1698 -1526
  70. package/package.json +4 -4
@@ -79,6 +79,30 @@ export interface PortalAccess {
79
79
  dispose(): void;
80
80
  };
81
81
  }
82
+ export type SharedFolderLevel = 'none' | 'read' | 'write';
83
+ export interface SharedFolderItem {
84
+ key: string;
85
+ name: string;
86
+ path?: string;
87
+ exists: boolean;
88
+ required: SharedFolderLevel;
89
+ granted: SharedFolderLevel;
90
+ state: 'ready' | 'pending' | 'missing' | 'ambiguous';
91
+ error?: string;
92
+ }
93
+ export interface SharedFolderStatus {
94
+ account: string;
95
+ folders: SharedFolderItem[];
96
+ pending: boolean;
97
+ }
98
+ export interface SharedFolderAccess {
99
+ messages: Record<string, string>;
100
+ status(): Promise<SharedFolderStatus>;
101
+ lastStatus?(): SharedFolderStatus | undefined;
102
+ canGrant(): boolean;
103
+ grant(key: string): Promise<SharedFolderStatus>;
104
+ openControlPanel(): void;
105
+ }
82
106
  export interface AuthorizationStatus {
83
107
  command: 'authorization';
84
108
  schema_version: 1;
@@ -114,6 +138,7 @@ export interface Context {
114
138
  readonly isAdmin: boolean;
115
139
  };
116
140
  portal?: PortalAccess;
141
+ webApi?: (api: string, method: string, version: number, params: Record<string, unknown>) => Promise<unknown>;
117
142
  call<T = unknown>(method: string, params?: Record<string, unknown>, options?: CallOptions): Promise<T>;
118
143
  reopen(fn: () => void): () => void;
119
144
  launchParams?: LaunchParams;
@@ -0,0 +1,76 @@
1
+ export interface Capability {
2
+ state: string;
3
+ reason?: string;
4
+ disabled?: boolean;
5
+ lifetime?: string;
6
+ destinations?: (string)[];
7
+ scope_mode?: string;
8
+ preselection?: string;
9
+ selection?: ScopeSelection;
10
+ mismatch?: boolean;
11
+ }
12
+ export interface DelegateGrant {
13
+ delegation_id: string;
14
+ subject: Subject;
15
+ expires_at: string;
16
+ lifetime?: string;
17
+ destination?: string;
18
+ path?: string;
19
+ scope?: string;
20
+ scope_generation?: number;
21
+ revoked: boolean;
22
+ }
23
+ export type DelegateOperationState = "queued" | "copying" | "committed" | "canceled" | "interrupted" | "uncertain";
24
+ /** Picker-facing reference; excludes numeric identities and legacy job/expiry metadata. */
25
+ export interface DestinationGrant {
26
+ id: string;
27
+ key: string;
28
+ path: string;
29
+ username: string;
30
+ lifetime: "until-revoked";
31
+ }
32
+ /** Contains only this caller's destination reference; never persist the caller's DSM session. */
33
+ export interface DestinationState {
34
+ key: string;
35
+ selection: ScopeSelection | null;
36
+ destination: DestinationGrant | null;
37
+ status: DestinationStatus;
38
+ }
39
+ export type DestinationStatus = "active" | "missing" | "revoked" | "reselection-required" | "needs-scope-confirmation" | "disabled";
40
+ /** App-owned display metadata; only a live OperationResult is executor evidence. */
41
+ export interface MoveMirror {
42
+ job_id: string;
43
+ delegation_id: string;
44
+ name: string;
45
+ state: DelegateOperationState;
46
+ refusal?: string;
47
+ }
48
+ export interface OperationRef {
49
+ delegation_id: string;
50
+ job_id: string;
51
+ }
52
+ export interface OperationResult {
53
+ job_id: string;
54
+ state: DelegateOperationState;
55
+ receipt?: Receipt;
56
+ code?: string;
57
+ reason?: string;
58
+ }
59
+ export interface Receipt {
60
+ path: string;
61
+ size: number;
62
+ }
63
+ /** Executor evidence; an installation draft is never authority. */
64
+ export interface ScopeSelection {
65
+ scope: string;
66
+ root: string;
67
+ generation: number;
68
+ }
69
+ export interface SelectDestination {
70
+ key: string;
71
+ path: string;
72
+ }
73
+ export interface Subject {
74
+ username: string;
75
+ uid: number;
76
+ }
@@ -1,8 +1,7 @@
1
1
  import type { Context } from '../context';
2
- import type { BackgroundSaveFacade, OperationRef } from './long-running';
3
- export interface AppSaveJob extends OperationRef {
4
- name: string;
5
- refusal?: string;
2
+ import type { MoveMirror } from './dtos-gen';
3
+ import type { BackgroundSaveFacade } from './long-running';
4
+ export interface AppSaveJob extends Pick<MoveMirror, 'job_id' | 'delegation_id' | 'name' | 'refusal'> {
6
5
  }
7
6
  /** Bind the UI facade to the App backend's authenticated delegate.* routes (Go package delegate). */
8
7
  export declare function createBackgroundSaveFacade(ctx: Pick<Context, 'call'>, jobs?: () => Promise<readonly AppSaveJob[]>): BackgroundSaveFacade;
@@ -1,40 +1,5 @@
1
- export interface SelectDestination {
2
- key: string;
3
- path: string;
4
- }
5
- export interface ScopeSelection {
6
- scope: string;
7
- root: string;
8
- generation: number;
9
- }
10
- export interface DestinationState {
11
- key: string;
12
- selection: ScopeSelection | null;
13
- destination: DestinationGrant | null;
14
- status: 'active' | 'missing' | 'revoked' | 'reselection-required' | 'needs-scope-confirmation' | 'disabled';
15
- }
16
- export interface DestinationGrant {
17
- id: string;
18
- key: string;
19
- path: string;
20
- username: string;
21
- lifetime: 'until-revoked';
22
- }
23
- export type DelegateOperationState = 'queued' | 'copying' | 'committed' | 'canceled' | 'interrupted' | 'uncertain';
24
- export interface OperationRef {
25
- delegation_id: string;
26
- job_id: string;
27
- }
28
- export interface OperationResult {
29
- job_id: string;
30
- state: DelegateOperationState;
31
- receipt?: {
32
- path: string;
33
- size: number;
34
- };
35
- code?: string;
36
- reason?: string;
37
- }
1
+ import type { ScopeSelection, DestinationState, DestinationGrant, OperationRef, OperationResult, SelectDestination } from './dtos-gen';
2
+ export type { SelectDestination, ScopeSelection, DestinationState, DestinationGrant, DelegateOperationState, OperationRef, OperationResult } from './dtos-gen';
38
3
  export interface SaveOperation extends OperationResult, OperationRef {
39
4
  name: string;
40
5
  }
@@ -29,6 +29,8 @@ export { authorizationCopy, authorizationCatalogs } from './authorization/i18n';
29
29
  export { portalMessages, portalCatalogs } from './portal/i18n';
30
30
  export { bridgeErrorCopy, bridgeCatalogs } from './bridge/i18n';
31
31
  export { createPortalAccess, type PortalOptions } from './portal/access';
32
+ export { sharedFolderMessages, sharedFolderCatalogs } from './shared-folder/i18n';
33
+ export { createSharedFolderAccess, sharedFolderAccessFor, type SharedFolderOptions } from './shared-folder/access';
32
34
  export * from './protocol/v1';
33
35
  export { encodeRequest, decodeResponse, type ProtocolAuth, type ProtocolResponse } from './protocol/codec';
34
36
  export { appDenial, appRefusal, type AppDenial } from './authorization/refusal';
@@ -1,6 +1,6 @@
1
1
  /** Self-contained: the same function is embedded in the DSM window. True only
2
2
  * when DSM refused a request because this method version is unavailable, the
3
- * one refusal that may be retried with an older version. DSM 7.1.1 (t-0234)
3
+ * one refusal that may be retried with an older version. DSM 7.1.1
4
4
  * returns 104 for a version above maxVersion and 103 for a method absent at an
5
5
  * existing version. Accepts the numeric code and the window's dsm_ form. */
6
6
  export declare function versionUnsupported(code: unknown): boolean;
@@ -0,0 +1,8 @@
1
+ import type { SharedFolderAccess } from '../context';
2
+ type __VLS_Props = {
3
+ shared: SharedFolderAccess;
4
+ locale?: string;
5
+ };
6
+ 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>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import type { Context, SharedFolderAccess } from '../context';
2
+ export interface SharedFolderOptions {
3
+ call(method: 'sharedfolder.status', params: Record<string, never>): Promise<unknown>;
4
+ send?(api: string, method: string, version: number, params: Record<string, unknown>): Promise<unknown>;
5
+ isAdmin(): boolean;
6
+ launch?(app: string, params: Record<string, string>): void;
7
+ locale: string;
8
+ }
9
+ /** The SDK's Shared Folder access for a context that carries the pieces it needs. */
10
+ export declare function createSharedFolderAccess(options: SharedFolderOptions): SharedFolderAccess;
11
+ /** The access for an App context: the backend call, DSM's session channel when the window offers it, and the window's launcher. */
12
+ export declare function sharedFolderAccessFor(ctx: Pick<Context, 'call' | 'webApi' | 'user' | 'locale' | 'host'>): SharedFolderAccess;
@@ -0,0 +1,3 @@
1
+ export declare const sharedFolderCatalogs: Record<string, Record<string, string>>;
2
+ /** SharedFolderAccess.messages: the panel text in a DSM or BCP-47 language, keyed without the sharedfolder. prefix. */
3
+ export declare function sharedFolderMessages(locale: string): Record<string, string>;
package/dist/src/vue.d.ts CHANGED
@@ -12,6 +12,7 @@ export { default as FilesPage } from './files/FilesPage.vue';
12
12
  export { default as FileBrowser } from './files/FileBrowser.vue';
13
13
  export { default as NasPicker } from './nas/NasPicker.vue';
14
14
  export { default as PortalSettings } from './portal/PortalSettings.vue';
15
+ export { default as SharedFolderSettings } from './shared-folder/SharedFolderSettings.vue';
15
16
  export { default as LoginPage } from './identity/LoginPage.vue';
16
17
  export { default as BackgroundPanel } from './background/BackgroundPanel.vue';
17
18
  export { default as ExecutorSettings } from './delegate/ExecutorSettings.vue';
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .executor-consent[data-v-aacde22e]{display:grid;grid-template-columns:32px minmax(0,1fr);column-gap:var(--ui-space-3,12px);max-width:640px;overflow-wrap:anywhere}.executor-consent-icon[data-v-aacde22e]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--ui-primary-soft);color:var(--ui-primary)}.executor-consent-body[data-v-aacde22e]{display:flex;flex-direction:column;gap:var(--ui-space-4,16px);min-width:0}.executor-consent-title[data-v-aacde22e]{margin:6px 0 var(--ui-space-1,4px);font-size:14px;font-weight:600;line-height:20px;color:var(--ui-text)}.executor-consent-lead[data-v-aacde22e]{margin:0;font-size:13px;line-height:20px;color:var(--ui-text);text-wrap:pretty}.executor-consent-ask[data-v-aacde22e]{margin-top:var(--ui-space-2,8px)}.executor-consent-page[data-v-aacde22e]{grid-template-columns:minmax(0,1fr);justify-items:center;row-gap:var(--ui-space-3,12px);box-sizing:border-box;width:100%;max-width:480px;margin:var(--ui-space-6,24px) auto;padding:var(--ui-space-6,24px);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-lg);background:var(--ui-surface);box-shadow:var(--ui-shadow-card)}.executor-consent-page .executor-consent-icon[data-v-aacde22e]{width:48px;height:48px}.executor-consent-page .executor-consent-body[data-v-aacde22e]{width:100%;gap:var(--ui-space-5,20px)}.executor-consent-page .executor-consent-head[data-v-aacde22e]{text-align:center}.executor-consent-page .executor-consent-title[data-v-aacde22e]{margin-top:0;font-size:16px;line-height:24px}.executor-consent-more summary[data-v-aacde22e]{display:inline-flex;align-items:center;gap:var(--ui-space-1,4px);cursor:pointer;list-style:none;font-size:13px;line-height:20px;color:var(--ui-primary);border-radius:var(--ui-radius-sm)}.executor-consent-more summary[data-v-aacde22e]::-webkit-details-marker{display:none}.executor-consent-more summary[data-v-aacde22e]:focus-visible{outline:none;box-shadow:var(--ui-shadow-focus)}.executor-consent-chevron[data-v-aacde22e]{transition:transform .15s}.executor-consent-more[open] .executor-consent-chevron[data-v-aacde22e]{transform:rotate(90deg)}.executor-consent-more ul[data-v-aacde22e]{margin:var(--ui-space-2,8px) 0 0;padding:var(--ui-space-3,12px) var(--ui-space-4,16px) var(--ui-space-3,12px) 32px;border-radius:var(--ui-radius-md);background:var(--ui-surface-subtle);list-style:disc;font-size:13px;line-height:20px;color:var(--ui-text)}.executor-consent-more li+li[data-v-aacde22e]{margin-top:var(--ui-space-1,4px)}@media(prefers-reduced-motion:reduce){.executor-consent-chevron[data-v-aacde22e]{transition:none}}.executor-summary[data-v-5a1f26e3]:not(:last-child){margin-bottom:var(--ui-space-3,12px)}.executor-form[data-v-5a1f26e3]{max-width:28rem}.executor-summary+.executor-form[data-v-5a1f26e3],.ui-callout+div>.executor-form[data-v-5a1f26e3]{margin-top:var(--ui-space-4,16px)}.executor-reason[data-v-5a1f26e3]{display:block;margin-top:var(--ui-space-1,4px);font-size:var(--ui-font-size-sm,12px)}.executor-alert[data-v-5a1f26e3]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.executor-notice-body[data-v-d0aeb4e7]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.app-shell[data-v-59f635a8]{height:100%;min-width:0;grid-template-rows:minmax(0,1fr)}.app-shell-portal-brand[data-v-59f635a8] [data-ui-sidebar-brand]{display:none}.app-shell[data-v-59f635a8]>div{min-height:0}.app-shell[data-v-59f635a8] main{display:flex;flex-direction:column;overflow:hidden}.app-page[data-v-59f635a8]{flex:1 1 auto;min-height:0;overflow-y:auto}.app-denied[data-v-59f635a8]{height:100%;overflow-y:auto}.app-page-actions[data-v-59f635a8],.app-page-info[data-v-59f635a8]{display:contents}.app-shell-fill[data-v-59f635a8]{max-height:100dvh}.app-page-fill[data-v-59f635a8]{display:flex;flex-direction:column;overflow:hidden}.app-page-fill[data-v-59f635a8]>[data-page-content-body]{display:flex;flex:1 1 auto;flex-direction:column;width:100%;min-height:0}.app-page-fill .app-notices[data-v-59f635a8]{flex:0 0 auto}.app-page-fill .app-page-content[data-v-59f635a8]{display:grid;flex:1 1 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:0}.app-notices[data-v-59f635a8]{display:flex;flex-direction:column;gap:var(--ui-space-2, 8px)}.app-notices[hidden][data-v-59f635a8]{display:none}.app-page-content[data-v-59f635a8]{padding-bottom:var(--ui-space-6, 24px)}.page-info-notes[data-v-93861654]{display:grid;gap:6px;margin:0;padding-left:14px;list-style:disc;white-space:pre-line}.file-browser[data-v-f4863cea]{min-width:0;color:var(--ui-text)}.file-toolbar[data-v-f4863cea]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px);margin-block:var(--ui-space-3, 12px)}.file-location[data-v-f4863cea]{flex-wrap:nowrap;align-items:center;gap:var(--ui-space-1, 4px)}.file-path[data-v-f4863cea]{flex:1;min-width:0;margin-inline-start:var(--ui-space-2, 8px)}.file-columns[data-v-f4863cea]{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-f4863cea]{min-width:0;overflow:auto;border-inline-end:1px solid var(--ui-border)}.file-content[data-v-f4863cea]{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:auto}.file-empty[data-v-f4863cea]{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-f4863cea]{display:inline-flex;align-items:center;gap:var(--ui-space-2, 8px);overflow-wrap:anywhere}.file-bytes[data-v-f4863cea]{font-variant-numeric:tabular-nums}.file-selection[data-v-f4863cea]{overflow-wrap:anywhere}@media(max-width:600px){.file-columns[data-v-f4863cea]{grid-template-columns:minmax(0,1fr);height:auto}.file-content[data-v-f4863cea] th:nth-child(2),.file-content[data-v-f4863cea] td:nth-child(2),.file-content[data-v-f4863cea] th:nth-child(3),.file-content[data-v-f4863cea] td:nth-child(3){display:none}.file-tree[data-v-f4863cea]{height:clamp(96px,25vh,180px);border-inline-end:0;border-bottom:1px solid var(--ui-border)}.file-content[data-v-f4863cea]{height:clamp(200px,45vh,360px)}}.nas-picker-content[data-v-08be5e1e]{max-height:65vh;overflow:auto}.save-message[data-v-08be5e1e]{--ui-text-secondary:var(--ui-text)}.save-consent[data-v-08be5e1e]{color:var(--ui-text);margin-block:0 var(--ui-space-4,16px)}.files-actions[data-v-a8fc5aa4]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.files-path[data-v-a8fc5aa4]{display:flex;min-width:0}.identity-login[data-v-07e4497c]{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-07e4497c]{margin-block:var(--ui-space-4, 16px);overflow-wrap:anywhere}.bg-cards[data-v-a7c98d9d]{display:grid;gap:var(--ui-space-3,12px);min-width:0;overflow-wrap:anywhere}.bg-card-body[data-v-a7c98d9d]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--ui-space-2,8px);min-width:0}.bg-card-body>span[data-v-a7c98d9d]{min-width:0;max-width:100%}.integration-actions[data-v-a7c98d9d]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.bg-schedules[data-v-a7c98d9d]{margin-block-start:var(--ui-space-6,24px);min-width:0;overflow-wrap:anywhere}.bg-schedules p[data-v-a7c98d9d]{min-width:0;max-width:100%}.bg-schedule-form[data-v-a7c98d9d]{margin-block:var(--ui-space-4,16px)}.bg-path[data-v-a7c98d9d]{display:flex;align-items:center;gap:var(--ui-space-2,8px);min-width:0;max-width:100%}.executor-pages[data-v-59aae3f3]{display:contents}.executor-pages.executor-preloading[data-v-59aae3f3]{display:block;position:fixed;inset:0;visibility:hidden;overflow:hidden;pointer-events:none}.executor-approval[data-v-59aae3f3]{padding:var(--ui-space-6, 24px)}.executor-brand[data-v-59aae3f3]{display:flex;align-items:center;gap:var(--ui-space-2, 8px);margin-bottom:var(--ui-space-4, 16px);font-size:16px;font-weight:600;color:var(--ui-text-primary)}.executor-brand img[data-v-59aae3f3]{width:24px;height:24px}.delegate-panel[data-v-987b56d5]{min-width:0;overflow-wrap:anywhere}.delegate-group[data-v-987b56d5]{margin-top:var(--ui-space-6,24px)}.records[data-v-987b56d5]{list-style:none;padding:0;margin:0}.records li[data-v-987b56d5]{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-987b56d5],.records li>span[data-v-987b56d5],.destination[data-v-987b56d5]{min-width:0;max-width:100%;overflow-wrap:anywhere}.records p[data-v-987b56d5]{margin:var(--ui-space-2,8px) 0 0}.destination[data-v-987b56d5]{display:flex;align-items:center;gap:var(--ui-space-2,8px)}.background-save-settings[data-v-79ce68f8]{min-width:0;overflow-wrap:anywhere}.save-help[data-v-79ce68f8]{margin:0 0 var(--ui-space-2,8px);max-width:72ch;color:var(--ui-text-secondary)}.save-form[data-v-79ce68f8]{max-width:28rem}.save-actions[data-v-79ce68f8],.save-alert[data-v-79ce68f8]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.save-alert[data-v-79ce68f8]{justify-content:space-between}.save-actions[data-v-79ce68f8] .ui-path-display{flex:1;min-width:0}.save-none[data-v-79ce68f8]{flex:1;color:var(--ui-text-secondary)}.save-reason[data-v-79ce68f8]{display:block;margin-top:var(--ui-space-1,4px);font-size:var(--ui-font-size-sm,12px)}.background-save-panel[data-v-05618cb8]{min-width:0;overflow-wrap:anywhere}.save-help[data-v-05618cb8]{margin:0 0 var(--ui-space-3,12px);max-width:72ch;color:var(--ui-text-secondary)}.save-actions[data-v-05618cb8]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-2,8px);margin-bottom:var(--ui-space-3,12px)}.authorization-view[data-v-42db0617]{display:flex;flex-direction:column;gap:12px}.authorization-body[data-v-42db0617]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text);text-wrap:pretty}.authorization-status[data-v-42db0617],.authorization-failed[data-v-42db0617]{color:var(--ui-text)}.authorization-content[data-v-42db0617]{display:flex;flex-direction:column;height:100%;min-height:0}.authorization-content[data-v-42db0617] .app-shell{flex:1;min-height:0;height:auto}.authorization-setting[data-v-fc7dce79]{display:flex;align-items:center;flex-wrap:wrap;gap:12px}.authorization-revoke-body[data-v-fc7dce79]{margin:0;font-size:13px;line-height:1.6;color:var(--ui-text)}.authorization-state[data-v-fc7dce79]{display:inline-flex;align-items:center;gap:6px;color:var(--ui-text)}
1
+ .executor-consent[data-v-50db0e1d]{display:grid;grid-template-columns:32px minmax(0,1fr);column-gap:var(--ui-space-3,12px);max-width:640px;overflow-wrap:anywhere}.executor-consent-icon[data-v-50db0e1d]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--ui-primary-soft);color:var(--ui-primary)}.executor-consent-body[data-v-50db0e1d]{display:flex;flex-direction:column;gap:var(--ui-space-4,16px);min-width:0}.executor-consent-title[data-v-50db0e1d]{margin:6px 0 var(--ui-space-1,4px);font-size:var(--ui-font-size-lg,14px);font-weight:600;line-height:var(--ui-line-height,20px);color:var(--ui-text)}.executor-consent-lead[data-v-50db0e1d]{margin:0;font-size:var(--ui-font-size,13px);line-height:var(--ui-line-height,20px);color:var(--ui-text);text-wrap:pretty}.executor-consent-ask[data-v-50db0e1d]{margin-top:var(--ui-space-2,8px)}.executor-consent-page[data-v-50db0e1d]{grid-template-columns:minmax(0,1fr);justify-items:center;row-gap:var(--ui-space-3,12px);box-sizing:border-box;width:100%;max-width:480px;margin:var(--ui-space-6,24px) auto;padding:var(--ui-space-6,24px);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-lg);background:var(--ui-surface);box-shadow:var(--ui-shadow-card)}.executor-consent-page .executor-consent-icon[data-v-50db0e1d]{width:48px;height:48px}.executor-consent-page .executor-consent-body[data-v-50db0e1d]{width:100%;gap:var(--ui-space-5,20px)}.executor-consent-page .executor-consent-head[data-v-50db0e1d]{text-align:center}.executor-consent-page .executor-consent-title[data-v-50db0e1d]{margin-top:0;font-size:var(--ui-font-size-title,16px);line-height:24px}.executor-consent-more summary[data-v-50db0e1d]{display:inline-flex;align-items:center;gap:var(--ui-space-1,4px);cursor:pointer;list-style:none;font-size:var(--ui-font-size,13px);line-height:var(--ui-line-height,20px);color:var(--ui-primary);border-radius:var(--ui-radius-sm)}.executor-consent-more summary[data-v-50db0e1d]::-webkit-details-marker{display:none}.executor-consent-more summary[data-v-50db0e1d]:focus-visible{outline:none;box-shadow:var(--ui-shadow-focus)}.executor-consent-chevron[data-v-50db0e1d]{transition:transform .15s}.executor-consent-more[open] .executor-consent-chevron[data-v-50db0e1d]{transform:rotate(90deg)}.executor-consent-more ul[data-v-50db0e1d]{margin:var(--ui-space-2,8px) 0 0;padding:var(--ui-space-3,12px) var(--ui-space-4,16px) var(--ui-space-3,12px) 32px;border-radius:var(--ui-radius-md);background:var(--ui-surface-subtle);list-style:disc;font-size:var(--ui-font-size,13px);line-height:var(--ui-line-height,20px);color:var(--ui-text)}.executor-consent-more li+li[data-v-50db0e1d]{margin-top:var(--ui-space-1,4px)}@media(prefers-reduced-motion:reduce){.executor-consent-chevron[data-v-50db0e1d]{transition:none}}.executor-summary[data-v-be7bbc76]:not(:last-child){margin-bottom:var(--ui-space-3,12px)}.executor-form[data-v-be7bbc76]{max-width:28rem}.executor-summary+.executor-form[data-v-be7bbc76],.ui-callout+div>.executor-form[data-v-be7bbc76]{margin-top:var(--ui-space-4,16px)}.executor-reason[data-v-be7bbc76]{display:block;margin-top:var(--ui-space-1,4px);font-size:var(--ui-font-size-sm,12px)}.executor-alert[data-v-be7bbc76]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.executor-notice-body[data-v-5468feb3]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.app-shell[data-v-71ea2214]{height:100%;min-width:0;grid-template-rows:minmax(0,1fr)}.app-shell-portal-brand[data-v-71ea2214] [data-ui-sidebar-brand]{display:none}.app-shell[data-v-71ea2214]>div{min-height:0}.app-shell[data-v-71ea2214] main{display:flex;flex-direction:column;overflow:hidden}.app-page[data-v-71ea2214]{flex:1 1 auto;min-height:0;overflow-y:auto}.app-denied[data-v-71ea2214]{height:100%;overflow-y:auto}.app-page-actions[data-v-71ea2214],.app-page-info[data-v-71ea2214]{display:contents}.app-shell-fill[data-v-71ea2214]{max-height:100dvh}.app-page-fill[data-v-71ea2214]{display:flex;flex-direction:column;overflow:hidden}.app-page-fill[data-v-71ea2214]>[data-page-content-body]{display:flex;flex:1 1 auto;flex-direction:column;width:100%;min-height:0}.app-page-fill .app-notices[data-v-71ea2214]{flex:0 0 auto}.app-page-fill .app-page-content[data-v-71ea2214]{display:grid;flex:1 1 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);min-height:0}.app-notices[data-v-71ea2214]{display:flex;flex-direction:column;gap:var(--ui-space-2, 8px)}.app-notices[hidden][data-v-71ea2214]{display:none}.app-page-content[data-v-71ea2214]{padding-bottom:var(--ui-space-6, 24px)}.page-info-notes[data-v-93861654]{display:grid;gap:6px;margin:0;padding-left:14px;list-style:disc;white-space:pre-line}.file-browser[data-v-f4863cea]{min-width:0;color:var(--ui-text)}.file-toolbar[data-v-f4863cea]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px);margin-block:var(--ui-space-3, 12px)}.file-location[data-v-f4863cea]{flex-wrap:nowrap;align-items:center;gap:var(--ui-space-1, 4px)}.file-path[data-v-f4863cea]{flex:1;min-width:0;margin-inline-start:var(--ui-space-2, 8px)}.file-columns[data-v-f4863cea]{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-f4863cea]{min-width:0;overflow:auto;border-inline-end:1px solid var(--ui-border)}.file-content[data-v-f4863cea]{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:auto}.file-empty[data-v-f4863cea]{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-f4863cea]{display:inline-flex;align-items:center;gap:var(--ui-space-2, 8px);overflow-wrap:anywhere}.file-bytes[data-v-f4863cea]{font-variant-numeric:tabular-nums}.file-selection[data-v-f4863cea]{overflow-wrap:anywhere}@media(max-width:600px){.file-columns[data-v-f4863cea]{grid-template-columns:minmax(0,1fr);height:auto}.file-content[data-v-f4863cea] th:nth-child(2),.file-content[data-v-f4863cea] td:nth-child(2),.file-content[data-v-f4863cea] th:nth-child(3),.file-content[data-v-f4863cea] td:nth-child(3){display:none}.file-tree[data-v-f4863cea]{height:clamp(96px,25vh,180px);border-inline-end:0;border-bottom:1px solid var(--ui-border)}.file-content[data-v-f4863cea]{height:clamp(200px,45vh,360px)}}.nas-picker-content[data-v-08be5e1e]{max-height:65vh;overflow:auto}.save-message[data-v-08be5e1e]{--ui-text-secondary:var(--ui-text)}.save-consent[data-v-08be5e1e]{color:var(--ui-text);margin-block:0 var(--ui-space-4,16px)}.files-actions[data-v-b2e16764]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2, 8px)}.files-path[data-v-b2e16764]{display:flex;min-width:0}.sf-state[data-v-273cff49]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ui-space-2,8px) var(--ui-space-3,12px);min-width:0;overflow-wrap:anywhere}.sf-notices[data-v-273cff49]{display:grid;gap:var(--ui-space-2,8px);min-width:0;max-width:100%;overflow-wrap:anywhere}.identity-login[data-v-06b2efdb]{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:var(--ui-font-size, 13px);line-height:var(--ui-line-height, 20px)}.identity-login p[data-v-06b2efdb]{margin-block:var(--ui-space-4, 16px);overflow-wrap:anywhere}.bg-cards[data-v-85ff7ec5]{display:grid;gap:var(--ui-space-3,12px);min-width:0;overflow-wrap:anywhere}.bg-card-body[data-v-85ff7ec5]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--ui-space-2,8px);min-width:0}.bg-card-body>span[data-v-85ff7ec5]{min-width:0;max-width:100%}.bg-card-body>.integration-actions[data-v-85ff7ec5]{margin-block:0}.integration-actions[data-v-85ff7ec5]{display:flex;flex-wrap:wrap;gap:var(--ui-space-2,8px);margin-block:var(--ui-space-3,12px)}.bg-schedules[data-v-85ff7ec5]{margin-block-start:var(--ui-space-6,24px);min-width:0;overflow-wrap:anywhere}.bg-schedules p[data-v-85ff7ec5]{min-width:0;max-width:100%}.bg-schedule-form[data-v-85ff7ec5]{margin-block:var(--ui-space-4,16px)}.bg-path[data-v-85ff7ec5]{display:flex;align-items:center;gap:var(--ui-space-2,8px);min-width:0;max-width:100%}.executor-pages[data-v-fdcf35a0]{display:contents}.executor-pages.executor-preloading[data-v-fdcf35a0]{display:block;position:fixed;inset:0;visibility:hidden;overflow:hidden;pointer-events:none}.executor-approval[data-v-fdcf35a0]{padding:var(--ui-space-6, 24px)}.executor-brand[data-v-fdcf35a0]{display:flex;align-items:center;gap:var(--ui-space-2, 8px);margin-bottom:var(--ui-space-4, 16px);font-size:var(--ui-font-size-title, 16px);font-weight:600;color:var(--ui-text)}.executor-brand img[data-v-fdcf35a0]{width:24px;height:24px}.delegate-panel[data-v-27a7b902]{min-width:0;overflow-wrap:anywhere}.delegate-group[data-v-27a7b902]{margin-top:var(--ui-space-6,24px)}.destination[data-v-27a7b902]{min-width:0;max-width:100%;overflow-wrap:anywhere}.destination[data-v-27a7b902]{display:flex;align-items:center;gap:var(--ui-space-2,8px)}.background-save-settings[data-v-ea7899b3]{min-width:0;overflow-wrap:anywhere}.save-help[data-v-ea7899b3]{margin:0 0 var(--ui-space-2,8px);max-width:72ch;color:var(--ui-text-secondary)}.save-form[data-v-ea7899b3]{max-width:28rem}.save-actions[data-v-ea7899b3],.save-alert[data-v-ea7899b3]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-2,8px)}.save-alert[data-v-ea7899b3]{justify-content:space-between}.save-actions[data-v-ea7899b3] .ui-path-display{flex:1;min-width:0}.save-none[data-v-ea7899b3]{flex:1;color:var(--ui-text-secondary)}.save-reason[data-v-ea7899b3]{display:block;margin-top:var(--ui-space-1,4px);font-size:var(--ui-font-size-sm,12px)}.background-save-panel[data-v-05618cb8]{min-width:0;overflow-wrap:anywhere}.save-help[data-v-05618cb8]{margin:0 0 var(--ui-space-3,12px);max-width:72ch;color:var(--ui-text-secondary)}.save-actions[data-v-05618cb8]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-2,8px);margin-bottom:var(--ui-space-3,12px)}.authorization-view[data-v-e6c8e4e1]{display:flex;flex-direction:column;gap:var(--ui-space-3,12px)}.authorization-body[data-v-e6c8e4e1]{margin:0;font-size:var(--ui-font-size,13px);line-height:var(--ui-line-height,20px);color:var(--ui-text);text-wrap:pretty}.authorization-status[data-v-e6c8e4e1],.authorization-failed[data-v-e6c8e4e1]{color:var(--ui-text)}.authorization-content[data-v-e6c8e4e1]{display:flex;flex-direction:column;height:100%;min-height:0}.authorization-content[data-v-e6c8e4e1] .app-shell{flex:1;min-height:0;height:auto}.authorization-setting[data-v-8452013e]{display:flex;align-items:center;flex-wrap:wrap;gap:var(--ui-space-3,12px)}.authorization-revoke-body[data-v-8452013e]{margin:0;font-size:var(--ui-font-size,13px);line-height:var(--ui-line-height,20px);color:var(--ui-text)}.authorization-state[data-v-8452013e]{display:inline-flex;align-items:center;gap:6px;color:var(--ui-text)}