import { AllowedComponentProps } from 'vue'; import { Attrs } from 'vue'; import { Component } from 'vue'; import { ComponentCustomProperties } from 'vue'; import { ComponentCustomProps } from 'vue'; import { ComponentInternalInstance } from 'vue'; import { ComponentOptionsBase } from 'vue'; import { ComponentOptionsMixin } from 'vue'; import { ComponentProvideOptions } from 'vue'; import { ComponentPublicInstance } from 'vue'; import { ComputedRef } from 'vue'; import { CreateComponentPublicInstanceWithMixins } from 'vue'; import { DebuggerEvent } from 'vue'; import { DefineComponent } from 'vue'; import { ExtractPropTypes } from 'vue'; import { GlobalComponents } from 'vue'; import { GlobalDirectives } from 'vue'; import { InjectionKey } from 'vue'; import { LicenseInfo } from '@brftech/filex-app-ui/protocol'; import { nextTick } from 'vue'; import { OnCleanup } from '@vue/reactivity'; import { PublicProps } from 'vue'; import { Ref } from 'vue'; import { RendererElement } from 'vue'; import { RendererNode } from 'vue'; import { ShallowRef } from 'vue'; import { Slot } from 'vue'; import { ToastParams } from '@brftech/filex-app-ui/protocol'; import { VNode } from 'vue'; import { VNodeProps } from 'vue'; import { WatchOptions } from 'vue'; import { WatchStopHandle } from 'vue'; /** Test seam: send whatever is pending now, without waiting out the debounce. */ export declare function __flushViewPrefs(): void; /** Test seam — the console line is once per value per page, so a suite that * asserts on it has to be able to start over. Not used by the app. */ export declare function __resetUiProfileWarnings(): void; /** Test seam: drop the transport and the state, so one suite cannot leak a * document into the next. Not used by the app. */ export declare function __resetViewPrefs(): void; declare const __VLS_component: DefineComponent<__VLS_Props, { reload: () => Promise; openAppTarget: typeof openAppTarget; revealNotification: typeof revealNotification; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { error: (err: { message: string; context?: unknown; }) => any; refresh: () => any; "share-created": (payload: { path: string; url: string; pin: string | null; }) => any; "open-my-shares": () => any; "open-app-store": () => any; navigate: (p: { path: string; }) => any; "file-opened": (file: { path: string; basename: string; }) => any; "upload-progress": (p: { uploadId: string; percent: number; done: boolean; }) => any; "selection-change": (items: { path: string; basename: string; type: "file" | "dir"; }[]) => any; "open-app-home": (p: { plugin: string; view: string; }) => any; }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{ onError?: ((err: { message: string; context?: unknown; }) => any) | undefined; onRefresh?: (() => any) | undefined; "onShare-created"?: ((payload: { path: string; url: string; pin: string | null; }) => any) | undefined; "onOpen-my-shares"?: (() => any) | undefined; "onOpen-app-store"?: (() => any) | undefined; onNavigate?: ((p: { path: string; }) => any) | undefined; "onFile-opened"?: ((file: { path: string; basename: string; }) => any) | undefined; "onUpload-progress"?: ((p: { uploadId: string; percent: number; done: boolean; }) => any) | undefined; "onSelection-change"?: ((items: { path: string; basename: string; type: "file" | "dir"; }[]) => any) | undefined; "onOpen-app-home"?: ((p: { plugin: string; view: string; }) => any) | undefined; }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, { rootEl: HTMLDivElement; toolbarRef: ({ $: ComponentInternalInstance; $data: {}; $props: { readonly viewMode: ViewMode; readonly searchQuery: string; readonly trashActive: boolean; readonly actions: ContextAction[]; readonly selectionMode?: SelectionMode_2 | undefined; readonly selectionCount?: number | undefined; readonly selectionPane?: string | undefined; readonly pasteEnabled?: boolean | undefined; readonly canGoUp?: boolean | undefined; readonly atVirtualRoot?: boolean | undefined; readonly canWrite?: boolean | undefined; readonly locale: LocaleCode; readonly narrow?: boolean | undefined; readonly theme?: ThemeMode | undefined; readonly inspectorOpen?: boolean | undefined; readonly navOpen?: boolean | undefined; readonly navEnabled?: boolean | undefined; readonly viewModes?: ViewMode[] | undefined; readonly scopeLabel?: string | undefined; readonly brandName?: string | undefined; readonly brandMarkUrl?: string | undefined; readonly searchEscalates?: boolean | undefined; readonly onAction?: ((key: string) => any) | undefined; readonly onUpload?: (() => any) | undefined; readonly "onGo-up"?: (() => any) | undefined; readonly "onNew-folder"?: (() => any) | undefined; readonly onRefresh?: (() => any) | undefined; readonly "onUpdate:viewMode"?: ((v: ViewMode) => any) | undefined; readonly "onUpdate:searchQuery"?: ((v: string) => any) | undefined; readonly "onOpen-advanced-search"?: ((v: string) => any) | undefined; readonly "onOpen-recents"?: (() => any) | undefined; readonly "onUpdate:density"?: ((v: Density_2) => any) | undefined; readonly "onToggle-inspector"?: (() => any) | undefined; readonly "onToggle-nav"?: (() => any) | undefined; readonly "onOpen-theme"?: (() => any) | undefined; readonly "onOpen-shortcut-settings"?: (() => any) | undefined; readonly "onOpen-timezone"?: (() => any) | undefined; readonly "onOpen-palette"?: ((query: string) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps; $attrs: Attrs; $refs: { [x: string]: unknown; } & { rootEl: HTMLDivElement; searchEl: HTMLInputElement; moreBtnEl: HTMLButtonElement; moreRef: CreateComponentPublicInstanceWithMixins & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { select: (action: ContextAction, target: FileNode[]) => any; }, PublicProps, {}, false, {}, {}, GlobalComponents, GlobalDirectives, string, { sheetEl: HTMLDivElement; menuEl: HTMLDivElement; }, any, ComponentProvideOptions, { P: {}; B: {}; D: {}; C: {}; M: {}; Defaults: {}; }, Readonly<{ locale: LocaleCode; actions: ContextAction[]; theme?: ThemeMode; sheet?: boolean; }> & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, {}> | null; selBarEl: HTMLDivElement; selMoreBtnEl: HTMLButtonElement; measureEl: HTMLDivElement; selMoreRef: CreateComponentPublicInstanceWithMixins & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { select: (action: ContextAction, target: FileNode[]) => any; }, PublicProps, {}, false, {}, {}, GlobalComponents, GlobalDirectives, string, { sheetEl: HTMLDivElement; menuEl: HTMLDivElement; }, any, ComponentProvideOptions, { P: {}; B: {}; D: {}; C: {}; M: {}; Defaults: {}; }, Readonly<{ locale: LocaleCode; actions: ContextAction[]; theme?: ThemeMode; sheet?: boolean; }> & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, {}> | null; }; $slots: Readonly<{ [name: string]: Slot | undefined; }>; $root: ComponentPublicInstance | null; $parent: ComponentPublicInstance | null; $host: Element | null; $emit: ((event: "action", key: string) => void) & ((event: "upload") => void) & ((event: "go-up") => void) & ((event: "new-folder") => void) & ((event: "refresh") => void) & ((event: "update:viewMode", v: ViewMode) => void) & ((event: "update:searchQuery", v: string) => void) & ((event: "open-advanced-search", v: string) => void) & ((event: "open-recents") => void) & ((event: "update:density", v: Density_2) => void) & ((event: "toggle-inspector") => void) & ((event: "toggle-nav") => void) & ((event: "open-theme") => void) & ((event: "open-shortcut-settings") => void) & ((event: "open-timezone") => void) & ((event: "open-palette", query: string) => void); $el: HTMLDivElement; $options: ComponentOptionsBase & Readonly<{ onAction?: ((key: string) => any) | undefined; onUpload?: (() => any) | undefined; "onGo-up"?: (() => any) | undefined; "onNew-folder"?: (() => any) | undefined; onRefresh?: (() => any) | undefined; "onUpdate:viewMode"?: ((v: ViewMode) => any) | undefined; "onUpdate:searchQuery"?: ((v: string) => any) | undefined; "onOpen-advanced-search"?: ((v: string) => any) | undefined; "onOpen-recents"?: (() => any) | undefined; "onUpdate:density"?: ((v: Density_2) => any) | undefined; "onToggle-inspector"?: (() => any) | undefined; "onToggle-nav"?: (() => any) | undefined; "onOpen-theme"?: (() => any) | undefined; "onOpen-shortcut-settings"?: (() => any) | undefined; "onOpen-timezone"?: (() => any) | undefined; "onOpen-palette"?: ((query: string) => any) | undefined; }>, { focusSearch: () => Promise; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { action: (key: string) => any; upload: () => any; "go-up": () => any; "new-folder": () => any; refresh: () => any; "update:viewMode": (v: ViewMode) => any; "update:searchQuery": (v: string) => any; "open-advanced-search": (v: string) => any; "open-recents": () => any; "update:density": (v: Density_2) => any; "toggle-inspector": () => any; "toggle-nav": () => any; "open-theme": () => any; "open-shortcut-settings": () => any; "open-timezone": () => any; "open-palette": (query: string) => any; }, string, {}, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & { beforeCreate?: (() => void) | (() => void)[]; created?: (() => void) | (() => void)[]; beforeMount?: (() => void) | (() => void)[]; mounted?: (() => void) | (() => void)[]; beforeUpdate?: (() => void) | (() => void)[]; updated?: (() => void) | (() => void)[]; activated?: (() => void) | (() => void)[]; deactivated?: (() => void) | (() => void)[]; beforeDestroy?: (() => void) | (() => void)[]; beforeUnmount?: (() => void) | (() => void)[]; destroyed?: (() => void) | (() => void)[]; unmounted?: (() => void) | (() => void)[]; renderTracked?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; renderTriggered?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[]; }; $forceUpdate: () => void; $nextTick: typeof nextTick; $watch any)>(source: T, cb: T extends ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: any) => infer R ? ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [R, R, OnCleanup]) => any : ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [any, any, OnCleanup]) => any, options?: WatchOptions): WatchStopHandle; } & Readonly<{}> & Omit & Readonly<{ onAction?: ((key: string) => any) | undefined; onUpload?: (() => any) | undefined; "onGo-up"?: (() => any) | undefined; "onNew-folder"?: (() => any) | undefined; onRefresh?: (() => any) | undefined; "onUpdate:viewMode"?: ((v: ViewMode) => any) | undefined; "onUpdate:searchQuery"?: ((v: string) => any) | undefined; "onOpen-advanced-search"?: ((v: string) => any) | undefined; "onOpen-recents"?: (() => any) | undefined; "onUpdate:density"?: ((v: Density_2) => any) | undefined; "onToggle-inspector"?: (() => any) | undefined; "onToggle-nav"?: (() => any) | undefined; "onOpen-theme"?: (() => any) | undefined; "onOpen-shortcut-settings"?: (() => any) | undefined; "onOpen-timezone"?: (() => any) | undefined; "onOpen-palette"?: ((query: string) => any) | undefined; }>, "focusSearch"> & { focusSearch: () => Promise; } & {} & ComponentCustomProperties & {} & { $slots: { brand?(_: {}): any; 'header-actions'?(_: {}): any; 'header-actions'?(_: {}): any; }; }) | null; mainPaneRef: ({ $: ComponentInternalInstance; $data: {}; $props: { readonly [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; readonly paneId: PaneId; readonly api: FileApi; readonly locale: LocaleCode; readonly theme?: ThemeMode | undefined; readonly focused?: boolean | undefined; readonly closable?: boolean | undefined; readonly path: string; readonly selfDriven?: boolean | undefined; readonly qualify: (p: string) => string; readonly toUser: (wire: string) => string; readonly clamp: (p: string) => string; readonly rootLabel?: string | undefined; readonly rootPath?: string | undefined; readonly floor?: string | undefined; readonly multiRoot?: boolean | undefined; readonly virtualRows?: (() => FileNode[]) | undefined; readonly trashVisible?: boolean | undefined; readonly navOffersTrash?: boolean | undefined; readonly rows?: FileNode[] | undefined; readonly loading?: boolean | undefined; readonly error?: string | undefined; readonly order?: ListingOrder | undefined; readonly viewMode: ViewMode; readonly viewModes?: ViewMode[] | undefined; readonly showCrumbs?: boolean | undefined; readonly showFilterBar?: boolean | undefined; readonly filterMode?: "full" | "find" | undefined; readonly findLabel?: string | undefined; readonly showViewSwitcher?: boolean | undefined; readonly crumbSubfolders?: { label: string; adapterPath: string; }[] | undefined; readonly folderKey?: string | undefined; readonly showParentPath?: boolean | undefined; readonly trash?: boolean | undefined; readonly clipped?: Set | undefined; readonly extraFilters?: (DriveFilters | null) | undefined; readonly extraFiltersOnServer?: boolean | undefined; readonly canWrite?: boolean | undefined; readonly canPaste?: boolean | undefined; readonly selected: Set; readonly filters: DriveFilters; readonly thumbSrc?: ((n: FileNode) => string | null) | undefined; readonly folderPreviews?: boolean | undefined; readonly keepBadgeFor?: ((n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null) | undefined; readonly starredIds?: Set | undefined; readonly starOverrides?: Map | undefined; readonly starEnabled?: boolean | undefined; readonly apiBase?: string | undefined; readonly authHeaders?: (() => Record | Promise>) | undefined; readonly authCredentials?: RequestCredentials | undefined; readonly e2eActive?: boolean | undefined; readonly bodyOverride?: boolean | undefined; readonly openTrigger?: "single" | "double" | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps; $attrs: Attrs; $refs: { [x: string]: unknown; }; $slots: Readonly<{ [name: string]: Slot | undefined; }>; $root: ComponentPublicInstance | null; $parent: ComponentPublicInstance | null; $host: Element | null; $emit: (event: string, ...args: any[]) => void; $el: HTMLElement; $options: ComponentOptionsBase string; toUser: (wire: string) => string; clamp: (p: string) => string; rootLabel?: string; rootPath?: string; floor?: string; multiRoot?: boolean; virtualRows?: () => FileNode[]; trashVisible?: boolean; navOffersTrash?: boolean; rows?: FileNode[]; loading?: boolean; error?: string; order?: ListingOrder; viewMode: ViewMode; viewModes?: ViewMode[]; showCrumbs?: boolean; showFilterBar?: boolean; filterMode?: "full" | "find"; findLabel?: string; showViewSwitcher?: boolean; crumbSubfolders?: { label: string; adapterPath: string; }[]; folderKey?: string; showParentPath?: boolean; trash?: boolean; clipped?: Set; extraFilters?: DriveFilters | null; extraFiltersOnServer?: boolean; canWrite?: boolean; canPaste?: boolean; selected: Set; filters: DriveFilters; thumbSrc?: (n: FileNode) => string | null; folderPreviews?: boolean; keepBadgeFor?: (n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null; starredIds?: Set; starOverrides?: Map; starEnabled?: boolean; apiBase?: string; authHeaders?: () => Record | Promise>; authCredentials?: RequestCredentials; e2eActive?: boolean; bodyOverride?: boolean; openTrigger?: "single" | "double"; }> & Readonly<{ [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; }>, { reload: () => Promise; goUp: () => void; getPath: () => string; visibleNodes: () => FileNode[]; loadFolder: (target?: string) => Promise; rowCount: () => number; rowPaths: () => string[]; dirPerm: () => string; e2eRoot: () => string; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { [x: string]: any; }, string, { trashVisible: boolean; showCrumbs: boolean; showFilterBar: boolean; showViewSwitcher: boolean; openTrigger: "single" | "double"; }, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & { beforeCreate?: (() => void) | (() => void)[]; created?: (() => void) | (() => void)[]; beforeMount?: (() => void) | (() => void)[]; mounted?: (() => void) | (() => void)[]; beforeUpdate?: (() => void) | (() => void)[]; updated?: (() => void) | (() => void)[]; activated?: (() => void) | (() => void)[]; deactivated?: (() => void) | (() => void)[]; beforeDestroy?: (() => void) | (() => void)[]; beforeUnmount?: (() => void) | (() => void)[]; destroyed?: (() => void) | (() => void)[]; unmounted?: (() => void) | (() => void)[]; renderTracked?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; renderTriggered?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[]; }; $forceUpdate: () => void; $nextTick: typeof nextTick; $watch any)>(source: T, cb: T extends ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: any) => infer R ? ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [R, R, OnCleanup]) => any : ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [any, any, OnCleanup]) => any, options?: WatchOptions): WatchStopHandle; } & Readonly<{ trashVisible: boolean; showCrumbs: boolean; showFilterBar: boolean; showViewSwitcher: boolean; openTrigger: "single" | "double"; }> & Omit string; toUser: (wire: string) => string; clamp: (p: string) => string; rootLabel?: string; rootPath?: string; floor?: string; multiRoot?: boolean; virtualRows?: () => FileNode[]; trashVisible?: boolean; navOffersTrash?: boolean; rows?: FileNode[]; loading?: boolean; error?: string; order?: ListingOrder; viewMode: ViewMode; viewModes?: ViewMode[]; showCrumbs?: boolean; showFilterBar?: boolean; filterMode?: "full" | "find"; findLabel?: string; showViewSwitcher?: boolean; crumbSubfolders?: { label: string; adapterPath: string; }[]; folderKey?: string; showParentPath?: boolean; trash?: boolean; clipped?: Set; extraFilters?: DriveFilters | null; extraFiltersOnServer?: boolean; canWrite?: boolean; canPaste?: boolean; selected: Set; filters: DriveFilters; thumbSrc?: (n: FileNode) => string | null; folderPreviews?: boolean; keepBadgeFor?: (n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null; starredIds?: Set; starOverrides?: Map; starEnabled?: boolean; apiBase?: string; authHeaders?: () => Record | Promise>; authCredentials?: RequestCredentials; e2eActive?: boolean; bodyOverride?: boolean; openTrigger?: "single" | "double"; }> & Readonly<{ [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; }>, "reload" | "rowCount" | "dirPerm" | "goUp" | "getPath" | "visibleNodes" | "loadFolder" | "rowPaths" | "e2eRoot" | ("trashVisible" | "showCrumbs" | "showFilterBar" | "showViewSwitcher" | "openTrigger")> & { reload: () => Promise; goUp: () => void; getPath: () => string; visibleNodes: () => FileNode[]; loadFolder: (target?: string) => Promise; rowCount: () => number; rowPaths: () => string[]; dirPerm: () => string; e2eRoot: () => string; } & {} & ComponentCustomProperties & {} & { $slots: { heading?(_: {}): any; banners?(_: {}): any; body?(_: {}): any; empty?(_: {}): any; }; }) | null; splitPaneRef: ({ $: ComponentInternalInstance; $data: {}; $props: { readonly [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; readonly paneId: PaneId; readonly api: FileApi; readonly locale: LocaleCode; readonly theme?: ThemeMode | undefined; readonly focused?: boolean | undefined; readonly closable?: boolean | undefined; readonly path: string; readonly selfDriven?: boolean | undefined; readonly qualify: (p: string) => string; readonly toUser: (wire: string) => string; readonly clamp: (p: string) => string; readonly rootLabel?: string | undefined; readonly rootPath?: string | undefined; readonly floor?: string | undefined; readonly multiRoot?: boolean | undefined; readonly virtualRows?: (() => FileNode[]) | undefined; readonly trashVisible?: boolean | undefined; readonly navOffersTrash?: boolean | undefined; readonly rows?: FileNode[] | undefined; readonly loading?: boolean | undefined; readonly error?: string | undefined; readonly order?: ListingOrder | undefined; readonly viewMode: ViewMode; readonly viewModes?: ViewMode[] | undefined; readonly showCrumbs?: boolean | undefined; readonly showFilterBar?: boolean | undefined; readonly filterMode?: "full" | "find" | undefined; readonly findLabel?: string | undefined; readonly showViewSwitcher?: boolean | undefined; readonly crumbSubfolders?: { label: string; adapterPath: string; }[] | undefined; readonly folderKey?: string | undefined; readonly showParentPath?: boolean | undefined; readonly trash?: boolean | undefined; readonly clipped?: Set | undefined; readonly extraFilters?: (DriveFilters | null) | undefined; readonly extraFiltersOnServer?: boolean | undefined; readonly canWrite?: boolean | undefined; readonly canPaste?: boolean | undefined; readonly selected: Set; readonly filters: DriveFilters; readonly thumbSrc?: ((n: FileNode) => string | null) | undefined; readonly folderPreviews?: boolean | undefined; readonly keepBadgeFor?: ((n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null) | undefined; readonly starredIds?: Set | undefined; readonly starOverrides?: Map | undefined; readonly starEnabled?: boolean | undefined; readonly apiBase?: string | undefined; readonly authHeaders?: (() => Record | Promise>) | undefined; readonly authCredentials?: RequestCredentials | undefined; readonly e2eActive?: boolean | undefined; readonly bodyOverride?: boolean | undefined; readonly openTrigger?: "single" | "double" | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps; $attrs: Attrs; $refs: { [x: string]: unknown; }; $slots: Readonly<{ [name: string]: Slot | undefined; }>; $root: ComponentPublicInstance | null; $parent: ComponentPublicInstance | null; $host: Element | null; $emit: (event: string, ...args: any[]) => void; $el: HTMLElement; $options: ComponentOptionsBase string; toUser: (wire: string) => string; clamp: (p: string) => string; rootLabel?: string; rootPath?: string; floor?: string; multiRoot?: boolean; virtualRows?: () => FileNode[]; trashVisible?: boolean; navOffersTrash?: boolean; rows?: FileNode[]; loading?: boolean; error?: string; order?: ListingOrder; viewMode: ViewMode; viewModes?: ViewMode[]; showCrumbs?: boolean; showFilterBar?: boolean; filterMode?: "full" | "find"; findLabel?: string; showViewSwitcher?: boolean; crumbSubfolders?: { label: string; adapterPath: string; }[]; folderKey?: string; showParentPath?: boolean; trash?: boolean; clipped?: Set; extraFilters?: DriveFilters | null; extraFiltersOnServer?: boolean; canWrite?: boolean; canPaste?: boolean; selected: Set; filters: DriveFilters; thumbSrc?: (n: FileNode) => string | null; folderPreviews?: boolean; keepBadgeFor?: (n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null; starredIds?: Set; starOverrides?: Map; starEnabled?: boolean; apiBase?: string; authHeaders?: () => Record | Promise>; authCredentials?: RequestCredentials; e2eActive?: boolean; bodyOverride?: boolean; openTrigger?: "single" | "double"; }> & Readonly<{ [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; }>, { reload: () => Promise; goUp: () => void; getPath: () => string; visibleNodes: () => FileNode[]; loadFolder: (target?: string) => Promise; rowCount: () => number; rowPaths: () => string[]; dirPerm: () => string; e2eRoot: () => string; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { [x: string]: any; }, string, { trashVisible: boolean; showCrumbs: boolean; showFilterBar: boolean; showViewSwitcher: boolean; openTrigger: "single" | "double"; }, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & { beforeCreate?: (() => void) | (() => void)[]; created?: (() => void) | (() => void)[]; beforeMount?: (() => void) | (() => void)[]; mounted?: (() => void) | (() => void)[]; beforeUpdate?: (() => void) | (() => void)[]; updated?: (() => void) | (() => void)[]; activated?: (() => void) | (() => void)[]; deactivated?: (() => void) | (() => void)[]; beforeDestroy?: (() => void) | (() => void)[]; beforeUnmount?: (() => void) | (() => void)[]; destroyed?: (() => void) | (() => void)[]; unmounted?: (() => void) | (() => void)[]; renderTracked?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; renderTriggered?: ((e: DebuggerEvent) => void) | ((e: DebuggerEvent) => void)[]; errorCaptured?: ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: ComponentPublicInstance | null, info: string) => boolean | void)[]; }; $forceUpdate: () => void; $nextTick: typeof nextTick; $watch any)>(source: T, cb: T extends ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: any) => infer R ? ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [R, R, OnCleanup]) => any : ( /** * FileExplorer — the public Vue component, panel + PWA + standalone use. * * Orchestrates: * - Directory listing (useFileApi) * - Chunked multipart upload (useUploadChunked) + drag & drop * - Selection + keyboard shortcuts * - Context menu (Teleport-based) with per-target actions * - Modal flows: newFolder / rename / delete / share / preview * - Eager Monaco preload so the code-edit path is snappy * * All backend endpoints arrive via the `config` prop. Auth is bearer * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows * the difference. */ ...args: [any, any, OnCleanup]) => any, options?: WatchOptions): WatchStopHandle; } & Readonly<{ trashVisible: boolean; showCrumbs: boolean; showFilterBar: boolean; showViewSwitcher: boolean; openTrigger: "single" | "double"; }> & Omit string; toUser: (wire: string) => string; clamp: (p: string) => string; rootLabel?: string; rootPath?: string; floor?: string; multiRoot?: boolean; virtualRows?: () => FileNode[]; trashVisible?: boolean; navOffersTrash?: boolean; rows?: FileNode[]; loading?: boolean; error?: string; order?: ListingOrder; viewMode: ViewMode; viewModes?: ViewMode[]; showCrumbs?: boolean; showFilterBar?: boolean; filterMode?: "full" | "find"; findLabel?: string; showViewSwitcher?: boolean; crumbSubfolders?: { label: string; adapterPath: string; }[]; folderKey?: string; showParentPath?: boolean; trash?: boolean; clipped?: Set; extraFilters?: DriveFilters | null; extraFiltersOnServer?: boolean; canWrite?: boolean; canPaste?: boolean; selected: Set; filters: DriveFilters; thumbSrc?: (n: FileNode) => string | null; folderPreviews?: boolean; keepBadgeFor?: (n: FileNode) => "kept" | "syncing" | "cloud" | "partial" | null; starredIds?: Set; starOverrides?: Map; starEnabled?: boolean; apiBase?: string; authHeaders?: () => Record | Promise>; authCredentials?: RequestCredentials; e2eActive?: boolean; bodyOverride?: boolean; openTrigger?: "single" | "double"; }> & Readonly<{ [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; }>, "reload" | "rowCount" | "dirPerm" | "goUp" | "getPath" | "visibleNodes" | "loadFolder" | "rowPaths" | "e2eRoot" | ("trashVisible" | "showCrumbs" | "showFilterBar" | "showViewSwitcher" | "openTrigger")> & { reload: () => Promise; goUp: () => void; getPath: () => string; visibleNodes: () => FileNode[]; loadFolder: (target?: string) => Promise; rowCount: () => number; rowPaths: () => string[]; dirPerm: () => string; e2eRoot: () => string; } & {} & ComponentCustomProperties & {} & { $slots: { heading?(_: {}): any; banners?(_: {}): any; body?(_: {}): any; empty?(_: {}): any; }; }) | null; ctxRef: CreateComponentPublicInstanceWithMixins & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { select: (action: ContextAction, target: FileNode[]) => any; }, PublicProps, {}, false, {}, {}, GlobalComponents, GlobalDirectives, string, { sheetEl: HTMLDivElement; menuEl: HTMLDivElement; }, any, ComponentProvideOptions, { P: {}; B: {}; D: {}; C: {}; M: {}; Defaults: {}; }, Readonly<{ locale: LocaleCode; actions: ContextAction[]; theme?: ThemeMode; sheet?: boolean; }> & Readonly<{ onSelect?: ((action: ContextAction, target: FileNode[]) => any) | undefined; }>, { show: (ev: { clientX: number; clientY: number; }, nodes: FileNode[]) => Promise; hide: () => void; }, {}, {}, {}, {}> | null; fileInputEl: HTMLInputElement; }, HTMLDivElement>; declare const __VLS_component_2: DefineComponent<__VLS_Props_21, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { retry: () => any; pin: (pin: string) => any; "update:locale": (v: string) => any; }, string, PublicProps, Readonly<__VLS_Props_21> & Readonly<{ onRetry?: (() => any) | undefined; onPin?: ((pin: string) => any) | undefined; "onUpdate:locale"?: ((v: string) => any) | undefined; }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>; declare const __VLS_component_3: DefineComponent<__VLS_Props_42, { reload: typeof reload; goUp: typeof goUp; getPath: typeof getPath; visibleNodes: typeof visibleNodes; loadFolder: typeof loadFolder; rowCount: typeof rowCount; rowPaths: typeof rowPaths; dirPerm: typeof dirPerm; e2eRoot: typeof e2eRoot; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { [x: string]: any; }, string, PublicProps, Readonly<__VLS_Props_42> & Readonly<{ [x: `on${Capitalize}`]: ((...args: any) => any) | undefined; }>, { trashVisible: boolean; showCrumbs: boolean; showFilterBar: boolean; showViewSwitcher: boolean; openTrigger: "single" | "double"; }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLElement>; declare const __VLS_component_4: DefineComponent<__VLS_Props_54, { store: ComputedRef>; layout: ComputedRef>; pinLead: ComputedRef; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & { sort: (payload: { key: string; dir: "asc" | "desc"; }) => any; page: (page: number) => any; "row-click": (row: any, ev: MouseEvent) => any; "row-dblclick": (row: any, ev: MouseEvent) => any; "row-contextmenu": (row: any, ev: MouseEvent) => any; "check-click": (row: any, ev: MouseEvent) => any; "row-action": (key: string, row: any, action: ContextAction) => any; "row-dragstart": (row: any, ev: DragEvent) => any; "row-dragover": (row: any, ev: DragEvent) => any; "row-dragleave": (row: any, ev: DragEvent) => any; "row-drop": (row: any, ev: DragEvent) => any; "row-touchstart": (row: any, ev: TouchEvent) => any; "row-touchend": (ev: TouchEvent) => any; "row-touchmove": (ev: TouchEvent) => any; }, string, PublicProps, Readonly<__VLS_Props_54> & Readonly<{ onSort?: ((payload: { key: string; dir: "asc" | "desc"; }) => any) | undefined; onPage?: ((page: number) => any) | undefined; "onRow-click"?: ((row: any, ev: MouseEvent) => any) | undefined; "onRow-dblclick"?: ((row: any, ev: MouseEvent) => any) | undefined; "onRow-contextmenu"?: ((row: any, ev: MouseEvent) => any) | undefined; "onCheck-click"?: ((row: any, ev: MouseEvent) => any) | undefined; "onRow-action"?: ((key: string, row: any, action: ContextAction) => any) | undefined; "onRow-dragstart"?: ((row: any, ev: DragEvent) => any) | undefined; "onRow-dragover"?: ((row: any, ev: DragEvent) => any) | undefined; "onRow-dragleave"?: ((row: any, ev: DragEvent) => any) | undefined; "onRow-drop"?: ((row: any, ev: DragEvent) => any) | undefined; "onRow-touchstart"?: ((row: any, ev: TouchEvent) => any) | undefined; "onRow-touchend"?: ((ev: TouchEvent) => any) | undefined; "onRow-touchmove"?: ((ev: TouchEvent) => any) | undefined; }>, { total: number; sort: { key: string; dir: "asc" | "desc"; } | null; theme: ThemeMode; locale: LocaleCode; page: number; groups: Group[]; empty: string | null; ariaLabel: string; rowKey: string | ((row: any) => string | number); tableId: string; columnStore: ColumnStore; candidates: string[]; metrics: LayoutMetrics; isSelected: (row: any) => boolean; sortClosed: string | null; rowClass: (row: any, index: number) => string | Record | undefined; rowAttrs: (row: any) => Record; rowActions: (row: any) => ContextAction[]; rowActionsTestId: (row: any) => string | undefined; actionsWidth: number; framed: boolean; pageSize: number; pages: number; footNote: string; }, {}, {}, {}, string, ComponentProvideOptions, false, { listEl: HTMLDivElement; colMenuEl: HTMLDivElement; }, any>; declare type __VLS_Props = { config: ExplorerConfig; }; declare type __VLS_Props_10 = { /** The unread count as the server last reported it. */ count: number | null | undefined; }; declare type __VLS_Props_11 = { /** The rows, in order. */ actions: AccountAction[]; /** Who is signed in — a name, an address and a picture, any of them absent. */ user?: AccountPerson | null; /** Which filex this is — the server's own answer (capabilities). */ version?: string | null; /** The active language — any offered one, a language pack's included. */ locale: string; /** Accessible name when this account has neither a name nor an address. */ fallbackLabel: string; }; declare type __VLS_Props_12 = { modelValue: boolean; /** Everything this dialog cannot know by itself (lib/userSettingsHost). */ host: UserSettingsHost; /** The pane to open on (the admin Notifications page opens `notifications`). */ initialSection?: 'profile' | 'preferences' | 'notifications' | 'security' | 'ai'; }; declare type __VLS_Props_13 = { /** The entries, already limited to what the reader may open. */ entries: MegaMenuEntry[]; /** The navigation's accessible name. */ label: string; mode?: 'bar' | 'list'; }; declare type __VLS_Props_14 = { locale: string; /** A phone: a button and a layer over the window, instead of the box. */ compact?: boolean; /** What the host can find by itself (pages, settings), already limited to what the reader may open. */ items: PanelSearchItem[]; /** The server's hits for a query (people, keys, apps…), already limited by the reader's role. */ remote?: (query: PanelSearchQuery) => Promise; /** File hits for words, at most `limit`. */ files?: (text: string, limit: number) => Promise; /** Where the recent searches live. */ recent?: PanelRecentStore; /** The palette key opens this search (only one search on a page should say yes). */ shortcut?: boolean; }; declare type __VLS_Props_15 = { apiBase?: string; authHeaders?: () => Record | Promise>; /** Credentials mode, from the explorer's auth kind. ⚠ Defaults to * 'same-origin': a credentialed cross-origin request cannot be answered * with ACAO:* , so hardcoding 'include' broke this call in every embed * served from a different origin to the API. */ authCredentials?: RequestCredentials; limit?: number; /** Optional refresh trigger — incrementing this re-fetches. */ refreshKey?: number | string; /** * The explorer's language. ⚠ This tray printed English whatever the * explorer spoke ("Recently opened", "5m ago") — strings no language pack * could reach. Absent = English. */ locale?: string; }; declare type __VLS_Props_16 = { open: boolean; locale: LocaleCode; theme?: ThemeMode; /** The host's API wrapper — the dialog does its own listing + create. */ api: FileApi; /** * `capabilities.newdoc_types`. Undefined/null on a server that predates the * feature; the host should not offer the entry at all in that case, and if * it does anyway the dialog degrades to its empty state rather than guessing. */ types?: NewDocType[] | null; /** Adapter-qualified folder in view, e.g. `main://docs`. Empty at the root. */ currentPath: string; /** Storage names, for the destination browser's top level. */ storages?: string[]; /** Resolved by the host: is there a usable OnlyOffice / drawio? */ onlyOfficeReady?: boolean; drawioReady?: boolean; /** Could this person set a missing service up (`capabilities.caller_admin`)? * Adds WHERE to the line that says which families are missing. */ canConfigure?: boolean; /** Make a DRAFT rather than the file (issue #71): the server keeps drafts * for this person (`capabilities.drafts`). Absent: the file is created. */ drafts?: boolean; }; declare type __VLS_Props_17 = { open: boolean; api: Pick; locale: LocaleCode; /** Storage names. More than one adds a drives level above the roots. */ storages?: string[]; /** Wire path to open at — normally the folder the user is looking at. */ startAt?: string; /** * Folders that must not be offered: what is being moved. A destination equal * to one of these, or inside one, is shown greyed with a reason rather than * hidden, because a folder that silently vanishes reads as data loss. */ moving?: string[]; /** * Titles the dialog and names its confirm button. `save` is an app's * save-as (`file.saveAs`, AppFrame): "Save here". */ mode?: 'move' | 'copy' | 'choose' | 'save'; /** * The dialog's title, when the caller has a better one than the mode's — * an app's save-as names the app and the file (security review UI-14: * what filex draws for an app says who is asking). */ title?: string; /** The explorer's theme, for a dialog drawn outside its root. */ theme?: 'light' | 'dark' | 'auto'; /** * What the answer is. `dir` (the default) is the folder you are standing in; * `file` lists the files too and the answer is the one you tick — an app * plugin's `file-chooser` asks for this. A file pick has no write check: * the chooser reads, it never writes. */ pick?: 'dir' | 'file'; /** The parent is running the operation: the dialog stays up but inert. */ busy?: boolean; /** * wiring:e2 vault — the vault folders the explorer knows (opened here, or * remembered). The listings add the ones the server names * (`e2e_vault`, `e2e_vault_root`); `api` lists an open vault from its index. */ vaultRoots?: string[]; /** wiring:e2 vault — the vault the items are in; null or absent: outside * every vault. Inside a vault only that vault is a destination; outside, * no vault is (docs/E2E-VAULT-FORMAT.md: that is an upload or a download). */ vaultFrom?: string | null; }; declare type __VLS_Props_18 = { options: ChoiceOption[]; /** A string (single) or a list of strings (several). */ modelValue: string | string[] | null | undefined; multi?: boolean; disabled?: boolean; invalid?: boolean; /** One strip with the chosen cell filled: two to four short answers inline. */ segmented?: boolean; /** Segmented, and each cell shows only its icon (the label names it). */ iconOnly?: boolean; /** Ties the group to its own label for a screen reader. */ ariaLabelledby?: string; ariaLabel?: string; /** `surface-choice` → `data-testid="surface-choice-"`. */ testidPrefix?: string; /** The group's own `data-testid` (`choice-buttons` when not given). */ testid?: string; }; declare type __VLS_Props_19 = { modelValue?: Value | null; options: SelectOption[]; id?: string; name?: string; /** Shown in the field while no option is chosen. */ placeholder?: string; required?: boolean; disabled?: boolean; invalid?: boolean; /** The field's height: the `--fe-h-sm|md|lg` control heights. */ size?: 'sm' | 'md' | 'lg'; ariaLabel?: string; ariaLabelledby?: string; ariaDescribedby?: string; /** The message a form's own validation carries when a required value is missing. */ requiredMessage?: string; /** `data-testid` of the combobox; the list is `-list`, an option `-option-`. */ testid?: string; }; declare type __VLS_Props_2 = { open: boolean; locale: LocaleCode; file: FileNode | null; previewUrl: (path: string) => string; downloadUrl: (path: string) => string; onlyOfficeBase?: string | null; onlyOfficeConfigEndpoint?: string | null; /** * Could this person set up a missing service (`capabilities.caller_admin`)? * Only changes WHICH sentence a missing document server gets: an * administrator is told where to set it up, everybody else that it is not * available here and how to get the file anyway. */ canConfigure?: boolean; saveTextEndpoint?: string | null; /** Endpoint for the archive (zip/rar/7z/tar) member list. Forwarded to * ArchiveViewer, which otherwise assumes a same-origin path. */ archiveListEndpoint?: string | null; openMode?: 'edit' | 'view'; authHeaders?: () => Record | Promise>; authCredentials?: RequestCredentials; /** New rich-viewer config (forwarded by FileExplorer from ExplorerConfig). */ drawioUrl?: string | null; pdfWorkerUrl?: string | null; pdfSaveUrl?: string | null; /** Standalone full-screen viewer route — `?path=…&storage=…&type=…`. */ viewerBaseUrl?: string | null; newTabEnabled?: boolean; /** Drop the dialog chrome (backdrop tint, header bar, footer actions) * so the viewer fills the full viewport. Used by the standalone * /files/edit route where the browser tab IS the container — a * modal frame on top of the editor just steals real estate. */ chromeless?: boolean; /** When the dynamic-viewer chunk fails to load, fall back to the * legacy native renderer (e.g. native `` for PDFs). */ /** Explicit theme. Forwarded to the underlying Modal (which tags * its backdrop with `.fe--theme-{light,dark}` so the CSS variable * override matches the host admin shell) and to Monaco (vs vs * vs-dark). When unset Monaco falls back to `prefers-color-scheme` * and the modal cascade follows whatever `.fe` parent it gets. */ theme?: 'light' | 'dark' | 'auto'; /** 1-based position of `file` in the host's current file list. */ index?: number; /** How many files that list holds. `index` + `total` draw "1 of 9"; * with either missing the counter is simply absent — a counter that * guesses is worse than no counter. */ total?: number; /** Draw the prev/next chevrons even when index/total are unknown. * QuickLook sets it because its host already answers `nav`. */ navEnabled?: boolean; /** API origin for the star toggle — same meaning as ExplorerConfig.apiBase. * Omitted = same origin, which is what the admin UI wants. */ apiBase?: string; /** Draw the share action. Off by default on purpose: a share button with * no host listening to `@share` is a control that lies. */ shareEnabled?: boolean; /** * Open `file` AS this type — an extension, no dot — instead of by its name * (#56). The New document dialog made `LICENSE` as Plain text, so it opens * in the text editor although its name picks no viewer at all; `README` * made as Markdown opens in the markdown editor. Unset: the name decides, * as it always has. The host passes it for the one file it applies to. */ openAs?: string | null; /** * Drafts (issue #71): the drafts API, `/api/files/drafts`. With it, a * file whose path is a draft's (`://.filex-drafts/…`, lib/ * internalPaths `draftKeyOf`) is edited AS a draft: the bar across the top * says where it will be saved and carries the Save that puts it there, * closing asks what should become of it (DraftCloseModal), and leaving the * page with edits in it asks the browser's own question. Every host passes * it — the explorer, the standalone editor tab, the desktop's document * windows (which load that tab) — so a draft behaves the same wherever it * is opened. Absent: nothing here changes. */ draftsEndpoint?: string | null; /** * v4 — an app's own interface that opens this file (a `viewer` view the * host matched to it, docs/APP-PLUGINS-API.md → An app's own interface). * It takes the built-in viewer's place: the same bar, the same draft * behaviour, the same close question. Needs `api`. */ appViewer?: PluginViewRow | null; /** * 0.51 - the host opens this file in ONLYOFFICE although its extension picks * another viewer: a .csv, whose handler (lib/appViewer) is ONLYOFFICE by * default while it is configured, or "Open with" chose it. The office editor * takes the built-in viewer's place, with an office document's Edit button. */ inOffice?: boolean; /** The explorer's API — what an app's interface reads and saves through. */ api?: FileApi | null; /** The person's display name, for an app's interface. */ userName?: string; /** Storage names an app's save-as may span (AppFrame `storages`); absent, * the frame asks the server's listing. */ storages?: string[]; /** * #184 - the document open in the office editor changed OUTSIDE it. The * host says so (the desktop app watches the file on the computer, the web * hears the server's realtime feed); the viewer decides: nothing of this * editor's unsaved, the new version is loaded with a note; otherwise the * person is asked which version stays (OutsideChangeModal), and the answer * goes back as `outside-resolved`. lib/outsideChange has the rule. */ outsideChange?: OutsideChange | null; }; declare type __VLS_Props_20 = { /** * `share` → `/s/`; `request` → `/d/`. * * ⚠ `/p/` is RETIRED (v3 §1: an app's public page is a share now) * and the server 301s it to the share, so there is no third kind here and * no second code path for the transition. */ kind: 'share' | 'request'; /** From the route. Empty (a URL that is not a token) draws "not available". */ token?: string; /** * API origin; empty = same origin. Unset: the base path this document was * served under (lib/appBase) — `/filex` for the admin app under a sub-path, * `''` everywhere else. */ base?: string; /** Forced by the host; otherwise the device's choice, then the browser's. */ locale?: LocaleCode | string; /** Forced by the host; otherwise the instance's default, then the device's. */ theme?: ThemeMode; }; declare type __VLS_Props_21 = { status: PublicStatus; locale: LocaleCode | string; /** `light` | `dark` — already resolved; `auto` is the caller's to answer. */ theme?: 'light' | 'dark' | ThemeMode; /** The instance's name (branding, or the product's own). */ brandName: string; logoUrl?: string; /** `--fe-*` overrides from the instance's accent colour. */ accentStyle?: Record; footerText?: string; hidePoweredBy?: boolean; /** * How much room the body needs (`lib/publicLayout`). Every state that is * NOT `ready` overrides it to `gate`: a PIN box, "this link is not * available" and "thank you" are the same short, centred card whatever * was going to be behind them. */ layout?: PublicLayout; /** * The round badge a READY body opens with — `file` or `folder`. Every * other badge is a state of the shell's own (a padlock, a tick, a warning * sign, a spinner) and is not the caller's to pick. */ badge?: 'file' | 'folder' | ''; /** The heading: a file name, a folder, a plugin page's title. */ title?: string; /** The line under it — a share message, a signature request's subject. */ subject?: string; /** RFC 3339, or null for "does not expire". */ expiresAt?: string | null; /** Visits left before the link stops answering; null = uncounted. */ visitsLeft?: number | null; /** * The longest PIN the server lets any link carry (`pin_max`, the one PIN * rule in internal/share). The PIN box stops there; absent = no cap of the * box's own. */ pinMax?: number | null; pinBusy?: boolean; pinFailure?: '' | 'wrong' | 'locked'; lockMessage?: string; /** A failure outside the conversation, in the server's words. */ failure?: string; /** * Drawn INSIDE another page that has a main region of its own - the * admin's Corporate identity preview (PublicLinkPreview), or an embedder's * page. The card is then a plain block, not a `
`: a document has one * main landmark, and a `
` inside another is not valid HTML (the * panel's page and the preview's card were two of them, e2e 204). The link * page itself, which IS the whole page, keeps its `
`. */ embedded?: boolean; }; declare type __VLS_Props_22 = { brandName?: string; logoUrl?: string; /** A hex colour, as the operator typed it; anything else means "none". */ accent?: string; footerText?: string; hidePoweredBy?: boolean; locale: LocaleCode | string; theme?: 'light' | 'dark'; /** The file the sample link shares. */ sample?: { name: string; size: number; mime?: string; }; }; declare type __VLS_Props_23 = { locale: LocaleCode | string; busy?: boolean; /** `wrong` | `locked` | '' — from the composable, not from a status code here. */ failure?: '' | 'wrong' | 'locked'; /** The server's own words for a lock, when it sends any. */ lockMessage?: string; /** * The longest PIN any link may carry, as the SERVER says it (`pin_max`, * internal/share CheckPINLength). ⚠ Not a number of this box's own: it * used to stop at a hard-coded 12 while the server took a PIN of any length * through the API, so such a link could not be opened from this page. * Absent = the box does not cut what is typed; the server answers. */ maxLength?: number; }; declare type __VLS_Props_24 = { link: PublicLinkStore & { downloadUrl: (o?: { zip?: boolean; path?: string; }) => string; noJsUrl: () => string; }; locale: LocaleCode | string; theme?: ThemeMode; }; declare type __VLS_Props_25 = { info: PublicRequestInfo | null; uploads: Array<{ name: string; size: number; percent: number; state: string; error?: string; }>; locale: LocaleCode | string; disabled?: boolean; /** * Leave the folder's name out of the body. The public page's heading is * already that name (`PublicLinkPage` titles a request by its folder), and * printing it again under itself read as a stutter. */ hideFolder?: boolean; }; declare type __VLS_Props_26 = { modelValue: string; /** Shown beside a language an app added ("from "). */ pluginNote?: (plugin: string) => string; }; declare type __VLS_Props_27 = { nodes: SurfaceNode[]; locale: LocaleCode; theme?: ThemeMode; /** Field-level errors the surface carries, keyed by node id / field key. */ errors?: Record; /** The surface's values (node id → value; form fields flat). */ values?: Record; /** Absent in a bare render: choosers and previews say so instead of failing. */ api?: SurfaceApi; /** The plugin the surface belongs to (the people-picker's lookup asks for it). */ plugin?: string; /** Storage names a file-chooser may span; where its picker opens. */ storages?: string[]; startAt?: string; /** The host is talking to the server: inputs and buttons stay put. */ disabled?: boolean; /** A public page's exposed copies (`pub:N`) → a URL the browser may load (M3). */ fileUrl?: FileRefResolver; /** Where pdf.js fetches its worker from; the pinned CDN copy when absent. */ pdfWorkerUrl?: string | null; /** * v3 §2.1 — field keys a refused submit is waiting for. Passed down to the * form so the star and the "required" line land on the FIELD, not in a * banner the person has to map back onto a box themselves. */ invalidKeys?: string[]; /** * v3 §3.2 — `page` means this surface owns the viewport, so a `pdf-fields` * node fits the document to the screen instead of to the text column. The * frame says which; a node never measures the window itself. */ layout?: 'inline' | 'page'; /** The box a `page` layout's document may fill (a CSS length). */ pageHeight?: string; }; declare type __VLS_Props_28 = { /** The conversation this body belongs to (`usePluginSurface`). */ conv: PluginSurfaceStore; locale: LocaleCode; theme?: ThemeMode; /** Absent in a bare render (the public page has no explorer API). */ api?: SurfaceApi; /** The plugin the surface belongs to — the people-picker's lookup asks for it. */ plugin?: string; storages?: string[]; startAt?: string; /** A public page's exposed copies (`pub:N`) → a URL the browser may load. */ fileUrl?: FileRefResolver; /** The last toast the frame collected, if it shows one inline. */ toast?: string; /** * v3 §3.2 — `page` lets a `pdf-fields` node take the viewport instead of * sitting in the document flow. The FRAME knows which it is; the nodes do * not, and must not guess from the window size (an embed in a narrow * column is not a page). */ layout?: 'inline' | 'page'; /** Where the document may grow to in `page` layout — the frame's own box. */ pageHeight?: string; }; declare type __VLS_Props_29 = { conv: PluginSurfaceStore; locale: LocaleCode; /** `plugin-view` → `data-testid="plugin-view-action-"`. */ testidPrefix: string; /** The inspector's row is compact; every other frame uses the full size. */ small?: boolean; }; declare type __VLS_Props_3 = { starred: boolean; nodeId: number; apiBase?: string; /** Auth header builder injected by the parent file explorer. */ authHeaders?: () => Record | Promise>; /** Credentials mode, from the explorer's auth kind. ⚠ Defaults to * 'same-origin': a credentialed cross-origin request cannot be answered * with ACAO:* , so hardcoding 'include' broke this call in every embed * served from a different origin to the API. */ authCredentials?: RequestCredentials; /** Compact mode for grid view (no label, just the icon). */ compact?: boolean; /** * Card mode — the same button sitting ON a grid/gallery tile instead of in * a list cell: a round translucent chip in the tile's corner. It is the SAME * component, deliberately: a card star written separately is a second * starring path, and the two drift the first time one of them is fixed. */ card?: boolean; /** Locale for the title/label. ⚠ The strings used to be hardcoded English * ("Star"/"Unstar"), which is a Turkish user's only untranslated control in * the row. */ locale?: LocaleCode; }; declare type __VLS_Props_30 = { locale: LocaleCode; theme?: ThemeMode; api: FileApi; plugin: string; view: string; /** Adapter-qualified path the page was opened on; echoed on every event. */ path?: string; /** Storage names a file-chooser may span; where its picker opens. */ storages?: string[]; startAt?: string; /** Where "back to the files" goes. Absent: the button is not drawn. */ backHref?: string; /** Where the operations tray lives, for the queued state. */ opsHref?: string; /** * The prefix the SPA is served from (`/admin/`, `/drive/`) — what a * `Surface.open` address is built against (v3 §3.0). Absent: the request * is dropped, because a wrong address is worse than none. */ mountBase?: string; /** * The CHROME around the conversation; the conversation itself is the same * either way. * * `page` (the default) is a browser tab of its own: a title bar, one column * at reading width, the viewport's height, a footer stuck to its bottom. * `embedded` is the same screen drawn INSIDE a host's page — the admin * panel's Apps section, an embed that already has a header — and brings * none of those three, because the host has already said where the screen * begins, how wide it is and what it is called. * * ⚠ A step carrying a document keeps the INLINE layout when embedded. The * `page` rule fits a PDF to the VIEWPORT (v3 §3.2); inside a host's page * the viewport is not this frame's box, so the same rule would fit the * document to a height the frame does not have. */ frame?: 'page' | 'embedded'; /** * The section of a home page to open (`surface.sections`), as the host's * address says. ⚠ The HOST owns it: choosing a section emits `section` * and the host puts it in its URL, which comes back here — so Back walks * the sections, and a link names one. */ section?: string; }; declare type __VLS_Props_31 = { id: string; modes?: unknown; width?: unknown; height?: unknown; modelValue: SignatureValue | null | undefined; locale: LocaleCode; disabled?: boolean; invalid?: boolean; /** The face a typed signature starts in (a `lib/signFonts` key). */ font?: unknown; /** * The faces a typed signature may use; one face means no picker at all. * A box whose face the REQUESTER chose passes just that one, so what the * signer sees is what the stamper prints. */ fonts?: unknown; /** * The box's name, drawn as a field label — with the same `*` a required * form field carries (v3). ⚠ The owner, 2026-09-21: "imza zorunluydu ama * imzanın zorunlu olduğunu `*` ile belirtmiyoruz". The signature was the * one required box on the screen that did not say so, because it was a * plain text line above the pad rather than a label. */ label?: string; required?: boolean; }; declare type __VLS_Props_32 = { id: string; src?: PdfFieldsSource; mode?: string; fields?: unknown; signers?: unknown; signer?: string; types?: unknown; /** `define` / `edit`: the date layouts a `date` box may be written in. */ formats?: unknown; /** The date control's three captions, as the plugin words them (`date_labels`). */ dateLabels?: unknown; /** Edit: the `fields[]` the host holds; fill: `{fields: [{id, value}]}`. */ modelValue?: unknown; locale: LocaleCode; theme?: ThemeMode; disabled?: boolean; invalid?: boolean; api?: Pick; fileUrl?: FileRefResolver; pdfWorkerUrl?: string | null; /** * v3 §3.2 — `page`: this node owns the screen, so the document is fitted * to the BOX rather than to the text column, and the person never scrolls * in two directions to reach a signature box. The zoom controls stay: * fitting is the starting point, not a cage. */ layout?: 'inline' | 'page'; /** The height a `page` layout may fill (a CSS length). Default: the frame's. */ pageHeight?: string; /** * The lines the plugin can print under a signature, offered per signature * box on the author's screens (`lib/pdfFields.PdfStampLine`). */ stampLines?: unknown; }; declare type __VLS_Props_33 = { /** The reader's language. Defaults to English, as every core surface does. */ locale?: LocaleCode | string; }; declare type __VLS_Props_34 = { /** The server's release (`capabilities.release`, `v0.54.0`). Unknown → * nothing drawn. */ version?: string | null; }; declare type __VLS_Props_35 = { open: boolean; locale: LocaleCode; /** Host mode (forwarded to Modal so the backdrop themes correctly). */ theme?: ThemeMode; /** Resolved mode — decides which variant the preview cards paint. */ dark: boolean; /** Currently selected theme id. */ current: string; /** The user's own light/dark preference; 'host' = never chosen. */ mode: ThemeModePref; /** What the embedder asked for — what 'host' resolves to. */ hostMode: ThemeMode; }; declare type __VLS_Props_36 = { locale: LocaleCode; /** Resolved mode — decides which variant the preview cards paint. */ dark: boolean; /** Currently selected theme id. */ current: string; /** Draw the explanatory line above the grid. Default true. */ hint?: boolean; }; declare type __VLS_Props_37 = { locale: LocaleCode; /** `''` = the default row; otherwise an IANA id. */ modelValue: string; /** What `''` resolves to on this surface — the zone and the tier. */ fallback: ResolvedTimeZone; disabled?: boolean; /** Id for the input, so the host's own `