@openfin/fdc3-api 44.100.47 → 44.100.49

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.
@@ -4976,7 +4976,7 @@ declare type Event_10 = ApplicationEvents.Event | ApiReadyEvent | SnapshotApplie
4976
4976
  * under the {@link OpenFin.SystemEvents} namespace (payloads inherited from propagated events are defined in the namespace
4977
4977
  * from which they propagate).
4978
4978
  */
4979
- declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent;
4979
+ declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent | NativeThemeUpdatedEvent;
4980
4980
 
4981
4981
  /**
4982
4982
  * [Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) containing every possible event that can be emitted by the HTMLElement Layout container.
@@ -8932,6 +8932,42 @@ declare type LayoutOptions = {
8932
8932
  */
8933
8933
  preventDragIn?: boolean;
8934
8934
  /* Excluded from this release type: disableTabOverflowDropdown */
8935
+ /**
8936
+ * When set to 'scroll', enables horizontal scrolling of tabs when they overflow the stack width.
8937
+ * When set to 'dropdown' the default golden-layouts behavior will apply.
8938
+ *
8939
+ * Setting this to `scroll` may break styles written for the default dropdown behavior, as it significantly changes the dom structure and css of tabs.
8940
+ *
8941
+ * The DOM structure will be modified in this way:
8942
+ * - `lm_tabs` will be wrapped in a div with class `lm_scroll_shadow`. This div will be revealed by a mask on the tabs when they are overflowing.
8943
+ * - the `.newTabButton` (if enabled) will be a direct child of `.lm_header`
8944
+ *
8945
+ * **The following css variables are available to customize tab appearance:**
8946
+ *
8947
+ * - `--layout-tab-width`: The default (max) width of the tabs. Using this enables using `lm_tab` as a queryable css container (must be an absolute value to use container queries). Default: `fit-content`
8948
+ * - `--layout-tab-min-width`: The minimum width of the tabs before they start overflowing. Set this to enable tab shrinking. Defaults to the same value as `--layout-tab-width` (no shrinking).
8949
+ * - `--layout-tab-overflow-fade-size`: The width of the scroll shadows when tabs are overflowing. Default: `20px`
8950
+ * - `--layout-tab-overflow-shadow-color`: The color of the scroll shadows when tabs are overflowing. Enabling a contrasting shadow color may require setting the background color on `.lm_tabs` if it was not previously set via `--tabs-background-color`. Default is transparent so overlowing tabs fade into the background.
8951
+ *
8952
+ * **CSS Variables for advanced customization (dynamically updated and set on `lm_tabs`):**
8953
+ *
8954
+ * - `--layout-tab-overflow-fade-left`: The strength of the left fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8955
+ * - `--layout-tab-overflow-fade-right`: The strength of the right fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8956
+ * - `--layout-tabs-overflowing`: A [css space toggle](https://css-tricks.com/the-css-custom-property-toggle-trick/) that is empty when tabs are overflowing and `initial` otherwise. If you are only targeting Chrome > 137 you may want to use the `if()` function with left/right fade instead of this toggle.
8957
+ *
8958
+ * @example
8959
+ * ```css
8960
+ * .lm_tabs {
8961
+ * --layout-tab-width: 200px;
8962
+ * --layout-tab-min-width: 100px;
8963
+ * --layout-tab-overflow-fade-size: 20px;
8964
+ * --layout-tab-overflow-shadow-color: rgba(0, 0, 0, 0.3);
8965
+ * }
8966
+ * ```
8967
+ *
8968
+ * @defaultValue 'dropdown'
8969
+ */
8970
+ tabOverflowBehavior?: 'dropdown' | 'scroll';
8935
8971
  };
8936
8972
  /**
8937
8973
  * Content of the layout. There can only be one top-level LayoutItem in the content array.
@@ -9843,6 +9879,78 @@ declare type NamedEvent = IdentityEvent & {
9843
9879
  name: string;
9844
9880
  };
9845
9881
 
9882
+ /**
9883
+ * @interface
9884
+ *
9885
+ * Represents the native theme of the operating system.
9886
+ * This is used to determine how the application should render its UI based on the system's theme settings.
9887
+ * Defer to CSS properties whenever possible.
9888
+ *
9889
+ * Re-exported from Electron's `NativeTheme` type.
9890
+ */
9891
+ declare type NativeTheme = {
9892
+ /**
9893
+ * A `boolean` indicating whether Chromium is in forced colors mode, controlled by
9894
+ * system accessibility settings. Currently, Windows high contrast is the only
9895
+ * system setting that triggers forced colors mode.
9896
+ *
9897
+ * @platform win32
9898
+ */
9899
+ inForcedColorsMode: boolean;
9900
+ /**
9901
+ * A `boolean` that indicates the whether the user has chosen via system
9902
+ * accessibility settings to reduce transparency at the OS level.
9903
+ *
9904
+ */
9905
+ prefersReducedTransparency: boolean;
9906
+ /**
9907
+ * A `boolean` for if the OS / Chromium currently has a dark mode enabled or is
9908
+ * being instructed to show a dark-style UI. If you want to modify this value you
9909
+ * should use `themeSource` below.
9910
+ *
9911
+ */
9912
+ shouldUseDarkColors: boolean;
9913
+ /**
9914
+ * A `boolean` property indicating whether or not the system theme has been set to
9915
+ * dark or light.
9916
+ *
9917
+ * On Windows this property distinguishes between system and app light/dark theme,
9918
+ * returning `true` if the system theme is set to dark theme and `false` otherwise.
9919
+ * On macOS the return value will be the same as `nativeTheme.shouldUseDarkColors`.
9920
+ *
9921
+ * @platform darwin,win32
9922
+ */
9923
+ shouldUseDarkColorsForSystemIntegratedUI: boolean;
9924
+ /**
9925
+ * A `boolean` for if the OS / Chromium currently has high-contrast mode enabled or
9926
+ * is being instructed to show a high-contrast UI.
9927
+ *
9928
+ * @platform darwin,win32
9929
+ */
9930
+ shouldUseHighContrastColors: boolean;
9931
+ /**
9932
+ * A `boolean` for if the OS / Chromium currently has an inverted color scheme or
9933
+ * is being instructed to use an inverted color scheme.
9934
+ *
9935
+ * @platform darwin,win32
9936
+ */
9937
+ shouldUseInvertedColorScheme: boolean;
9938
+ /**
9939
+ * A `string` property that can be `system`, `light` or `dark`. It is used (via `setTheme) to
9940
+ * override and supersede the value that Chromium has chosen to use internally.
9941
+ */
9942
+ themeSource: 'system' | 'light' | 'dark';
9943
+ };
9944
+
9945
+ /**
9946
+ * Generated when the operating system's theme preferences change.
9947
+ * Occurs when dark mode, high contrast mode, or inverted color scheme settings are modified.
9948
+ */
9949
+ declare type NativeThemeUpdatedEvent = BaseEvent_9 & {
9950
+ type: 'native-theme-updated';
9951
+ theme: OpenFin.NativeTheme;
9952
+ };
9953
+
9846
9954
  /**
9847
9955
  * @interface
9848
9956
  */
@@ -10234,6 +10342,8 @@ declare namespace OpenFin {
10234
10342
  Manifest,
10235
10343
  LayoutContent,
10236
10344
  LayoutItemConfig,
10345
+ ThemePreferences,
10346
+ NativeTheme,
10237
10347
  LayoutRow,
10238
10348
  LayoutColumn,
10239
10349
  LayoutComponent,
@@ -13159,6 +13269,10 @@ declare type ProtocolMap = ExternalAdapterOnlyCallsMap & AnalyticsProtocolMap &
13159
13269
  request: any;
13160
13270
  response: any;
13161
13271
  };
13272
+ 'set-theme-preferences': ApiCall<{
13273
+ preferences: OpenFin.ThemePreferences;
13274
+ }, OpenFin.NativeTheme>;
13275
+ 'get-theme-preferences': GetterCall<OpenFin.NativeTheme>;
13162
13276
  'get-version': GetterCall<string>;
13163
13277
  'clear-cache': ApiCall<OpenFin.ClearCacheOption, void>;
13164
13278
  'delete-cache-request': VoidCall;
@@ -16205,6 +16319,84 @@ declare class System extends EmitterBase<OpenFin.SystemEvent> {
16205
16319
  * Not indended for general use, will be used by the `@openfin/workspace-platform` package.
16206
16320
  */
16207
16321
  serveAsset(options: OpenFin.ServeAssetOptions): Promise<OpenFin.ServedAssetInfo>;
16322
+ /**
16323
+ * Get's the native theme preferences for the current runtime.
16324
+ * Prefer css media-queries wherever possible, but this can be useful to see if the system setting has been overridden.
16325
+ * See @link OpenFin.NativeTheme for more information.
16326
+ * @example Theme selector menu
16327
+ * ```ts
16328
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16329
+ const currentTheme = await fin.System.getThemePreferences();
16330
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16331
+ x: e.clientX,
16332
+ y: e.clientY,
16333
+ template: [
16334
+ {
16335
+ label: 'Light',
16336
+ type: 'checkbox',
16337
+ checked: currentTheme.themeSource === 'light',
16338
+ data: { themeSource: 'light' } as const
16339
+ },
16340
+ {
16341
+ label: 'Dark',
16342
+ type: 'checkbox',
16343
+ checked: currentTheme.themeSource === 'dark',
16344
+ data: { themeSource: 'dark' } as const
16345
+ },
16346
+ {
16347
+ label: 'System',
16348
+ type: 'checkbox',
16349
+ checked: currentTheme.themeSource === 'system',
16350
+ data: { themeSource: 'system' } as const
16351
+ }
16352
+ ]
16353
+ });
16354
+ if (result.result === 'clicked') {
16355
+ await fin.System.setThemePreferences(result.data);
16356
+ }
16357
+ }
16358
+ ```
16359
+ */
16360
+ getThemePreferences(): Promise<OpenFin.NativeTheme>;
16361
+ /**
16362
+ * Sets the native theme preferences for the current runtime.
16363
+ * Can be used to force runtime-wide light or dark mode.
16364
+ * @important Due to this impacting all applications on a runtime, this method is only usable if a security realm has been set.
16365
+ * @example Theme selector menu
16366
+ * ```ts
16367
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16368
+ const currentTheme = await fin.System.getThemePreferences();
16369
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16370
+ x: e.clientX,
16371
+ y: e.clientY,
16372
+ template: [
16373
+ {
16374
+ label: 'Light',
16375
+ type: 'checkbox',
16376
+ checked: currentTheme.themeSource === 'light',
16377
+ data: { themeSource: 'light' } as const
16378
+ },
16379
+ {
16380
+ label: 'Dark',
16381
+ type: 'checkbox',
16382
+ checked: currentTheme.themeSource === 'dark',
16383
+ data: { themeSource: 'dark' } as const
16384
+ },
16385
+ {
16386
+ label: 'System',
16387
+ type: 'checkbox',
16388
+ checked: currentTheme.themeSource === 'system',
16389
+ data: { themeSource: 'system' } as const
16390
+ }
16391
+ ]
16392
+ });
16393
+ if (result.result === 'clicked') {
16394
+ await fin.System.setThemePreferences(result.data);
16395
+ }
16396
+ }
16397
+ ```
16398
+ */
16399
+ setThemePreferences(preferences: OpenFin.ThemePreferences): Promise<OpenFin.ThemePreferences>;
16208
16400
  /**
16209
16401
  * Launches the Log Uploader. Full documentation can be found [here](https://resources.here.io/docs/core/develop/debug/log-uploader/).
16210
16402
  * @experimental
@@ -16248,6 +16440,7 @@ declare namespace SystemEvents {
16248
16440
  ExtensionsInstallFailedEvent,
16249
16441
  ExtensionInstallFailedEvent,
16250
16442
  ExtensionsInitializationFailedEvent,
16443
+ NativeThemeUpdatedEvent,
16251
16444
  Event_11 as Event,
16252
16445
  SystemEvent,
16253
16446
  EventType_8 as EventType,
@@ -16371,6 +16564,7 @@ declare class TabStack extends LayoutNode {
16371
16564
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16372
16565
  * If that happens and then getViews() is called, it will return the identities in a different order than
16373
16566
  * than the currently rendered tab order.
16567
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16374
16568
  *
16375
16569
  *
16376
16570
  * @throws If the {@link TabStack} has been destroyed.
@@ -16395,6 +16589,7 @@ declare class TabStack extends LayoutNode {
16395
16589
  *
16396
16590
  * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
16397
16591
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16592
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16398
16593
  *
16399
16594
  * @param view The identity of an existing view to add, or options to create a view.
16400
16595
  * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
@@ -16516,6 +16711,11 @@ declare type TerminateExternalRequestType = {
16516
16711
  killTree: boolean;
16517
16712
  };
16518
16713
 
16714
+ /**
16715
+ * Settable options for the native theme of the operating system.
16716
+ */
16717
+ declare type ThemePreferences = Pick<NativeTheme, 'themeSource'>;
16718
+
16519
16719
  /**
16520
16720
  * @interface
16521
16721
  */
@@ -4976,7 +4976,7 @@ declare type Event_10 = ApplicationEvents.Event | ApiReadyEvent | SnapshotApplie
4976
4976
  * under the {@link OpenFin.SystemEvents} namespace (payloads inherited from propagated events are defined in the namespace
4977
4977
  * from which they propagate).
4978
4978
  */
4979
- declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent;
4979
+ declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent | NativeThemeUpdatedEvent;
4980
4980
 
4981
4981
  /**
4982
4982
  * [Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) containing every possible event that can be emitted by the HTMLElement Layout container.
@@ -8932,6 +8932,42 @@ declare type LayoutOptions = {
8932
8932
  */
8933
8933
  preventDragIn?: boolean;
8934
8934
  /* Excluded from this release type: disableTabOverflowDropdown */
8935
+ /**
8936
+ * When set to 'scroll', enables horizontal scrolling of tabs when they overflow the stack width.
8937
+ * When set to 'dropdown' the default golden-layouts behavior will apply.
8938
+ *
8939
+ * Setting this to `scroll` may break styles written for the default dropdown behavior, as it significantly changes the dom structure and css of tabs.
8940
+ *
8941
+ * The DOM structure will be modified in this way:
8942
+ * - `lm_tabs` will be wrapped in a div with class `lm_scroll_shadow`. This div will be revealed by a mask on the tabs when they are overflowing.
8943
+ * - the `.newTabButton` (if enabled) will be a direct child of `.lm_header`
8944
+ *
8945
+ * **The following css variables are available to customize tab appearance:**
8946
+ *
8947
+ * - `--layout-tab-width`: The default (max) width of the tabs. Using this enables using `lm_tab` as a queryable css container (must be an absolute value to use container queries). Default: `fit-content`
8948
+ * - `--layout-tab-min-width`: The minimum width of the tabs before they start overflowing. Set this to enable tab shrinking. Defaults to the same value as `--layout-tab-width` (no shrinking).
8949
+ * - `--layout-tab-overflow-fade-size`: The width of the scroll shadows when tabs are overflowing. Default: `20px`
8950
+ * - `--layout-tab-overflow-shadow-color`: The color of the scroll shadows when tabs are overflowing. Enabling a contrasting shadow color may require setting the background color on `.lm_tabs` if it was not previously set via `--tabs-background-color`. Default is transparent so overlowing tabs fade into the background.
8951
+ *
8952
+ * **CSS Variables for advanced customization (dynamically updated and set on `lm_tabs`):**
8953
+ *
8954
+ * - `--layout-tab-overflow-fade-left`: The strength of the left fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8955
+ * - `--layout-tab-overflow-fade-right`: The strength of the right fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8956
+ * - `--layout-tabs-overflowing`: A [css space toggle](https://css-tricks.com/the-css-custom-property-toggle-trick/) that is empty when tabs are overflowing and `initial` otherwise. If you are only targeting Chrome > 137 you may want to use the `if()` function with left/right fade instead of this toggle.
8957
+ *
8958
+ * @example
8959
+ * ```css
8960
+ * .lm_tabs {
8961
+ * --layout-tab-width: 200px;
8962
+ * --layout-tab-min-width: 100px;
8963
+ * --layout-tab-overflow-fade-size: 20px;
8964
+ * --layout-tab-overflow-shadow-color: rgba(0, 0, 0, 0.3);
8965
+ * }
8966
+ * ```
8967
+ *
8968
+ * @defaultValue 'dropdown'
8969
+ */
8970
+ tabOverflowBehavior?: 'dropdown' | 'scroll';
8935
8971
  };
8936
8972
  /**
8937
8973
  * Content of the layout. There can only be one top-level LayoutItem in the content array.
@@ -9843,6 +9879,78 @@ declare type NamedEvent = IdentityEvent & {
9843
9879
  name: string;
9844
9880
  };
9845
9881
 
9882
+ /**
9883
+ * @interface
9884
+ *
9885
+ * Represents the native theme of the operating system.
9886
+ * This is used to determine how the application should render its UI based on the system's theme settings.
9887
+ * Defer to CSS properties whenever possible.
9888
+ *
9889
+ * Re-exported from Electron's `NativeTheme` type.
9890
+ */
9891
+ declare type NativeTheme = {
9892
+ /**
9893
+ * A `boolean` indicating whether Chromium is in forced colors mode, controlled by
9894
+ * system accessibility settings. Currently, Windows high contrast is the only
9895
+ * system setting that triggers forced colors mode.
9896
+ *
9897
+ * @platform win32
9898
+ */
9899
+ inForcedColorsMode: boolean;
9900
+ /**
9901
+ * A `boolean` that indicates the whether the user has chosen via system
9902
+ * accessibility settings to reduce transparency at the OS level.
9903
+ *
9904
+ */
9905
+ prefersReducedTransparency: boolean;
9906
+ /**
9907
+ * A `boolean` for if the OS / Chromium currently has a dark mode enabled or is
9908
+ * being instructed to show a dark-style UI. If you want to modify this value you
9909
+ * should use `themeSource` below.
9910
+ *
9911
+ */
9912
+ shouldUseDarkColors: boolean;
9913
+ /**
9914
+ * A `boolean` property indicating whether or not the system theme has been set to
9915
+ * dark or light.
9916
+ *
9917
+ * On Windows this property distinguishes between system and app light/dark theme,
9918
+ * returning `true` if the system theme is set to dark theme and `false` otherwise.
9919
+ * On macOS the return value will be the same as `nativeTheme.shouldUseDarkColors`.
9920
+ *
9921
+ * @platform darwin,win32
9922
+ */
9923
+ shouldUseDarkColorsForSystemIntegratedUI: boolean;
9924
+ /**
9925
+ * A `boolean` for if the OS / Chromium currently has high-contrast mode enabled or
9926
+ * is being instructed to show a high-contrast UI.
9927
+ *
9928
+ * @platform darwin,win32
9929
+ */
9930
+ shouldUseHighContrastColors: boolean;
9931
+ /**
9932
+ * A `boolean` for if the OS / Chromium currently has an inverted color scheme or
9933
+ * is being instructed to use an inverted color scheme.
9934
+ *
9935
+ * @platform darwin,win32
9936
+ */
9937
+ shouldUseInvertedColorScheme: boolean;
9938
+ /**
9939
+ * A `string` property that can be `system`, `light` or `dark`. It is used (via `setTheme) to
9940
+ * override and supersede the value that Chromium has chosen to use internally.
9941
+ */
9942
+ themeSource: 'system' | 'light' | 'dark';
9943
+ };
9944
+
9945
+ /**
9946
+ * Generated when the operating system's theme preferences change.
9947
+ * Occurs when dark mode, high contrast mode, or inverted color scheme settings are modified.
9948
+ */
9949
+ declare type NativeThemeUpdatedEvent = BaseEvent_9 & {
9950
+ type: 'native-theme-updated';
9951
+ theme: OpenFin.NativeTheme;
9952
+ };
9953
+
9846
9954
  /**
9847
9955
  * @interface
9848
9956
  */
@@ -10234,6 +10342,8 @@ declare namespace OpenFin {
10234
10342
  Manifest,
10235
10343
  LayoutContent,
10236
10344
  LayoutItemConfig,
10345
+ ThemePreferences,
10346
+ NativeTheme,
10237
10347
  LayoutRow,
10238
10348
  LayoutColumn,
10239
10349
  LayoutComponent,
@@ -13159,6 +13269,10 @@ declare type ProtocolMap = ExternalAdapterOnlyCallsMap & AnalyticsProtocolMap &
13159
13269
  request: any;
13160
13270
  response: any;
13161
13271
  };
13272
+ 'set-theme-preferences': ApiCall<{
13273
+ preferences: OpenFin.ThemePreferences;
13274
+ }, OpenFin.NativeTheme>;
13275
+ 'get-theme-preferences': GetterCall<OpenFin.NativeTheme>;
13162
13276
  'get-version': GetterCall<string>;
13163
13277
  'clear-cache': ApiCall<OpenFin.ClearCacheOption, void>;
13164
13278
  'delete-cache-request': VoidCall;
@@ -16205,6 +16319,84 @@ declare class System extends EmitterBase<OpenFin.SystemEvent> {
16205
16319
  * Not indended for general use, will be used by the `@openfin/workspace-platform` package.
16206
16320
  */
16207
16321
  serveAsset(options: OpenFin.ServeAssetOptions): Promise<OpenFin.ServedAssetInfo>;
16322
+ /**
16323
+ * Get's the native theme preferences for the current runtime.
16324
+ * Prefer css media-queries wherever possible, but this can be useful to see if the system setting has been overridden.
16325
+ * See @link OpenFin.NativeTheme for more information.
16326
+ * @example Theme selector menu
16327
+ * ```ts
16328
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16329
+ const currentTheme = await fin.System.getThemePreferences();
16330
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16331
+ x: e.clientX,
16332
+ y: e.clientY,
16333
+ template: [
16334
+ {
16335
+ label: 'Light',
16336
+ type: 'checkbox',
16337
+ checked: currentTheme.themeSource === 'light',
16338
+ data: { themeSource: 'light' } as const
16339
+ },
16340
+ {
16341
+ label: 'Dark',
16342
+ type: 'checkbox',
16343
+ checked: currentTheme.themeSource === 'dark',
16344
+ data: { themeSource: 'dark' } as const
16345
+ },
16346
+ {
16347
+ label: 'System',
16348
+ type: 'checkbox',
16349
+ checked: currentTheme.themeSource === 'system',
16350
+ data: { themeSource: 'system' } as const
16351
+ }
16352
+ ]
16353
+ });
16354
+ if (result.result === 'clicked') {
16355
+ await fin.System.setThemePreferences(result.data);
16356
+ }
16357
+ }
16358
+ ```
16359
+ */
16360
+ getThemePreferences(): Promise<OpenFin.NativeTheme>;
16361
+ /**
16362
+ * Sets the native theme preferences for the current runtime.
16363
+ * Can be used to force runtime-wide light or dark mode.
16364
+ * @important Due to this impacting all applications on a runtime, this method is only usable if a security realm has been set.
16365
+ * @example Theme selector menu
16366
+ * ```ts
16367
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16368
+ const currentTheme = await fin.System.getThemePreferences();
16369
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16370
+ x: e.clientX,
16371
+ y: e.clientY,
16372
+ template: [
16373
+ {
16374
+ label: 'Light',
16375
+ type: 'checkbox',
16376
+ checked: currentTheme.themeSource === 'light',
16377
+ data: { themeSource: 'light' } as const
16378
+ },
16379
+ {
16380
+ label: 'Dark',
16381
+ type: 'checkbox',
16382
+ checked: currentTheme.themeSource === 'dark',
16383
+ data: { themeSource: 'dark' } as const
16384
+ },
16385
+ {
16386
+ label: 'System',
16387
+ type: 'checkbox',
16388
+ checked: currentTheme.themeSource === 'system',
16389
+ data: { themeSource: 'system' } as const
16390
+ }
16391
+ ]
16392
+ });
16393
+ if (result.result === 'clicked') {
16394
+ await fin.System.setThemePreferences(result.data);
16395
+ }
16396
+ }
16397
+ ```
16398
+ */
16399
+ setThemePreferences(preferences: OpenFin.ThemePreferences): Promise<OpenFin.ThemePreferences>;
16208
16400
  /**
16209
16401
  * Launches the Log Uploader. Full documentation can be found [here](https://resources.here.io/docs/core/develop/debug/log-uploader/).
16210
16402
  * @experimental
@@ -16248,6 +16440,7 @@ declare namespace SystemEvents {
16248
16440
  ExtensionsInstallFailedEvent,
16249
16441
  ExtensionInstallFailedEvent,
16250
16442
  ExtensionsInitializationFailedEvent,
16443
+ NativeThemeUpdatedEvent,
16251
16444
  Event_11 as Event,
16252
16445
  SystemEvent,
16253
16446
  EventType_8 as EventType,
@@ -16371,6 +16564,7 @@ declare class TabStack extends LayoutNode {
16371
16564
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16372
16565
  * If that happens and then getViews() is called, it will return the identities in a different order than
16373
16566
  * than the currently rendered tab order.
16567
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16374
16568
  *
16375
16569
  *
16376
16570
  * @throws If the {@link TabStack} has been destroyed.
@@ -16395,6 +16589,7 @@ declare class TabStack extends LayoutNode {
16395
16589
  *
16396
16590
  * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
16397
16591
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16592
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16398
16593
  *
16399
16594
  * @param view The identity of an existing view to add, or options to create a view.
16400
16595
  * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
@@ -16516,6 +16711,11 @@ declare type TerminateExternalRequestType = {
16516
16711
  killTree: boolean;
16517
16712
  };
16518
16713
 
16714
+ /**
16715
+ * Settable options for the native theme of the operating system.
16716
+ */
16717
+ declare type ThemePreferences = Pick<NativeTheme, 'themeSource'>;
16718
+
16519
16719
  /**
16520
16720
  * @interface
16521
16721
  */
@@ -4976,7 +4976,7 @@ declare type Event_10 = ApplicationEvents.Event | ApiReadyEvent | SnapshotApplie
4976
4976
  * under the {@link OpenFin.SystemEvents} namespace (payloads inherited from propagated events are defined in the namespace
4977
4977
  * from which they propagate).
4978
4978
  */
4979
- declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent;
4979
+ declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent | NativeThemeUpdatedEvent;
4980
4980
 
4981
4981
  /**
4982
4982
  * [Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) containing every possible event that can be emitted by the HTMLElement Layout container.
@@ -8932,6 +8932,42 @@ declare type LayoutOptions = {
8932
8932
  */
8933
8933
  preventDragIn?: boolean;
8934
8934
  /* Excluded from this release type: disableTabOverflowDropdown */
8935
+ /**
8936
+ * When set to 'scroll', enables horizontal scrolling of tabs when they overflow the stack width.
8937
+ * When set to 'dropdown' the default golden-layouts behavior will apply.
8938
+ *
8939
+ * Setting this to `scroll` may break styles written for the default dropdown behavior, as it significantly changes the dom structure and css of tabs.
8940
+ *
8941
+ * The DOM structure will be modified in this way:
8942
+ * - `lm_tabs` will be wrapped in a div with class `lm_scroll_shadow`. This div will be revealed by a mask on the tabs when they are overflowing.
8943
+ * - the `.newTabButton` (if enabled) will be a direct child of `.lm_header`
8944
+ *
8945
+ * **The following css variables are available to customize tab appearance:**
8946
+ *
8947
+ * - `--layout-tab-width`: The default (max) width of the tabs. Using this enables using `lm_tab` as a queryable css container (must be an absolute value to use container queries). Default: `fit-content`
8948
+ * - `--layout-tab-min-width`: The minimum width of the tabs before they start overflowing. Set this to enable tab shrinking. Defaults to the same value as `--layout-tab-width` (no shrinking).
8949
+ * - `--layout-tab-overflow-fade-size`: The width of the scroll shadows when tabs are overflowing. Default: `20px`
8950
+ * - `--layout-tab-overflow-shadow-color`: The color of the scroll shadows when tabs are overflowing. Enabling a contrasting shadow color may require setting the background color on `.lm_tabs` if it was not previously set via `--tabs-background-color`. Default is transparent so overlowing tabs fade into the background.
8951
+ *
8952
+ * **CSS Variables for advanced customization (dynamically updated and set on `lm_tabs`):**
8953
+ *
8954
+ * - `--layout-tab-overflow-fade-left`: The strength of the left fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8955
+ * - `--layout-tab-overflow-fade-right`: The strength of the right fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
8956
+ * - `--layout-tabs-overflowing`: A [css space toggle](https://css-tricks.com/the-css-custom-property-toggle-trick/) that is empty when tabs are overflowing and `initial` otherwise. If you are only targeting Chrome > 137 you may want to use the `if()` function with left/right fade instead of this toggle.
8957
+ *
8958
+ * @example
8959
+ * ```css
8960
+ * .lm_tabs {
8961
+ * --layout-tab-width: 200px;
8962
+ * --layout-tab-min-width: 100px;
8963
+ * --layout-tab-overflow-fade-size: 20px;
8964
+ * --layout-tab-overflow-shadow-color: rgba(0, 0, 0, 0.3);
8965
+ * }
8966
+ * ```
8967
+ *
8968
+ * @defaultValue 'dropdown'
8969
+ */
8970
+ tabOverflowBehavior?: 'dropdown' | 'scroll';
8935
8971
  };
8936
8972
  /**
8937
8973
  * Content of the layout. There can only be one top-level LayoutItem in the content array.
@@ -9843,6 +9879,78 @@ declare type NamedEvent = IdentityEvent & {
9843
9879
  name: string;
9844
9880
  };
9845
9881
 
9882
+ /**
9883
+ * @interface
9884
+ *
9885
+ * Represents the native theme of the operating system.
9886
+ * This is used to determine how the application should render its UI based on the system's theme settings.
9887
+ * Defer to CSS properties whenever possible.
9888
+ *
9889
+ * Re-exported from Electron's `NativeTheme` type.
9890
+ */
9891
+ declare type NativeTheme = {
9892
+ /**
9893
+ * A `boolean` indicating whether Chromium is in forced colors mode, controlled by
9894
+ * system accessibility settings. Currently, Windows high contrast is the only
9895
+ * system setting that triggers forced colors mode.
9896
+ *
9897
+ * @platform win32
9898
+ */
9899
+ inForcedColorsMode: boolean;
9900
+ /**
9901
+ * A `boolean` that indicates the whether the user has chosen via system
9902
+ * accessibility settings to reduce transparency at the OS level.
9903
+ *
9904
+ */
9905
+ prefersReducedTransparency: boolean;
9906
+ /**
9907
+ * A `boolean` for if the OS / Chromium currently has a dark mode enabled or is
9908
+ * being instructed to show a dark-style UI. If you want to modify this value you
9909
+ * should use `themeSource` below.
9910
+ *
9911
+ */
9912
+ shouldUseDarkColors: boolean;
9913
+ /**
9914
+ * A `boolean` property indicating whether or not the system theme has been set to
9915
+ * dark or light.
9916
+ *
9917
+ * On Windows this property distinguishes between system and app light/dark theme,
9918
+ * returning `true` if the system theme is set to dark theme and `false` otherwise.
9919
+ * On macOS the return value will be the same as `nativeTheme.shouldUseDarkColors`.
9920
+ *
9921
+ * @platform darwin,win32
9922
+ */
9923
+ shouldUseDarkColorsForSystemIntegratedUI: boolean;
9924
+ /**
9925
+ * A `boolean` for if the OS / Chromium currently has high-contrast mode enabled or
9926
+ * is being instructed to show a high-contrast UI.
9927
+ *
9928
+ * @platform darwin,win32
9929
+ */
9930
+ shouldUseHighContrastColors: boolean;
9931
+ /**
9932
+ * A `boolean` for if the OS / Chromium currently has an inverted color scheme or
9933
+ * is being instructed to use an inverted color scheme.
9934
+ *
9935
+ * @platform darwin,win32
9936
+ */
9937
+ shouldUseInvertedColorScheme: boolean;
9938
+ /**
9939
+ * A `string` property that can be `system`, `light` or `dark`. It is used (via `setTheme) to
9940
+ * override and supersede the value that Chromium has chosen to use internally.
9941
+ */
9942
+ themeSource: 'system' | 'light' | 'dark';
9943
+ };
9944
+
9945
+ /**
9946
+ * Generated when the operating system's theme preferences change.
9947
+ * Occurs when dark mode, high contrast mode, or inverted color scheme settings are modified.
9948
+ */
9949
+ declare type NativeThemeUpdatedEvent = BaseEvent_9 & {
9950
+ type: 'native-theme-updated';
9951
+ theme: OpenFin.NativeTheme;
9952
+ };
9953
+
9846
9954
  /**
9847
9955
  * @interface
9848
9956
  */
@@ -10234,6 +10342,8 @@ declare namespace OpenFin {
10234
10342
  Manifest,
10235
10343
  LayoutContent,
10236
10344
  LayoutItemConfig,
10345
+ ThemePreferences,
10346
+ NativeTheme,
10237
10347
  LayoutRow,
10238
10348
  LayoutColumn,
10239
10349
  LayoutComponent,
@@ -13159,6 +13269,10 @@ declare type ProtocolMap = ExternalAdapterOnlyCallsMap & AnalyticsProtocolMap &
13159
13269
  request: any;
13160
13270
  response: any;
13161
13271
  };
13272
+ 'set-theme-preferences': ApiCall<{
13273
+ preferences: OpenFin.ThemePreferences;
13274
+ }, OpenFin.NativeTheme>;
13275
+ 'get-theme-preferences': GetterCall<OpenFin.NativeTheme>;
13162
13276
  'get-version': GetterCall<string>;
13163
13277
  'clear-cache': ApiCall<OpenFin.ClearCacheOption, void>;
13164
13278
  'delete-cache-request': VoidCall;
@@ -16205,6 +16319,84 @@ declare class System extends EmitterBase<OpenFin.SystemEvent> {
16205
16319
  * Not indended for general use, will be used by the `@openfin/workspace-platform` package.
16206
16320
  */
16207
16321
  serveAsset(options: OpenFin.ServeAssetOptions): Promise<OpenFin.ServedAssetInfo>;
16322
+ /**
16323
+ * Get's the native theme preferences for the current runtime.
16324
+ * Prefer css media-queries wherever possible, but this can be useful to see if the system setting has been overridden.
16325
+ * See @link OpenFin.NativeTheme for more information.
16326
+ * @example Theme selector menu
16327
+ * ```ts
16328
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16329
+ const currentTheme = await fin.System.getThemePreferences();
16330
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16331
+ x: e.clientX,
16332
+ y: e.clientY,
16333
+ template: [
16334
+ {
16335
+ label: 'Light',
16336
+ type: 'checkbox',
16337
+ checked: currentTheme.themeSource === 'light',
16338
+ data: { themeSource: 'light' } as const
16339
+ },
16340
+ {
16341
+ label: 'Dark',
16342
+ type: 'checkbox',
16343
+ checked: currentTheme.themeSource === 'dark',
16344
+ data: { themeSource: 'dark' } as const
16345
+ },
16346
+ {
16347
+ label: 'System',
16348
+ type: 'checkbox',
16349
+ checked: currentTheme.themeSource === 'system',
16350
+ data: { themeSource: 'system' } as const
16351
+ }
16352
+ ]
16353
+ });
16354
+ if (result.result === 'clicked') {
16355
+ await fin.System.setThemePreferences(result.data);
16356
+ }
16357
+ }
16358
+ ```
16359
+ */
16360
+ getThemePreferences(): Promise<OpenFin.NativeTheme>;
16361
+ /**
16362
+ * Sets the native theme preferences for the current runtime.
16363
+ * Can be used to force runtime-wide light or dark mode.
16364
+ * @important Due to this impacting all applications on a runtime, this method is only usable if a security realm has been set.
16365
+ * @example Theme selector menu
16366
+ * ```ts
16367
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16368
+ const currentTheme = await fin.System.getThemePreferences();
16369
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16370
+ x: e.clientX,
16371
+ y: e.clientY,
16372
+ template: [
16373
+ {
16374
+ label: 'Light',
16375
+ type: 'checkbox',
16376
+ checked: currentTheme.themeSource === 'light',
16377
+ data: { themeSource: 'light' } as const
16378
+ },
16379
+ {
16380
+ label: 'Dark',
16381
+ type: 'checkbox',
16382
+ checked: currentTheme.themeSource === 'dark',
16383
+ data: { themeSource: 'dark' } as const
16384
+ },
16385
+ {
16386
+ label: 'System',
16387
+ type: 'checkbox',
16388
+ checked: currentTheme.themeSource === 'system',
16389
+ data: { themeSource: 'system' } as const
16390
+ }
16391
+ ]
16392
+ });
16393
+ if (result.result === 'clicked') {
16394
+ await fin.System.setThemePreferences(result.data);
16395
+ }
16396
+ }
16397
+ ```
16398
+ */
16399
+ setThemePreferences(preferences: OpenFin.ThemePreferences): Promise<OpenFin.ThemePreferences>;
16208
16400
  /**
16209
16401
  * Launches the Log Uploader. Full documentation can be found [here](https://resources.here.io/docs/core/develop/debug/log-uploader/).
16210
16402
  * @experimental
@@ -16248,6 +16440,7 @@ declare namespace SystemEvents {
16248
16440
  ExtensionsInstallFailedEvent,
16249
16441
  ExtensionInstallFailedEvent,
16250
16442
  ExtensionsInitializationFailedEvent,
16443
+ NativeThemeUpdatedEvent,
16251
16444
  Event_11 as Event,
16252
16445
  SystemEvent,
16253
16446
  EventType_8 as EventType,
@@ -16371,6 +16564,7 @@ declare class TabStack extends LayoutNode {
16371
16564
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16372
16565
  * If that happens and then getViews() is called, it will return the identities in a different order than
16373
16566
  * than the currently rendered tab order.
16567
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16374
16568
  *
16375
16569
  *
16376
16570
  * @throws If the {@link TabStack} has been destroyed.
@@ -16395,6 +16589,7 @@ declare class TabStack extends LayoutNode {
16395
16589
  *
16396
16590
  * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
16397
16591
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16592
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16398
16593
  *
16399
16594
  * @param view The identity of an existing view to add, or options to create a view.
16400
16595
  * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
@@ -16516,6 +16711,11 @@ declare type TerminateExternalRequestType = {
16516
16711
  killTree: boolean;
16517
16712
  };
16518
16713
 
16714
+ /**
16715
+ * Settable options for the native theme of the operating system.
16716
+ */
16717
+ declare type ThemePreferences = Pick<NativeTheme, 'themeSource'>;
16718
+
16519
16719
  /**
16520
16720
  * @interface
16521
16721
  */
package/out/fdc3-api.d.ts CHANGED
@@ -5040,7 +5040,7 @@ declare type Event_10 = ApplicationEvents.Event | ApiReadyEvent | SnapshotApplie
5040
5040
  * under the {@link OpenFin.SystemEvents} namespace (payloads inherited from propagated events are defined in the namespace
5041
5041
  * from which they propagate).
5042
5042
  */
5043
- declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent;
5043
+ declare type Event_11 = ExcludeRequested<WindowEvents.PropagatedEvent<'system'>> | ExcludeRequested<ViewEvents.PropagatedEvent<'system'>> | ExcludeRequested<ApplicationEvents.PropagatedEvent<'system'>> | ApplicationCreatedEvent | DesktopIconClickedEvent | IdleStateChangedEvent | MonitorInfoChangedEvent | SessionChangedEvent | AppVersionEventWithId | SystemShutdownEvent | ExtensionsEnabledEvent | ExtensionsDisabledEvent | ExtensionsExcludedEvent | ExtensionsInstalledEvent | ExtensionInstalledEvent | ExtensionsInstallFailedEvent | ExtensionInstallFailedEvent | ExtensionsInitializationFailedEvent | NativeThemeUpdatedEvent;
5044
5044
 
5045
5045
  /**
5046
5046
  * [Union](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) containing every possible event that can be emitted by the HTMLElement Layout container.
@@ -9066,7 +9066,7 @@ declare abstract class LayoutNode {
9066
9066
  * Known Issue: If the number of views to add overflows the tab-container, the added views will be set as active
9067
9067
  * during each render, and then placed at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
9068
9068
  * This means the views you pass to createAdjacentStack() may not render in the order given by the array.
9069
- * Until fixed, this problem can be avoided only if your window is wide enough to fit creating all the views in the tabstack.
9069
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
9070
9070
  *
9071
9071
  * @param views The views that will populate the new TabStack.
9072
9072
  * @param options Additional options that control new TabStack creation.
@@ -9241,6 +9241,42 @@ declare type LayoutOptions = {
9241
9241
  * @defaultValue false
9242
9242
  */
9243
9243
  disableTabOverflowDropdown?: boolean;
9244
+ /**
9245
+ * When set to 'scroll', enables horizontal scrolling of tabs when they overflow the stack width.
9246
+ * When set to 'dropdown' the default golden-layouts behavior will apply.
9247
+ *
9248
+ * Setting this to `scroll` may break styles written for the default dropdown behavior, as it significantly changes the dom structure and css of tabs.
9249
+ *
9250
+ * The DOM structure will be modified in this way:
9251
+ * - `lm_tabs` will be wrapped in a div with class `lm_scroll_shadow`. This div will be revealed by a mask on the tabs when they are overflowing.
9252
+ * - the `.newTabButton` (if enabled) will be a direct child of `.lm_header`
9253
+ *
9254
+ * **The following css variables are available to customize tab appearance:**
9255
+ *
9256
+ * - `--layout-tab-width`: The default (max) width of the tabs. Using this enables using `lm_tab` as a queryable css container (must be an absolute value to use container queries). Default: `fit-content`
9257
+ * - `--layout-tab-min-width`: The minimum width of the tabs before they start overflowing. Set this to enable tab shrinking. Defaults to the same value as `--layout-tab-width` (no shrinking).
9258
+ * - `--layout-tab-overflow-fade-size`: The width of the scroll shadows when tabs are overflowing. Default: `20px`
9259
+ * - `--layout-tab-overflow-shadow-color`: The color of the scroll shadows when tabs are overflowing. Enabling a contrasting shadow color may require setting the background color on `.lm_tabs` if it was not previously set via `--tabs-background-color`. Default is transparent so overlowing tabs fade into the background.
9260
+ *
9261
+ * **CSS Variables for advanced customization (dynamically updated and set on `lm_tabs`):**
9262
+ *
9263
+ * - `--layout-tab-overflow-fade-left`: The strength of the left fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
9264
+ * - `--layout-tab-overflow-fade-right`: The strength of the right fade when tabs are overflowing. This is a number between 0 and 1 where 0 means no fade and 1 means a full fade.
9265
+ * - `--layout-tabs-overflowing`: A [css space toggle](https://css-tricks.com/the-css-custom-property-toggle-trick/) that is empty when tabs are overflowing and `initial` otherwise. If you are only targeting Chrome > 137 you may want to use the `if()` function with left/right fade instead of this toggle.
9266
+ *
9267
+ * @example
9268
+ * ```css
9269
+ * .lm_tabs {
9270
+ * --layout-tab-width: 200px;
9271
+ * --layout-tab-min-width: 100px;
9272
+ * --layout-tab-overflow-fade-size: 20px;
9273
+ * --layout-tab-overflow-shadow-color: rgba(0, 0, 0, 0.3);
9274
+ * }
9275
+ * ```
9276
+ *
9277
+ * @defaultValue 'dropdown'
9278
+ */
9279
+ tabOverflowBehavior?: 'dropdown' | 'scroll';
9244
9280
  };
9245
9281
  /**
9246
9282
  * Content of the layout. There can only be one top-level LayoutItem in the content array.
@@ -10164,6 +10200,78 @@ declare type NamedEvent = IdentityEvent & {
10164
10200
  name: string;
10165
10201
  };
10166
10202
 
10203
+ /**
10204
+ * @interface
10205
+ *
10206
+ * Represents the native theme of the operating system.
10207
+ * This is used to determine how the application should render its UI based on the system's theme settings.
10208
+ * Defer to CSS properties whenever possible.
10209
+ *
10210
+ * Re-exported from Electron's `NativeTheme` type.
10211
+ */
10212
+ declare type NativeTheme = {
10213
+ /**
10214
+ * A `boolean` indicating whether Chromium is in forced colors mode, controlled by
10215
+ * system accessibility settings. Currently, Windows high contrast is the only
10216
+ * system setting that triggers forced colors mode.
10217
+ *
10218
+ * @platform win32
10219
+ */
10220
+ inForcedColorsMode: boolean;
10221
+ /**
10222
+ * A `boolean` that indicates the whether the user has chosen via system
10223
+ * accessibility settings to reduce transparency at the OS level.
10224
+ *
10225
+ */
10226
+ prefersReducedTransparency: boolean;
10227
+ /**
10228
+ * A `boolean` for if the OS / Chromium currently has a dark mode enabled or is
10229
+ * being instructed to show a dark-style UI. If you want to modify this value you
10230
+ * should use `themeSource` below.
10231
+ *
10232
+ */
10233
+ shouldUseDarkColors: boolean;
10234
+ /**
10235
+ * A `boolean` property indicating whether or not the system theme has been set to
10236
+ * dark or light.
10237
+ *
10238
+ * On Windows this property distinguishes between system and app light/dark theme,
10239
+ * returning `true` if the system theme is set to dark theme and `false` otherwise.
10240
+ * On macOS the return value will be the same as `nativeTheme.shouldUseDarkColors`.
10241
+ *
10242
+ * @platform darwin,win32
10243
+ */
10244
+ shouldUseDarkColorsForSystemIntegratedUI: boolean;
10245
+ /**
10246
+ * A `boolean` for if the OS / Chromium currently has high-contrast mode enabled or
10247
+ * is being instructed to show a high-contrast UI.
10248
+ *
10249
+ * @platform darwin,win32
10250
+ */
10251
+ shouldUseHighContrastColors: boolean;
10252
+ /**
10253
+ * A `boolean` for if the OS / Chromium currently has an inverted color scheme or
10254
+ * is being instructed to use an inverted color scheme.
10255
+ *
10256
+ * @platform darwin,win32
10257
+ */
10258
+ shouldUseInvertedColorScheme: boolean;
10259
+ /**
10260
+ * A `string` property that can be `system`, `light` or `dark`. It is used (via `setTheme) to
10261
+ * override and supersede the value that Chromium has chosen to use internally.
10262
+ */
10263
+ themeSource: 'system' | 'light' | 'dark';
10264
+ };
10265
+
10266
+ /**
10267
+ * Generated when the operating system's theme preferences change.
10268
+ * Occurs when dark mode, high contrast mode, or inverted color scheme settings are modified.
10269
+ */
10270
+ declare type NativeThemeUpdatedEvent = BaseEvent_9 & {
10271
+ type: 'native-theme-updated';
10272
+ theme: OpenFin.NativeTheme;
10273
+ };
10274
+
10167
10275
  /**
10168
10276
  * @interface
10169
10277
  */
@@ -10568,6 +10676,8 @@ declare namespace OpenFin {
10568
10676
  Manifest,
10569
10677
  LayoutContent,
10570
10678
  LayoutItemConfig,
10679
+ ThemePreferences,
10680
+ NativeTheme,
10571
10681
  LayoutRow,
10572
10682
  LayoutColumn,
10573
10683
  LayoutComponent,
@@ -13576,6 +13686,10 @@ declare type ProtocolMap = ExternalAdapterOnlyCallsMap & AnalyticsProtocolMap &
13576
13686
  request: any;
13577
13687
  response: any;
13578
13688
  };
13689
+ 'set-theme-preferences': ApiCall<{
13690
+ preferences: OpenFin.ThemePreferences;
13691
+ }, OpenFin.NativeTheme>;
13692
+ 'get-theme-preferences': GetterCall<OpenFin.NativeTheme>;
13579
13693
  'get-version': GetterCall<string>;
13580
13694
  'clear-cache': ApiCall<OpenFin.ClearCacheOption, void>;
13581
13695
  'delete-cache-request': VoidCall;
@@ -16628,6 +16742,84 @@ declare class System extends EmitterBase<OpenFin.SystemEvent> {
16628
16742
  * Not indended for general use, will be used by the `@openfin/workspace-platform` package.
16629
16743
  */
16630
16744
  serveAsset(options: OpenFin.ServeAssetOptions): Promise<OpenFin.ServedAssetInfo>;
16745
+ /**
16746
+ * Get's the native theme preferences for the current runtime.
16747
+ * Prefer css media-queries wherever possible, but this can be useful to see if the system setting has been overridden.
16748
+ * See @link OpenFin.NativeTheme for more information.
16749
+ * @example Theme selector menu
16750
+ * ```ts
16751
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16752
+ const currentTheme = await fin.System.getThemePreferences();
16753
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16754
+ x: e.clientX,
16755
+ y: e.clientY,
16756
+ template: [
16757
+ {
16758
+ label: 'Light',
16759
+ type: 'checkbox',
16760
+ checked: currentTheme.themeSource === 'light',
16761
+ data: { themeSource: 'light' } as const
16762
+ },
16763
+ {
16764
+ label: 'Dark',
16765
+ type: 'checkbox',
16766
+ checked: currentTheme.themeSource === 'dark',
16767
+ data: { themeSource: 'dark' } as const
16768
+ },
16769
+ {
16770
+ label: 'System',
16771
+ type: 'checkbox',
16772
+ checked: currentTheme.themeSource === 'system',
16773
+ data: { themeSource: 'system' } as const
16774
+ }
16775
+ ]
16776
+ });
16777
+ if (result.result === 'clicked') {
16778
+ await fin.System.setThemePreferences(result.data);
16779
+ }
16780
+ }
16781
+ ```
16782
+ */
16783
+ getThemePreferences(): Promise<OpenFin.NativeTheme>;
16784
+ /**
16785
+ * Sets the native theme preferences for the current runtime.
16786
+ * Can be used to force runtime-wide light or dark mode.
16787
+ * @important Due to this impacting all applications on a runtime, this method is only usable if a security realm has been set.
16788
+ * @example Theme selector menu
16789
+ * ```ts
16790
+ async function handleThemeMenu(e: React.MouseEvent<HTMLDivElement>) {
16791
+ const currentTheme = await fin.System.getThemePreferences();
16792
+ const result = await (fin.me as OpenFin.Window).showPopupMenu({
16793
+ x: e.clientX,
16794
+ y: e.clientY,
16795
+ template: [
16796
+ {
16797
+ label: 'Light',
16798
+ type: 'checkbox',
16799
+ checked: currentTheme.themeSource === 'light',
16800
+ data: { themeSource: 'light' } as const
16801
+ },
16802
+ {
16803
+ label: 'Dark',
16804
+ type: 'checkbox',
16805
+ checked: currentTheme.themeSource === 'dark',
16806
+ data: { themeSource: 'dark' } as const
16807
+ },
16808
+ {
16809
+ label: 'System',
16810
+ type: 'checkbox',
16811
+ checked: currentTheme.themeSource === 'system',
16812
+ data: { themeSource: 'system' } as const
16813
+ }
16814
+ ]
16815
+ });
16816
+ if (result.result === 'clicked') {
16817
+ await fin.System.setThemePreferences(result.data);
16818
+ }
16819
+ }
16820
+ ```
16821
+ */
16822
+ setThemePreferences(preferences: OpenFin.ThemePreferences): Promise<OpenFin.ThemePreferences>;
16631
16823
  /**
16632
16824
  * Launches the Log Uploader. Full documentation can be found [here](https://resources.here.io/docs/core/develop/debug/log-uploader/).
16633
16825
  * @experimental
@@ -16671,6 +16863,7 @@ declare namespace SystemEvents {
16671
16863
  ExtensionsInstallFailedEvent,
16672
16864
  ExtensionInstallFailedEvent,
16673
16865
  ExtensionsInitializationFailedEvent,
16866
+ NativeThemeUpdatedEvent,
16674
16867
  Event_11 as Event,
16675
16868
  SystemEvent,
16676
16869
  EventType_8 as EventType,
@@ -16801,6 +16994,7 @@ declare class TabStack extends LayoutNode {
16801
16994
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
16802
16995
  * If that happens and then getViews() is called, it will return the identities in a different order than
16803
16996
  * than the currently rendered tab order.
16997
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16804
16998
  *
16805
16999
  *
16806
17000
  * @throws If the {@link TabStack} has been destroyed.
@@ -16825,6 +17019,7 @@ declare class TabStack extends LayoutNode {
16825
17019
  *
16826
17020
  * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
16827
17021
  * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
17022
+ * Note: This issue does not occur when using `tabOverflowBehavior: 'scroll'` in the layout configuration.
16828
17023
  *
16829
17024
  * @param view The identity of an existing view to add, or options to create a view.
16830
17025
  * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
@@ -16946,6 +17141,11 @@ declare type TerminateExternalRequestType = {
16946
17141
  killTree: boolean;
16947
17142
  };
16948
17143
 
17144
+ /**
17145
+ * Settable options for the native theme of the operating system.
17146
+ */
17147
+ declare type ThemePreferences = Pick<NativeTheme, 'themeSource'>;
17148
+
16949
17149
  /**
16950
17150
  * @interface
16951
17151
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/fdc3-api",
3
- "version": "44.100.47",
3
+ "version": "44.100.49",
4
4
  "description": "OpenFin fdc3 module utilities and types.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,