@openfin/workspace 24.1.0 → 24.1.2-alpha.c84bc0a1

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 (52) hide show
  1. package/client-api/src/dock.test.d.ts +1 -0
  2. package/client-api/src/internal/providers.d.ts +26 -0
  3. package/client-api-platform/src/api/app-directory.d.ts +1 -1
  4. package/client-api-platform/src/api/context-menu/index.d.ts +2 -2
  5. package/client-api-platform/src/api/controllers/storage-proxies/channel-storage-proxy.d.ts +19 -0
  6. package/client-api-platform/src/api/controllers/storage-proxies/local-storage-proxy.d.ts +12 -0
  7. package/client-api-platform/src/api/controllers/theme-storage-controller-store.d.ts +17 -0
  8. package/client-api-platform/src/api/controllers/theme-storage-controller.d.ts +25 -19
  9. package/client-api-platform/src/api/pages/index.d.ts +7 -2
  10. package/client-api-platform/src/api/theming.d.ts +2 -0
  11. package/client-api-platform/src/api/utils.d.ts +2 -7
  12. package/client-api-platform/src/init/browser-window-focus.d.ts +4 -0
  13. package/client-api-platform/src/init/index.d.ts +2 -1
  14. package/client-api-platform/src/init/override-callback/browser-defaults.d.ts +1 -1
  15. package/client-api-platform/src/init/override-callback/page-defaults.d.ts +1 -1
  16. package/client-api-platform/src/init/theming.d.ts +4 -3
  17. package/client-api-platform/src/shapes.d.ts +93 -3
  18. package/common/src/api/pages/attached.d.ts +0 -5
  19. package/common/src/api/pages/enterprise-shapes.d.ts +4 -0
  20. package/common/src/api/pages/shapes.d.ts +8 -0
  21. package/common/src/api/protocol/browser.d.ts +0 -2
  22. package/common/src/api/protocol/workspace-platform.d.ts +3 -1
  23. package/common/src/api/theming.d.ts +1 -0
  24. package/common/src/test/logger-mock.d.ts +5 -0
  25. package/common/src/utils/application.d.ts +7 -0
  26. package/common/src/utils/context-menu.d.ts +2 -2
  27. package/common/src/utils/enterprise-channels.d.ts +3 -0
  28. package/common/src/utils/env.d.ts +1 -1
  29. package/common/src/utils/indicators/showIndicator.d.ts +8 -1
  30. package/common/src/utils/indicators/workspace-indicators.d.ts +13 -0
  31. package/common/src/utils/modal-bounds.d.ts +20 -0
  32. package/common/src/utils/os.d.ts +2 -0
  33. package/common/src/utils/popup-window.d.ts +38 -21
  34. package/common/src/utils/route.d.ts +2 -0
  35. package/common/src/utils/window.d.ts +2 -1
  36. package/common/src/utils/workspace-modals.d.ts +3 -0
  37. package/dock3/src/api/protocol.d.ts +2 -0
  38. package/externals.report.json +9 -9
  39. package/home.js +1 -2
  40. package/home.js.map +1 -1
  41. package/index.js +1 -2
  42. package/index.js.map +1 -1
  43. package/notifications.js +1 -2
  44. package/notifications.js.map +1 -1
  45. package/package.json +4 -3
  46. package/store.js +1 -2
  47. package/store.js.map +1 -1
  48. package/common/src/api/tabs.d.ts +0 -16
  49. package/home.js.LICENSE.txt +0 -1
  50. package/index.js.LICENSE.txt +0 -1
  51. package/notifications.js.LICENSE.txt +0 -1
  52. package/store.js.LICENSE.txt +0 -1
@@ -1 +1,2 @@
1
1
  import '@common/test/fin-mocks';
2
+ import '@common/test/logger-mock';
@@ -1,10 +1,36 @@
1
1
  import { ProviderType } from '../../../common/src/api/provider';
2
+ /**
3
+ * Error thrown when attempting to use a provider that is not registered.
4
+ * @example
5
+ * ```typescript
6
+ * throw new ProviderNotRegisteredError('dock', 'my-dock-id');
7
+ * // Error: Dock Provider. Dock Provider with id my-dock-id is not currently registered.
8
+ * ```
9
+ */
2
10
  export declare class ProviderNotRegisteredError extends Error {
3
11
  constructor(providerType: ProviderType, id?: string);
4
12
  }
13
+ /**
14
+ * Error thrown when attempting to register a provider that is already registered.
15
+ * Call `deregister` before registering again.
16
+ * @example
17
+ * ```typescript
18
+ * throw new ProviderAlreadyRegisteredError('home', 'my-home-id');
19
+ * // Error: Home Provider. Home Provider with id my-home-id is already registered.
20
+ * ```
21
+ */
5
22
  export declare class ProviderAlreadyRegisteredError extends Error {
6
23
  constructor(providerType: ProviderType, id?: string);
7
24
  }
25
+ /**
26
+ * Error thrown when failing to retrieve a provider by ID.
27
+ * Typically thrown by `getProviderOrFail` when the requested provider does not exist.
28
+ * @example
29
+ * ```typescript
30
+ * throw new FailedToGetProviderError('storefront', 'unknown-id');
31
+ * // Error: Failed to get Storefront Provider. Storefront Provider with id unknown-id is not currently registered.
32
+ * ```
33
+ */
8
34
  export declare class FailedToGetProviderError extends Error {
9
35
  constructor(providerType: ProviderType, id?: string);
10
36
  }
@@ -7,7 +7,7 @@ import type { LaunchAppRequest, SearchSitesRequest, SearchSitesResponse, Site }
7
7
  * @param app the app directory entry.
8
8
  * @param opts launch options.
9
9
  */
10
- export declare function launchApp({ app, target }: LaunchAppRequest): Promise<void | OpenFin.Identity | OpenFin.Platform | OpenFin.View | OpenFin.Application>;
10
+ export declare function launchApp({ app, target }: LaunchAppRequest): Promise<void | OpenFin.View | OpenFin.Identity | OpenFin.Platform | OpenFin.Application>;
11
11
  export declare const enterpriseAppDirectoryChannelClient: () => Promise<OpenFin.ChannelClient>;
12
12
  export declare function getResults(payload: {
13
13
  req: SearchSitesRequest;
@@ -1,5 +1,5 @@
1
1
  import type OpenFin from '@openfin/core';
2
- import { EnterpriseMenuType } from '../../../../common/src/utils/popup-window';
2
+ import { PopupWindowMenuType } from '../../../../common/src/utils/popup-window';
3
3
  import { InternalOpenGlobalContextMenuRequest, InternalOpenPageTabContextMenuRequest, OpenGlobalContextMenuPayload, OpenPageTabContextMenuPayload, OpenSaveButtonContextMenuPayload, OpenSaveButtonContextMenuRequest, OpenViewTabContextMenuPayload, OpenViewTabContextMenuRequest, WorkspacePlatformProvider } from '../../../../client-api-platform/src/shapes';
4
4
  /**
5
5
  * Enum representing the possible anchor behaviors for positioning context menus.
@@ -17,7 +17,7 @@ export declare enum AnchorBehavior {
17
17
  Center = 4
18
18
  }
19
19
  type ContextMenuPayload = OpenGlobalContextMenuPayload | OpenViewTabContextMenuPayload | OpenPageTabContextMenuPayload | OpenSaveButtonContextMenuPayload;
20
- export declare const openCommonContextMenu: (payload: ContextMenuPayload, _callerIdentity: OpenFin.Identity, type?: EnterpriseMenuType, anchorBehavior?: AnchorBehavior) => Promise<void>;
20
+ export declare const openCommonContextMenu: (payload: ContextMenuPayload, _callerIdentity: OpenFin.Identity, type?: PopupWindowMenuType, anchorBehavior?: AnchorBehavior) => Promise<void>;
21
21
  export declare function openGlobalContextMenuInternal(this: WorkspacePlatformProvider, payload: InternalOpenGlobalContextMenuRequest & {
22
22
  identity: OpenFin.Identity;
23
23
  }, callerIdentity: OpenFin.Identity): Promise<void>;
@@ -0,0 +1,19 @@
1
+ import { StorageProxy } from '../../../../../client-api-platform/src/api/utils';
2
+ /**
3
+ * Channel Storage Proxy allows population of storage keys in a different origin, assuming that origin has set up
4
+ * a storage proxy on the specified URL.
5
+ *
6
+ * This is useful for writing to the localStorage of workspace when the provider is on a different origin.
7
+ */
8
+ export declare class ChannelStorageProxy implements StorageProxy {
9
+ #private;
10
+ constructor(url: string);
11
+ get isDestroyed(): boolean;
12
+ /**
13
+ * Sets a key in the proxied storage partition.
14
+ * @param key Key to set
15
+ * @param value Value.
16
+ */
17
+ setItem(key: string, value: string): Promise<void>;
18
+ destroy(): Promise<void>;
19
+ }
@@ -0,0 +1,12 @@
1
+ import { StorageProxy } from '../../../../../client-api-platform/src/api/utils';
2
+ /**
3
+ * LocalStorage backed StorageProxy, for use in same origin scenarios (i.e. when the provider and workspace UI are guaranteed
4
+ * to share a storage partition).
5
+ */
6
+ export declare class LocalStorageProxy implements StorageProxy {
7
+ #private;
8
+ constructor(storage: Pick<Storage, 'setItem'>);
9
+ setItem(key: string, value: string): Promise<void>;
10
+ destroy(): Promise<void>;
11
+ get isDestroyed(): boolean;
12
+ }
@@ -17,3 +17,20 @@ export declare const initialiseStoragePalettes: (customThemes: CustomThemes | un
17
17
  notificationIndicatorColors: NotificationIndicatorColorsParsed | null;
18
18
  };
19
19
  export declare const getThemeStorageController: () => ThemeStorageController;
20
+ /**
21
+ * Resolves when the first theme sync completes. Use this to ensure that we do not launch UI such as browser until this has completed.
22
+ *
23
+ * @param allowFailure Whether to suppress rejections and continue anyway. Recommended for most use cases.
24
+ */
25
+ export declare const waitForFirstThemeSync: (allowFailure?: boolean) => Promise<void>;
26
+ /**
27
+ * Creates and initialises the Theme Storage Controller singleton.
28
+ *
29
+ * Triggers the first theme sync, but does not await it. To ensure dependent UI can guarantee the theme palette is synced,
30
+ * you can call `await waitForFirstThemeSync` (e.g. in the createWindow provider override).
31
+ *
32
+ * @param isEnterprise Whether in enterprise mode (allows using local storage proxy directly).
33
+ * @param baseUrl Base url of the hosted workspace UI.
34
+ * @param syncTimeout How long `waitForFirstThemeSync` should wait before rejecting.
35
+ */
36
+ export declare const initialiseThemeController: (isEnterprise: boolean, baseUrl: string, syncTimeout: number) => void;
@@ -24,36 +24,29 @@ export type Palettes = {
24
24
  dark: string;
25
25
  };
26
26
  export declare class ThemeStorageController {
27
+ #private;
27
28
  private providerStorage;
28
29
  private darkPaletteVars?;
29
30
  private lightPaletteVars?;
30
31
  private themePaletteSheet?;
31
32
  private generatedPalettes?;
32
33
  private workspaceStorage?;
33
- private recreateFactory?;
34
- constructor(providerStorage: Pick<Storage, 'getItem' | 'setItem'>);
34
+ private storageFactory?;
35
+ private isLegacySinglePaletteTheme;
36
+ constructor(providerStorage: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>);
35
37
  /**
36
- * Set the current Storage Proxy to enable Workspace Storage properties to be populated.
37
- */
38
- setWorkspaceStorageProxy: (proxy: StorageProxy) => void;
39
- /**
40
- * Set a factory to recreate the storage proxy if it was destroyed (e.g. when a new browser
41
- * window is opened after the last one closed with preventQuitOnLastWindowClosed true).
42
- * Called once at platform init; avoids createWindow needing URL/env dependencies.
38
+ * Sets the storage factory. This can only be done once, and will throw for subsequent calls.
39
+ *
40
+ * All storage writes will be pending until the factory is created.
41
+ * @param factory
43
42
  */
44
- setRecreateFactory: (factory: () => Promise<StorageProxy>) => void;
43
+ setStorageFactory: (factory: () => StorageProxy) => void;
45
44
  /**
46
45
  * Close the storage proxy window and clear the reference. Called when the last browser window
47
46
  * closes so the platform can quit (storage proxy would otherwise keep the process alive).
48
- * Clears the reference before awaiting destroy() to avoid a race with ensureWorkspaceStorageProxy.
47
+ * Clears the reference before awaiting destroy() to avoid a race with getOrCreateStorageProxy.
49
48
  */
50
49
  destroyWorkspaceStorageProxy: () => Promise<void>;
51
- /**
52
- * Ensure the workspace storage proxy exists, recreating via the factory set at init if it was
53
- * previously destroyed. No-op if no factory was set (e.g. in tests). Call before using
54
- * workspace storage (e.g. when creating a browser window).
55
- */
56
- ensureWorkspaceStorageProxy: () => Promise<void>;
57
50
  /**
58
51
  * Check if there's an explicit user preference stored in localStorage.
59
52
  * A user preference is indicated by the presence of a SelectedColorScheme key. Which is something assigned if you click on the Appearance dropdown.
@@ -62,9 +55,9 @@ export declare class ThemeStorageController {
62
55
  private hasUserPreference;
63
56
  /**
64
57
  * Synchronize the current palette and scheme with workspace's storage instance if
65
- * storage based theming is enabled. Only syncs when user has explicitly selected a scheme.
58
+ * storage based theming is enabled.
66
59
  */
67
- trySynchronizeWorkspaceStorage: () => Promise<void>;
60
+ synchronizeWorkspaceStorage: () => Promise<void>;
68
61
  /**
69
62
  * Set the current Palette to be used by workspace. This palette will be converted into
70
63
  * css vars and combined into a single stylesheet. This stylesheet is exposed in localstorage
@@ -84,12 +77,25 @@ export declare class ThemeStorageController {
84
77
  * @param scheme 'light', 'dark' or 'system'.
85
78
  */
86
79
  setScheme(scheme: ColorSchemeOptionType): void;
80
+ /**
81
+ * Clears an explicit user scheme choice (e.g. from Appearance) so resolution falls back to theme default.
82
+ */
83
+ clearUserSelectedSchemePreference(): void;
84
+ setLegacySinglePaletteTheme(value: boolean): void;
85
+ /** @internal */
86
+ getIsLegacySinglePaletteTheme(): boolean;
87
87
  /**
88
88
  * Set the theme's default scheme from palette configuration
89
89
  * @param scheme The default scheme specified in the palette
90
90
  */
91
91
  setThemeDefaultScheme(scheme: ColorSchemeOptionType): void;
92
92
  setGeneratedPalettes(generatedPalettes: GeneratedPalettes): void;
93
+ /**
94
+ * Write the theme palette sheet to both in-memory state and providerStorage (namespaced localStorage)
95
+ * immediately. This ensures the theme is available for themeLoader on same-origin pages
96
+ * without waiting for the workspace storage proxy to be initialised.
97
+ */
98
+ setThemePaletteSheet(sheet: string): void;
93
99
  /**
94
100
  * Returns the current scheme
95
101
  * @returns 'light' | 'system' | 'dark'
@@ -26,10 +26,15 @@ export declare const getActivePageIdForWindow: (identity: OpenFin.Identity) => P
26
26
  *
27
27
  * If the name is not unique, it will append a number to the end of the name.
28
28
  *
29
+ * When `BrowserInitConfig.allowDuplicatePageTitles` is `true`, this function
30
+ * short-circuits and returns the supplied name (or the default title) as-is,
31
+ * without appending a numeric suffix.
32
+ *
29
33
  * @param initialName The initial name to test
30
- * @returns string: a unique page name
34
+ * @param allowDuplicatePageTitles Whether duplicate page titles are permitted
35
+ * @returns string: a unique page name (or the input unchanged when duplicates are allowed)
31
36
  */
32
- export declare function getUniquePageTitle(initialName?: string): Promise<string>;
37
+ export declare function getUniquePageTitle(initialName?: string, allowDuplicatePageTitles?: boolean): Promise<string>;
33
38
  export declare function handleSaveModalOnPageClose({ page }: HandleSaveModalOnPageClosePayload): Promise<SaveModalOnPageCloseResult>;
34
39
  /**
35
40
  * Default implementation of shouldPageClose. If enableBeforeUnload isn't set to true, always returns True (proceed with close).
@@ -12,6 +12,8 @@ export declare const dispatchThemeToWorkspaceProvider: (themeData: {
12
12
  }) => Promise<void>;
13
13
  export declare const setSelectedScheme: (schemeType: ColorSchemeOptionType) => Promise<void>;
14
14
  export declare const getSelectedScheme: () => ColorSchemeOptionType | null | undefined;
15
+ /** @internal */
16
+ export declare const getIsLegacySinglePaletteTheme: () => boolean;
15
17
  export declare const getThemePaletteSheet: () => string | undefined;
16
18
  export declare const mapLegacyThemeToCustomTheme: (legacyTheme: CustomTheme) => GenerateThemeParams;
17
19
  export declare const mapLegacyBrandIcons: (legacyBrand: BaseThemeOptions["brand"]) => GenerateThemeParams[1];
@@ -2,11 +2,6 @@ export declare const listenForStoreClose: () => void;
2
2
  export type StorageProxy = {
3
3
  setItem: (data: string, value: string) => Promise<void>;
4
4
  destroy: () => Promise<void>;
5
+ isDestroyed: boolean;
5
6
  };
6
- export declare const createStorageProxy: (url: string) => Promise<StorageProxy>;
7
- /**
8
- * Ensure the workspace storage proxy window exists. Recreates it if it was previously destroyed
9
- * (e.g. when the last browser window closed with preventQuitOnLastWindowClosed true and a new
10
- * browser window is now being created). Uses the factory registered at init; no-op in tests.
11
- */
12
- export declare const ensureWorkspaceStorageProxy: () => Promise<void>;
7
+ export declare const getStorageFactory: (isEnterprise: boolean, baseUrl: string) => (() => StorageProxy);
@@ -4,6 +4,10 @@ import type OpenFin from '@openfin/core';
4
4
  * @returns {Promise<OpenFin.Identity | undefined>} The last focused browser window identity, or undefined if not found.
5
5
  */
6
6
  export declare function getLastFocusedBrowserWindow(): Promise<OpenFin.Identity | undefined>;
7
+ /**
8
+ * Gets all browser windows
9
+ */
10
+ export declare function getAllBrowserWindows(): Promise<OpenFin.Window[]>;
7
11
  /**
8
12
  * Gets the last focused browser window that isn't minimized.
9
13
  * @returns {Promise<OpenFin.Identity | undefined>} The last focused browser window identity that isn't minimized, or undefined if not found.
@@ -1,5 +1,6 @@
1
1
  import OpenFin from '@openfin/core';
2
2
  import { WorkspacePlatformInitConfig } from '../../../client-api-platform/src/shapes';
3
+ export declare const MAX_FIRST_THEME_SYNC_WAIT = 3000;
3
4
  /**
4
5
  * Initilaize a Workspace Platform.
5
6
  *
@@ -35,4 +36,4 @@ import { WorkspacePlatformInitConfig } from '../../../client-api-platform/src/sh
35
36
  * ```
36
37
  * @param options options for configuring the platform.
37
38
  */
38
- export declare const init: ({ theme, customActions, language, ...rest }: WorkspacePlatformInitConfig) => Promise<OpenFin.Platform>;
39
+ export declare const init: (config: WorkspacePlatformInitConfig) => Promise<OpenFin.Platform>;
@@ -4,4 +4,4 @@ import { BrowserInitConfig } from '../../../../client-api-platform/src/shapes';
4
4
  /**
5
5
  * Applies default options to the creation of browser windows.
6
6
  */
7
- export declare function applyBrowserDefaults(options: OpenFin.PlatformWindowCreationOptions, initOptions: Pick<BrowserInitConfig, 'defaultWindowOptions' | 'defaultPageOptions' | 'defaultViewOptions' | 'browserIconSize'> | undefined, themeData?: PreloadedThemeData): Promise<OpenFin.PlatformWindowCreationOptions>;
7
+ export declare function applyBrowserDefaults(options: OpenFin.PlatformWindowCreationOptions, initOptions: Pick<BrowserInitConfig, 'defaultWindowOptions' | 'defaultPageOptions' | 'defaultViewOptions' | 'browserIconSize' | 'allowDuplicatePageTitles'> | undefined, themeData?: PreloadedThemeData): Promise<OpenFin.PlatformWindowCreationOptions>;
@@ -1,4 +1,4 @@
1
1
  import OpenFin from '@openfin/core';
2
2
  import type { AttachedPage, AttachedPageInternal } from '../../../../common/src/api/pages/shapes';
3
3
  import { BrowserInitConfig } from '../..';
4
- export declare const applyPageDefaults: (pages: AttachedPage[], initOptions?: Pick<BrowserInitConfig, "defaultPageOptions" | "defaultViewOptions" | "defaultWindowOptions">, overrideOptions?: OpenFin.PlatformWindowCreationOptions) => Promise<AttachedPageInternal[]>;
4
+ export declare const applyPageDefaults: (pages: AttachedPage[], initOptions?: Pick<BrowserInitConfig, "defaultPageOptions" | "defaultViewOptions" | "defaultWindowOptions" | "allowDuplicatePageTitles">, overrideOptions?: OpenFin.PlatformWindowCreationOptions) => Promise<AttachedPageInternal[]>;
@@ -4,10 +4,11 @@ export declare const getThemes: () => CustomThemes | null;
4
4
  export declare const getGeneratedPalettes: () => GeneratedPalettes;
5
5
  export declare const getThemePaletteSheet: () => string;
6
6
  export declare const getNotificationIndicatorColorsInternal: () => NotificationIndicatorColorsParsed;
7
+ export declare const isThemePreInitialised: () => boolean;
7
8
  /**
8
9
  * initTheming()
9
10
  * @param customThemes array of theme objects
10
- * Accepts an array of CustomThemes objects and stores it
11
- * @returns array of custom theme objects
11
+ * Accepts an array of CustomThemes objects and stores it.
12
+ * Sets themePreInitialised to true so subsequent calls are no-ops.
12
13
  */
13
- export default function initTheming(customThemes: CustomThemes | undefined): Promise<void>;
14
+ export declare const initTheming: (customThemes: CustomThemes | undefined) => Promise<void>;
@@ -1,6 +1,7 @@
1
1
  import type OpenFin from '@openfin/core';
2
2
  import type { IconProps, IconType, Languages } from '@openfin/ui-library';
3
3
  import type { ModalResponseEvent } from '../../common/src/utils/menu-window-provider';
4
+ import type { WorkspaceIndicatorConfig } from '../../common/src/utils/indicators/workspace-indicators';
4
5
  import type { AnalyticsEvent, AnalyticsEventInternal } from '../../common/src/utils/usage-register';
5
6
  import type { BaseCustomDropdownItem, CustomActionSpecifier, CustomButtonConfig } from '../../common/src/api/action';
6
7
  import type { Resource } from '../../common/src/api/i18next';
@@ -160,6 +161,10 @@ export declare enum PageTabContextMenuOptionType {
160
161
  Save = "Save",
161
162
  SaveAs = "Save As",
162
163
  NewPage = "New Page",
164
+ /** Enterprise Browser: toggle Golden Layout view tab headers (multi-view Supertabs).
165
+ * @internal
166
+ */
167
+ ShowHideTabs = "ShowHideTabs",// Enterprise
163
168
  DeletePage = "Delete Page",// Enterprise
164
169
  SaveWorkspaceAs = "SaveWorkspaceAs",// Enterprise
165
170
  Refresh = "Refresh",// Enterprise
@@ -175,7 +180,6 @@ export declare enum PageTabContextMenuOptionType {
175
180
  /** @internal */
176
181
  export declare enum EnterpriseMainContextMenuOptionType {
177
182
  Lock = "Lock",
178
- ShowHideTabs = "ShowHideTabs",
179
183
  AddToChanel = "AddToChannel",
180
184
  ManageDesktopSignals = "ManageDesktopSignals",// Enterprise
181
185
  FindInPage = "FindInPage",// Enterprise
@@ -666,6 +670,19 @@ export interface BrowserCreateViewRequest extends OpenFin.PlatformViewCreationOp
666
670
  export interface BrowserViewState extends OpenFin.ViewState {
667
671
  workspacePlatform?: BrowserWorkspacePlatformViewOptions;
668
672
  }
673
+ /**
674
+ * Enables or disables the tab-search chevron button for a specific tab location.
675
+ */
676
+ export interface TabSearchLocationOptions {
677
+ enabled: boolean;
678
+ }
679
+ /**
680
+ * Configures where tab-search chevron buttons should be shown in a browser window.
681
+ */
682
+ export interface TabSearchButtonOptions {
683
+ pageTabs?: TabSearchLocationOptions;
684
+ viewTabs?: TabSearchLocationOptions;
685
+ }
669
686
  export interface BrowserWorkspacePlatformWindowOptions {
670
687
  /** For internal usage. Defaults to 'browser' when Browser is enabled when the WorkspacePlatform is initialized. In order to use
671
688
  * non-Browser layout windows ('platform' windows) in a Browser-enabled workspace platform, set windowType to `platform`. In that instance, the other properties
@@ -716,6 +733,32 @@ export interface BrowserWorkspacePlatformWindowOptions {
716
733
  minWidth?: string;
717
734
  maxWidth?: string;
718
735
  };
736
+ /**
737
+ * Controls whether tab-search chevron buttons are shown for page tabs and view tabs.
738
+ *
739
+ * By default, both locations are disabled unless explicitly enabled.
740
+ *
741
+ * @example
742
+ * ```ts
743
+ * workspacePlatform: {
744
+ * tabSearchButton: {
745
+ * viewTabs: { enabled: true },
746
+ * pageTabs: { enabled: true }
747
+ * }
748
+ * }
749
+ * ```
750
+ *
751
+ * @example
752
+ * ```ts
753
+ * workspacePlatform: {
754
+ * tabSearchButton: {
755
+ * viewTabs: { enabled: true },
756
+ * // pageTabs omitted: disabled
757
+ * }
758
+ * }
759
+ * ```
760
+ */
761
+ tabSearchButton?: TabSearchButtonOptions;
719
762
  /**
720
763
  * Accessibility options for the browser window.
721
764
  * These options override the default accessibility options set at the platform or browser initialization level.
@@ -809,10 +852,23 @@ export interface BrowserWorkspacePlatformWindowOptions {
809
852
  * When true, disables the ability to close pages in the window. False by default.
810
853
  */
811
854
  preventPageClose?: boolean;
855
+ /**
856
+ * When true, disables the find in page feature for the window.
857
+ * The find in page view will not be created and no find in page logic will run.
858
+ * This option must be set at window creation time and cannot be changed dynamically.
859
+ * False by default.
860
+ */
861
+ disableFindInPage?: boolean;
812
862
  /**
813
863
  * Taskbar Icon for the Browser Window. If light and dark icon are defined, then the taskbar icon will change when the scheme changes.
814
864
  */
815
865
  icon?: string | TaskbarIcon;
866
+ /**
867
+ * The size of icons in the browser window. This is set from the platform-level
868
+ * `browserIconSize` option during window creation.
869
+ * @internal Propagated from BrowserInitConfig.browserIconSize
870
+ */
871
+ browserIconSize?: IconSize;
816
872
  }
817
873
  /**
818
874
  * Request for creating a browser window.
@@ -1818,6 +1874,11 @@ export interface ThemeApi {
1818
1874
  * @returns the selected scheme.
1819
1875
  */
1820
1876
  getSelectedScheme(): Promise<ColorSchemeOptionType>;
1877
+ /**
1878
+ * @internal
1879
+ * Whether the active platform theme is a legacy theme defined with a single shared palette (light and dark are not independently specified).
1880
+ */
1881
+ getIsLegacySinglePaletteTheme(): Promise<boolean>;
1821
1882
  /**
1822
1883
  * @internal
1823
1884
  * Get the notification indicator colors from the platform provider.
@@ -2259,6 +2320,11 @@ export interface WorkspacePlatformProvider extends OpenFin.PlatformProvider {
2259
2320
  * @param schemeType {@link ColorSchemeOptionType scheme} to be set
2260
2321
  */
2261
2322
  setSelectedScheme(schemeType: ColorSchemeOptionType): Promise<void>;
2323
+ /**
2324
+ * @internal
2325
+ * Whether the active platform theme is a legacy single-palette theme (Appearance scheme switching is not supported).
2326
+ */
2327
+ getIsLegacySinglePaletteTheme(): boolean;
2262
2328
  /**
2263
2329
  * Implementation for handling Workspace analytics events
2264
2330
  * @param req the payload received by the provider
@@ -2829,7 +2895,6 @@ export type WorkspacePlatformOverrideCallback = OpenFin.OverrideCallback<Workspa
2829
2895
  export type BrowserOverrideCallback = WorkspacePlatformOverrideCallback;
2830
2896
  /**
2831
2897
  * Content menu entry shape cloned and re-exported from UI Library.
2832
- * @internal
2833
2898
  */
2834
2899
  export type ContentMenuEntry = {
2835
2900
  bookmarked?: boolean;
@@ -2857,7 +2922,6 @@ export type BookmarkDockEntryPayload = {
2857
2922
  };
2858
2923
  /**
2859
2924
  * Represents dock entry for favorites
2860
- * @internal
2861
2925
  */
2862
2926
  export type DockEntry = {
2863
2927
  type: 'folder';
@@ -2958,6 +3022,32 @@ export interface BrowserInitConfig {
2958
3022
  * @internal
2959
3023
  */
2960
3024
  aiPanelOptions?: AiPanelOptions;
3025
+ /**
3026
+ * When true, allows multiple pages to share the same title across browser
3027
+ * windows. No numeric suffixes are appended and attach/add operations
3028
+ * will not reject on title collision. `pageId` remains the unique
3029
+ * identifier for all page operations.
3030
+ *
3031
+ * Defaults to `false` (current unique-title behavior preserved).
3032
+ */
3033
+ allowDuplicatePageTitles?: boolean;
3034
+ /**
3035
+ * Opt-in suppression flags for workspace success indicators.
3036
+ * Both flags default to `false`; existing platforms see no behaviour change.
3037
+ *
3038
+ * @example
3039
+ * ```ts
3040
+ * await WorkspacePlatform.init({
3041
+ * browser: {
3042
+ * indicators: {
3043
+ * suppressWorkspaceSwitched: true,
3044
+ * suppressWorkspaceSaved: true,
3045
+ * },
3046
+ * },
3047
+ * });
3048
+ * ```
3049
+ */
3050
+ indicators?: WorkspaceIndicatorConfig;
2961
3051
  }
2962
3052
  interface WorkspaceMetadata {
2963
3053
  APIVersion: string;
@@ -61,11 +61,6 @@ export declare const updatePageForWindow: (payload: ExtendedUpdatePageForWindowP
61
61
  * @param identity the identity of the window to save the pages of in window options.
62
62
  */
63
63
  export declare const updatePagesWindowOptions: (identity: OpenFin.Identity) => Promise<void>;
64
- /**
65
- * Check if the window identity is currently detaching pages.
66
- * @param identity the OF window identity to check.
67
- */
68
- export declare const isDetachingPages: (identity: OpenFin.Identity) => Promise<boolean>;
69
64
  /**
70
65
  * Check if the window identity is in the middle of changing active pages.
71
66
  * @param identity the OF window identity to check.
@@ -32,8 +32,12 @@ export interface Page {
32
32
  panels?: PanelConfig[];
33
33
  /** Used to define the context group for the page */
34
34
  contextGroup?: string;
35
+ /** When true, view tab headers within this Supertab are hidden. */
36
+ viewTabsHidden?: boolean;
35
37
  /** Optional property to attach custom metadata to the page object, such as version or timestamp. Must be serializable. */
36
38
  customData?: any;
39
+ /** True when this page is an admin-published supertab. */
40
+ isPublished?: boolean;
37
41
  }
38
42
  type AttachedPageMetadata = {
39
43
  /** The window the page is currently attached to. */
@@ -96,12 +96,20 @@ export type AttachedPageInternal = {
96
96
  isLayoutCreated?: boolean;
97
97
  pageIcon?: string;
98
98
  isPublished?: boolean;
99
+ /** Enterprise Browser: hide Golden Layout view tab headers (multi-view Supertabs).
100
+ * @internal
101
+ */
102
+ viewTabsHidden?: boolean;
99
103
  } & AttachedPage;
100
104
  export type ReparentAttachedPage = AttachedPage & {
101
105
  multiInstanceViewBehavior?: 'reparent';
102
106
  };
103
107
  export type PageWithUpdatableRuntimeAttribs = Page & Pick<AttachedPage, 'hasUnsavedChanges'> & {
104
108
  multiInstanceViewBehavior?: OpenFin.MultiInstanceViewBehavior;
109
+ /** Enterprise Browser: hide Golden Layout view tab headers (multi-view Supertabs).
110
+ * @internal
111
+ */
112
+ viewTabsHidden?: boolean;
105
113
  };
106
114
  export interface DetachPagesFromWindowPayload {
107
115
  /** The OF window identity to detach the pages from. */
@@ -52,7 +52,6 @@ export declare enum PageChannelAction {
52
52
  ReorderPagesForWindow = "reorder-pages-for-window",
53
53
  UpdatePageForWindow = "update-page-for-window",
54
54
  UpdatePagesWindowOptions = "update-pages-window-options",
55
- IsDetachingPages = "is-detaching-pages",
56
55
  IsActivePageChanging = "is-active-page-changing"
57
56
  }
58
57
  /**
@@ -103,7 +102,6 @@ export declare const BrowserChannelAction: {
103
102
  ReorderPagesForWindow: PageChannelAction.ReorderPagesForWindow;
104
103
  UpdatePageForWindow: PageChannelAction.UpdatePageForWindow;
105
104
  UpdatePagesWindowOptions: PageChannelAction.UpdatePagesWindowOptions;
106
- IsDetachingPages: PageChannelAction.IsDetachingPages;
107
105
  IsActivePageChanging: PageChannelAction.IsActivePageChanging;
108
106
  CloseBrowserWindow: GeneralBrowserChannelActions.CloseBrowserWindow;
109
107
  QuitPlatform: GeneralBrowserChannelActions.QuitPlatform;
@@ -97,7 +97,9 @@ export declare enum WorkspacePlatformChannelAction {
97
97
  SendUpdateVersionModalResponseInternal = "sendUpdateVersionModalResponseInternal",// Enterprise
98
98
  ShowUpdateVersionModalInternal = "showUpdateVersionModalInternal",// Enterprise
99
99
  ShowApplyAndPublishModalInternal = "showApplyAndPublishModalInternal",// Enterprise
100
- GetNotificationIndicatorColorsInternal = "getNotificationIndicatorColorsInternal"
100
+ GetNotificationIndicatorColorsInternal = "getNotificationIndicatorColorsInternal",// Custom Notification Indicators Colors
101
+ /** @internal */
102
+ GetIsLegacySinglePaletteTheme = "getIsLegacySinglePaletteTheme"
101
103
  }
102
104
  export type PlatFormSupportedFeatures = boolean | {
103
105
  isWorkspacePlatform: boolean;
@@ -29,6 +29,7 @@ interface EnterpriseBrandIcons {
29
29
  * Internal brand options for Enterprise Browser
30
30
  */
31
31
  symbol: string;
32
+ wordmark?: string;
32
33
  }
33
34
  export interface ThemeExtension extends DefaultTheme {
34
35
  notificationIndicatorColors?: Record<string, Omit<NotificationIndicatorColorsSet, 'foreground'> & {
@@ -0,0 +1,5 @@
1
+ export declare const mockLogger: {
2
+ debug: jest.Mock<any, any, any>;
3
+ warn: jest.Mock<any, any, any>;
4
+ error: jest.Mock<any, any, any>;
5
+ };
@@ -30,3 +30,10 @@ export declare const getWorkspaceOFApplication: () => OpenFin.Application;
30
30
  * @returns A Promise resolving to the application manifest
31
31
  */
32
32
  export declare const getCachedManifest: () => Promise<OpenFin.Manifest>;
33
+ /**
34
+ * Gets application info, caching the result after the first call.
35
+ * Application info (manifestUrl, licenseKey, runtime version, etc.) never changes
36
+ * during the application lifecycle. Multiple callers (overrides, sentry, analytics)
37
+ * share a single IPC call.
38
+ */
39
+ export declare const getCachedAppInfo: () => Promise<OpenFin.ApplicationInfo>;
@@ -1,7 +1,7 @@
1
1
  import type OpenFin from '@openfin/core';
2
2
  import { AnchorBehavior } from '../../../client-api-platform/src/api/context-menu';
3
3
  import { PageTabContextMenuItemTemplate, ViewTabContextMenuTemplate } from '../../../client-api-platform/src/shapes';
4
- import { EnterpriseMenuType } from './popup-window';
4
+ import { PopupWindowMenuType } from './popup-window';
5
5
  export declare enum MenuItemType {
6
6
  Label = "normal",
7
7
  Separator = "separator",
@@ -13,7 +13,7 @@ export type ShowContextMenuResponse = OpenFin.MenuResult & {
13
13
  requestId?: string;
14
14
  };
15
15
  export declare function showContextMenu(opts: OpenFin.ShowPopupMenuOptions, win?: OpenFin.Window): Promise<ShowContextMenuResponse>;
16
- export declare const showEnterpriseContextMenu: (opts: OpenFin.ShowPopupMenuOptions, type: EnterpriseMenuType, anchorBehavior: AnchorBehavior, win?: OpenFin.Window) => Promise<ShowContextMenuResponse>;
16
+ export declare const showEnterpriseContextMenu: (opts: OpenFin.ShowPopupMenuOptions, type: PopupWindowMenuType, anchorBehavior: AnchorBehavior, win?: OpenFin.Window) => Promise<ShowContextMenuResponse>;
17
17
  export declare const Separator: OpenFin.MenuItemTemplate;
18
18
  export declare const EmptyContextMenuItem: OpenFin.MenuItemTemplate;
19
19
  export declare const DefaultSaveMenuBounds: {
@@ -16,3 +16,6 @@ export declare const connectToEnterpriseContentChannel: (uuid: string) => Promis
16
16
  export declare const connectToEnterpriseModalChannel: (uuid: string) => Promise<OpenFin.ChannelClient>;
17
17
  export declare const createZoomControlsDialogChannel: () => Promise<OpenFin.ChannelProvider>;
18
18
  export declare const connectToZoomControlsDialogChannel: () => Promise<OpenFin.ChannelClient>;
19
+ export declare const getTabSearchChannelName: () => string;
20
+ export declare const createTabSearchChannel: () => Promise<OpenFin.ChannelProvider>;
21
+ export declare const connectToTabSearchChannel: () => Promise<OpenFin.ChannelClient>;
@@ -11,7 +11,7 @@ export declare const isDocumentDefined: boolean;
11
11
  export declare const isWindowDefinedWithIndexDB: boolean;
12
12
  export declare const finUUID: string;
13
13
  export declare const finName: string;
14
- export declare const finEntityType: "" | "view" | "window";
14
+ export declare const finEntityType: "" | "window" | "view";
15
15
  export declare const isEnvLocal: boolean;
16
16
  export declare const isEnvDev: boolean;
17
17
  export declare const isEnvStaging: boolean;