import './settingsTab.component.scss'; import './settingsNav.scss'; import { NgZone } from '@angular/core'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ConfigService } from 'tabby-core'; import { SidebarSnippet } from '../configProvider'; import { SidebarPlusEditorService } from '../editorLauncher.service'; import { SidebarPlusI18nService } from '../i18n'; import { SidebarPlusSnippetsService } from '../snippets.service'; /** * The plugin's page in Tabby's settings. * * Two pages, split by *ownership* rather than by subject (user's rule): every * setting sits under the switch of the feature it belongs to, so switching that * feature off takes its options away with it. Only what governs the whole * plugin — or Tabby itself — stays on the general page. */ export declare class SidebarPlusSettingsTabComponent { private editors; private config; private snippetsService; private ngbModal; private zone; private i18n; /** * Tabby's own settings pages carry it — it is what gives the page its * padding and max width. Dropped when this page is mounted as a tab of the * unified "Better Tabby" panel (BetterPanelEmbedded token present): the * host carries the layout then. */ contentBox: boolean; /** * The page to open on, set by whoever is about to open this tab and read * once here. * * Static because the component does not exist yet at that point: the * sidebar's "Gérer la bibliothèque…" asks Tabby for the settings tab, and * Angular builds this only once the tab is shown. Reset on read so it * cannot pin the page for every later visit. */ static requestedSection: 'general' | 'features' | 'snippets' | null; /** Which page of this tab is showing. Deliberately not persisted: a reading position, not a preference. */ section: 'general' | 'features' | 'snippets'; editorPath: string; /** The snippet open in the editor, `null` when the list is showing. A blank `id` means it is new. */ draft: SidebarSnippet | null; constructor(editors: SidebarPlusEditorService, config: ConfigService, snippetsService: SidebarPlusSnippetsService, ngbModal: NgbModal, zone: NgZone, i18n: SidebarPlusI18nService, embedded: unknown); /** `href='#'` is what gives the tabs their pointer and focus behaviour; without this the page would jump to the top on every click. */ setSection(section: 'general' | 'features' | 'snippets', event: Event): void; get lblPageTitle(): string; get lblPageSubtitle(): string; get lblGeneral(): string; get lblFeatures(): string; get lblShowSidebar(): string; get lblShowSidebarHint(): string; get lblShowSidebarDesc(): string; get lblHideTransfersMenu(): string; get lblHideTransfersMenuHint(): string; get lblHideTransfersMenuDesc(): string; get lblWrapNames(): string; get lblWrapNamesHint(): string; get lblWrapNamesDesc(): string; get lblFeaturesIntro(): string; get lblTunnels(): string; get lblTunnelsHint(): string; get lblTunnelsDesc(): string; get lblUnavailable(): string; get lblWorkspaces(): string; get lblWorkspacesHint(): string; get lblWorkspacesDesc(): string; get lblPresentation(): string; get lblPresentationHint(): string; get lblPresentationDesc(): string; get lblModeTabs(): string; get lblModeDropdown(): string; get lblActiveToggle(): string; get lblActiveToggleHint(): string; get lblActiveToggleDesc(): string; get lblFilterBar(): string; get lblFilterBarHint(): string; get lblFilterBarDesc(): string; get lblSplitSide(): string; get lblSplitSideHint(): string; get lblSplitSideDesc(): string; get lblSideRight(): string; get lblSideBelow(): string; get lblSideLeft(): string; get lblSideAbove(): string; get lblClearOnLaunch(): string; get lblClearOnLaunchDesc(): string; get lblSnippetsHint(): string; get lblSnippetsDesc(): string; get lblNotes(): string; get lblNotesHint(): string; get lblNotesDesc(): string; get lblRecentProfiles(): string; get lblRecentProfilesHint(): string; get lblRecentProfilesDesc(): string; get lblActiveSessions(): string; get lblActiveSessionsHint(): string; get lblActiveSessionsDesc(): string; get lblPing(): string; get lblPingHint(): string; get lblPingDesc(): string; get lblSftp(): string; get lblSftpHint(): string; get lblSftpDesc(): string; get lblEditor(): string; get lblEditorHint(): string; get lblEditorDesc(): string; get lblEditorPlaceholder(): string; get lblBrowse(): string; get lblClear(): string; get lblDragOut(): string; get lblDragOutHint(): string; get lblDragOutDesc(): string; get lblAutoRefresh(): string; get lblAutoRefreshHint(): string; get lblAutoRefreshDesc(): string; get lblAutoReturn(): string; get lblAutoReturnHint(): string; get lblAutoReturnDesc(): string; get lblDeleteDefault(): string; get lblDeleteDefaultHint(): string; get lblDeleteApplies(): string; get lblDeleteRightClick(): string; get lblDeleteEscape(): string; get lblKeyDel(): string; get lblKeyEsc(): string; get lblOptionCancel(): string; get lblOptionConfirm(): string; get lblDateFormat(): string; get lblDateFormatHint(): string; get lblDateFormatDesc(): string; get lblDateLocale(): string; get lblDateDmy(): string; get lblDateIso(): string; get lblTransfers(): string; get lblTransfersHint(): string; get lblTransfersDesc(): string; get lblSnippetsIntro(): string; get lblNoSnippets(): string; get lblUnusedSummary(): string; get lblUnusedDetail(): string; get lblAttachedNowhere(): string; get lblEdit(): string; get lblDelete(): string; get lblNewSnippet(): string; get lblName(): string; get lblNameDesc(): string; get lblNamePlaceholder(): string; get lblCommand(): string; get lblCommandUse(): string; get lblCommandRequired(): string; get lblCommandDefault(): string; get lblSave(): string; get lblCancel(): string; get lblDraftWarning(): string; /** The per-row "rattaché à N élément(s)" caption — a method because it needs the row's snippet. */ attachedToLabel(snippet: SidebarSnippet): string; get snippets(): SidebarSnippet[]; /** What a deletion would take away, stated before it is done rather than discovered afterwards. */ attachmentCount(snippet: SidebarSnippet): number; /** The placeholders a command reads, listed under it so the library says what each will ask of a profile. */ variablesOf(snippet: SidebarSnippet): { name: string; required: boolean; }[]; /** * Snippets attached nowhere. * * Each row already says so on its own; this is the count, and it only * shows up once there is something to clean. Detaching is the everyday * gesture and deleting is not, so the library fills up with experiments * that nothing points at any more — worth surfacing, not worth nagging * about. */ get unusedCount(): number; newSnippet(): void; editSnippet(snippet: SidebarSnippet): void; cancelEdit(): void; /** An edit changes the command everywhere it is attached — the page says so next to the button. */ saveDraft(): Promise; /** * Deletes the command outright, once confirmed. * * Confirmed and not undoable: the count of what it would take away is the * whole point of asking, and it is knowable *before* rather than after. * The plugin's own modal rather than a system dialog (piège #42), with the * cautious button focused — a reflex Entrée must not delete. */ deleteSnippet(snippet: SidebarSnippet): Promise; get enabled(): boolean; setEnabled(value: boolean): Promise; /** * Whether a block is on — its switch ticked *and* the host still able to * carry it. * * Both halves in one call because the template needs the conjunction * everywhere: it drives the toggle's state and the `*ngIf` on the options * the block owns. `requires` is the precondition id of hostCompat.ts, absent * for blocks that depend on nothing beyond the plugin itself. */ blockOn(key: string, requires?: string): boolean; /** Whether the host still provides a precondition. No id means nothing to require. */ hostHas(id?: string): boolean; /** * Stores the user's own answer, and only that. * * A block the host can no longer carry is shown unavailable with its switch * left as it was, never rewritten to false: that setting is the user's * choice, and overwriting it would lose it the day the host provides the * component again. */ setBlock(key: string, value: boolean): Promise; get searchSplitSide(): string; setSearchSplitSide(value: string): Promise; get searchClearOnLaunch(): boolean; setSearchClearOnLaunch(value: boolean): Promise; get workspaceSelectorMode(): string; setWorkspaceSelectorMode(value: string): Promise; get dragOutFolders(): boolean; setDragOutFolders(value: boolean): Promise; get deleteDefaultButton(): string; setDeleteDefaultButton(value: string): Promise; get dateFormat(): string; /** Applied at once: the date format is part of the SFTP listing's row cache signature, no folder change needed. */ setDateFormat(value: string): Promise; get hideNativeTransfersMenu(): boolean; /** * No repaint to force here: the class on `body` is applied by * SidebarPlusMountService, which is already listening to `config.changed$`. */ setHideNativeTransfersMenu(value: boolean): Promise; get wrapNames(): boolean; /** Applied by the tree's own host binding, which reads the setting on every change detection pass. */ setWrapNames(value: boolean): Promise; get autoRefreshSeconds(): number; /** Clamped to whole seconds and never negative; 0 is the documented "off". */ setAutoRefreshSeconds(value: unknown): Promise; get autoReturnToProfiles(): boolean; setAutoReturnToProfiles(value: boolean): Promise; get pingIntervalSeconds(): number; /** Same clamping as the auto-refresh above: whole seconds, never negative, 0 being the documented "off". */ setPingIntervalSeconds(value: unknown): Promise; save(): Promise; /** * `zone.run()` around the state change, not around the await: the picker * resolves outside Angular's zone, so assigning `editorPath` on the way * back updates the field without repainting it (piège #41). */ browse(): Promise; clear(): Promise; get canOpenWith(): boolean; }