diff --git a/how-to/workspace-platform-starter/CHANGELOG.md b/how-to/workspace-platform-starter/CHANGELOG.md index c5b2f1e872..268748c4da 100644 --- a/how-to/workspace-platform-starter/CHANGELOG.md +++ b/how-to/workspace-platform-starter/CHANGELOG.md @@ -2,6 +2,8 @@ ## v17.0.0 +- Added support for dock submenus + ## v16.1.0 - Change storage mapper now removes additional defaults based on default window/page/view settings diff --git a/how-to/workspace-platform-starter/client/src/framework/shapes/dock-shapes.ts b/how-to/workspace-platform-starter/client/src/framework/shapes/dock-shapes.ts index 5210be821a..f724e52937 100644 --- a/how-to/workspace-platform-starter/client/src/framework/shapes/dock-shapes.ts +++ b/how-to/workspace-platform-starter/client/src/framework/shapes/dock-shapes.ts @@ -132,7 +132,7 @@ export interface DockButtonDropdown extends DockButtonBase { /** * List of button options */ - options: (Omit | Omit)[]; + options: (Omit | Omit | Omit)[]; /** * Text to display if there are no entries because conditions have excluded options. diff --git a/how-to/workspace-platform-starter/client/src/framework/workspace/dock.ts b/how-to/workspace-platform-starter/client/src/framework/workspace/dock.ts index 9f8040e740..26482ad0ad 100644 --- a/how-to/workspace-platform-starter/client/src/framework/workspace/dock.ts +++ b/how-to/workspace-platform-starter/client/src/framework/workspace/dock.ts @@ -3,6 +3,7 @@ import { DockButtonNames, type CustomActionSpecifier, type CustomButtonConfig, + type CustomDropdownConfig, type DockButton, type DockProvider, type DockProviderRegistration, @@ -188,7 +189,7 @@ async function buildButtons(): Promise { const entries = Array.isArray(dockProviderOptions.entries) ? [...dockProviderOptions.entries] : []; usedConditions.clear(); - return buildButtonsFromEntries(entries); + return buildButtonsFromEntries(entries, true); } return []; @@ -197,9 +198,13 @@ async function buildButtons(): Promise { /** * Build the buttons to display on the dock from config. * @param entries The entries to build the buttons from + * @param isTopLevel Is this a top level entry. * @returns The dock buttons to display. */ -async function buildButtonsFromEntries(entries: DockButtonTypes[]): Promise { +async function buildButtonsFromEntries( + entries: DockButtonTypes[], + isTopLevel: boolean +): Promise { const buttons: DockButton[] = []; const iconFolder = await getCurrentIconFolder(); @@ -220,9 +225,9 @@ async function buildButtonsFromEntries(entries: DockButtonTypes[]): Promise { - if (!isStringValue(entry.tooltip) || !isStringValue(entry.iconUrl)) { - logger.error("You must specify the tooltip and iconUrl for a DockButtonAction"); + if (!isStringValue(entry.tooltip)) { + logger.error("You must specify the tooltip for a DockButtonAction"); + } else if (isTopLevel && !isStringValue(entry.iconUrl)) { + logger.error("You must specify the iconUrl for a DockButtonAction"); } else { buttons.push({ id: entry.id, @@ -310,6 +319,7 @@ async function addEntryAsAction( * @param entry The entry details. * @param iconFolder The folder for icons. * @param colorSchemeMode The color scheme + * @param isTopLevel Is this a top level entry. * @param platform The workspace platform for checking conditions. */ async function addEntriesAsDropdown( @@ -317,14 +327,17 @@ async function addEntriesAsDropdown( entry: DockButtonDropdown, iconFolder: string, colorSchemeMode: ColorSchemeMode, + isTopLevel: boolean, platform: WorkspacePlatformModule ): Promise { // Options are present so this is a drop down // The items in the drop down can be an appId or a custom action - if (!isStringValue(entry.tooltip) || !isStringValue(entry.iconUrl)) { - logger.error("You must specify the tooltip and iconUrl for a DockButtonDropdown"); + if (!isStringValue(entry.tooltip)) { + logger.error("You must specify the tooltip for a DockButtonDropdown"); + } else if (isTopLevel && !isStringValue(entry.iconUrl)) { + logger.error("You must specify the iconUrl for a DockButtonDropdown"); } else { - const opts: CustomButtonConfig[] = []; + const opts: (CustomButtonConfig | CustomDropdownConfig)[] = []; for (const option of entry.options) { if (Array.isArray(option.conditions)) { @@ -342,10 +355,33 @@ async function addEntriesAsDropdown( let optionTooltip = option.tooltip; let action: CustomActionSpecifier | undefined; let iconUrl; + let subOptions: (CustomButtonConfig | CustomDropdownConfig)[] | undefined; + + // If there are options this is a submenu + if ("options" in option) { + subOptions = []; + + const dockButtons = await buildButtonsFromEntries(option.options as DockButtonTypes[], false); + + for (const dockButton of dockButtons) { + if (dockButton.type === DockButtonNames.ActionButton) { + subOptions.push({ + tooltip: dockButton.tooltip, + iconUrl: dockButton.iconUrl, + action: dockButton.action + }); + } else if (dockButton.type === DockButtonNames.DropdownButton) { + subOptions.push({ + tooltip: dockButton.tooltip, + iconUrl: dockButton.iconUrl, + options: dockButton.options + }); + } + } + } else if ("appId" in option) { + // If the options has an appId we are going to launch that + // otherwise we use the custom action. - // If the options has an appId we are going to launch that - // otherwise we use the custom action. - if ("appId" in option) { const app = await getApp(option.appId); if (!isStringValue(option.iconUrl) && app) { iconUrl = getAppIcon(app); @@ -372,8 +408,14 @@ async function addEntriesAsDropdown( if (!isEmpty(action)) { opts.push({ tooltip: optionTooltip ?? "", - action, - iconUrl + iconUrl, + action + }); + } else if (!isEmpty(subOptions)) { + opts.push({ + tooltip: optionTooltip ?? "", + iconUrl, + options: subOptions }); } } @@ -656,7 +698,7 @@ async function addDropdownOrMenu( id: string, tooltip: string, iconUrl: string | undefined, - options: CustomButtonConfig[] + options: (CustomButtonConfig | CustomDropdownConfig)[] ): Promise { const popupMenuStyle = dockProviderOptions?.popupMenuStyle ?? Menu.getPopupMenuStyle(); diff --git a/how-to/workspace-platform-starter/client/types/module/shapes/dock-shapes.d.ts b/how-to/workspace-platform-starter/client/types/module/shapes/dock-shapes.d.ts index 108ef64cc5..db3d10dd88 100644 --- a/how-to/workspace-platform-starter/client/types/module/shapes/dock-shapes.d.ts +++ b/how-to/workspace-platform-starter/client/types/module/shapes/dock-shapes.d.ts @@ -114,7 +114,7 @@ export interface DockButtonDropdown extends DockButtonBase { /** * List of button options */ - options: (Omit | Omit)[]; + options: (Omit | Omit | Omit)[]; /** * Text to display if there are no entries because conditions have excluded options. */ diff --git a/how-to/workspace-platform-starter/public/manifest.fin.json b/how-to/workspace-platform-starter/public/manifest.fin.json index c34cdb90df..d2cdbafedc 100644 --- a/how-to/workspace-platform-starter/public/manifest.fin.json +++ b/how-to/workspace-platform-starter/public/manifest.fin.json @@ -968,6 +968,52 @@ "url": "https://www.youtube.com/user/OpenFinTech" } } + }, + { + "tooltip": "Other", + "options": [ + { + "tooltip": "LinkedIn", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.linkedin.com/company/openfin" + } + } + }, + { + "tooltip": "GitHub", + "action": { + "id": "launch-view", + "customData": { + "url": "https://github.com/openfin" + } + } + }, + { + "tooltip": "Search", + "options": [ + { + "tooltip": "Google", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.google.com/search?q=openfin" + } + } + }, + { + "tooltip": "Bing", + "action": { + "id": "launch-view", + "customData": { + "url": "https://www.bing.com/search?q=openfin" + } + } + } + ] + } + ] } ] }, diff --git a/how-to/workspace-platform-starter/public/schemas/settings.schema.json b/how-to/workspace-platform-starter/public/schemas/settings.schema.json index 8fb85cd76a..f66f000296 100644 --- a/how-to/workspace-platform-starter/public/schemas/settings.schema.json +++ b/how-to/workspace-platform-starter/public/schemas/settings.schema.json @@ -50,7 +50,7 @@ "$ref": "#/definitions/__type_3" }, "AppAssetInfo": { - "$ref": "#/definitions/__type_52" + "$ref": "#/definitions/__type_53" }, "AppEndpointOptions": { "anyOf": [ @@ -713,7 +713,7 @@ "type": "object" }, "CertificationInfo": { - "$ref": "#/definitions/__type_45" + "$ref": "#/definitions/__type_46" }, "ConditionsProviderOptions": { "$ref": "#/definitions/ModuleList_3", @@ -831,7 +831,7 @@ "$ref": "#/definitions/__type_15" }, "ContextGroupStates": { - "$ref": "#/definitions/__type_42" + "$ref": "#/definitions/__type_43" }, "ContextMenuOptions": { "$ref": "#/definitions/__type_9" @@ -1162,7 +1162,7 @@ }, "Data": {}, "DeepPartial": { - "$ref": "#/definitions/__type_34" + "$ref": "#/definitions/__type_35" }, "DelayStrategy": { "additionalProperties": false, @@ -1219,7 +1219,7 @@ "type": "object" }, "DipScaleRects": { - "$ref": "#/definitions/__type_39" + "$ref": "#/definitions/__type_40" }, "DockButtonAction": { "additionalProperties": false, @@ -1395,6 +1395,9 @@ }, { "$ref": "#/definitions/Omit_2" + }, + { + "$ref": "#/definitions/Omit_3" } ] }, @@ -1904,7 +1907,7 @@ "$ref": "#/definitions/__type_4" }, "Identity_5_1": { - "$ref": "#/definitions/__type_35" + "$ref": "#/definitions/__type_36" }, "Image": { "additionalProperties": false, @@ -2074,7 +2077,7 @@ "$ref": "#/definitions/__type_12" }, "LaunchExternalProcessListener": { - "$ref": "#/definitions/__type_44" + "$ref": "#/definitions/__type_45" }, "LaunchPreference": { "additionalProperties": false, @@ -3108,10 +3111,10 @@ "type": "object" }, "MonitorDetails": { - "$ref": "#/definitions/__type_41" + "$ref": "#/definitions/__type_42" }, "MonitorInfo": { - "$ref": "#/definitions/__type_37" + "$ref": "#/definitions/__type_38" }, "NativeLaunchOptions": { "additionalProperties": false, @@ -3258,7 +3261,7 @@ "type": "object" }, "NotificationIndicatorColorsWithScheme": { - "$ref": "#/definitions/__type_51" + "$ref": "#/definitions/__type_52" }, "NotificationProviderOptions": { "additionalProperties": false, @@ -3298,6 +3301,9 @@ "Omit_2": { "$ref": "#/definitions/__type_33" }, + "Omit_3": { + "$ref": "#/definitions/__type_34" + }, "OpenExternalPermission": { "additionalProperties": false, "properties": { @@ -3586,22 +3592,22 @@ "$ref": "#/definitions/__type_2" }, "Partial_10": { - "$ref": "#/definitions/__type_36" + "$ref": "#/definitions/__type_37" }, "Partial_11": { - "$ref": "#/definitions/__type_43" + "$ref": "#/definitions/__type_44" }, "Partial_12": { - "$ref": "#/definitions/__type_46" + "$ref": "#/definitions/__type_47" }, "Partial_13": { - "$ref": "#/definitions/__type_47" + "$ref": "#/definitions/__type_48" }, "Partial_14": { - "$ref": "#/definitions/__type_48" + "$ref": "#/definitions/__type_49" }, "Partial_15": { - "$ref": "#/definitions/__type_49" + "$ref": "#/definitions/__type_50" }, "Partial_2": { "$ref": "#/definitions/__type_6" @@ -3944,7 +3950,7 @@ "type": "object" }, "Point": { - "$ref": "#/definitions/__type_38" + "$ref": "#/definitions/__type_39" }, "PopupMenuStyles": { "description": "The styles that can be used to display the popup menus.", @@ -4020,10 +4026,10 @@ "$ref": "#/definitions/__type_19" }, "Record_1": { - "$ref": "#/definitions/__type_50" + "$ref": "#/definitions/__type_51" }, "RectangleByEdgePositions": { - "$ref": "#/definitions/__type_40" + "$ref": "#/definitions/__type_41" }, "ResizeRegion": { "$ref": "#/definitions/__type_11" @@ -6932,6 +6938,55 @@ "type": "object" }, "__type_34": { + "additionalProperties": false, + "properties": { + "conditions": { + "description": "Condition to determine if the item should be shown.", + "items": { + "type": "string" + }, + "type": "array" + }, + "iconUrl": { + "description": "The icon to use to distinguish this entry from others", + "type": "string" + }, + "noEntries": { + "description": "Text to display if there are no entries because conditions have excluded options.", + "type": "string" + }, + "options": { + "description": "List of button options", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Omit_1" + }, + { + "$ref": "#/definitions/Omit_2" + }, + { + "$ref": "#/definitions/Omit_3" + } + ] + }, + "type": "array" + }, + "tooltip": { + "description": "The tooltip to be shown for this button/entry", + "type": "string" + }, + "visible": { + "description": "Is the dock entry visible.", + "type": "boolean" + } + }, + "required": [ + "options" + ], + "type": "object" + }, + "__type_35": { "additionalProperties": false, "properties": { "clientAPIVersion": { @@ -6989,7 +7044,7 @@ }, "type": "object" }, - "__type_35": { + "__type_36": { "additionalProperties": false, "properties": { "name": { @@ -7003,7 +7058,7 @@ }, "type": "object" }, - "__type_36": { + "__type_37": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7048,7 +7103,7 @@ }, "type": "object" }, - "__type_37": { + "__type_38": { "additionalProperties": false, "properties": { "deviceScaleFactor": { @@ -7145,7 +7200,7 @@ ], "type": "object" }, - "__type_38": { + "__type_39": { "additionalProperties": false, "properties": { "x": { @@ -7163,22 +7218,6 @@ ], "type": "object" }, - "__type_39": { - "additionalProperties": false, - "properties": { - "dipRect": { - "$ref": "#/definitions/RectangleByEdgePositions" - }, - "scaledRect": { - "$ref": "#/definitions/RectangleByEdgePositions" - } - }, - "required": [ - "dipRect", - "scaledRect" - ], - "type": "object" - }, "__type_4": { "additionalProperties": false, "description": "Unique identifier for a window, view or iframe.", @@ -7199,6 +7238,22 @@ "type": "object" }, "__type_40": { + "additionalProperties": false, + "properties": { + "dipRect": { + "$ref": "#/definitions/RectangleByEdgePositions" + }, + "scaledRect": { + "$ref": "#/definitions/RectangleByEdgePositions" + } + }, + "required": [ + "dipRect", + "scaledRect" + ], + "type": "object" + }, + "__type_41": { "additionalProperties": false, "properties": { "bottom": { @@ -7222,7 +7277,7 @@ ], "type": "object" }, - "__type_41": { + "__type_42": { "additionalProperties": false, "properties": { "available": { @@ -7280,7 +7335,7 @@ ], "type": "object" }, - "__type_42": { + "__type_43": { "additionalProperties": { "additionalProperties": { "additionalProperties": false, @@ -7311,7 +7366,7 @@ }, "type": "object" }, - "__type_43": { + "__type_44": { "additionalProperties": false, "properties": { "alias": { @@ -7348,11 +7403,11 @@ }, "type": "object" }, - "__type_44": { + "__type_45": { "additionalProperties": false, "type": "object" }, - "__type_45": { + "__type_46": { "additionalProperties": false, "properties": { "publickey": { @@ -7373,7 +7428,7 @@ }, "type": "object" }, - "__type_46": { + "__type_47": { "additionalProperties": false, "properties": { "alias": { @@ -7403,7 +7458,7 @@ }, "type": "object" }, - "__type_47": { + "__type_48": { "additionalProperties": false, "properties": { "height": { @@ -7421,21 +7476,6 @@ }, "type": "object" }, - "__type_48": { - "additionalProperties": false, - "properties": { - "customData": { - "description": "A field that the user can attach serializable data to be ferried around with the window options.\n_When omitted, _inherits_ from the parent application._" - }, - "interop": { - "$ref": "#/definitions/InteropConfig" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, "__type_49": { "additionalProperties": false, "properties": { @@ -7470,6 +7510,17 @@ }, "__type_50": { "additionalProperties": false, + "properties": { + "customData": { + "description": "A field that the user can attach serializable data to be ferried around with the window options.\n_When omitted, _inherits_ from the parent application._" + }, + "interop": { + "$ref": "#/definitions/InteropConfig" + }, + "url": { + "type": "string" + } + }, "type": "object" }, "__type_51": { @@ -7477,6 +7528,10 @@ "type": "object" }, "__type_52": { + "additionalProperties": false, + "type": "object" + }, + "__type_53": { "additionalProperties": false, "properties": { "alias": { diff --git a/how-to/workspace-platform-starter/public/schemas/wps.manifest.schema.json b/how-to/workspace-platform-starter/public/schemas/wps.manifest.schema.json index cfad693751..341158d30c 100644 --- a/how-to/workspace-platform-starter/public/schemas/wps.manifest.schema.json +++ b/how-to/workspace-platform-starter/public/schemas/wps.manifest.schema.json @@ -48,7 +48,7 @@ "$ref": "#/definitions/__type_3" }, "AppAssetInfo": { - "$ref": "#/definitions/__type_52" + "$ref": "#/definitions/__type_53" }, "AppEndpointOptions": { "anyOf": [ @@ -669,7 +669,7 @@ "type": "object" }, "CertificationInfo": { - "$ref": "#/definitions/__type_45" + "$ref": "#/definitions/__type_46" }, "ConditionsProviderOptions": { "$ref": "#/definitions/ModuleList_3", @@ -780,7 +780,7 @@ "$ref": "#/definitions/__type_15" }, "ContextGroupStates": { - "$ref": "#/definitions/__type_42" + "$ref": "#/definitions/__type_43" }, "ContextMenuOptions": { "$ref": "#/definitions/__type_9" @@ -1099,10 +1099,10 @@ }, "Data": {}, "DeepPartial": { - "$ref": "#/definitions/__type_34" + "$ref": "#/definitions/__type_35" }, "DefaultDomainSettings": { - "$ref": "#/definitions/__type_58" + "$ref": "#/definitions/__type_59" }, "DelayStrategy": { "additionalProperties": false, @@ -1153,10 +1153,10 @@ "type": "object" }, "DipScaleRects": { - "$ref": "#/definitions/__type_39" + "$ref": "#/definitions/__type_40" }, "DisplayMetadata_3": { - "$ref": "#/definitions/__type_56" + "$ref": "#/definitions/__type_57" }, "DockButtonAction": { "additionalProperties": false, @@ -1318,6 +1318,9 @@ }, { "$ref": "#/definitions/Omit_2" + }, + { + "$ref": "#/definitions/Omit_3" } ] }, @@ -1633,7 +1636,7 @@ "type": "string" }, "FileDownloadSettings": { - "$ref": "#/definitions/__type_59" + "$ref": "#/definitions/__type_60" }, "GlobalContextMenuOptionType": { "description": "Types of global context menu options, including pre-defined ones.\nUser-defined context menu items should use the value `Custom`", @@ -1777,7 +1780,7 @@ "$ref": "#/definitions/__type_4" }, "Identity_5_1": { - "$ref": "#/definitions/__type_35" + "$ref": "#/definitions/__type_36" }, "Image": { "additionalProperties": false, @@ -1936,16 +1939,16 @@ "type": "object" }, "InteropBrokerOptions": { - "$ref": "#/definitions/__type_55" + "$ref": "#/definitions/__type_56" }, "InteropConfig": { "$ref": "#/definitions/__type_12" }, "InteropLoggingOptions": { - "$ref": "#/definitions/__type_57" + "$ref": "#/definitions/__type_58" }, "LaunchExternalProcessListener": { - "$ref": "#/definitions/__type_44" + "$ref": "#/definitions/__type_45" }, "LaunchPreference": { "additionalProperties": false, @@ -2896,10 +2899,10 @@ "type": "object" }, "MonitorDetails": { - "$ref": "#/definitions/__type_41" + "$ref": "#/definitions/__type_42" }, "MonitorInfo": { - "$ref": "#/definitions/__type_37" + "$ref": "#/definitions/__type_38" }, "NativeLaunchOptions": { "additionalProperties": false, @@ -3038,7 +3041,7 @@ "type": "object" }, "NotificationIndicatorColorsWithScheme": { - "$ref": "#/definitions/__type_51" + "$ref": "#/definitions/__type_52" }, "NotificationProviderOptions": { "additionalProperties": false, @@ -3074,6 +3077,9 @@ "Omit_2": { "$ref": "#/definitions/__type_33" }, + "Omit_3": { + "$ref": "#/definitions/__type_34" + }, "OpenExternalPermission": { "additionalProperties": false, "properties": { @@ -3328,25 +3334,25 @@ "$ref": "#/definitions/__type_2" }, "Partial_10": { - "$ref": "#/definitions/__type_36" + "$ref": "#/definitions/__type_37" }, "Partial_11": { - "$ref": "#/definitions/__type_43" + "$ref": "#/definitions/__type_44" }, "Partial_12": { - "$ref": "#/definitions/__type_46" + "$ref": "#/definitions/__type_47" }, "Partial_13": { - "$ref": "#/definitions/__type_47" + "$ref": "#/definitions/__type_48" }, "Partial_14": { - "$ref": "#/definitions/__type_48" + "$ref": "#/definitions/__type_49" }, "Partial_15": { - "$ref": "#/definitions/__type_49" + "$ref": "#/definitions/__type_50" }, "Partial_16": { - "$ref": "#/definitions/__type_54" + "$ref": "#/definitions/__type_55" }, "Partial_2": { "$ref": "#/definitions/__type_6" @@ -3934,7 +3940,7 @@ "type": "object" }, "Point": { - "$ref": "#/definitions/__type_38" + "$ref": "#/definitions/__type_39" }, "PopupMenuStyles": { "description": "The styles that can be used to display the popup menus.", @@ -4004,10 +4010,10 @@ "$ref": "#/definitions/__type_19" }, "Record_1": { - "$ref": "#/definitions/__type_50" + "$ref": "#/definitions/__type_51" }, "RectangleByEdgePositions": { - "$ref": "#/definitions/__type_40" + "$ref": "#/definitions/__type_41" }, "ResizeRegion": { "$ref": "#/definitions/__type_11" @@ -4117,7 +4123,7 @@ "type": "object" }, "Snapshot": { - "$ref": "#/definitions/__type_53" + "$ref": "#/definitions/__type_54" }, "SnapshotSourceConnection": { "additionalProperties": false, @@ -7212,6 +7218,53 @@ "type": "object" }, "__type_34": { + "additionalProperties": false, + "properties": { + "conditions": { + "description": "Condition to determine if the item should be shown.", + "items": { + "type": "string" + }, + "type": "array" + }, + "iconUrl": { + "description": "The icon to use to distinguish this entry from others", + "type": "string" + }, + "noEntries": { + "description": "Text to display if there are no entries because conditions have excluded options.", + "type": "string" + }, + "options": { + "description": "List of button options", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Omit_1" + }, + { + "$ref": "#/definitions/Omit_2" + }, + { + "$ref": "#/definitions/Omit_3" + } + ] + }, + "type": "array" + }, + "tooltip": { + "description": "The tooltip to be shown for this button/entry", + "type": "string" + }, + "visible": { + "description": "Is the dock entry visible.", + "type": "boolean" + } + }, + "required": ["options"], + "type": "object" + }, + "__type_35": { "additionalProperties": false, "properties": { "clientAPIVersion": { @@ -7269,7 +7322,7 @@ }, "type": "object" }, - "__type_35": { + "__type_36": { "additionalProperties": false, "properties": { "name": { @@ -7283,7 +7336,7 @@ }, "type": "object" }, - "__type_36": { + "__type_37": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7322,7 +7375,7 @@ }, "type": "object" }, - "__type_37": { + "__type_38": { "additionalProperties": false, "properties": { "deviceScaleFactor": { @@ -7413,7 +7466,7 @@ ], "type": "object" }, - "__type_38": { + "__type_39": { "additionalProperties": false, "properties": { "x": { @@ -7428,19 +7481,6 @@ "required": ["x", "y"], "type": "object" }, - "__type_39": { - "additionalProperties": false, - "properties": { - "dipRect": { - "$ref": "#/definitions/RectangleByEdgePositions" - }, - "scaledRect": { - "$ref": "#/definitions/RectangleByEdgePositions" - } - }, - "required": ["dipRect", "scaledRect"], - "type": "object" - }, "__type_4": { "additionalProperties": false, "description": "Unique identifier for a window, view or iframe.", @@ -7458,6 +7498,19 @@ "type": "object" }, "__type_40": { + "additionalProperties": false, + "properties": { + "dipRect": { + "$ref": "#/definitions/RectangleByEdgePositions" + }, + "scaledRect": { + "$ref": "#/definitions/RectangleByEdgePositions" + } + }, + "required": ["dipRect", "scaledRect"], + "type": "object" + }, + "__type_41": { "additionalProperties": false, "properties": { "bottom": { @@ -7476,7 +7529,7 @@ "required": ["bottom", "left", "right", "top"], "type": "object" }, - "__type_41": { + "__type_42": { "additionalProperties": false, "properties": { "available": { @@ -7528,7 +7581,7 @@ ], "type": "object" }, - "__type_42": { + "__type_43": { "additionalProperties": { "additionalProperties": { "additionalProperties": false, @@ -7557,7 +7610,7 @@ }, "type": "object" }, - "__type_43": { + "__type_44": { "additionalProperties": false, "properties": { "alias": { @@ -7594,11 +7647,11 @@ }, "type": "object" }, - "__type_44": { + "__type_45": { "additionalProperties": false, "type": "object" }, - "__type_45": { + "__type_46": { "additionalProperties": false, "properties": { "publickey": { @@ -7619,7 +7672,7 @@ }, "type": "object" }, - "__type_46": { + "__type_47": { "additionalProperties": false, "properties": { "alias": { @@ -7649,7 +7702,7 @@ }, "type": "object" }, - "__type_47": { + "__type_48": { "additionalProperties": false, "properties": { "height": { @@ -7667,21 +7720,6 @@ }, "type": "object" }, - "__type_48": { - "additionalProperties": false, - "properties": { - "customData": { - "description": "A field that the user can attach serializable data to be ferried around with the window options.\n_When omitted, _inherits_ from the parent application._" - }, - "interop": { - "$ref": "#/definitions/InteropConfig" - }, - "url": { - "type": "string" - } - }, - "type": "object" - }, "__type_49": { "additionalProperties": false, "properties": { @@ -7714,6 +7752,17 @@ }, "__type_50": { "additionalProperties": false, + "properties": { + "customData": { + "description": "A field that the user can attach serializable data to be ferried around with the window options.\n_When omitted, _inherits_ from the parent application._" + }, + "interop": { + "$ref": "#/definitions/InteropConfig" + }, + "url": { + "type": "string" + } + }, "type": "object" }, "__type_51": { @@ -7721,6 +7770,10 @@ "type": "object" }, "__type_52": { + "additionalProperties": false, + "type": "object" + }, + "__type_53": { "additionalProperties": false, "properties": { "alias": { @@ -7751,7 +7804,7 @@ "required": ["alias", "src", "version"], "type": "object" }, - "__type_53": { + "__type_54": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7791,7 +7844,7 @@ "required": ["windows"], "type": "object" }, - "__type_54": { + "__type_55": { "additionalProperties": false, "properties": { "_internalWorkspaceData": {}, @@ -8091,7 +8144,7 @@ }, "type": "object" }, - "__type_55": { + "__type_56": { "additionalProperties": false, "properties": { "contextGroups": { @@ -8119,7 +8172,7 @@ }, "type": "object" }, - "__type_56": { + "__type_57": { "additionalProperties": false, "description": "The display data for a context group.", "properties": { @@ -8138,7 +8191,7 @@ }, "type": "object" }, - "__type_57": { + "__type_58": { "additionalProperties": false, "properties": { "afterAction": { @@ -8167,7 +8220,7 @@ "required": ["afterAction", "beforeAction"], "type": "object" }, - "__type_58": { + "__type_59": { "additionalProperties": false, "properties": { "rules": { @@ -8200,32 +8253,6 @@ "required": ["rules"], "type": "object" }, - "__type_59": { - "additionalProperties": false, - "properties": { - "rules": { - "items": { - "additionalProperties": false, - "properties": { - "behavior": { - "$ref": "#/definitions/FileDownloadBehaviorNames" - }, - "match": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": ["behavior", "match"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["rules"], - "type": "object" - }, "__type_6": { "additionalProperties": false, "properties": { @@ -8522,6 +8549,32 @@ }, "type": "object" }, + "__type_60": { + "additionalProperties": false, + "properties": { + "rules": { + "items": { + "additionalProperties": false, + "properties": { + "behavior": { + "$ref": "#/definitions/FileDownloadBehaviorNames" + }, + "match": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": ["behavior", "match"], + "type": "object" + }, + "type": "array" + } + }, + "required": ["rules"], + "type": "object" + }, "__type_7": { "additionalProperties": false, "properties": {