@openfin/workspace-platform 5.3.0 → 5.6.2

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 (42) hide show
  1. package/README.md +31 -4
  2. package/client-api/src/shapes.d.ts +283 -6
  3. package/client-api-platform/src/api/app-directory.d.ts +2 -2
  4. package/client-api-platform/src/api/browser/browser-module.d.ts +4 -2
  5. package/client-api-platform/src/api/browser/index.d.ts +5 -4
  6. package/client-api-platform/src/api/context-menu/browser-logo-handler.d.ts +10 -0
  7. package/client-api-platform/src/api/context-menu/index.d.ts +6 -0
  8. package/client-api-platform/src/api/pages/helper.d.ts +1 -1
  9. package/client-api-platform/src/api/pages/index.d.ts +6 -6
  10. package/client-api-platform/src/api/protocol.d.ts +8 -5
  11. package/client-api-platform/src/api/storage.d.ts +1 -1
  12. package/client-api-platform/src/api/theming.d.ts +5 -0
  13. package/client-api-platform/src/api/workspace-module.d.ts +2 -2
  14. package/client-api-platform/src/index.d.ts +36 -1
  15. package/client-api-platform/src/init/custom-actions.d.ts +3 -0
  16. package/client-api-platform/src/init/override-callback.d.ts +3 -2
  17. package/client-api-platform/src/init/theming.d.ts +9 -0
  18. package/client-api-platform/src/init/utils.d.ts +8 -2
  19. package/client-api-platform/src/shapes.d.ts +667 -20
  20. package/common/src/api/browser-protocol.d.ts +14 -0
  21. package/common/src/api/pages/attached.d.ts +0 -1
  22. package/common/src/api/pages/idb.d.ts +2 -2
  23. package/common/src/api/pages/index.d.ts +7 -1
  24. package/common/src/api/pages/legacy.d.ts +2 -2
  25. package/common/src/api/pages/shapes.d.ts +9 -0
  26. package/common/src/api/protocol.d.ts +2 -1
  27. package/common/src/api/theming.d.ts +62 -0
  28. package/common/src/utils/context-menu.d.ts +12 -0
  29. package/common/src/utils/defer-auto-show.d.ts +18 -0
  30. package/common/src/utils/env.d.ts +6 -7
  31. package/common/src/utils/global-context-menu.d.ts +2 -0
  32. package/common/src/utils/landing-page.d.ts +11 -0
  33. package/common/src/utils/layout.d.ts +2 -1
  34. package/common/src/utils/merge-deep.d.ts +6 -0
  35. package/common/src/utils/strings.d.ts +0 -2
  36. package/common/src/utils/theming.d.ts +57 -0
  37. package/common/src/utils/window.d.ts +5 -0
  38. package/index.js +1 -1
  39. package/index.js.map +1 -1
  40. package/package.json +1 -1
  41. package/search-api/src/client/internal.d.ts +1 -1
  42. package/search-api/src/shapes.d.ts +45 -2
@@ -0,0 +1,14 @@
1
+ /// <reference types="openfin-adapter/fin" />
2
+ export declare const getWindowChannelId: (identity: OpenFin.Identity) => string;
3
+ export declare const getChannelClient: (identity: OpenFin.Identity) => Promise<import("openfin-adapter").ChannelClient>;
4
+ /**
5
+ * If the browser window is reloaded too quickly, runtime will
6
+ * respond that the channel provider has already been created.
7
+ * Hence, we retry a couple of times to make sure this does not occur.
8
+ * (Should only happen in local development)
9
+ */
10
+ export declare const createChannel: () => Promise<import("openfin-adapter").ChannelProvider>;
11
+ export declare enum ChannelAction {
12
+ CloseBrowserWindow = "close-browser-window",
13
+ QuitPlatform = "quit-platform"
14
+ }
@@ -21,7 +21,6 @@ export declare enum EventType {
21
21
  AttachedPagesToWindow = "attached-pages-to-window",
22
22
  DetachedPagesFromWindow = "detached-pages-from-window"
23
23
  }
24
- export declare const getWindowChannelId: (identity: OpenFin.Identity) => string;
25
24
  export declare const getEventEmitter: (identity: OpenFin.Identity) => {
26
25
  emit: (event: string | number, ...payload: any[]) => Promise<void>;
27
26
  addListener: (event: string | number, listener: import("@common/utils/shared-emitter").Listener) => void;
@@ -1,4 +1,4 @@
1
- import type { Page } from '@common/api/pages/shapes';
1
+ import type { Page } from '../../../../common/src/api/pages/shapes';
2
2
  export declare const store: import("idb-keyval").UseStore;
3
3
  export declare function getPage(id: string): Promise<Page>;
4
4
  export declare function getPageList(filter?: string): Promise<Page[]>;
@@ -9,4 +9,4 @@ export declare function deletePage(id: string): Promise<void>;
9
9
  export declare function updatePage({ pageId, page }: {
10
10
  pageId: any;
11
11
  page: any;
12
- }): Promise<boolean>;
12
+ }): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { LayoutExtended } from '@common/utils/layout';
1
+ import { LayoutExtended } from '../../../../common/src/utils/layout';
2
2
  import type { AttachedPage, Page, PageLayout, PageWithUpdatableRuntimeAttribs } from './shapes';
3
3
  export declare function getLegacyPages(): Promise<Page[]>;
4
4
  export declare function cleanPage(page: AttachedPage): Page;
@@ -14,3 +14,9 @@ export declare const getPageLayout: (layout: any) => Promise<PageLayout>;
14
14
  * @param layout the layout for the page.
15
15
  */
16
16
  export declare const makePage: (title: string, layout: LayoutExtended) => Promise<PageWithUpdatableRuntimeAttribs>;
17
+ /**
18
+ * Clone a page.
19
+ * @param page the page to clone.
20
+ * @returns a clone of the given page.
21
+ */
22
+ export declare const clonePage: (page: Page) => Promise<PageWithUpdatableRuntimeAttribs>;
@@ -1,4 +1,4 @@
1
- import type { AttachedPage, PageLayout } from '@common/api/pages/shapes';
1
+ import type { AttachedPage, PageLayout } from '../../../../common/src/api/pages/shapes';
2
2
  interface Workstack {
3
3
  id: string;
4
4
  name: string;
@@ -6,7 +6,7 @@ interface Workstack {
6
6
  layout: PageLayout;
7
7
  isActive: boolean;
8
8
  }
9
- export declare function convertWorkstackToAttachedPage(workstack: Workstack & AttachedPage): AttachedPage;
9
+ export declare function convertWorkstackToAttachedPage({ id, name, ...rest }: Workstack & AttachedPage): AttachedPage;
10
10
  /**
11
11
  * Attempts to fix any misconfigurations in a list of attached pages.
12
12
  * @param pages the pages to fix.
@@ -20,8 +20,17 @@ export interface Page {
20
20
  tooltip?: string;
21
21
  /** True if the page is read only. In this state, the page is locked and cannot be unlocked. */
22
22
  isReadOnly?: boolean;
23
+ /** Icon that appears on a page tab if there are unsaved changes (dirty state). If 'undefined', default icon will appear. */
24
+ unsavedIconUrl?: string;
25
+ /** Icon that appears on a page tab if there are no unsaved changes. If 'undefined', default icon will appear. */
26
+ iconUrl?: string;
23
27
  /** The layout of the page. */
24
28
  layout: PageLayout;
29
+ /** Used to manipulate behaviour of a close button on a page tab. If `undefined`, then close button is visible and actionable. */
30
+ closeButton?: {
31
+ hidden?: boolean;
32
+ disabled?: boolean;
33
+ };
25
34
  }
26
35
  declare type AttachedPageMetadata = {
27
36
  /** The window the page is currently attached to. */
@@ -26,7 +26,8 @@ export declare enum ChannelAction {
26
26
  HideHome = "hide-home",
27
27
  AssignHomeSearchContext = "assign-home-search-context",
28
28
  GetLegacyPages = "get-legacy-pages",
29
- GetLegacyWorkspaces = "get-legacy-workspaces"
29
+ GetLegacyWorkspaces = "get-legacy-workspaces",
30
+ GetComputedPlatformTheme = "get-computed-platform-theme"
30
31
  }
31
32
  export interface ChannelClient extends OpenFin.ChannelClient {
32
33
  dispatch: (action: ChannelAction, payload: any) => Promise<any>;
@@ -0,0 +1,62 @@
1
+ /// <reference types="openfin-adapter/fin" />
2
+ import type { ThemePaletteSet } from '@openfin/ui-library';
3
+ export interface ComputedThemes extends Array<ComputedTheme> {
4
+ }
5
+ export interface ComputedTheme {
6
+ label: string;
7
+ logoUrl?: string;
8
+ theme: ThemePaletteSet;
9
+ }
10
+ export interface CustomThemes extends Array<CustomThemeOptions> {
11
+ }
12
+ export interface CustomThemeOptions {
13
+ label: string;
14
+ logoUrl?: string;
15
+ palette: CustomPaletteSet;
16
+ }
17
+ export interface DefaultPaletteSet {
18
+ brandPrimary: string;
19
+ brandSecondary: string;
20
+ backgroundPrimary: string;
21
+ }
22
+ export interface CustomPaletteSet extends DefaultPaletteSet {
23
+ functional1?: string;
24
+ functional2?: string;
25
+ functional3?: string;
26
+ functional4?: string;
27
+ functional5?: string;
28
+ functional6?: string;
29
+ functional7?: string;
30
+ functional8?: string;
31
+ functional9?: string;
32
+ functional10?: string;
33
+ statusSuccess?: string;
34
+ statusWarning?: string;
35
+ statusCritical?: string;
36
+ statusActive?: string;
37
+ inputBackground?: string;
38
+ inputColor?: string;
39
+ inputPlaceholder?: string;
40
+ inputDisabled?: string;
41
+ inputFocused?: string;
42
+ textDefault?: string;
43
+ textHelp?: string;
44
+ textInactive?: string;
45
+ background1?: string;
46
+ background2?: string;
47
+ background3?: string;
48
+ background4?: string;
49
+ background5?: string;
50
+ background6?: string;
51
+ }
52
+ /**
53
+ * computeThemes()
54
+ * Accepts the array of registered CustomThemes objects
55
+ * Creates a light and dark palette from a tempalte overriding with custom options
56
+ * Uses createTheme to build theme object
57
+ * Creates a ThemePaletteSet
58
+ * @param customPalettes
59
+ * @returns theme object ready to be applied to the UI
60
+ */
61
+ export declare const computeThemes: (customPalettes: CustomThemes) => ComputedThemes;
62
+ export declare const getComputedPlatformTheme: (platformIdentity: OpenFin.Identity) => Promise<ComputedTheme>;
@@ -0,0 +1,12 @@
1
+ /// <reference types="openfin-adapter/fin" />
2
+ import { _Window } from 'openfin-adapter/src/api/window';
3
+ export declare enum MenuItemType {
4
+ Label = "normal",
5
+ Separator = "separator",
6
+ Submenu = "submenu",
7
+ Checkbox = "checkbox"
8
+ }
9
+ export declare type ShowContextMenuResponse = OpenFin.MenuResult & {
10
+ data: string;
11
+ };
12
+ export default function showContextMenu(opts: OpenFin.ShowPopupMenuOptions, win?: _Window): Promise<ShowContextMenuResponse>;
@@ -0,0 +1,18 @@
1
+ /// <reference types="openfin-adapter/fin" />
2
+ interface InternalWindowOptions extends OpenFin.PlatformWindowCreationOptions {
3
+ workspacePlatform: OpenFin.WindowOptions['workspacePlatform'] & {
4
+ _internalAutoShow: boolean;
5
+ };
6
+ }
7
+ /**
8
+ * Apply options to a window's options that will disallow the Core from auto showing the window.
9
+ * Instead, a script within the window itself must handle showing the window if deferred auto showing is enabled.
10
+ * When it comes time to show the window, the script can auto show if deferred by simply calling the `autoShowIfDeferred` function.
11
+ * @param opts the window options to apply deferred auto show to.
12
+ */
13
+ export declare function applyDeferAutoShowOptions(opts: OpenFin.PlatformWindowCreationOptions): InternalWindowOptions;
14
+ /**
15
+ * Will show the current window if deferred auto show is enabled.
16
+ */
17
+ export declare function autoShowIfDeferred(): Promise<void>;
18
+ export {};
@@ -12,19 +12,18 @@ export declare const isWindowDefinedWithIndexDB: boolean;
12
12
  export declare const finUUID: string;
13
13
  export declare const finName: string;
14
14
  export declare const finEntityType: "" | import("openfin-adapter/src/shapes/EntityType").EntityType;
15
- export declare const env: Env;
16
15
  export declare const isEnvLocal: boolean;
17
16
  export declare const isEnvDev: boolean;
18
17
  export declare const isEnvStaging: boolean;
19
18
  export declare const isEnvProd: boolean;
20
- export declare const isLibrary: boolean;
21
19
  export declare const workspaceProviderFinsLink: string;
22
20
  export declare const workspaceProviderFallbackUrl: string;
23
- export declare const workspaceAppsUrl: string;
24
- export declare const workspaceStorefrontFooterUrl: string;
25
- export declare const workspaceStorefrontLandingPageUrl: string;
26
- export declare const workspaceStorefrontNavigationUrl: string;
27
- export declare const workspaceShareUrl: string;
28
21
  export declare const workspaceCdnUrl: string;
29
22
  export declare const workspaceCdnEnvUrl: string;
30
23
  export declare const workspaceRuntimeVersion: string;
24
+ /**
25
+ * A promise that resolves when:
26
+ * - The window 'load' event is fired.
27
+ * - The window first paint occurs.
28
+ */
29
+ export declare const firstPaint: Promise<void>;
@@ -0,0 +1,2 @@
1
+ import { NamedIdentity } from 'openfin-adapter/src/identity';
2
+ export declare const getGlobalContextMenuTemplate: (winIdentity: NamedIdentity) => Promise<any[]>;
@@ -0,0 +1,11 @@
1
+ /// <reference types="openfin-adapter/fin" />
2
+ import { NamedIdentity } from 'openfin-adapter/src/identity';
3
+ interface LandingPageUrls {
4
+ newPageUrl: string | false;
5
+ newTabUrl: string | false;
6
+ }
7
+ export declare const getLandingPageUrls: (winIdentity?: NamedIdentity) => Promise<LandingPageUrls>;
8
+ export declare const checkHasNewTabUrl: () => Promise<boolean>;
9
+ export declare const getNewLandingTabViewOptions: (target: OpenFin.Identity) => Promise<OpenFin.PlatformViewCreationOptions>;
10
+ export declare const makeNewLandingPage: (winIdentity?: NamedIdentity) => Promise<import("@client-platform/index").PageWithUpdatableRuntimeAttribs>;
11
+ export {};
@@ -1,4 +1,5 @@
1
1
  /// <reference types="openfin-adapter/fin" />
2
+ import { NamedIdentity } from 'openfin-adapter/src/identity';
2
3
  export declare type LayoutComponentStateExtended = OpenFin.LayoutComponent['componentState'] & {
3
4
  name: string;
4
5
  uuid: string;
@@ -40,7 +41,7 @@ export declare type LayoutDOMEventListener = (ev: LayoutDOMEvent) => void;
40
41
  */
41
42
  export declare const cloneLayoutAndRemoveNames: (layout: any) => any;
42
43
  export declare const mapContentComponentState: (content: OpenFin.LayoutContent | LayoutContentExtended) => LayoutComponentStateExtended[];
43
- export declare const getLayoutWithSingleView: (title: string, url: string) => Promise<any>;
44
+ export declare const getLayoutWithSingleView: (title: string, url: string, winIdentity?: NamedIdentity) => Promise<any>;
44
45
  export declare const isLayoutTabActive: (tabSelector: string) => boolean;
45
46
  export declare const containerId = "layout_container";
46
47
  export declare const getViewComponents: () => LayoutContentExtended;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Deep merge a set of source objects into a single target object.
3
+ * @param target the target object to merge sources into.
4
+ * @param sources the source objects to merge into the target. (FIFO)
5
+ */
6
+ export declare function mergeDeep(target: any, ...sources: any[]): any;
@@ -1,5 +1,3 @@
1
1
  export declare const capitalize: (s: string) => string;
2
- export declare const titleize: (s: string) => string;
3
2
  export declare const pascalize: (s: string) => string;
4
- export declare const slugify: (s: string) => string;
5
3
  export declare const isStringMatchesQuery: (title: string, query?: string) => boolean;
@@ -0,0 +1,57 @@
1
+ import { CustomPaletteSet } from '../../../common/src/api/theming';
2
+ /**
3
+ * Get hue from a CSS color
4
+ *
5
+ * The getHue function is used manage extracting hue from 3 types of css
6
+ * string input types. An object including hue, hsl, hsla, lightness and
7
+ * saturation are returned.
8
+ *
9
+ * Each function was copied css tricks and modified to fit this platform.
10
+ * Links above each function for technical details.
11
+ *
12
+ * Allowed formats:
13
+ * RGB with or with out the alpha rgb(x,x,x) or rgba(x,x,x,x)
14
+ * HEX 3 or 6 characters, plus hashtag #333 or #333333
15
+ * HSL with or with out the alhpa hsl(x,x%,x%) or hsla(x,x%,x%,x)
16
+ *
17
+ * The hue value is used later to build an array of background colors in the
18
+ * theme that are various shades of the hue returned from this function.
19
+ *
20
+ * An invalid format should error telling the integrator how to fix the error.
21
+ * - Error for missing required options
22
+ * - Error for invalid css strings that are unable to be processed
23
+ *
24
+ * @param colorInput string - Supported formats rgb/RGB/rgba/RGBA, #000/#000000, hsl/HSL/hsla/HSLA
25
+ * @returns hue as string
26
+ */
27
+ export declare const getHue: (colorInput: string) => string;
28
+ export declare const makeBackgroundLayers: (hue: string) => {
29
+ light: {
30
+ background1: string;
31
+ background2: string;
32
+ background3: string;
33
+ background4: string;
34
+ background5: string;
35
+ background6: string;
36
+ };
37
+ dark: {
38
+ background1: string;
39
+ background2: string;
40
+ background3: string;
41
+ background4: string;
42
+ background5: string;
43
+ background6: string;
44
+ };
45
+ };
46
+ /**
47
+ * makePalette() - generic - doesn't care about scheme
48
+ *
49
+ * Accepts a default palette object, and a custom palette object.
50
+ * The default object gets overrides from customPalette and returns a new palette object.
51
+ * @param defaultPalette
52
+ * @param customPalette
53
+ * @returns { light: newPalette, dark: newPalette }
54
+ *
55
+ * TODO: DefaultPaletteSet isn't working, need to redo.
56
+ */
57
+ export declare const makePalette: (defaultPalette: any, customPalette: CustomPaletteSet) => CustomPaletteSet;
@@ -31,6 +31,9 @@ export interface WindowIdentity {
31
31
  uuid: ApplicationUUID | string;
32
32
  name: WindowName | string;
33
33
  }
34
+ export interface WindowCreationOptionsExtended extends OpenFin.PlatformWindowCreationOptions {
35
+ backgroundThrottling?: boolean;
36
+ }
34
37
  interface Point {
35
38
  left: number;
36
39
  top: number;
@@ -143,4 +146,6 @@ export declare const isWindowRunning: (identity: WindowIdentity) => Promise<bool
143
146
  export declare const isStorefrontWindowRunning: () => Promise<boolean>;
144
147
  export declare const isHomeWindowRunning: () => Promise<boolean>;
145
148
  export declare const showAndFocusStorefront: () => Promise<void>;
149
+ export declare const centerWindowIfOffScreen: (windowIdentity?: WindowIdentity) => Promise<void>;
150
+ export declare const getDisableMultiplePagesOption: (identity: WindowIdentity) => Promise<any>;
146
151
  export {};
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{var e={485:function(e){var t;t=function(){var e=JSON.parse('{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ō":"O","ō":"o","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","Ə":"E","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","ə":"e","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","ѝ":"u","џ":"dz","Ґ":"G","ґ":"g","Ғ":"GH","ғ":"gh","Қ":"KH","қ":"kh","Ң":"NG","ң":"ng","Ү":"UE","ү":"ue","Ұ":"U","ұ":"u","Һ":"H","һ":"h","Ә":"AE","ә":"ae","Ө":"OE","ө":"oe","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","Ẁ":"W","ẁ":"w","Ẃ":"W","ẃ":"w","Ẅ":"W","ẅ":"w","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","–":"-","‘":"\'","’":"\'","“":"\\"","”":"\\"","„":"\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₸":"kazakhstani tenge","₹":"indian rupee","₺":"turkish lira","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial"}'),t=JSON.parse('{"de":{"Ä":"AE","ä":"ae","Ö":"OE","ö":"oe","Ü":"UE","ü":"ue","%":"prozent","&":"und","|":"oder","∑":"summe","∞":"unendlich","♥":"liebe"},"es":{"%":"por ciento","&":"y","<":"menor que",">":"mayor que","|":"o","¢":"centavos","£":"libras","¤":"moneda","₣":"francos","∑":"suma","∞":"infinito","♥":"amor"},"fr":{"%":"pourcent","&":"et","<":"plus petit",">":"plus grand","|":"ou","¢":"centime","£":"livre","¤":"devise","₣":"franc","∑":"somme","∞":"infini","♥":"amour"},"pt":{"%":"porcento","&":"e","<":"menor",">":"maior","|":"ou","¢":"centavo","∑":"soma","£":"libra","∞":"infinito","♥":"amor"},"uk":{"И":"Y","и":"y","Й":"Y","й":"y","Ц":"Ts","ц":"ts","Х":"Kh","х":"kh","Щ":"Shch","щ":"shch","Г":"H","г":"h"},"vi":{"Đ":"D","đ":"d"}}');function n(n,a){if("string"!=typeof n)throw new Error("slugify: string argument expected");var o=t[(a="string"==typeof a?{replacement:a}:a||{}).locale]||{},i=void 0===a.replacement?"-":a.replacement,r=n.normalize().split("").reduce((function(t,n){return t+(o[n]||e[n]||(n===i?" ":n)).replace(a.remove||/[^\w\s$*_+~.()'"!\-:@]+/g,"")}),"");return a.strict&&(r=r.replace(/[^A-Za-z0-9\s]/g,"")),r=r.trim().replace(/\s+/g,i),a.lower&&(r=r.toLowerCase()),r}return n.extend=function(t){Object.assign(e,t)},n},e.exports=t(),e.exports.default=t()}},t={};function n(a){var o=t[a];if(void 0!==o)return o.exports;var i=t[a]={exports:{}};return e[a].call(i.exports,i,i.exports,n),i.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};(()=>{"use strict";n.r(a),n.d(a,{AppManifestType:()=>wn,getCurrentSync:()=>Hn,init:()=>Nn,wrapSync:()=>Vn});var e={};n.r(e),n.d(e,{subscribe:()=>Ft});var t,o,i={};n.r(i),n.d(i,{create:()=>dn}),function(e){e.Local="local",e.Dev="dev",e.Staging="staging",e.Prod="prod"}(o||(o={}));const r="undefined"!=typeof window&&"undefined"!=typeof fin,s=("undefined"==typeof process||null===(t=process.env)||void 0===t||t.JEST_WORKER_ID,"undefined"!=typeof window),c=s&&"undefined"!=typeof indexedDB,d=s?window.origin:o.Local,u=r&&fin.me.uuid,l=r&&fin.me.name,p=r&&fin.me.entityType,g="undefined"!=typeof ENV?ENV:o.Local,f=(o.Local,o.Dev,o.Staging,o.Prod,e=>e.startsWith("http://")||e.startsWith("https://")?e:d+e),w=("undefined"!=typeof WORKSPACE_APPS_URL&&f(WORKSPACE_APPS_URL),"undefined"!=typeof WORKSPACE_STOREFRONT_FOOTER_URL&&f(WORKSPACE_STOREFRONT_FOOTER_URL),"undefined"!=typeof WORKSPACE_STOREFRONT_LANDING_PAGE_URL&&f(WORKSPACE_STOREFRONT_LANDING_PAGE_URL),"undefined"!=typeof WORKSPACE_STOREFRONT_NAVIGATION_URL&&f(WORKSPACE_STOREFRONT_NAVIGATION_URL),"undefined"!=typeof WORKSPACE_SHARE_URL&&f(WORKSPACE_SHARE_URL),f("https://cdn.openfin.co/workspace/staging"),f("https://cdn.openfin.co/workspace/staging"));var h,y;(y=h||(h={})).LaunchApp="launchApp",y.SavePage="savePage",y.GetSavedPage="getSavedPage",y.CreateSavedPage="createSavedPage",y.UpdateSavedPage="updateSavedPage",y.DeleteSavedPage="deleteSavedPage",y.GetSavedPages="getSavedPages",y.CreateSavedPageInternal="createSavedPageInternal",y.UpdateSavedPageInternal="updateSavedPageInternal",y.DeleteSavedPageInternal="deleteSavedPageInternal",y.SharePage="sharePage",y.LaunchPage="launchPage",y.UpdatePageForWindow="updatePageForWindow",y.AttachPagesToWindow="attachPagesToWindow",y.DetachPagesFromWindow="detachPagesFromWindow",y.ReorderPagesForWindow="reorderPagesForWindow",y.SetActivePageForWindow="setActivePageForWindow",y.GetOpenPages="getOpenPages",y.GetActivePageIdForWindow="getActivePageIdForWindow",y.GetPagesForWindow="getPagesForWindow",y.GetPageForWindow="getPageForWindow",y.GetSavedPageMetadata="getSavedPageMetadata",y.GetUniquePageTitle="getUniquePageTitle",y.GetLastFocusedBrowserWindow="getLastFocusedBrowserWindow";const v=async e=>{const t=fin.Platform.wrapSync(e),n=await t.getClient(),a="Target is not a Workspace Platform. Target must call WorkspacePlatform.init";try{if(!0===await n.dispatch("isWorkspacePlatform"))return n;throw new Error(a)}catch(e){throw new Error(a)}},m=e=>({identity:e,openfinWindow:fin.Window.wrapSync(e),getPages:async()=>(await v(e)).dispatch(h.GetPagesForWindow,e),getPage:async t=>(await v(e)).dispatch(h.GetPageForWindow,{identity:e,pageId:t}),addPage:async t=>{const n=await v(e);(null==t?void 0:t.title)||(t.title=await n.dispatch(h.GetUniquePageTitle,void 0));const a=(await n.dispatch(h.GetOpenPages,void 0)).find((e=>e.pageId===t.pageId||e.title===t.title));if(a)throw a.pageId===t.pageId?new Error(`page with id ${t.pageId} is already attached to a browser window ${a.parentIdentity.name}`):new Error(`page with title ${t.title} is already attached to a browser window ${a.parentIdentity.name}`);const o={identity:e,pages:[t]};return n.dispatch(h.AttachPagesToWindow,o)},removePage:async t=>(await v(e)).dispatch(h.DetachPagesFromWindow,{identity:e,pageIds:[t]}),setActivePage:async t=>(await v(e)).dispatch(h.SetActivePageForWindow,{identity:e,pageId:t}),updatePage:async t=>{const n=await v(e);return t.identity=e,n.dispatch(h.UpdatePageForWindow,t)},reorderPages:async t=>{const n=await v(e);return t.identity=e,n.dispatch(h.ReorderPagesForWindow,t)}}),P=e=>{const t=fin.Platform.wrapSync(e),n=async()=>(await t.getClient()).dispatch(h.GetOpenPages,void 0);return{wrapSync:e=>m(e),createWindow:async e=>{const n=await t.createWindow(e);return m(n.identity)},getOpenPages:n,getAllWindows:async()=>(await fin.Application.wrapSync(e).getChildWindows()).filter((e=>e.identity.name.includes("internal-generated-window-"))).map((e=>m(e.identity))),launchPage:async e=>{const a=await t.getClient();await a.dispatch(h.LaunchPage,{page:e,attachToExistingWindow:!0});const o=(await n()).find((t=>t.pageId===e.pageId));return m(o.parentIdentity)},getUniquePageTitle:async t=>(await v(e)).dispatch(h.GetUniquePageTitle,t),getLastFocusedWindow:async()=>(await v(e)).dispatch(h.GetLastFocusedBrowserWindow,void 0)}},S=e=>({createPage:async t=>(await v(e)).dispatch(h.CreateSavedPageInternal,t),deletePage:async t=>(await v(e)).dispatch(h.DeleteSavedPageInternal,t),updatePage:async t=>(await v(e)).dispatch(h.UpdateSavedPageInternal,t),getPage:async t=>(await v(e)).dispatch(h.GetSavedPage,t),getPages:async t=>(await v(e)).dispatch(h.GetSavedPages,t),savePage:async t=>(await v(e)).dispatch(h.SavePage,t)});var I,b,W;!function(e){e.Workspace="openfin-browser"}(I||(I={})),function(e){e.RunRequested="run-requested",e.WindowOptionsChanged="window-options-changed",e.WindowClosed="window-closed",e.WindowCreated="window-created"}(b||(b={})),function(e){e.FinProtocol="fin-protocol"}(W||(W={}));const R={uuid:u,name:u},O=(I.Workspace,I.Workspace,e=>{if(!r)throw new Error("getApplication cannot be used in a non OpenFin env. Avoid using this during pre-rendering.");return fin.Application.wrapSync(e)});var A,E,C;function F(e){if(!r)throw new Error("getOFWindow can only be used in an OpenFin env. Avoid calling this method during pre-rendering.");return fin.Window.wrapSync(e)}!function(e){e.Home="openfin-home",e.Dock="openfin-dock",e.Storefront="openfin-storefront",e.HomeInternal="openfin-home-internal",e.BrowserMenu="openfin-browser-menu",e.BrowserIndicator="openfin-browser-indicator",e.BrowserWindow="internal-generated-window"}(A||(A={})),(C=E||(E={})).Shown="shown",C.BoundsChanged="bounds-changed",C.LayoutReady="layout-ready",C.EndUserBoundsChanging="end-user-bounds-changing",C.Blurred="blurred",C.CloseRequested="close-requested",C.Focused="focused",C.ShowRequested="show-requested",C.ViewCrashed="view-crashed",C.ViewAttached="view-attached",C.ViewDetached="view-detached",C.ViewPageTitleUpdated="view-page-title-updated",C.ViewDestroyed="view-destroyed";const k={name:l,uuid:u};function T(){return F(k)}A.Home,I.Workspace,A.Dock,I.Workspace,A.Storefront,I.Workspace,I.Workspace,I.Workspace;const L=e=>e.startsWith(A.BrowserWindow);async function U(){return(await fin.Application.getCurrentSync().getChildWindows()).filter((e=>L(e.identity.name)))}var $,D;(D=$||($={})).LastLaunchedWorkspaceId="activeWorkspaceId",D.LastFocusedBrowserWindow="lastFocusedBrowserWindow",D.MachineName="machineName",D.NewTabPageLayout="NewTabPageLayout",D.NewTabPageSort="NewTabPageSort";const B=$,M={trace:!0,debug:"undefined"!=typeof LOG_DEBUG&&LOG_DEBUG,info:!1,warn:!0,error:!0,fatal:!0};function G(e,t){const n=void 0===t?M:{...M,...t},a=e?`${e} : `:"";return{trace:n.trace?(e,...t)=>{console.trace(`%c${a}${e}`,"color:#7795f7",...t)}:(e,...t)=>{},debug:n.debug?(e,...t)=>{console.info(`%c${a}${e}`,"color:#86db94",...t)}:(e,...t)=>{},info:n.info?(e,...t)=>{console.debug(`%c${a}${e}`,"color:#ffffff",...t)}:(e,...t)=>{},warn:n.warn?(e,...t)=>{console.warn(`%c${a}${e}`,"color:#edad68",...t)}:(e,...t)=>{},error:n.error?(e,t,...n)=>{console.error(`%c${a}${e}`,"color:#f55d67",...n,t)}:(e,t,...n)=>{},fatal:n.fatal?(e,t,...n)=>{console.error(`%c${a}${e}`,"color:#f70723",...n,t)}:(e,t,...n)=>{}}}const _=G("api.platform-window-focus");async function x(){if("undefined"!=typeof localStorage)try{const e=localStorage.getItem(B.LastFocusedBrowserWindow),t=JSON.parse(e);if(await(e=>F(e).getOptions().then((()=>!0)).catch((()=>!1)))(t))return t}catch(e){_.error("failed to get last focused browser window: ",e)}}function N(e=fin.me.identity){L(e.name)&&function(e){if("undefined"!=typeof localStorage)try{const t=JSON.stringify(e);localStorage.setItem(B.LastFocusedBrowserWindow,t)}catch(e){_.error("failed to save last focused browser window: ",e)}}(e)}var V;G("utils.layout"),function(e){e.TabCreated="tab-created",e.ContainerCreated="container-created",e.ContainerResized="container-resized"}(V||(V={}));const H=e=>{const t=[];return(e&&Array.isArray(e)?e:[]).forEach((e=>{if("component"===e.type)return t.push(e.componentState);const n=H(e.content);t.push(...n)})),t};new Map;const q=G("utils.channels"),j=s&&"complete"!==document.readyState&&new Promise((e=>document.addEventListener("readystatechange",(()=>{"complete"===document.readyState&&e()}))));function z(e){let t;return()=>{if(!r)throw new Error("getChannelClient cannot be used outside an OpenFin env. Avoid using this method during pre-rendering.");return t||(q.debug(`connecting to channel provider ${e}`),t=(async()=>{await j;const n=await fin.InterApplicationBus.Channel.connect(e);return n.onDisconnection((async()=>{q.warn(`disconnected from channel provider ${e}`),t=void 0})),n})().then((t=>(q.debug(`connected to channel provider ${e}`),t))).catch((t=>{q.error(`failed to connect to channel provider ${e}`,t)}))),t}}var Y,K;!function(e){e.GetPages="get-pages",e.GetActivePageForWindow="get-active-page-for-window",e.AttachPagesToWindow="attach-pages-to-window",e.DetachPagesFromWindow="detach-pages-from-window",e.SetActivePageForWindow="set-active-page-for-window",e.RenamePage="rename-page",e.ReorderPagesForWindow="reorder-pages-for-window",e.UpdatePageForWindow="update-page-for-window",e.UpdatePagesWindowOptions="update-pages-window-options",e.IsDetachingPages="is-detaching-pages",e.IsActivePageChanging="is-active-page-changing"}(Y||(Y={})),function(e){e.AttachedPagesToWindow="attached-pages-to-window",e.DetachedPagesFromWindow="detached-pages-from-window"}(K||(K={}));const J=new Map,Z=e=>{const t=(e=>`__running_pages__-${e.uuid}-${e.name}`)(e);return J.has(t)||J.set(t,z(t)),J.get(t)()},X=(new Map,async e=>{const t=await Z(e);return await t.dispatch(Y.GetPages)}),Q=async e=>(await Z(e.identity)).dispatch(Y.UpdatePageForWindow,e),ee=async()=>{const e=await U();return(await Promise.all(e.map((async({identity:e})=>X(e))))).reduce(((e,t)=>e.concat(t)),[])},te=async()=>(await v(k)).dispatch(h.GetSavedPages,void 0),ne=async e=>(await v(k)).dispatch(h.GetSavedPage,e),ae=async(e,t)=>{const n=await(async e=>(await ee()).find((t=>t.pageId===e)))(e);return!n||n.title===t.title&&e===t.pageId||await Q({identity:n.parentIdentity,pageId:e,page:{pageId:t.pageId,title:t.title}}),n},oe=async({page:e})=>{await ae(e.pageId,e),await(async e=>(await v(k)).dispatch(h.CreateSavedPage,e))({page:e})},ie=async e=>{await ne(e)&&await(async e=>(await v(k)).dispatch(h.DeleteSavedPage,e))(e)},re=async({pageId:e,page:t})=>(await ae(e,t),await(async e=>(await v(k)).dispatch(h.UpdateSavedPage,e))({pageId:e,page:t})),se=async e=>await ne(e.pageId)?re({pageId:e.pageId,page:e}):oe({page:e}),ce=async e=>{await(async e=>(await Z(e.identity)).dispatch(Y.AttachPagesToWindow,e))(e)},de=async e=>{await Q(e)},ue=async e=>{await(async e=>(await Z(e.identity)).dispatch(Y.DetachPagesFromWindow,e))(e)},le=async e=>{await(async e=>(await Z(e.identity)).dispatch(Y.SetActivePageForWindow,e))(e)},pe=e=>X(e),ge=async({identity:e,pageId:t})=>(await pe(e)).find((e=>e.pageId===t)),fe=async e=>{await(async e=>(await Z(e.identity)).dispatch(Y.ReorderPagesForWindow,e))(e)},we=(e,t)=>!t.find((t=>t===e)),he=(e,t)=>`${e} (${t})`;async function ye(e="Untitled Page"){const[t,n]=await Promise.all([te(),ee()]),a=[...t,...n].map((({title:e})=>e));if(!a.find((t=>t===e)))return e;let o=1;const i=e.replace(/ \(.+\)$/,"");for(;!we(he(i,o),a);)o+=1;return he(i,o)}const ve=G("api.cleanup"),me=new Map,Pe=e=>`${e.uuid}-${e.name}`,Se=((e,t=0)=>{let n,a,o=!1;const i=async a=>{const r=await e(...a);if(o){await new Promise((e=>setTimeout(e,t)));const e=n;return n=void 0,o=!1,i(e)}return r};return(...e)=>(a?(o=!0,n=e):a=i(e).then((e=>(a=void 0,e))),a)})((async function(){ve.debug("scheduling views to cleanup");const e=await ee(),t=new Set;e.forEach((e=>{H(e.layout.content).forEach((e=>{if(e.name){const n=Pe(e);t.add(n),ve.debug(`preserving view with id ${n}`)}}))}));const n=T();(await n.getCurrentViews()).forEach((({identity:e})=>{const n=Pe(e);if(t.has(n)||me.has(n))return;const a=setTimeout((()=>{ve.debug(`destroying view with id ${n}`),fin.View.wrapSync(e).destroy(),me.delete(n)}),5e3);ve.debug(`scheduled cleanup of view with id ${n}`),me.set(n,a)})),me.forEach(((e,n)=>{t.has(n)&&(clearTimeout(e),me.delete(n),ve.debug(`cancelled scheduled cleanup of view with id ${n}`))}))}),2500),Ie=({name:e})=>{L(e)&&Se()};function be(){return localStorage.getItem(B.MachineName)}let We,Re;async function Oe(){return We||(We=await fin.System.getMachineId()),We}async function Ae(e){var t;const n=e||await fin.Platform.getCurrentSync().getSnapshot();if(null===(t=n.snapshotDetails)||void 0===t?void 0:t.machineId)return n;const a=be();return{...n,snapshotDetails:{...e.snapshotDetails,machineId:await Oe(),machineName:a}}}function Ee(e){return new Promise(((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)}))}function Ce(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const a=Ee(n);return(e,n)=>a.then((a=>n(a.transaction(t,e).objectStore(t))))}function Fe(){return Re||(Re=Ce("keyval-store","keyval")),Re}n(485);const ke=c&&Ce("openfin-home-pages","pages");async function Te(e){const t=await function(e,t=Fe()){return t("readonly",(t=>Ee(t.get(e))))}(e,ke);return t?(t.pageId=e.toString(),t.title=t.title||t.pageId,t):null}async function Le(e){const t=await function(e=Fe()){const t=[];return function(e,t){return e("readonly",(e=>(e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},Ee(e.transaction))))}(e,(e=>t.push(e.key))).then((()=>t))}(ke),n=await Promise.all(t.map((e=>Te(e.toString()))));return e?n.filter((t=>((e,t="")=>e.toLowerCase().includes(t.toLowerCase()))(t.title,e))):n}async function Ue({page:e}){await function(e,t,n=Fe()){return n("readwrite",(n=>(n.put(t,e),Ee(n.transaction))))}(e.pageId,e,ke)}async function $e(e){await function(e,t=Fe()){return t("readwrite",(t=>(t.delete(e),Ee(t.transaction))))}(e,ke)}async function De({pageId:e,page:t}){return void 0!==await Te(e)&&(await Ue({page:t}),e!==t.pageId&&await $e(e),!0)}var Be;!function(e){e[e.Initial=0]="Initial",e[e.Open=1]="Open",e[e.Close=2]="Close"}(Be||(Be={}));const Me="0",Ge="5",_e="6",xe=()=>{};function Ne(e,t){return e?`${e}-${t}`:t}function Ve(e){return`__search-${e}-topic__`}const He=new Map;function qe(e,t){He.has(e)||He.set(e,new Set),He.get(e).add(t)}function je(e,t){const n=He.get(e);n&&n.delete(t)}const ze=new Map;function Ye(e,t){ze.has(e)||ze.set(e,new Set),ze.get(e).add(t)}function Ke(e,t){const n=ze.get(e);n&&n.delete(t)}const Je=new Map;function Ze(e,t){Je.has(e)||Je.set(e,new Map),Je.get(e).set(t.id,t);const n=He.get(e);n&&n.forEach((e=>e()))}function Xe(e,t){const n=Je.get(e);if(!n)return;n.delete(t);const a=ze.get(e);a&&a.forEach((e=>e()))}function Qe(e){return Je.get(e)?[...Je.get(e).values()]:[]}function et(e){const t=Je.get(e);t&&t.clear()}function tt(e,t){const n=Je.get(e);return n?n.get(t):null}function nt(e,t,n){return{...e,action:n||e.actions[0],dispatcherIdentity:t}}function at(e,t,n="ascending"){const a=e||[];if(!(null==t?void 0:t.length))return a;const o=[],i=new Map;t.forEach((e=>{if(e.key)return i.set(e.key,e);o.push(e)}));let r=a.map((e=>{const{key:t}=e;if(t&&i.has(t)){const e=i.get(t);return i.delete(t),e}return e}));return r.push(...i.values(),...o),r="ascending"===n?r.sort(((e,t)=>(null!==e.score&&void 0!==e.score?e.score:1/0)-(null!==t.score&&void 0!==t.score?t.score:1/0))):r.sort(((e,t)=>(null!==t.score&&void 0!==t.score?t.score:1/0)-(null!==e.score&&void 0!==e.score?e.score:1/0))),r}function ot(e){const t={};let n=[],a=[],o=Be.Initial;t.getStatus=()=>o,t.getResultBuffer=()=>n,t.setResultBuffer=e=>{n=e,(null==n?void 0:n.length)&&t.onChange()},t.getRevokedBuffer=()=>a,t.setRevokedBuffer=e=>{a=e,(null==a?void 0:a.length)&&t.onChange()},t.onChange=xe;const i={};return t.res=i,i.close=()=>{o!==Be.Close&&(o=Be.Close,t.onChange())},i.open=()=>{o!==Be.Open&&(o=Be.Open,t.onChange())},i.respond=n=>{const a=at(t.getResultBuffer(),n,e);t.setResultBuffer(a)},i.revoke=(...e)=>{const n=new Set(e),a=t.getResultBuffer().filter((({key:e})=>{const t=n.has(e);return t&&n.delete(e),!t}));t.setResultBuffer(a),n.size&&(t.getRevokedBuffer().forEach((e=>n.add(e))),t.setRevokedBuffer([...n]))},t}function it(e,t,n){const a=new Set;let o=!1;return{close:()=>{o=!0;for(const e of a)e()},req:{id:t,topic:e,...n,context:(null==n?void 0:n.context)||{},onClose:e=>{a.add(e),o&&e()},removeListener:e=>{a.delete(e)}}}}function rt(){return{name:fin.me.name,uuid:fin.me.uuid}}function st(){let e;try{const t=fin.Platform.getCurrentSync();if(!(null==t?void 0:t.identity))return;e=t.identity.uuid}catch(e){}return e}const ct="deregistered or does not exist",dt=new Error(`provider ${ct}`),ut=new Error("provider with name already exists"),lt=new Error("bad payload"),pt=new Error("subscription rejected"),gt=new Error(`channel ${ct}`),ft=new Map;function wt(e){const t=ht(e);if(t)return t;throw gt}function ht(e){const t=ft.get(e);if(t)return t}function yt(e,t){ft.set(e,t)}function vt(e){console.error("OpenFin Search API: ",e)}const mt=new Map;function Pt(e){mt.has(e)||mt.set(e,new Map);const t=mt.get(e);return{getRequestsForIdentity:e=>{const n=function(e){return`${e.uuid}:${e.name}`}(e);return t.has(n)||t.set(n,new Map),t.get(n)}}}async function St(e,t){return(await wt(e)).dispatch(Me,t)}function It({namespacedTopic:e,topic:t}){const n=tt.bind(null,e),a=Pt(e),o=St.bind(null,e);return async(e,i)=>{if(!e||!e.id||!e.providerId){const e=lt;return vt(e),{error:e.message}}const{id:r,providerId:s}=e,c=n(s);if(!c){const e=dt;return vt(e),{error:e.message}}const d=a.getRequestsForIdentity(i);let u=d.get(e.id);u||(u=it(t,r,e),d.set(e.id,u));const l=ot(),p=()=>{const e=l.getResultBuffer();l.setResultBuffer([]);const t=l.getRevokedBuffer();l.setRevokedBuffer([]);const n=l.getStatus();o({id:r,providerId:s,results:e,revoked:t,status:n})};let g=!0,f=!1;l.onChange=()=>{if(g)return g=!1,void p();f||(f=!0,setTimeout((()=>{f=!1,p()}),100))};try{const{results:e,context:t}=await c.onUserInput(u.req,l.res),n=l.getStatus();return{id:r,providerId:s,status:n,results:e,context:t}}catch(e){return vt(e),{id:r,providerId:s,error:e.message}}}}async function bt(e,t,n){const a=n||await wt(e),o=rt(),i={identity:o,...t,onUserInput:void 0,onResultDispatch:void 0};await a.dispatch("2",i),Ze(e,{identity:o,...t})}async function Wt(e,t){const n=await wt(e);return await n.dispatch("3",t),Xe(e,t)}async function Rt(e,t,n,a){const o=nt(n,rt(),a),i=tt(e,t);if(i){const{onResultDispatch:e}=i;if(!e)return;return e(o)}const r={providerId:t,result:o};return(await wt(e)).dispatch(Ge,r)}async function Ot(e,t){const n={...t,context:(null==t?void 0:t.context)||{}},a={},o=async function*(e,t,{setState:n}){const a=await wt(e);for(;;){const e=await a.dispatch("1",t),o=e.error;if(o)throw new Error(o);const i=e;if(t.id=i.id,n(i.state),i.done)return i.value;yield i.value}}(e,n,{setState:e=>{a.state=e}});let i=await o.next();return a.id=n.id,a.close=()=>{!async function(e,t){(await wt(e)).dispatch(_e,{id:t})}(e,a.id)},a.next=()=>{if(i){const e=i;return i=void 0,e}return o.next()},a}async function At(e){return(await wt(e)).dispatch("4",null)}async function Et(e){const t=await wt(e);var n;n=e,ft.delete(n),et(e),await t.disconnect()}async function Ct(e){const{namespacedTopic:t}=e,n=Ve(t),a=await async function(e){for(let t=0;t<50;t++)try{return await fin.InterApplicationBus.Channel.connect(e,{wait:!1})}catch(e){if(49===t)throw e;await new Promise((e=>setTimeout(e,1e3)))}}(n);return a.register(Me,It(e)),a.register(_e,function(e){const t=Pt(e);return(e,n)=>{const a=t.getRequestsForIdentity(n),o=a.get(e.id);o&&(o.close(),a.delete(e.id))}}(t)),a.register(Ge,function(e){return async(t,n)=>{if(!t||!t.providerId||!t.result)return void vt(lt);const a=tt(e,t.providerId);if(!a)return void vt(dt);const{onResultDispatch:o}=a;return o?(t.result.dispatcherIdentity=n,o(t.result)):void 0}}(t)),a.onDisconnection(function(e){const{namespacedTopic:t}=e,n=Pt(t);return async a=>{if(!ht(t))return;const o=n.getRequestsForIdentity(a);for(const{req:e,close:t}of o.values())t(),o.delete(e.id);yt(t,(async e=>{const{namespacedTopic:t}=e,n=await Ct(e);for(const e of Qe(t))await bt(t,e,n);return n})(e))}}(e)),a}async function Ft(e){const t=("string"==typeof e?e:null==e?void 0:e.topic)||"all",n=("string"==typeof e?null:null==e?void 0:e.uuid)||st(),a=Ne(n,t),o={topic:t,namespace:n,namespacedTopic:a};let i=ht(a);return i||(i=Ct(o),yt(a,i),await i),{getAllProviders:At.bind(null,a),register:bt.bind(null,a),search:Ot.bind(null,a),deregister:Wt.bind(null,a),dispatch:Rt.bind(null,a),disconnect:Et.bind(null,a)}}const kt=new Map;function Tt(e){const t=Lt(e);if(t)return t;throw gt}function Lt(e){const t=kt.get(e);if(t)return t}const Ut=new Map;function $t(e,t){Ut.has(e)||Ut.set(e,new Set),Ut.get(e).add(t)}function Dt(e,t){const n=Ut.get(e);n&&n.delete(t)}var Bt,Mt;function Gt(e){return[...Qe(e)].map((e=>({...e,onUserInput:void 0,onResultDispatch:void 0})))}function _t(e,t){if(tt(e,t.id))throw new Error("provider with name already exists");Ze(e,{identity:rt(),...t})}function xt(e,t){Xe(e,t)}async function Nt(e,t,n,a){const o=tt(e,t);if(!o)throw dt;const{onResultDispatch:i}=o;if(i)return i(nt(n,rt(),a))}!function(e){e.Fetching="fetching",e.Fetched="fetched",e.Complete="complete"}(Bt||(Bt={})),function(e){e.Active="active",e.Default="default"}(Mt||(Mt={}));let Vt=0;function Ht({namespacedTopic:e,topic:t},n){Vt+=1;const a=it(t,Vt.toString(),n);let o;return o=async function*(e,t,n){const a=function(e,t){const n=[],a=[],o=[],i=[];for(const r of e){const e=ot(r.scoreOrder),s={results:[],provider:{id:r.id,identity:r.identity,title:r.title,scoreOrder:r.scoreOrder,icon:r.icon}};n.push(s),a.push(e);const c=(async()=>{try{const{results:n,context:a}=await r.onUserInput(t,e.res);s.results=at(s.results,n),s.context={...s.context,...a}}catch(e){s.error=e}c.done=!0})();i.push(c),o.push(o.length)}return{providerResponses:n,listenerResponses:a,openListenerResponses:o,initialResponsePromises:i}}(t.targets?t.targets.map((t=>tt(e,t))).filter((e=>!!e)):[...Qe(e).filter((e=>!e.hidden))],t),{providerResponses:o,listenerResponses:i}=a;let{openListenerResponses:r,initialResponsePromises:s}=a,c=Bt.Fetching;const d=e=>{c=e,n.setState(c)};let u,l=!1;t.onClose((()=>{l=!0,u&&u()}));do{let e=!1;if(s.length){const t=[];for(const n of s)n.done?e=!0:t.push(n);s=t,s.length||(d(Bt.Fetched),e=!0)}let t,n=!1;const a=()=>{n=!0,t&&t()},p=[];for(const t of r){const n=i[t],r=o[t],s=n.getStatus();(s===Be.Open||c===Bt.Fetching&&s===Be.Initial)&&(p.push(t),n.onChange=a);const d=n.getResultBuffer();d.length&&(n.setResultBuffer([]),r.results=at(r.results,d),e=!0);const u=n.getRevokedBuffer();if(u.length){n.setRevokedBuffer([]);const t=new Set(u);r.results=r.results.filter((({key:e})=>!t.has(e))),e=!0}}if(r=p,e&&(yield o),l)break;n||(r.length||s.length)&&await Promise.race([...s,new Promise((e=>{t=e})),new Promise((e=>{u=e}))])}while(r.length||s.length);return d(Bt.Complete),o}(e,a.req,{setState:e=>{o.state=e}}),o.id=Vt.toString(),o.close=a.close,o.state=Bt.Fetching,o}const qt=new Map;function jt(e,t){return`${e}:${t}`}function zt(e,t,n){return Tt(e).dispatch(t,_e,{id:n})}async function Yt(e,t,{id:n,query:a,context:o,targets:i}){const r=Tt(e),s={id:n,query:a,context:o,targets:i,providerId:t.id},c=await r.dispatch(t.identity,Me,s),d=c.error;if(d)throw new Error(d);return c}const Kt=new Map;function Jt(e,t,n){return`${e}:${t.name}:${t.uuid}:${n}`}const Zt=new Map;function Xt(e,t,n){return`${e}:${t}:${n}`}function Qt(e,t){const n=Jt.bind(null,e,t.identity),a=zt.bind(null,e,t.identity),o=Yt.bind(null,e,t);return async(i,r)=>{const s=n(i.id);if(!Kt.has(s)){const e=()=>{a(i.id),Kt.delete(s)};Kt.set(s,e),i.onClose(e)}const c=Xt(e,t.id,i.id),d=()=>{Zt.delete(c),r.close()};i.onClose(d),Zt.set(c,(e=>{var t,n;(null===(t=e.results)||void 0===t?void 0:t.length)&&r.respond(e.results),(null===(n=e.revoked)||void 0===n?void 0:n.length)&&r.revoke(...e.revoked),e.status===Be.Open&&r.open(),e.status===Be.Close&&d()}));const u=await o(i);return u.status===Be.Open&&r.open(),u.status!==Be.Close&&u.status!==Be.Initial||d(),u}}function en(e,t){return async n=>{const a=Tt(e),o={providerId:t.id,result:n};return a.dispatch(t.identity,Ge,o)}}const tn=new Map;function nn(e,t){return`${e}-${t.name}-${t.uuid}`}const an=new Map;function on(e,t){an.has(e)||an.set(e,new Set),an.get(e).add(t)}function rn(e,t){const n=an.get(e);n&&n.delete(t)}async function sn(e){const{namespacedTopic:t}=e,n=Ve(e.namespacedTopic),a=await(o=n,fin.InterApplicationBus.Channel.create(o));var o;return a.onConnection(function({namespacedTopic:e}){return async t=>{const n=Ut.get(e);if(n)for(const e of n)if(!await e(t))throw pt}}(e)),a.onDisconnection(function(e){return async t=>{!function(e,t){const n=nn(e,t),a=tn.get(n);if(a){for(const t of a)Xe(e,t);tn.delete(n)}}(e,t);const n=an.get(e);n&&n.forEach((e=>e(t)))}}(t)),a.register(_e,function(e){return t=>function(e,t){const n=jt(e,t),a=qt.get(n);a&&a.generator.close()}(e,t.id)}(t)),a.register(Me,function(e){return t=>{const n=Xt(e,t.providerId,t.id),a=Zt.get(n);a&&a(t)}}(t)),a.register("2",function(e){return(t,n)=>{if(!t||!t.id)return vt(new Error(JSON.stringify(t))),void vt(lt);if(tt(e,t.id))throw ut;t.identity=n,function(e,t){const n=nn(e,t.identity);tn.has(n)||tn.set(n,[]),tn.get(n).push(t.id),Ze(e,{...t,onUserInput:Qt(e,t),onResultDispatch:en(e,t)})}(e,t)}}(t)),a.register("3",function(e){return t=>{t?function(e,t){const n=tt(e,t);if(!n)return;const a=nn(e,n.identity),o=tn.get(a);if(o){const n=o.findIndex((e=>e===t));-1!==n&&(o.splice(n,1),Xe(e,t))}}(e,t):vt(lt)}}(t)),a.register("4",function(e){return async()=>Gt(e)}(t)),a.register("1",function(e){return async(t,...n)=>{if(!t)return vt(lt),{error:lt.message};let a;if(t.id)a=jt(e.namespacedTopic,t.id);else{const n=Ht(e,t);a=jt(e.namespacedTopic,n.id),t.id=n.id,qt.set(a,{generator:n})}const o=qt.get(a);clearTimeout(o.timeout);const i=await o.generator.next();return o.timeout=function(e){return window.setTimeout((()=>{qt.delete(e)}),1e4)}(a),{...i,id:t.id,state:o.generator.state}}}(e)),a.register(Ge,function(e){return async(t,n)=>{if(!t||!t.providerId||!t.result)return void vt(lt);const a=tt(e,t.providerId);if(!a)throw dt;const{onResultDispatch:o}=a;return o?(t.result.dispatcherIdentity=n,o(t.result)):void 0}}(t)),a}async function cn(e){const t=Tt(e);var n;n=e,kt.delete(n),await t.destroy(),et(e)}async function dn(e){const t=("string"==typeof e?e:null==e?void 0:e.topic)||"all",n=st(),a=Ne(n,t),o={topic:t,namespace:n,namespacedTopic:a};let i=Lt(a);i||(i=await sn(o),function(e,t){kt.set(e,t)}(a,i));const r=Dt.bind(null,a),s=rn.bind(null,a),c=je.bind(null,a),d=Ke.bind(null,a);return{getAllProviders:Gt.bind(null,a),search:Ht.bind(null,o),register:_t.bind(null,a),deregister:xt.bind(null,a),onSubscription:$t.bind(null,a),onDisconnect:on.bind(null,a),onRegister:qe.bind(null,a),onDeregister:Ye.bind(null,a),dispatch:Nt.bind(null,o),disconnect:cn.bind(null,a),removeListener:e=>{r(e),s(e),c(e),d(e)}}}const{create:un}=i,{subscribe:ln}=e,pn={create:un,subscribe:ln,defaultTopic:"all"},gn=()=>{const e=window;e.search=pn,e.fin&&(e.fin.Search=pn)},fn=e=>{const t=()=>{gn(),window.removeEventListener(e,t)};return t};if("undefined"!=typeof window){gn();const e="load",t=fn(e);window.addEventListener(e,t);const n="DOMContentLoaded",a=fn(n);window.addEventListener(n,a)}var wn,hn,yn,vn,mn,Pn;async function Sn({app:e,target:t}){const n=fin.Platform.getCurrentSync();switch(e.manifestType){case wn.Snapshot:return n.applySnapshot(e.manifest);case wn.View:return async function(e,t){const n=fin.Platform.getCurrentSync();if("view"===t.entityType){const n=fin.View.wrapSync(t),a=await n.getParentLayout();return await a.replaceView(t,{manifestUrl:e.manifest,url:void 0,target:void 0}),n.destroy()}return n.createView({name:void 0,url:void 0,manifestUrl:e.manifest,target:void 0})}(e,t);case wn.External:return fin.System.launchExternalProcess({path:e.manifest,uuid:e.appId});default:return fin.Application.startFromManifest(e.manifest)}}!function(e){e.Snapshot="snapshot",e.Manifest="manifest",e.View="view",e.External="external"}(wn||(wn={})),function(e){e.LandingPage="landingPage",e.AppGrid="appGrid"}(hn||(hn={})),function(e){e.Suggestion="suggestion"}(yn||(yn={})),function(e){e.Contact="Contact",e.List="List",e.Plain="Plain",e.SimpleText="SimpleText"}(vn||(vn={})),function(e){e.MultiSelect="MultiSelect"}(mn||(mn={}));var In=new Uint8Array(16);function bn(){if(!Pn&&!(Pn="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Pn(In)}const Wn=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,Rn=function(e){return"string"==typeof e&&Wn.test(e)};for(var On=[],An=0;An<256;++An)On.push((An+256).toString(16).substr(1));const En=function(e,t,n){var a=(e=e||{}).random||(e.rng||bn)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t){n=n||0;for(var o=0;o<16;++o)t[n+o]=a[o];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(On[e[t+0]]+On[e[t+1]]+On[e[t+2]]+On[e[t+3]]+"-"+On[e[t+4]]+On[e[t+5]]+"-"+On[e[t+6]]+On[e[t+7]]+"-"+On[e[t+8]]+On[e[t+9]]+"-"+On[e[t+10]]+On[e[t+11]]+On[e[t+12]]+On[e[t+13]]+On[e[t+14]]+On[e[t+15]]).toLowerCase();if(!Rn(n))throw TypeError("Stringified UUID is invalid");return n}(a)};var Cn;!function(e){e.RegisterStorefrontProvider="register-storefront-provider",e.DeregisterStorefrontProvider="deregister-storefront-provider",e.GetStorefrontProviders="get-storefront-providers",e.HideStorefront="hide-storefront",e.GetStorefrontProviderApps="get-storefront-provider-apps",e.GetStorefrontProviderLandingPage="get-storefront-provider-landing-page",e.GetStorefrontProviderFooter="get-storefront-provider-footer",e.GetStorefrontProviderNavigation="get-storefront-provider-navigation",e.LaunchStorefrontProviderApp="launch-storefront-provider-app",e.ShowStorefront="show-storefront",e.CreateStorefrontWindow="create-storefront-window",e.ShowHome="show-home",e.HideHome="hide-home",e.AssignHomeSearchContext="assign-home-search-context",e.GetLegacyPages="get-legacy-pages",e.GetLegacyWorkspaces="get-legacy-workspaces"}(Cn||(Cn={})),z("__of_workspace_protocol__");var Fn,kn;!function(e){e.HomeIndex="/home/",e.HomeSearch="/home/search/",e.HomePagesRename="/home/pages/rename/",e.Dock="/home/dock/",e.BrowserPagesLanding="/browser/pages/landing/",e.HomeIndicator="/home/indicator/",e.Browser="/browser/",e.BrowserPopupMenu="/browser/popup-menu/",e.Provider="/provider/",e.BrowserPopupMenuSharePage="/browser/popup-menu/share-page/",e.BrowserPopupMenuSavePage="/browser/popup-menu/save-page/",e.BrowserPopupMenuLayouts="/browser/popup-menu/layouts/layouts/",e.BrowserPopupMenuColorLinking="/browser/popup-menu/color-linking/color-linking/",e.BrowserIndicator="/browser/indicator/",e.ResponseModal="/browser/popup-menu/response-modal/",e.Docs="/provider/docs/",e.Storefront="/storefront/",e.DeprecatedAlert="/provider/deprecated-alert/"}(Fn||(Fn={})),function(e){e.IconOpenFinLogo="/icons/openfinlogo.svg",e.IconFilter="/icons/filter.svg"}(kn||(kn={}));const Tn=w+{...kn,...Fn}.Browser;function Ln(e){e.detachOnClose=!0}const Un=e=>{var t,n;const a=e.name===A.Home,o=null===(t=e.name)||void 0===t?void 0:t.startsWith(A.HomeInternal),i=null===(n=e.name)||void 0===n?void 0:n.startsWith(A.BrowserMenu);return!a&&!o&&!i},$n=e=>"workspacePlatform"in e?e:(({workstacks:e,pages:t,...n})=>({...n,workspacePlatform:{pages:t||e||null}}))(e),Dn={contextMenuSettings:{reload:!1},url:Tn,contextMenu:!0,waitForPageLoad:!0,cornerRounding:{height:8,width:8},closeOnLastViewRemoved:!1,experimental:{showFavicons:!0,defaultFaviconUrl:`${w}/icons/defaultFavicon.svg`},permissions:{System:{openUrlWithBrowser:{enabled:!0,protocols:["mailto"]}}}},Bn={dimensions:{borderWidth:3,headerHeight:30}},Mn=e=>{const t=fin.Window.wrapSync(e);return Promise.all([t.bringToFront(),t.restore(),t.focus()])};const Gn=e=>async t=>{class n extends t{constructor(){super(...arguments),this.isWorkspacePlatform=()=>!0,this.getSavedPage=Te,this.getSavedPages=Le,this.createSavedPage=Ue,this.deleteSavedPage=$e,this.updateSavedPage=De,this.attachPagesToWindow=ce,this.addPage=ce,this.detachPagesFromWindow=ue,this.getOpenPages=ee,this.getPagesForWindow=pe,this.getPageForWindow=ge,this.setActivePageForWindow=le,this.launchApp=Sn,this.savePage=se,this.createSavedPageInternal=oe,this.updateSavedPageInternal=re,this.deleteSavedPageInternal=ie,this.reorderPagesForWindow=fe,this.getUniquePageTitle=ye,this.updatePageForWindow=de,this.getLastFocusedBrowserWindow=x}async getSnapshot(){const e=await async function(e){const t=await U();return await Promise.all(t.map((({identity:e})=>(async e=>(await Z(e)).dispatch(Y.UpdatePagesWindowOptions))(e)))),e?e():Ae()}((async()=>Ae(await super.getSnapshot(void 0,fin.me.identity))));return{...e,windows:e.windows.filter(Un)}}async applySnapshot({snapshot:e,options:t}){(null==t?void 0:t.closeExistingWindows)&&await async function(){const e=await U();await Promise.all(e.map((e=>e.close(!0).catch((()=>{})))))}();let n=e;return"string"==typeof n&&(n=await super.fetchManifest({manifestUrl:n},fin.me.identity)),async function(e,t){var n;const a=await ee(),o=(null===(n=e.snapshotDetails)||void 0===n?void 0:n.monitorInfo)||await fin.System.getMonitorInfo(),i=(e.windows||[]).filter((({layout:e})=>!!e)),r=new Map;a.forEach((e=>r.set(e.pageId,e)));const s=[],c=i.map((async e=>{var t;const n=$n(e),a=[],o=(e=>{let t=!1;const n=(e||[]).map((e=>{const n={pageId:(a=e).pageId||a.id,title:a.title||a.name,isReadOnly:a.isReadOnly,layout:a.layout,isActive:a.isActive};var a;return t&&n.isActive&&(n.isActive=!1),n.isActive&&(t=!0),n}));return!t&&n.length&&(n[0].isActive=!0),n})(null===(t=null==n?void 0:n.workspacePlatform)||void 0===t?void 0:t.pages);if(!(null==o?void 0:o.length)){const e=await ye();a.push(await(async(e,t)=>{const n=await(async e=>({...e,layoutDetails:{machineId:await Oe(),machineName:be()}}))(t);return{pageId:En(),title:e,layout:n,isReadOnly:!1,hasUnsavedChanges:!0}})(e,n.layout))}let i;o.forEach((e=>{const t=r.get(e.pageId);t?i=t:a.push(e)})),i&&await Promise.all([le({identity:i.parentIdentity,pageId:i.pageId}),Mn(i.parentIdentity)]),a.length&&s.push({...n,workspacePlatform:{...n.workspacePlatform,pages:a}})}));if(await Promise.all(c),!s.length)return;const d=fin.Platform.getCurrentSync();return(t||d.applySnapshot.bind(d))({...e,snapshotDetails:{...e.snapshotDetails,monitorInfo:o},windows:s})}(n,(e=>super.applySnapshot({snapshot:e,options:{...t,closeExistingWindows:!1}})))}async createWindow(e,t){let n=$n(e);return n=(e=>{var t;const n=null===(t=null==e?void 0:e.workspacePlatform)||void 0===t?void 0:t.pages;if(n){const t=n.find((e=>e.isActive));t?e.layout=t.layout:(n[0].isActive=!0,e.layout=n[0].layout)}if(e.layout){Object.assign(e,Dn),e.layout=Object.assign(e.layout,Bn),(e.icon||e.taskbarIcon)&&(e.taskbarIconGroup=e.taskbarIconGroup||fin.me.identity.uuid);const t=e.workspacePlatform.newTabUrl;t&&(e.layout.settings||(e.layout.settings={}),e.layout.settings.newTabButton={url:t})}return e})(n),n=await(async e=>{const t=await fin.System.getMonitorInfo(),n=t.primaryMonitor.availableRect.bottom-t.primaryMonitor.availableRect.top,a=t.primaryMonitor.availableRect.right-t.primaryMonitor.availableRect.left;return e.defaultHeight=e.defaultHeight||"800",e.defaultWidth=e.defaultWidth||"800",n<e.defaultHeight&&(e.defaultHeight=n),a<e.defaultWidth&&(e.defaultWidth=a),e})(n),super.createWindow(n,t)}async createView(e,t){return Ln(e.opts),super.createView(e,t)}async replaceView(e,t){return Ln(e.opts.newView),super.replaceView(e,t)}async replaceLayout(e,t){var n;return null===(n=e.opts.layout)||void 0===n||delete n.dimensions,super.replaceLayout(e,t)}async closeView(e,t){const n=fin.View.wrapSync(e.view);await super.closeView(e,t),await n.destroy().catch((e=>e))}}return"function"==typeof(null==e?void 0:e.overrideCallback)?e.overrideCallback(n):new n};async function _n(){(function(){const e=O(R);e.addListener(b.WindowOptionsChanged,Se),e.addListener(b.WindowClosed,Ie),e.addListener(b.WindowCreated,Ie)})(),async function(){const e=fin.Application.getCurrentSync();await e.addListener("window-focused",N)}(),g!==o.Local&&T().addListener(E.ShowRequested,(()=>async function(e){const t=F(e);await t.blur(),await t.hide()}(k)))}let xn;const Nn=async e=>{const t="23.96.67.7".split(".").map((e=>parseInt(e)));if(await(async e=>new Promise((async t=>{const n=(await fin.System.getVersion()).split(".").map((e=>parseInt(e)));t(e.every(((t,a)=>!(a<3)||n[a]===e[a])))})))(t))return function(e){if(!r)throw new Error("Cannot be used outside an OpenFin env.");return xn||(fin.Platform.getCurrentSync().once("platform-api-ready",(()=>_n())),xn=fin.Platform.init({overrideCallback:Gn(e),interopOverride:null==e?void 0:e.interopOverride})),xn}(null==e?void 0:e.browser);throw new Error(`Runtime version is not supported. ${t[0]}.${t[1]}.${t[2]}.* is required`)},Vn=e=>(e=>{const t=fin.Platform.wrapSync(e);return Object.assign(t,{applySnapshot:async t=>{if("string"!=typeof t&&!(null==t?void 0:t.windows))throw new Error("Not a valid browser snapshot");return fin.Platform.wrapSync(e).applySnapshot(t)},getSnapshot:()=>fin.Platform.wrapSync(e).getSnapshot().then((e=>e)),launchApp:async t=>(t.target||(t.target={uuid:u,name:l,entityType:p||"unknown"}),(await v(e)).dispatch(h.LaunchApp,t)),Browser:P(e),Storage:S(e)})})(e),Hn=()=>Vn(fin.me.identity)})(),module.exports=a})();
1
+ (()=>{"use strict";var e,t={d:(e,a)=>{for(var n in a)t.o(a,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:a[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};t.r(a),t.d(a,{AppManifestType:()=>g,BrowserButtonType:()=>P,CustomActionCallerType:()=>v,getCurrentSync:()=>Et,init:()=>Mt,wrapSync:()=>Gt}),function(e){e.Local="local",e.Dev="dev",e.Staging="staging",e.Prod="prod"}(e||(e={}));const n="undefined"!=typeof window&&"undefined"!=typeof fin,o=("undefined"==typeof process||process.env?.JEST_WORKER_ID,"undefined"!=typeof window),i=o&&"undefined"!=typeof indexedDB,r=o?window.origin:e.Local,s=n&&fin.me.uuid,c=n&&fin.me.name,d=n&&fin.me.entityType,p=(ENV,e.Local,ENV,e.Dev,ENV,e.Staging,ENV,e.Prod,e=>e.startsWith("http://")||e.startsWith("https://")?e:r+e),w=(p("https://cdn.openfin.co/workspace/5.6.2"),p("https://cdn.openfin.co/workspace/5.6.2"));var u,l,g,f,h,y,m,P,v,S,b;"undefined"!=typeof window&&new Promise((e=>window.addEventListener("load",(()=>window.requestAnimationFrame((()=>e())))))),function(e){e.Fetching="fetching",e.Fetched="fetched",e.Complete="complete"}(u||(u={})),function(e){e.Active="active",e.Default="default"}(l||(l={})),function(e){e.Snapshot="snapshot",e.Manifest="manifest",e.View="view",e.External="external"}(g||(g={})),function(e){e.LandingPage="landingPage",e.AppGrid="appGrid"}(f||(f={})),function(e){e.Suggestion="suggestion"}(h||(h={})),function(e){e.Contact="Contact",e.List="List",e.Plain="Plain",e.SimpleText="SimpleText"}(y||(y={})),function(e){e.MultiSelect="MultiSelect"}(m||(m={})),function(e){e.ShowHideTabs="ShowHideTabs",e.ColorLinking="ColorLinking",e.PresetLayouts="PresetLayouts",e.SavePage="SavePage",e.Minimise="Minimise",e.Maximise="Maximise",e.Close="Close",e.Custom="Custom"}(P||(P={})),function(e){e.CustomButton="CustomButton",e.ContextMenu="ContextMenu",e.API="API"}(v||(v={})),(b=S||(S={})).LaunchApp="launchApp",b.SavePage="savePage",b.GetSavedPage="getSavedPage",b.CreateSavedPage="createSavedPage",b.UpdateSavedPage="updateSavedPage",b.DeleteSavedPage="deleteSavedPage",b.GetSavedPages="getSavedPages",b.CreateSavedPageInternal="createSavedPageInternal",b.UpdateSavedPageInternal="updateSavedPageInternal",b.DeleteSavedPageInternal="deleteSavedPageInternal",b.SharePage="sharePage",b.LaunchPage="launchPage",b.UpdatePageForWindow="updatePageForWindow",b.AttachPagesToWindow="attachPagesToWindow",b.DetachPagesFromWindow="detachPagesFromWindow",b.ReorderPagesForWindow="reorderPagesForWindow",b.SetActivePage="setActivePage",b.GetAllAttachedPages="getAllAttachedPages",b.GetActivePageIdForWindow="getActivePageIdForWindow",b.GetPagesForWindow="getPagesForWindow",b.GetPageForWindow="getPageForWindow",b.GetSavedPageMetadata="getSavedPageMetadata",b.GetUniquePageTitle="getUniquePageTitle",b.GetLastFocusedBrowserWindow="getLastFocusedBrowserWindow",b.GetThemes="getThemes",b.OpenGlobalContextMenuInternal="openGlobalContextMenuInternal",b.InvokeCustomActionInternal="invokeCustomActionInternal";const W=async e=>{const t=fin.Platform.wrapSync(e),a=await t.getClient(),n="Target is not a Workspace Platform. Target must call WorkspacePlatform.init";try{if(!0===await a.dispatch("isWorkspacePlatform"))return a;throw new Error(n)}catch(e){throw new Error(n)}},I=e=>({identity:e,openfinWindow:fin.Window.wrapSync(e),getPages:async()=>(await W(e)).dispatch(S.GetPagesForWindow,e),getPage:async t=>(await W(e)).dispatch(S.GetPageForWindow,{identity:e,pageId:t}),addPage:async t=>{const a=await W(e);t?.title||(t.title=await a.dispatch(S.GetUniquePageTitle,void 0));const n=(await a.dispatch(S.GetAllAttachedPages,void 0)).find((e=>e.pageId===t.pageId||e.title===t.title));if(n)throw n.pageId===t.pageId?new Error(`page with id ${t.pageId} is already attached to a browser window ${n.parentIdentity.name}`):new Error(`page with title ${t.title} is already attached to a browser window ${n.parentIdentity.name}`);const o={identity:e,pages:[t]};return a.dispatch(S.AttachPagesToWindow,o)},removePage:async t=>(await W(e)).dispatch(S.DetachPagesFromWindow,{identity:e,pageIds:[t]}),setActivePage:async t=>(await W(e)).dispatch(S.SetActivePage,{identity:e,pageId:t}),updatePage:async t=>{const a=await W(e);return t.identity=e,a.dispatch(S.UpdatePageForWindow,t)},reorderPages:async t=>{const a=await W(e);return t.identity=e,a.dispatch(S.ReorderPagesForWindow,t)},_openGlobalContextMenu:async t=>{const a=await W(e);return t.identity=e,a.dispatch(S.OpenGlobalContextMenuInternal,t)}}),C=e=>{const t=fin.Platform.wrapSync(e),a=async()=>(await t.getClient()).dispatch(S.GetAllAttachedPages,void 0);return{wrapSync:e=>I(e),createWindow:async e=>{const a=await t.createWindow(e);return I(a.identity)},getAllAttachedPages:a,getAllWindows:async()=>(await fin.Application.wrapSync(e).getChildWindows()).filter((e=>e.identity.name.includes("internal-generated-window-"))).map((e=>I(e.identity))),launchPage:async e=>{const n=await t.getClient();await n.dispatch(S.LaunchPage,{page:e,attachToExistingWindow:!0});const o=(await a()).find((t=>t.pageId===e.pageId));return I(o.parentIdentity)},getUniquePageTitle:async t=>(await W(e)).dispatch(S.GetUniquePageTitle,t),getLastFocusedWindow:async()=>(await W(e)).dispatch(S.GetLastFocusedBrowserWindow,void 0)}},A=e=>({createPage:async t=>(await W(e)).dispatch(S.CreateSavedPageInternal,t),deletePage:async t=>(await W(e)).dispatch(S.DeleteSavedPageInternal,t),updatePage:async t=>(await W(e)).dispatch(S.UpdateSavedPageInternal,t),getPage:async t=>(await W(e)).dispatch(S.GetSavedPage,t),getPages:async t=>(await W(e)).dispatch(S.GetSavedPages,t),savePage:async t=>(await W(e)).dispatch(S.SavePage,t)}),k=e=>({getThemes:async()=>(await W(e)).dispatch(S.GetThemes,void 0)});let T={};const F=({actionId:e,payload:t})=>{if("function"!=typeof T[e])throw new Error(`Cannot find a configured function for the action '${e}'`);return T[e](t)};let L=[];const M=()=>L;var G,E;(E=G||(G={})).LastLaunchedWorkspaceId="activeWorkspaceId",E.LastFocusedBrowserWindow="lastFocusedBrowserWindow",E.MachineName="machineName",E.NewTabPageLayout="NewTabPageLayout",E.NewTabPageSort="NewTabPageSort";const O=G,U={trace:!0,debug:"undefined"!=typeof LOG_DEBUG&&LOG_DEBUG,info:!1,warn:!0,error:!0,fatal:!0};function B(e,t){const a=void 0===t?U:{...U,...t},n=e?`${e} : `:"";return{trace:a.trace?(t,...a)=>{console.trace(`%c${n}${t}`,"color:#7795f7",...a),(void 0)(t,e,a)}:(t,...a)=>{(void 0)(t,e,a)},debug:a.debug?(t,...a)=>{console.info(`%c${n}${t}`,"color:#86db94",...a),(void 0)(t,e,a)}:(t,...a)=>{(void 0)(t,e,a)},info:a.info?(t,...a)=>{console.debug(`%c${n}${t}`,"color:#ffffff",...a),(void 0)(t,e,a)}:(t,...a)=>{(void 0)(t,e,a)},warn:a.warn?(t,...a)=>{console.warn(`%c${n}${t}`,"color:#edad68",...a),(void 0)(t,e,a)}:(t,...a)=>{(void 0)(t,e,a)},error:a.error?(t,a,...o)=>{console.error(`%c${n}${t}`,"color:#f55d67",...o,a),(void 0)(t,a,e,o)}:(t,a,...n)=>{(void 0)(t,a,e,n)},fatal:a.fatal?(t,a,...o)=>{console.error(`%c${n}${t}`,"color:#f70723",...o,a),(void 0)(t,a,e,o)}:(t,a,...n)=>{(void 0)(t,a,e,n)}}}var x,$,D;(function(e){e.Workspace="openfin-browser"})(x||(x={})),function(e){e.RunRequested="run-requested",e.WindowOptionsChanged="window-options-changed",e.WindowClosed="window-closed",e.WindowCreated="window-created"}($||($={})),function(e){e.FinProtocol="fin-protocol"}(D||(D={}));const V={uuid:s,name:s},N=(x.Workspace,x.Workspace,e=>{if(!n)throw new Error("getApplication cannot be used in a non OpenFin env. Avoid using this during pre-rendering.");return fin.Application.wrapSync(e)});var R,_,H;function q(e){if(!n)throw new Error("getOFWindow can only be used in an OpenFin env. Avoid calling this method during pre-rendering.");return fin.Window.wrapSync(e)}!function(e){e.Home="openfin-home",e.Dock="openfin-dock",e.Storefront="openfin-storefront",e.HomeInternal="openfin-home-internal",e.BrowserMenu="openfin-browser-menu",e.BrowserIndicator="openfin-browser-indicator",e.BrowserWindow="internal-generated-window"}(R||(R={})),(H=_||(_={})).Shown="shown",H.BoundsChanged="bounds-changed",H.LayoutReady="layout-ready",H.EndUserBoundsChanging="end-user-bounds-changing",H.Blurred="blurred",H.CloseRequested="close-requested",H.Focused="focused",H.ShowRequested="show-requested",H.ViewCrashed="view-crashed",H.ViewAttached="view-attached",H.ViewDetached="view-detached",H.ViewPageTitleUpdated="view-page-title-updated",H.ViewDestroyed="view-destroyed";const j={name:c,uuid:s};R.Home,x.Workspace,R.Dock,x.Workspace;const Q={name:R.Storefront,uuid:x.Workspace};x.Workspace,x.Workspace;const J=e=>e.startsWith(R.BrowserWindow);async function z(){return(await fin.Application.getCurrentSync().getChildWindows()).filter((e=>J(e.identity.name)))}const K=e=>q(e).getOptions().then((()=>!0)).catch((()=>!1)),X=()=>K(Q),Y=B("api.platform-window-focus");async function Z(){if("undefined"!=typeof localStorage)try{const e=localStorage.getItem(O.LastFocusedBrowserWindow),t=JSON.parse(e);if(await K(t))return t}catch(e){Y.error("failed to get last focused browser window: ",e)}}function ee(e=fin.me.identity){J(e.name)&&function(e){if("undefined"!=typeof localStorage)try{const t=JSON.stringify(e);localStorage.setItem(O.LastFocusedBrowserWindow,t)}catch(e){Y.error("failed to save last focused browser window: ",e)}}(e)}var te;B("utils.layout"),function(e){e.TabCreated="tab-created",e.ContainerCreated="container-created",e.ContainerResized="container-resized"}(te||(te={}));const ae=e=>{const t=[];return(e&&Array.isArray(e)?e:[]).forEach((e=>{if("component"===e.type)return t.push(e.componentState);const a=ae(e.content);t.push(...a)})),t};new Map;const ne=B("utils.channels"),oe=o&&"complete"!==document.readyState&&new Promise((e=>document.addEventListener("readystatechange",(()=>{"complete"===document.readyState&&e()}))));function ie(e){let t;return()=>{if(!n)throw new Error("getChannelClient cannot be used outside an OpenFin env. Avoid using this method during pre-rendering.");return t||(ne.debug(`connecting to channel provider ${e}`),t=(async()=>{await oe;const a=await fin.InterApplicationBus.Channel.connect(e);return a.onDisconnection((async()=>{ne.warn(`disconnected from channel provider ${e}`),t=void 0})),a})().then((t=>(ne.debug(`connected to channel provider ${e}`),t))).catch((t=>{ne.error(`failed to connect to channel provider ${e}`,t)}))),t}}B("api.browser.protocol");const re=new Map,se=e=>{const t=(e=>`__browser_window__-${e.uuid}-${e.name}`)(e);return re.has(t)||re.set(t,ie(t)),re.get(t)()};var ce,de,pe;!function(e){e.CloseBrowserWindow="close-browser-window",e.QuitPlatform="quit-platform"}(ce||(ce={})),function(e){e.GetPages="get-pages",e.GetActivePageForWindow="get-active-page-for-window",e.AttachPagesToWindow="attach-pages-to-window",e.DetachPagesFromWindow="detach-pages-from-window",e.SetActivePageForWindow="set-active-page-for-window",e.RenamePage="rename-page",e.ReorderPagesForWindow="reorder-pages-for-window",e.UpdatePageForWindow="update-page-for-window",e.UpdatePagesWindowOptions="update-pages-window-options",e.IsDetachingPages="is-detaching-pages",e.IsActivePageChanging="is-active-page-changing"}(de||(de={})),function(e){e.AttachedPagesToWindow="attached-pages-to-window",e.DetachedPagesFromWindow="detached-pages-from-window"}(pe||(pe={})),new Map;const we=async e=>{const t=await se(e);return await t.dispatch(de.GetPages)},ue=async e=>(await se(e.identity)).dispatch(de.UpdatePageForWindow,e),le=async()=>{const e=await z();return(await Promise.all(e.map((async({identity:e})=>we(e))))).reduce(((e,t)=>e.concat(t)),[])},ge=async()=>(await W(j)).dispatch(S.GetSavedPages,void 0),fe=async e=>(await W(j)).dispatch(S.GetSavedPage,e),he=async(e,t)=>{const a=await(async e=>(await le()).find((t=>t.pageId===e)))(e);return!a||a.title===t.title&&e===t.pageId||await ue({identity:a.parentIdentity,pageId:e,page:{pageId:t.pageId,title:t.title}}),a},ye=async({page:e})=>{await he(e.pageId,e),await(async e=>(await W(j)).dispatch(S.CreateSavedPage,e))({page:e})},me=async e=>{await fe(e)&&await(async e=>(await W(j)).dispatch(S.DeleteSavedPage,e))(e)},Pe=async({pageId:e,page:t})=>(await he(e,t),await(async e=>(await W(j)).dispatch(S.UpdateSavedPage,e))({pageId:e,page:t})),ve=async e=>await fe(e.pageId)?Pe({pageId:e.pageId,page:e}):ye({page:e}),Se=async e=>{await(async e=>(await se(e.identity)).dispatch(de.AttachPagesToWindow,e))(e)},be=async e=>{await ue(e)},We=async e=>{await(async e=>(await se(e.identity)).dispatch(de.DetachPagesFromWindow,e))(e)},Ie=async e=>{await(async e=>(await se(e.identity)).dispatch(de.SetActivePageForWindow,e))(e)},Ce=e=>we(e),Ae=async({identity:e,pageId:t})=>(await Ce(e)).find((e=>e.pageId===t)),ke=async e=>{await(async e=>(await se(e.identity)).dispatch(de.ReorderPagesForWindow,e))(e)},Te=(e,t)=>!t.find((t=>t===e)),Fe=(e,t)=>`${e} (${t})`;async function Le(e="Untitled Page"){const[t,a]=await Promise.all([ge(),le()]),n=[...t,...a].map((({title:e})=>e));if(!n.find((t=>t===e)))return e;let o=1;const i=e.replace(/ \(.+\)$/,"");for(;!Te(Fe(i,o),n);)o+=1;return Fe(i,o)}const Me=B("api.cleanup"),Ge=new Map,Ee=e=>`${e.uuid}-${e.name}`,Oe=((e,t=0)=>{let a,n,o=!1;const i=async n=>{const r=await e(...n);if(o){await new Promise((e=>setTimeout(e,t)));const e=a;return a=void 0,o=!1,i(e)}return r};return(...e)=>(n?(o=!0,a=e):n=i(e).then((e=>(n=void 0,e))),n)})((async function(){Me.debug("scheduling views to cleanup");const e=await le(),t=new Set;e.forEach((e=>{ae(e.layout.content).forEach((e=>{if(e.name){const a=Ee(e);t.add(a),Me.debug(`preserving view with id ${a}`)}}))}));const a=q(j);(await a.getCurrentViews()).forEach((({identity:e})=>{const a=Ee(e);if(t.has(a)||Ge.has(a))return;const n=setTimeout((()=>{Me.debug(`destroying view with id ${a}`),fin.View.wrapSync(e).destroy(),Ge.delete(a)}),5e3);Me.debug(`scheduled cleanup of view with id ${a}`),Ge.set(a,n)})),Ge.forEach(((e,a)=>{t.has(a)&&(clearTimeout(e),Ge.delete(a),Me.debug(`cancelled scheduled cleanup of view with id ${a}`))}))}),2500),Ue=({name:e})=>{J(e)&&Oe().catch((e=>{}))};function Be(){return localStorage.getItem(O.MachineName)}let xe,$e;async function De(){return xe||(xe=await fin.System.getMachineId()),xe}async function Ve(e){const t=e||await fin.Platform.getCurrentSync().getSnapshot();if(t.snapshotDetails?.machineId)return t;const a=Be();return{...t,snapshotDetails:{...e.snapshotDetails,machineId:await De(),machineName:a}}}function Ne(e){return new Promise(((t,a)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>a(e.error)}))}function Re(e,t){const a=indexedDB.open(e);a.onupgradeneeded=()=>a.result.createObjectStore(t);const n=Ne(a);return(e,a)=>n.then((n=>a(n.transaction(t,e).objectStore(t))))}function _e(){return $e||($e=Re("keyval-store","keyval")),$e}const He=i&&Re("openfin-home-pages","pages");async function qe(e){const t=await function(e,t=_e()){return t("readonly",(t=>Ne(t.get(e))))}(e,He);return t?(t.pageId=e.toString(),t.title=t.title||t.pageId,t):null}async function je(e){const t=await function(e=_e()){const t=[];return function(e,t){return e("readonly",(e=>(e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},Ne(e.transaction))))}(e,(e=>t.push(e.key))).then((()=>t))}(He),a=await Promise.all(t.map((e=>qe(e.toString()))));return e?a.filter((t=>((e,t="")=>e.toLowerCase().includes(t.toLowerCase()))(t.title,e))):a}async function Qe({page:e}){await function(e,t,a=_e()){return a("readwrite",(a=>(a.put(t,e),Ne(a.transaction))))}(e.pageId,e,He)}async function Je(e){await function(e,t=_e()){return t("readwrite",(t=>(t.delete(e),Ne(t.transaction))))}(e,He)}async function ze({pageId:e,page:t}){if(void 0===await qe(e))throw new Error("page not found");await Qe({page:t}),e!==t.pageId&&await Je(e)}var Ke,Xe;!function(e){e.Label="normal",e.Separator="separator",e.Submenu="submenu",e.Checkbox="checkbox"}(Ke||(Ke={}));var Ye=new Uint8Array(16);function Ze(){if(!Xe&&!(Xe="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Xe(Ye)}const et=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,tt=function(e){return"string"==typeof e&&et.test(e)};for(var at=[],nt=0;nt<256;++nt)at.push((nt+256).toString(16).substr(1));const ot=function(e,t,a){var n=(e=e||{}).random||(e.rng||Ze)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){a=a||0;for(var o=0;o<16;++o)t[a+o]=n[o];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(at[e[t+0]]+at[e[t+1]]+at[e[t+2]]+at[e[t+3]]+"-"+at[e[t+4]]+at[e[t+5]]+"-"+at[e[t+6]]+at[e[t+7]]+"-"+at[e[t+8]]+at[e[t+9]]+"-"+at[e[t+10]]+at[e[t+11]]+at[e[t+12]]+at[e[t+13]]+at[e[t+14]]+at[e[t+15]]).toLowerCase();if(!tt(a))throw TypeError("Stringified UUID is invalid");return a}(n)};var it;!function(e){e.RegisterStorefrontProvider="register-storefront-provider",e.DeregisterStorefrontProvider="deregister-storefront-provider",e.GetStorefrontProviders="get-storefront-providers",e.HideStorefront="hide-storefront",e.GetStorefrontProviderApps="get-storefront-provider-apps",e.GetStorefrontProviderLandingPage="get-storefront-provider-landing-page",e.GetStorefrontProviderFooter="get-storefront-provider-footer",e.GetStorefrontProviderNavigation="get-storefront-provider-navigation",e.LaunchStorefrontProviderApp="launch-storefront-provider-app",e.ShowStorefront="show-storefront",e.CreateStorefrontWindow="create-storefront-window",e.ShowHome="show-home",e.HideHome="hide-home",e.AssignHomeSearchContext="assign-home-search-context",e.GetLegacyPages="get-legacy-pages",e.GetLegacyWorkspaces="get-legacy-workspaces",e.GetComputedPlatformTheme="get-computed-platform-theme"}(it||(it={})),ie("__of_workspace_protocol__");const rt=async(e,t)=>{const a=await(async e=>({...e,layoutDetails:{machineId:await De(),machineName:Be()}}))(t);return{pageId:ot(),title:e,layout:a,isReadOnly:!1,hasUnsavedChanges:!0}},st=async(e=j)=>{const{workspacePlatform:t}=await q(e).getOptions();return{newPageUrl:t?.newPageUrl,newTabUrl:t?.newTabUrl}};var ct;!function(e){e.NewWindow="NEW_WINDOW",e.NewPage="NEW_PAGE",e.CloseWindow="CLOSE_WINDOW",e.OpenStorefront="OPEN_STOREFRONT",e.Quit="QUIT"}(ct||(ct={}));const dt=async e=>{const t=await(async(e=j)=>{const t=await Et().Browser.getUniquePageTitle("Untitled Page"),a=await(async(e=j)=>{const{newPageUrl:t}=await st(e);if(!t)throw new Error("Trying to create a new page without a newPageUrl set");return(async(e,t,a=j)=>{let n;return J(a.name)&&(n=(await q(a).getOptions()).layout||{settings:{}}),{...n,content:[{type:"stack",content:[{type:"component",componentName:"view",componentState:{title:e,url:t}}]}]}})("New Tab",t,e)})(e);return rt(t,a)})(e);await Et().Browser.wrapSync(e).addPage(t)},pt=async(e,t)=>{const a=await se(e);switch(t){case ct.NewWindow:const{newPageUrl:t}=await st(e);if(!t)throw new Error("Trying to create a new empty window without a newPageUrl set");Et().createView({target:void 0,url:t});break;case ct.NewPage:await dt(e);break;case ct.CloseWindow:a.dispatch(ce.CloseBrowserWindow);break;case ct.Quit:a.dispatch(ce.QuitPlatform);break;case ct.OpenStorefront:(async()=>{await X()&&async function(e){const t=q(e);await t.restore(),await t.show(),await t.bringToFront(),await t.focus()}(Q)})()}},wt=[{type:Ke.Label,label:"Close Window",data:ct.CloseWindow},{type:Ke.Separator,data:void 0},{type:Ke.Label,label:"Open Storefront",data:ct.OpenStorefront},{type:Ke.Separator,data:void 0},{type:Ke.Label,label:"Quit Workspace",data:ct.Quit}],ut=[{type:Ke.Separator,data:void 0},{type:Ke.Label,label:"Close Window",data:ct.CloseWindow},{type:Ke.Separator,data:void 0},{type:Ke.Label,label:"Quit",data:ct.Quit}];async function lt(e,t){const a=await(async e=>{const t=await X(),{newPageUrl:a}=await st(e),n=await(async e=>{const t=q(e),{workspacePlatform:a}=await t.getOptions();return a?.disableMultiplePages})(e),o=[];return a&&(o.push({type:Ke.Label,label:"New Window",data:ct.NewWindow}),n||o.push({type:Ke.Label,label:"New Page",data:ct.NewPage})),t?[...o,...wt]:[...o,...ut]})(e.identity),n={...e,template:a,callback:pt.bind(void 0,e.identity)};await this.openGlobalContextMenu(n,t)}const gt=async(e,t)=>{const{x:a,y:o,identity:i,template:r,callback:s}=e,{data:c}=await function(e,t){if(!n)throw new Error("showContextMenu can only be used in an OpenFin env. Avoid calling this method during pre-rendering.");if(!t&&!fin.me.isWindow)throw new Error("showContextMenu can only be used in an OpenFin window.");return(t||fin.Window.getCurrentSync()).showPopupMenu(e)}({x:a,y:o,template:r},fin.Window.wrapSync(i));s(c)};async function ft({app:e,target:t}){const a=fin.Platform.getCurrentSync();switch(e.manifestType){case g.Snapshot:return a.applySnapshot(e.manifest);case g.View:return async function(e,t){const a=fin.Platform.getCurrentSync();if("view"===t.entityType){const a=fin.View.wrapSync(t),n=await a.getParentLayout();return await n.replaceView(t,{manifestUrl:e.manifest,url:void 0,target:void 0}),a.destroy()}return a.createView({name:void 0,url:void 0,manifestUrl:e.manifest,target:void 0})}(e,t);case g.External:return fin.System.launchExternalProcess({path:e.manifest,uuid:e.appId});default:return fin.Application.startFromManifest(e.manifest)}}const ht=e=>e&&"object"==typeof e&&!Array.isArray(e);function yt(e,...t){if(!t.length)return e;const a=t.shift();return ht(e)&&ht(a)&&Object.entries(a).forEach((([t,a])=>{if(ht(a))return e[t]||(e[t]={}),yt(e[t],a);e[t]=a})),yt(e,...t)}var mt,Pt;!function(e){e.HomeIndex="/home/",e.HomeSearch="/home/search/",e.HomePagesRename="/home/pages/rename/",e.Dock="/home/dock/",e.BrowserPagesLanding="/browser/pages/landing/",e.HomeIndicator="/home/indicator/",e.Browser="/browser/",e.BrowserPopupMenu="/browser/popup-menu/",e.Provider="/provider/",e.BrowserPopupMenuSharePage="/browser/popup-menu/share-page/",e.BrowserPopupMenuSavePage="/browser/popup-menu/save-page/",e.BrowserPopupMenuLayouts="/browser/popup-menu/layouts/layouts/",e.BrowserPopupMenuColorLinking="/browser/popup-menu/color-linking/color-linking/",e.BrowserIndicator="/browser/indicator/",e.ResponseModal="/browser/popup-menu/response-modal/",e.Docs="/provider/docs/",e.Storefront="/storefront/",e.DeprecatedAlert="/provider/deprecated-alert/"}(mt||(mt={})),function(e){e.IconOpenFinLogo="/icons/openfinlogo.svg",e.IconFilter="/icons/filter.svg"}(Pt||(Pt={}));const vt=w+{...Pt,...mt}.Browser;function St(e,t){const a=yt({},t,e);return a.detachOnClose=!0,a}async function bt(e,t,a){const n=e.manifestUrl?await t({manifestUrl:e.manifestUrl},a):void 0;if(n?.interop&&e.interop){const t={...e,...n,interop:e.interop};return delete t.manifestUrl,t}return e}const Wt=e=>{const t=e.name===R.Home,a=e.name?.startsWith(R.HomeInternal),n=e.name?.startsWith(R.BrowserMenu);return!t&&!a&&!n},It=e=>"workspacePlatform"in e?e:(({workstacks:e,pages:t,...a})=>({...a,workspacePlatform:{pages:t||e||null}}))(e),Ct={contextMenuSettings:{reload:!1},backgroundThrottling:!0,url:vt,contextMenu:!0,cornerRounding:{height:8,width:8},closeOnLastViewRemoved:!1,experimental:{showFavicons:!0,defaultFaviconUrl:`${w}/icons/defaultFavicon.svg`},permissions:{System:{openUrlWithBrowser:{enabled:!0,protocols:["mailto"]}}}},At={dimensions:{borderWidth:3,headerHeight:30}},kt=e=>{const t=fin.Window.wrapSync(e);return Promise.all([t.bringToFront(),t.restore(),t.focus()])};const Tt=e=>async t=>{class a extends t{constructor(){super(),this.isWorkspacePlatform=()=>!0,this.attachPagesToWindow=Se,this.addPage=Se,this.detachPagesFromWindow=We,this.getAllAttachedPages=le,this.getPagesForWindow=Ce,this.getPageForWindow=Ae,this.setActivePage=Ie,this.launchApp=ft,this.savePage=ve,this.createSavedPageInternal=ye,this.updateSavedPageInternal=Pe,this.deleteSavedPageInternal=me,this.reorderPagesForWindow=ke,this.getUniquePageTitle=Le,this.updatePageForWindow=be,this.getLastFocusedBrowserWindow=Z,this.getThemes=M,this.invokeCustomActionInternal=F,this.openGlobalContextMenuInternal=this.openGlobalContextMenuInternal.bind(this),this.openGlobalContextMenu=this.openGlobalContextMenu.bind(this),this.getSavedPages=this.getSavedPages.bind(this),this.getSavedPage=this.getSavedPage.bind(this),this.createSavedPage=this.createSavedPage.bind(this),this.updateSavedPage=this.updateSavedPage.bind(this),this.deleteSavedPage=this.deleteSavedPage.bind(this)}async getSnapshot(){const e=await async function(e){const t=await z();return await Promise.all(t.map((({identity:e})=>(async e=>(await se(e)).dispatch(de.UpdatePagesWindowOptions))(e)))),e?e():Ve()}((async()=>Ve(await super.getSnapshot(void 0,fin.me.identity))));return{...e,windows:e.windows.filter(Wt)}}async applySnapshot({snapshot:e,options:t}){t?.closeExistingWindows&&await async function(){const e=await z();await Promise.all(e.map((e=>e.close(!0).catch((()=>{})))))}();let a=e;return"string"==typeof a&&(a=await super.fetchManifest({manifestUrl:a},fin.me.identity)),async function(e,t){const a=await le(),n=e.snapshotDetails?.monitorInfo||await fin.System.getMonitorInfo(),o=(e.windows||[]).filter((({layout:e})=>!!e)),i=new Map;a.forEach((e=>i.set(e.pageId,e)));const r=[],s=o.map((async e=>{const t=It(e),a=[],n=(e=>{let t=!1;const a=(e||[]).map((e=>{const a=function({id:e,name:t,...a}){return{pageId:e,title:t,...a}}(e);return t&&a.isActive&&(a.isActive=!1),a.isActive&&(t=!0),a}));return!t&&a.length&&(a[0].isActive=!0),a})(t?.workspacePlatform?.pages);if(!n?.length){const e=await Le();a.push(await rt(e,t.layout))}let o;n.forEach((e=>{const t=i.get(e.pageId);t?o=t:a.push(e)})),o&&await Promise.all([Ie({identity:o.parentIdentity,pageId:o.pageId}),kt(o.parentIdentity)]),a.length&&r.push({...t,workspacePlatform:{...t.workspacePlatform,pages:a}})}));if(await Promise.all(s),!r.length)return;const c=fin.Platform.getCurrentSync();return(t||c.applySnapshot.bind(c))({...e,snapshotDetails:{...e.snapshotDetails,monitorInfo:n},windows:r})}(a,(e=>super.applySnapshot({snapshot:e,options:{...t,closeExistingWindows:!1}})))}async createWindow(t,a){let n=It(t);const o=await this.getThemes();return n=((e,t,a)=>{let n=e;const o=n?.workspacePlatform?.pages;if(o){const e=o.find((e=>e.isActive));e?n.layout=e.layout:(o[0].isActive=!0,n.layout=o[0].layout)}if(n.layout){if(n=yt({},t,n,Ct),n.layout=yt(n.layout,At),(n.icon||n.taskbarIcon)&&(n.taskbarIconGroup=n.taskbarIconGroup||fin.me.identity.uuid),!n.backgroundColor){const e=a?.palette;n.backgroundColor=e?.background2||e?.backgroundPrimary}const e=n.workspacePlatform.newTabUrl;e&&(n.layout.settings||(n.layout.settings={}),n.layout.settings.newTabButton={url:e}),n=function(e){const t=e;return t.workspacePlatform._internalAutoShow=t.workspacePlatform?._internalAutoShow||void 0===t.autoShow||t.autoShow,t.autoShow=!1,t}(n)}return n})(n,e.defaultWindowOptions,o[0]),n=await(async e=>{const t=await fin.System.getMonitorInfo(),a=t.primaryMonitor.availableRect.bottom-t.primaryMonitor.availableRect.top,n=t.primaryMonitor.availableRect.right-t.primaryMonitor.availableRect.left;return e.defaultHeight=e.defaultHeight||"800",e.defaultWidth=e.defaultWidth||"800",a<e.defaultHeight&&(e.defaultHeight=a),n<e.defaultWidth&&(e.defaultWidth=n),e})(n),super.createWindow(n,a)}async createView(t,a){return t.opts=St(t.opts,e.defaultViewOptions),t.opts=await bt(t.opts,this.fetchManifest,a),super.createView(t,a)}async replaceView(t,a){return t.opts.newView=await St(t.opts.newView,e.defaultViewOptions),t.opts.newView=await bt(t.opts.newView,this.fetchManifest,a),super.replaceView(t,a)}async replaceLayout(e,t){return e.opts.layout?.dimensions,super.replaceLayout(e,t)}async closeView(e,t){const a=fin.View.wrapSync(e.view);await super.closeView(e,t),await a.destroy().catch((e=>e))}async getSavedPage(...e){return qe.apply(this,e)}async getSavedPages(...e){return je.apply(this,e)}async createSavedPage(...e){return Qe.apply(this,e)}async deleteSavedPage(...e){return Je.apply(this,e)}async updateSavedPage(...e){return ze.apply(this,e)}async openGlobalContextMenuInternal(...e){return lt.apply(this,e)}async openGlobalContextMenu(...e){return gt.apply(this,e)}}return"function"==typeof e?.overrideCallback?e.overrideCallback(a):new a};async function Ft(){(function(){const e=N(V);e.addListener($.WindowOptionsChanged,Oe),e.addListener($.WindowClosed,Ue),e.addListener($.WindowCreated,Ue)})(),async function(){const e=fin.Application.getCurrentSync();await e.addListener("window-focused",ee)}()}let Lt;const Mt=async e=>{const t="23.96.68.3".split(".").map((e=>parseInt(e))),a=await(async e=>new Promise((async t=>{const a=(await fin.System.getVersion()).split(".").map((e=>parseInt(e)));t(e.every(((t,n)=>!(n<3)||a[n]===e[n])))})))(t),o=e?.theme;var i;if(o&&((i=o).forEach((e=>{const t=e.palette.backgroundPrimary;if(!t.includes("#")&&!t.includes("rgb")&&!t.includes("hsl"))throw new Error("Background primary color is not the right format.")})),L=i),e?.customActions&&(T=e?.customActions),a)return function(e){if(!n)throw new Error("Cannot be used outside an OpenFin env.");return Lt||(fin.Platform.getCurrentSync().once("platform-api-ready",(()=>Ft())),Lt=fin.Platform.init({overrideCallback:Tt(e),interopOverride:e?.interopOverride})),Lt}(e?.browser);throw new Error(`Runtime version is not supported. ${t[0]}.${t[1]}.${t[2]}.* is required`)},Gt=e=>(e=>{const t=fin.Platform.wrapSync(e);return Object.assign(t,{applySnapshot:async t=>{if("string"!=typeof t&&!t?.windows)throw new Error("Not a valid browser snapshot");return fin.Platform.wrapSync(e).applySnapshot(t)},getSnapshot:()=>fin.Platform.wrapSync(e).getSnapshot().then((e=>e)),launchApp:async t=>(t.target||(t.target={uuid:s,name:c,entityType:d||"unknown"}),(await W(e)).dispatch(S.LaunchApp,t)),_invokeCustomAction:async(t,a)=>{const n=await W(e),o={actionId:t,payload:{...a,callerType:a.callerType||v.API}};return n.dispatch(S.InvokeCustomActionInternal,o)},Theme:k(e),Browser:C(e),Storage:A(e)})})(e),Et=()=>Gt(fin.me.identity);module.exports=a})();
2
2
  //# sourceMappingURL=index.js.map