@openfin/workspace-platform 16.0.4 → 16.0.7

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.
@@ -0,0 +1,4 @@
1
+ import type OpenFin from '@openfin/core';
2
+ type ComponentNames = 'home' | 'dock' | 'store';
3
+ export declare const setupComponentPerformance: (component: ComponentNames, componentWindowIdentity: OpenFin.Identity) => void;
4
+ export {};
@@ -204,12 +204,15 @@ string | {
204
204
  */
205
205
  dark: string;
206
206
  };
207
- export type ContactInfoButtons = {
208
- type: 'button';
207
+ export type SplitButtonOption = {
208
+ /**
209
+ * The label that appears on the button.
210
+ */
211
+ label?: string;
209
212
  /**
210
213
  * The icon to display on the button.
211
214
  */
212
- icon: ButtonIcon;
215
+ icon?: ButtonIcon;
213
216
  /**
214
217
  * The tooltip to display on the button.
215
218
  */
@@ -218,8 +221,12 @@ export type ContactInfoButtons = {
218
221
  * The action to execute when the button is clicked.
219
222
  */
220
223
  action: string;
221
- } | {
222
- type: 'dropdown';
224
+ };
225
+ export type SplitButton = {
226
+ /**
227
+ * The label that appears on the button.
228
+ */
229
+ label?: string;
223
230
  /**
224
231
  * The icon to display on the button.
225
232
  */
@@ -231,25 +238,29 @@ export type ContactInfoButtons = {
231
238
  /**
232
239
  * The action to execute when the button is clicked.
233
240
  */
234
- action?: string;
241
+ action: string;
235
242
  /**
236
243
  * The list of options to display in the dropdown.
237
244
  */
238
- options: {
239
- /**
240
- * The icon to display on the button.
241
- */
242
- icon?: ButtonIcon;
243
- /**
244
- * The tooltip to display on the button.
245
- */
246
- tooltip: string;
247
- /**
248
- * The action to execute when the button is clicked.
249
- */
250
- action: string;
251
- }[];
245
+ options: SplitButtonOption[];
252
246
  };
247
+ export type ContactInfoButtons = {
248
+ type: 'button';
249
+ /**
250
+ * The icon to display on the button.
251
+ */
252
+ icon: ButtonIcon;
253
+ /**
254
+ * The tooltip to display on the button.
255
+ */
256
+ tooltip: string;
257
+ /**
258
+ * The action to execute when the button is clicked.
259
+ */
260
+ action: string;
261
+ } | (SplitButton & {
262
+ type: 'dropdown';
263
+ });
253
264
  /**
254
265
  * Contact Info Search Result
255
266
  */
@@ -3,18 +3,20 @@
3
3
  *
4
4
  * @module Templates
5
5
  */
6
+ import { SplitButton as SplitButtonTemplateData } from './home';
6
7
  export type ListPairs = [string, string][];
7
- export type CustomTemplateData = Record<string, string | ListPairs>;
8
- export type ContainerFragmentTypes = PlainContainerTemplateFragment | ButtonTemplateFragment;
8
+ export type CustomTemplateData = Record<string, string | ListPairs | SplitButtonTemplateData>;
9
+ export type ContainerFragmentTypes = PlainContainerTemplateFragment | ButtonTemplateFragment | SplitButtonFragment;
9
10
  export type PresentationFragmentTypes = TextTemplateFragment | ImageTemplateFragment | ListTemplateFragment;
10
11
  export type InteractiveFragmentTypes = ButtonTemplateFragment | TextTemplateFragment | ImageTemplateFragment;
11
12
  /**
12
13
  * The options to build your custom template composition layout.
13
14
  */
14
- export type TemplateFragment = PlainContainerTemplateFragment | ButtonTemplateFragment | TextTemplateFragment | ListTemplateFragment | ImageTemplateFragment;
15
+ export type TemplateFragment = PlainContainerTemplateFragment | ButtonTemplateFragment | TextTemplateFragment | ListTemplateFragment | ImageTemplateFragment | SplitButtonFragment;
15
16
  export declare const ContainerTemplateFragmentNames: {
16
17
  readonly Container: "Container";
17
18
  readonly Button: "Button";
19
+ readonly SplitButton: "SplitButton";
18
20
  };
19
21
  export declare const PresentationTemplateFragmentNames: {
20
22
  readonly Text: "Text";
@@ -27,6 +29,7 @@ export declare const TemplateFragmentTypes: {
27
29
  readonly List: "List";
28
30
  readonly Container: "Container";
29
31
  readonly Button: "Button";
32
+ readonly SplitButton: "SplitButton";
30
33
  };
31
34
  export interface BaseTemplateFragment<T extends keyof typeof TemplateFragmentTypes> {
32
35
  /**
@@ -115,6 +118,55 @@ export type ButtonTemplateFragment = ContainerTemplateFragment<'Button'> & Fragm
115
118
  */
116
119
  buttonStyle?: ButtonStyle;
117
120
  };
121
+ export type SplitButtonFragment = ContainerTemplateFragment<'SplitButton'> & {
122
+ /**
123
+ * The type of button that determines styling.
124
+ */
125
+ buttonType: 'primary' | 'secondary';
126
+ /**
127
+ * Data key of the template fragment.
128
+ *
129
+ * The data associated with this fragment will be looked up in `templateData` map with this key.
130
+ *
131
+ * Example:
132
+ * ```ts
133
+ * const myTemplateLayout = {
134
+ * type: FragmentTypes.SplitButton,
135
+ * buttonType: 'primary',
136
+ * dataKey: 'splitButton1',
137
+ * }
138
+ *
139
+ * const searchResult: CLISearchResultCustom = {
140
+ * //...
141
+ * template: CLITemplate.Custom,
142
+ * templateContent: {
143
+ * layout: myTemplateLayout,
144
+ * data: {
145
+ * splitButton1: {
146
+ * label: 'Split Button 1',
147
+ * tooltip: 'Click me',
148
+ * icon: 'iconURL',
149
+ * action: 'primaryAction',
150
+ * options: [
151
+ * {
152
+ * label: 'Menu Option 1',
153
+ * tooltip: 'Click for optionAction1',
154
+ * action: 'optionAction1'
155
+ * },
156
+ * {
157
+ * label: 'Menu Option 2',
158
+ * tooltip: 'Click for optionAction2',
159
+ * action: 'optionAction1'
160
+ * }
161
+ * ]
162
+ * }
163
+ * }
164
+ * };
165
+ * ```
166
+ *
167
+ */
168
+ dataKey: string;
169
+ };
118
170
  export type TextTemplateFragment = PresentationTemplateFragment<'Text'> & FragmentAction;
119
171
  export type ImageTemplateFragment = PresentationTemplateFragment<'Image'> & FragmentAction & {
120
172
  /**
@@ -11,7 +11,7 @@ export type { App, AppIntent, Image } from '../../client-api/src/shapes';
11
11
  export type { CustomActionSpecifier, CustomButtonConfig } from '../../common/src/api/action';
12
12
  export type { AttachedPage, Page, PageLayout, PageLayoutDetails, PageWithUpdatableRuntimeAttribs, PanelConfigHorizontal, PanelConfigVertical, PanelConfig, ExtendedPanelConfig } from '../../common/src/api/pages/shapes';
13
13
  export { PanelPosition } from '../../common/src/api/pages/shapes';
14
- export type { CustomThemes, CustomThemeOptions, CustomThemeOptionsWithScheme, CustomPaletteSet } from '../../common/src/api/theming';
14
+ export type { CustomThemes, CustomThemeOptions, CustomThemeOptionsWithScheme, CustomPaletteSet, BaseThemeOptions, ThemeExtension, WorkspaceThemePaletteSet, NotificationIndicatorColorsSet, NotificationIndicatorColorsSetDarkScheme, NotificationIndicatorColorsSetLightScheme, NotificationIndicatorColorsWithScheme } from '../../common/src/api/theming';
15
15
  export type { AnalyticsEvent } from '../../common/src/utils/usage-register';
16
16
  export type { WorkflowIntegration } from '../../client-api/src/shapes/integrations';
17
17
  /**
@@ -339,7 +339,7 @@ export interface CustomBrowserButtonConfig extends CustomButtonConfig {
339
339
  */
340
340
  export interface PreDefinedButtonConfig {
341
341
  /** Type of default browser button */
342
- type: BrowserButtonType;
342
+ type: Exclude<BrowserButtonType, BrowserButtonType.ShowHideTabs | BrowserButtonType.LockUnlockPage | BrowserButtonType.Custom>;
343
343
  /** Button name text when hovered over */
344
344
  tooltip?: string;
345
345
  /** icon URL for icon image */
@@ -361,6 +361,30 @@ export interface PreDefinedButtonConfig {
361
361
  export type ShowHideTabsConfig = {
362
362
  type: BrowserButtonType.ShowHideTabs;
363
363
  disabled?: boolean;
364
+ tabsShownIconUrl?: {
365
+ /**
366
+ * The URL of the icon to display when the button is disabled and tabs are hidden.
367
+ *
368
+ * The button is disabled when the page is locked.
369
+ */
370
+ disabled?: string;
371
+ /**
372
+ * The URL of the icon to display when the button is enabled and tabs are hidden.
373
+ */
374
+ enabled?: string;
375
+ };
376
+ tabsHiddenIconUrl?: {
377
+ /**
378
+ * The URL of the icon to display when the button is disabled and tabs are hidden.
379
+ *
380
+ * The button is disabled when the page is locked.
381
+ */
382
+ disabled?: string;
383
+ /**
384
+ * The URL of the icon to display when the button is enabled and tabs are hidden.
385
+ */
386
+ enabled?: string;
387
+ };
364
388
  };
365
389
  /**
366
390
  * Configuration Object for the page lock/unlock button within the browser toolbar
@@ -376,6 +400,8 @@ export type ShowHideTabsConfig = {
376
400
  export type LockUnlockPageConfig = {
377
401
  type: BrowserButtonType.LockUnlockPage;
378
402
  disabled?: boolean;
403
+ lockedIconUrl?: string;
404
+ unlockedIconUrl?: string;
379
405
  };
380
406
  /**
381
407
  * Buttons on the left of WindowStateButtonOptions
@@ -1,3 +1,4 @@
1
+ import type { DefaultTheme } from 'styled-components';
1
2
  import type OpenFin from '@openfin/core';
2
3
  import type { ThemePaletteSet } from '@openfin/ui-library';
3
4
  import { ColorSchemeOptionType } from '../../../client-api-platform/src/shapes';
@@ -5,20 +6,65 @@ export type WorkspaceComponentSetSelectedSchemePayload = {
5
6
  newScheme: ColorSchemeOptionType;
6
7
  identity: OpenFin.Identity;
7
8
  };
8
- export type BrowserSetSelectedSchemePayload = string;
9
9
  export type ComputedThemes = ComputedTheme[];
10
10
  export interface ComputedTheme {
11
11
  label: string;
12
12
  logoUrl?: string;
13
- theme: ThemePaletteSet;
13
+ theme: WorkspaceThemePaletteSet;
14
14
  defaultScheme?: ColorSchemeOptionType;
15
15
  }
16
- interface BaseThemeOptions {
16
+ export interface WorkspaceThemePaletteSet extends ThemePaletteSet {
17
+ light: ThemeExtension;
18
+ dark: ThemeExtension;
19
+ }
20
+ export interface ThemeExtension extends DefaultTheme {
21
+ notificationIndicatorColors?: Record<string, Omit<NotificationIndicatorColorsSet, 'foreground'> & {
22
+ foreground: string;
23
+ }>;
24
+ }
25
+ export interface NotificationIndicatorColorsSet {
26
+ background: string;
27
+ foreground?: string;
28
+ }
29
+ export interface NotificationIndicatorColorsSetDarkScheme {
30
+ dark: NotificationIndicatorColorsSet;
31
+ light?: NotificationIndicatorColorsSet;
32
+ }
33
+ export interface NotificationIndicatorColorsSetLightScheme {
34
+ dark?: NotificationIndicatorColorsSet;
35
+ light: NotificationIndicatorColorsSet;
36
+ }
37
+ export type NotificationIndicatorColorsWithScheme = Record<string, NotificationIndicatorColorsSetDarkScheme | NotificationIndicatorColorsSetLightScheme>;
38
+ export interface BaseThemeOptions {
17
39
  label: string;
18
40
  logoUrl?: string;
19
41
  }
20
42
  export interface CustomThemeOptions extends BaseThemeOptions {
21
43
  palette: CustomPaletteSet;
44
+ /**
45
+ * NOTE: Only used in Notifications
46
+ *
47
+ * Used for providing color overrides of notification indicators or defining custom colors that clients could target.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const themeOptions = {
52
+ * default: 'light',
53
+ * palettes: {...}
54
+ * notificationIndicatorColors: {
55
+ * red: {
56
+ * background: '#FF0000',
57
+ * foreground: '#FFFFDD'
58
+ * },
59
+ * customred: {
60
+ * // If `foreground` is not defined it will default to `#FFFFFF`
61
+ * background: '#FF0011'
62
+ * }
63
+ * }
64
+ * };
65
+ * ```
66
+ */
67
+ notificationIndicatorColors?: Record<string, NotificationIndicatorColorsSet>;
22
68
  }
23
69
  export interface CustomThemeOptionsWithScheme extends BaseThemeOptions {
24
70
  /**
@@ -40,6 +86,39 @@ export interface CustomThemeOptionsWithScheme extends BaseThemeOptions {
40
86
  light: CustomPaletteSet;
41
87
  dark: CustomPaletteSet;
42
88
  };
89
+ /**
90
+ * NOTE: Only used in Notifications
91
+ *
92
+ * Used for providing color overrides of notification indicators or defining custom colors that clients could target.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const themeOptions = {
97
+ * default: 'light',
98
+ * palettes: {...}
99
+ * notificationIndicatorColors: {
100
+ * red: {
101
+ * dark: {
102
+ * background: '#FF0000',
103
+ * foreground: '#FFFFDD'
104
+ * },
105
+ * light: {
106
+ * // If `foreground` is not defined it will default to `#FFFFFF`
107
+ * background: '#FF1100',
108
+ * }
109
+ * },
110
+ * customred: {
111
+ * // If one of the schemes is not defined (in this case `light`) the values from the defined one will be copied to the other
112
+ * dark: {
113
+ * background: '#FF0011',
114
+ * foreground: '#FFDDDD'
115
+ * }
116
+ * }
117
+ * }
118
+ * };
119
+ * ```
120
+ */
121
+ notificationIndicatorColors?: NotificationIndicatorColorsWithScheme;
43
122
  }
44
123
  export type CustomThemes = (CustomThemeOptions | CustomThemeOptionsWithScheme)[];
45
124
  export interface DefaultPaletteSet {
@@ -97,16 +176,69 @@ export interface CustomPaletteSet extends DefaultPaletteSet {
97
176
  linkDefault?: string;
98
177
  linkHover?: string;
99
178
  }
179
+ export declare const OpenFinLightTheme: {
180
+ background1: "#FFFFFF";
181
+ background2: "#FAFBFE";
182
+ background3: "#F3F5F8";
183
+ background4: "#ECEEF1";
184
+ background5: "#DDDFE4";
185
+ background6: "#C9CBD2";
186
+ brandSecondary: "#1E1F23";
187
+ inputBackground: "#ECEEF1";
188
+ inputColor: "#1E1F23";
189
+ inputPlaceholder: "#383A40";
190
+ inputDisabled: "#7D808A";
191
+ inputFocused: "#C9CBD2";
192
+ inputBorder: "#7D808A";
193
+ textDefault: "#1E1F23";
194
+ textHelp: "#2F3136";
195
+ textInactive: "#7D808A";
196
+ brandPrimary: string;
197
+ statusSuccess: "#207735";
198
+ statusWarning: "#F48F00";
199
+ statusCritical: "#F31818";
200
+ statusActive: "#0A76D3";
201
+ contentBackground1: string;
202
+ contentBackground2: string;
203
+ contentBackground3: string;
204
+ contentBackground4: string;
205
+ contentBackground5: string;
206
+ };
207
+ export declare const OpenFinDarkTheme: {
208
+ background1: "#111214";
209
+ background2: "#1E1F23";
210
+ background3: "#24262B";
211
+ background4: "#2F3136";
212
+ background5: "#383A40";
213
+ background6: "#53565F";
214
+ brandSecondary: "#383A40";
215
+ inputBackground: "#53565F";
216
+ inputColor: "#FFFFFF";
217
+ inputPlaceholder: "#C9CBD2";
218
+ inputDisabled: "#7D808A";
219
+ inputFocused: "#C9CBD2";
220
+ inputBorder: "#7D808A";
221
+ textDefault: "#FFFFFF";
222
+ textHelp: "#C9CBD2";
223
+ textInactive: "#7D808A";
224
+ brandPrimary: string;
225
+ statusSuccess: "#207735";
226
+ statusWarning: "#F48F00";
227
+ statusCritical: "#F31818";
228
+ statusActive: "#0A76D3";
229
+ contentBackground1: string;
230
+ contentBackground2: string;
231
+ contentBackground3: string;
232
+ contentBackground4: string;
233
+ contentBackground5: string;
234
+ };
100
235
  /**
101
- * computeThemes()
102
- * Accepts the array of registered CustomThemes objects
103
- * Creates a light and dark palette from a tempalte overriding with custom options
104
- * Uses createTheme to build theme object
105
- * Creates a ThemePaletteSet
106
- * @param customPalettes
107
- * @returns theme object ready to be applied to the UI
236
+ * Transforms input {@link CustomThemes} to {@link ComputedThemes} used by Workspace Platform / Notifications Platform.
237
+ *
238
+ * @param customThemes array of themes to transform
239
+ * @param storedScheme sets the default scheme if provided
240
+ * @returns array of {@link ComputedThemes | computed themes}
108
241
  */
109
- export declare const computeThemes: (customPalettes: CustomThemes, storedScheme?: ColorSchemeOptionType) => ComputedThemes;
242
+ export declare const computeThemes: (customThemes: CustomThemes, storedScheme?: ColorSchemeOptionType) => ComputedThemes;
110
243
  export declare const getComputedPlatformTheme: (platformIdentity: OpenFin.Identity) => Promise<ComputedTheme>;
111
244
  export declare const setSelectedScheme: (ctx: ColorSchemeOptionType) => Promise<void>;
112
- export {};
@@ -1,13 +1,16 @@
1
- type WorkspacePerformanceMarks = 'home-registration' | 'dock-registration' | 'store-registration';
1
+ export declare const workspacePerformancePrefix = "of-workspace-";
2
+ type WorkspacePerformanceMarks = 'home-registration' | 'dock-registration' | 'store-registration' | 'home-show' | 'dock-show' | 'store-show' | 'workspace-app-started' | 'home-window-initialized' | 'dock-window-initialized' | 'store-window-initialized';
2
3
  /**
3
4
  * @classdesc
4
5
  * WorkspacePerformance is a class that provides a set of methods to measure performance of workspace
5
6
  *
6
7
  */
7
8
  declare class WorkspacePerformance {
9
+ mark(markName: WorkspacePerformanceMarks): void;
8
10
  markStart(markName: WorkspacePerformanceMarks): void;
9
11
  markEnd(markName: WorkspacePerformanceMarks): void;
10
- markEndAndMeasure(markName: WorkspacePerformanceMarks): void;
12
+ markEndAndMeasure(markName: WorkspacePerformanceMarks): PerformanceMeasure;
13
+ markAndMeasure(markName: WorkspacePerformanceMarks, measureAgainst: WorkspacePerformanceMarks): PerformanceMeasure;
11
14
  reportWorkspacePerformanceEntries(): PerformanceEntry[];
12
15
  reportWorkspacePerformance(): {
13
16
  name: string;