From 2f804ae812a5900e8f3150a7d95057247ec73dd2 Mon Sep 17 00:00:00 2001 From: Martyn Janes Date: Thu, 11 Jan 2024 13:00:40 +0200 Subject: [PATCH] Add support for tags in submenus --- .../src/framework/shapes/dock-shapes.ts | 7 +- .../client/src/framework/workspace/dock.ts | 109 +++---- .../types/module/shapes/dock-shapes.d.ts | 7 +- .../public/schemas/settings.schema.json | 188 +++++++----- .../public/schemas/wps.manifest.schema.json | 267 +++++++++++------- 5 files changed, 329 insertions(+), 249 deletions(-) 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 f724e52937..2db0395687 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,12 @@ export interface DockButtonDropdown extends DockButtonBase { /** * List of button options */ - options: (Omit | Omit | Omit)[]; + options: ( + | Omit + | 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 26482ad0ad..dd6b3e8c33 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 @@ -1,7 +1,6 @@ import { Dock, DockButtonNames, - type CustomActionSpecifier, type CustomButtonConfig, type CustomDropdownConfig, type DockButton, @@ -189,7 +188,7 @@ async function buildButtons(): Promise { const entries = Array.isArray(dockProviderOptions.entries) ? [...dockProviderOptions.entries] : []; usedConditions.clear(); - return buildButtonsFromEntries(entries, true); + return buildButtonsFromEntries(entries); } return []; @@ -198,13 +197,9 @@ 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[], - isTopLevel: boolean -): Promise { +async function buildButtonsFromEntries(entries: DockButtonTypes[]): Promise { const buttons: DockButton[] = []; const iconFolder = await getCurrentIconFolder(); @@ -225,9 +220,9 @@ async function buildButtonsFromEntries( if ("appId" in entry) { await addEntryAsApp(buttons, entry, iconFolder, colorSchemeMode); } else if ("action" in entry) { - await addEntryAsAction(buttons, entry, iconFolder, colorSchemeMode, isTopLevel); + await addEntryAsAction(buttons, entry, iconFolder, colorSchemeMode); } else if ("options" in entry) { - await addEntriesAsDropdown(buttons, entry, iconFolder, colorSchemeMode, isTopLevel, platform); + await addEntriesAsDropdown(buttons, entry, iconFolder, colorSchemeMode, platform); } else if ("tags" in entry) { await addEntriesByAppTag(buttons, entry, iconFolder, colorSchemeMode); } @@ -246,7 +241,7 @@ async function buildButtonsFromEntries( */ async function addEntryAsApp( buttons: DockButton[], - entry: DockButtonApp, + entry: Omit & { id?: string }, iconFolder: string, colorSchemeMode: ColorSchemeMode ): Promise { @@ -289,19 +284,15 @@ async function addEntryAsApp( * @param entry The entry details. * @param iconFolder The folder for icons. * @param colorSchemeMode The color scheme - * @param isTopLevel Is this a top level entry. */ async function addEntryAsAction( buttons: DockButton[], - entry: DockButtonAction, + entry: Omit & { id?: string }, iconFolder: string, - colorSchemeMode: ColorSchemeMode, - isTopLevel: boolean + colorSchemeMode: ColorSchemeMode ): Promise { 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, @@ -319,25 +310,21 @@ 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( buttons: DockButton[], - entry: DockButtonDropdown, + entry: Omit & { id?: string }, 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)) { 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 | CustomDropdownConfig)[] = []; + const opts: DockButton[] = []; for (const option of entry.options) { if (Array.isArray(option.conditions)) { @@ -352,70 +339,46 @@ async function addEntriesAsDropdown( customData: { ...option, id: "" } }) ) { - 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 - }); - } - } + const subOptions = await buildButtonsFromEntries(option.options as DockButtonTypes[]); + + opts.push({ + type: DockButtonNames.DropdownButton, + tooltip: option.tooltip ?? "", + iconUrl: option.iconUrl, + options: subOptions + }); } else if ("appId" in option) { // If the options has an appId we are going to launch that // otherwise we use the custom action. const app = await getApp(option.appId); + let iconUrl = option.iconUrl; if (!isStringValue(option.iconUrl) && app) { iconUrl = getAppIcon(app); } - // If the tooltip is not set we can use the app title - if (!isStringValue(optionTooltip)) { - optionTooltip = app?.title ?? ""; - } - action = { - id: PLATFORM_ACTION_IDS.launchApp, - customData: { - source: "dock", - appId: option.appId - } - }; - } else if (!isStringValue(optionTooltip)) { - logger.error("You must specify the tooltip for a DockButtonAction in a DockButtonDropdown"); - } else { - action = option.action; - iconUrl = option.iconUrl; - } - - if (!isEmpty(action)) { opts.push({ - tooltip: optionTooltip ?? "", + type: DockButtonNames.ActionButton, + tooltip: option.tooltip ?? app?.title ?? "", iconUrl, - action + action: { + id: PLATFORM_ACTION_IDS.launchApp, + customData: { + source: "dock", + appId: option.appId + } + } }); - } else if (!isEmpty(subOptions)) { + } else if ("tags" in option) { + await addEntriesByAppTag(opts, option, iconFolder, colorSchemeMode); + } else if ("action" in option) { opts.push({ - tooltip: optionTooltip ?? "", - iconUrl, - options: subOptions + type: DockButtonNames.ActionButton, + tooltip: option.tooltip ?? "", + iconUrl: option.iconUrl, + action: option.action }); } } @@ -451,7 +414,7 @@ async function addEntriesAsDropdown( */ async function addEntriesByAppTag( buttons: DockButton[], - entry: DockButtonAppsByTag, + entry: Omit & { id?: string }, iconFolder: string, colorSchemeMode: ColorSchemeMode ): Promise { @@ -695,7 +658,7 @@ function getAppIcon(app: PlatformApp): string | undefined { * @returns The dock entry. */ async function addDropdownOrMenu( - id: string, + id: string | undefined, tooltip: string, iconUrl: string | undefined, options: (CustomButtonConfig | CustomDropdownConfig)[] 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 db3d10dd88..586b95902f 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,12 @@ export interface DockButtonDropdown extends DockButtonBase { /** * List of button options */ - options: (Omit | Omit | Omit)[]; + options: ( + | Omit + | 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/schemas/settings.schema.json b/how-to/workspace-platform-starter/public/schemas/settings.schema.json index f66f000296..bb9d97aa38 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_53" + "$ref": "#/definitions/__type_54" }, "AppEndpointOptions": { "anyOf": [ @@ -713,7 +713,7 @@ "type": "object" }, "CertificationInfo": { - "$ref": "#/definitions/__type_46" + "$ref": "#/definitions/__type_47" }, "ConditionsProviderOptions": { "$ref": "#/definitions/ModuleList_3", @@ -831,7 +831,7 @@ "$ref": "#/definitions/__type_15" }, "ContextGroupStates": { - "$ref": "#/definitions/__type_43" + "$ref": "#/definitions/__type_44" }, "ContextMenuOptions": { "$ref": "#/definitions/__type_9" @@ -1162,7 +1162,7 @@ }, "Data": {}, "DeepPartial": { - "$ref": "#/definitions/__type_35" + "$ref": "#/definitions/__type_36" }, "DelayStrategy": { "additionalProperties": false, @@ -1219,7 +1219,7 @@ "type": "object" }, "DipScaleRects": { - "$ref": "#/definitions/__type_40" + "$ref": "#/definitions/__type_41" }, "DockButtonAction": { "additionalProperties": false, @@ -1398,6 +1398,9 @@ }, { "$ref": "#/definitions/Omit_3" + }, + { + "$ref": "#/definitions/Omit_4" } ] }, @@ -1907,7 +1910,7 @@ "$ref": "#/definitions/__type_4" }, "Identity_5_1": { - "$ref": "#/definitions/__type_36" + "$ref": "#/definitions/__type_37" }, "Image": { "additionalProperties": false, @@ -2077,7 +2080,7 @@ "$ref": "#/definitions/__type_12" }, "LaunchExternalProcessListener": { - "$ref": "#/definitions/__type_45" + "$ref": "#/definitions/__type_46" }, "LaunchPreference": { "additionalProperties": false, @@ -3111,10 +3114,10 @@ "type": "object" }, "MonitorDetails": { - "$ref": "#/definitions/__type_42" + "$ref": "#/definitions/__type_43" }, "MonitorInfo": { - "$ref": "#/definitions/__type_38" + "$ref": "#/definitions/__type_39" }, "NativeLaunchOptions": { "additionalProperties": false, @@ -3261,7 +3264,7 @@ "type": "object" }, "NotificationIndicatorColorsWithScheme": { - "$ref": "#/definitions/__type_52" + "$ref": "#/definitions/__type_53" }, "NotificationProviderOptions": { "additionalProperties": false, @@ -3304,6 +3307,9 @@ "Omit_3": { "$ref": "#/definitions/__type_34" }, + "Omit_4": { + "$ref": "#/definitions/__type_35" + }, "OpenExternalPermission": { "additionalProperties": false, "properties": { @@ -3592,22 +3598,22 @@ "$ref": "#/definitions/__type_2" }, "Partial_10": { - "$ref": "#/definitions/__type_37" + "$ref": "#/definitions/__type_38" }, "Partial_11": { - "$ref": "#/definitions/__type_44" + "$ref": "#/definitions/__type_45" }, "Partial_12": { - "$ref": "#/definitions/__type_47" + "$ref": "#/definitions/__type_48" }, "Partial_13": { - "$ref": "#/definitions/__type_48" + "$ref": "#/definitions/__type_49" }, "Partial_14": { - "$ref": "#/definitions/__type_49" + "$ref": "#/definitions/__type_50" }, "Partial_15": { - "$ref": "#/definitions/__type_50" + "$ref": "#/definitions/__type_51" }, "Partial_2": { "$ref": "#/definitions/__type_6" @@ -3950,7 +3956,7 @@ "type": "object" }, "Point": { - "$ref": "#/definitions/__type_39" + "$ref": "#/definitions/__type_40" }, "PopupMenuStyles": { "description": "The styles that can be used to display the popup menus.", @@ -4026,10 +4032,10 @@ "$ref": "#/definitions/__type_19" }, "Record_1": { - "$ref": "#/definitions/__type_51" + "$ref": "#/definitions/__type_52" }, "RectangleByEdgePositions": { - "$ref": "#/definitions/__type_41" + "$ref": "#/definitions/__type_42" }, "ResizeRegion": { "$ref": "#/definitions/__type_11" @@ -6861,6 +6867,53 @@ "type": "object" }, "__type_32": { + "additionalProperties": false, + "properties": { + "conditions": { + "description": "Condition to determine if the item should be shown.", + "items": { + "type": "string" + }, + "type": "array" + }, + "display": { + "description": "Should this entry show a single app or a group of apps.", + "enum": [ + "group", + "individual" + ], + "type": "string" + }, + "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 there are no tagged apps.", + "type": "string" + }, + "tags": { + "description": "The tags to use to find the single app or a collection of apps that need to be listed. This will be compared\nagainst the tags associated with apps returned from the app data sources.", + "items": { + "type": "string" + }, + "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": [ + "display" + ], + "type": "object" + }, + "__type_33": { "additionalProperties": false, "properties": { "appId": { @@ -6892,7 +6945,7 @@ ], "type": "object" }, - "__type_33": { + "__type_34": { "additionalProperties": false, "properties": { "action": { @@ -6937,7 +6990,7 @@ ], "type": "object" }, - "__type_34": { + "__type_35": { "additionalProperties": false, "properties": { "conditions": { @@ -6967,6 +7020,9 @@ }, { "$ref": "#/definitions/Omit_3" + }, + { + "$ref": "#/definitions/Omit_4" } ] }, @@ -6986,7 +7042,7 @@ ], "type": "object" }, - "__type_35": { + "__type_36": { "additionalProperties": false, "properties": { "clientAPIVersion": { @@ -7044,7 +7100,7 @@ }, "type": "object" }, - "__type_36": { + "__type_37": { "additionalProperties": false, "properties": { "name": { @@ -7058,7 +7114,7 @@ }, "type": "object" }, - "__type_37": { + "__type_38": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7103,7 +7159,7 @@ }, "type": "object" }, - "__type_38": { + "__type_39": { "additionalProperties": false, "properties": { "deviceScaleFactor": { @@ -7200,24 +7256,6 @@ ], "type": "object" }, - "__type_39": { - "additionalProperties": false, - "properties": { - "x": { - "description": "The mouse x position", - "type": "number" - }, - "y": { - "description": "The mouse y position", - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": "object" - }, "__type_4": { "additionalProperties": false, "description": "Unique identifier for a window, view or iframe.", @@ -7238,6 +7276,24 @@ "type": "object" }, "__type_40": { + "additionalProperties": false, + "properties": { + "x": { + "description": "The mouse x position", + "type": "number" + }, + "y": { + "description": "The mouse y position", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "__type_41": { "additionalProperties": false, "properties": { "dipRect": { @@ -7253,7 +7309,7 @@ ], "type": "object" }, - "__type_41": { + "__type_42": { "additionalProperties": false, "properties": { "bottom": { @@ -7277,7 +7333,7 @@ ], "type": "object" }, - "__type_42": { + "__type_43": { "additionalProperties": false, "properties": { "available": { @@ -7335,7 +7391,7 @@ ], "type": "object" }, - "__type_43": { + "__type_44": { "additionalProperties": { "additionalProperties": { "additionalProperties": false, @@ -7366,7 +7422,7 @@ }, "type": "object" }, - "__type_44": { + "__type_45": { "additionalProperties": false, "properties": { "alias": { @@ -7403,11 +7459,11 @@ }, "type": "object" }, - "__type_45": { + "__type_46": { "additionalProperties": false, "type": "object" }, - "__type_46": { + "__type_47": { "additionalProperties": false, "properties": { "publickey": { @@ -7428,7 +7484,7 @@ }, "type": "object" }, - "__type_47": { + "__type_48": { "additionalProperties": false, "properties": { "alias": { @@ -7458,7 +7514,7 @@ }, "type": "object" }, - "__type_48": { + "__type_49": { "additionalProperties": false, "properties": { "height": { @@ -7476,21 +7532,6 @@ }, "type": "object" }, - "__type_49": { - "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_5": { "additionalProperties": false, "description": "Configures how new content (e,g, from `window.open` or a link) is opened.", @@ -7525,6 +7566,17 @@ }, "__type_51": { "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_52": { @@ -7532,6 +7584,10 @@ "type": "object" }, "__type_53": { + "additionalProperties": false, + "type": "object" + }, + "__type_54": { "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 341158d30c..1538299345 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_53" + "$ref": "#/definitions/__type_54" }, "AppEndpointOptions": { "anyOf": [ @@ -669,7 +669,7 @@ "type": "object" }, "CertificationInfo": { - "$ref": "#/definitions/__type_46" + "$ref": "#/definitions/__type_47" }, "ConditionsProviderOptions": { "$ref": "#/definitions/ModuleList_3", @@ -780,7 +780,7 @@ "$ref": "#/definitions/__type_15" }, "ContextGroupStates": { - "$ref": "#/definitions/__type_43" + "$ref": "#/definitions/__type_44" }, "ContextMenuOptions": { "$ref": "#/definitions/__type_9" @@ -1099,10 +1099,10 @@ }, "Data": {}, "DeepPartial": { - "$ref": "#/definitions/__type_35" + "$ref": "#/definitions/__type_36" }, "DefaultDomainSettings": { - "$ref": "#/definitions/__type_59" + "$ref": "#/definitions/__type_60" }, "DelayStrategy": { "additionalProperties": false, @@ -1153,10 +1153,10 @@ "type": "object" }, "DipScaleRects": { - "$ref": "#/definitions/__type_40" + "$ref": "#/definitions/__type_41" }, "DisplayMetadata_3": { - "$ref": "#/definitions/__type_57" + "$ref": "#/definitions/__type_58" }, "DockButtonAction": { "additionalProperties": false, @@ -1321,6 +1321,9 @@ }, { "$ref": "#/definitions/Omit_3" + }, + { + "$ref": "#/definitions/Omit_4" } ] }, @@ -1636,7 +1639,7 @@ "type": "string" }, "FileDownloadSettings": { - "$ref": "#/definitions/__type_60" + "$ref": "#/definitions/__type_61" }, "GlobalContextMenuOptionType": { "description": "Types of global context menu options, including pre-defined ones.\nUser-defined context menu items should use the value `Custom`", @@ -1780,7 +1783,7 @@ "$ref": "#/definitions/__type_4" }, "Identity_5_1": { - "$ref": "#/definitions/__type_36" + "$ref": "#/definitions/__type_37" }, "Image": { "additionalProperties": false, @@ -1939,16 +1942,16 @@ "type": "object" }, "InteropBrokerOptions": { - "$ref": "#/definitions/__type_56" + "$ref": "#/definitions/__type_57" }, "InteropConfig": { "$ref": "#/definitions/__type_12" }, "InteropLoggingOptions": { - "$ref": "#/definitions/__type_58" + "$ref": "#/definitions/__type_59" }, "LaunchExternalProcessListener": { - "$ref": "#/definitions/__type_45" + "$ref": "#/definitions/__type_46" }, "LaunchPreference": { "additionalProperties": false, @@ -2899,10 +2902,10 @@ "type": "object" }, "MonitorDetails": { - "$ref": "#/definitions/__type_42" + "$ref": "#/definitions/__type_43" }, "MonitorInfo": { - "$ref": "#/definitions/__type_38" + "$ref": "#/definitions/__type_39" }, "NativeLaunchOptions": { "additionalProperties": false, @@ -3041,7 +3044,7 @@ "type": "object" }, "NotificationIndicatorColorsWithScheme": { - "$ref": "#/definitions/__type_52" + "$ref": "#/definitions/__type_53" }, "NotificationProviderOptions": { "additionalProperties": false, @@ -3080,6 +3083,9 @@ "Omit_3": { "$ref": "#/definitions/__type_34" }, + "Omit_4": { + "$ref": "#/definitions/__type_35" + }, "OpenExternalPermission": { "additionalProperties": false, "properties": { @@ -3334,25 +3340,25 @@ "$ref": "#/definitions/__type_2" }, "Partial_10": { - "$ref": "#/definitions/__type_37" + "$ref": "#/definitions/__type_38" }, "Partial_11": { - "$ref": "#/definitions/__type_44" + "$ref": "#/definitions/__type_45" }, "Partial_12": { - "$ref": "#/definitions/__type_47" + "$ref": "#/definitions/__type_48" }, "Partial_13": { - "$ref": "#/definitions/__type_48" + "$ref": "#/definitions/__type_49" }, "Partial_14": { - "$ref": "#/definitions/__type_49" + "$ref": "#/definitions/__type_50" }, "Partial_15": { - "$ref": "#/definitions/__type_50" + "$ref": "#/definitions/__type_51" }, "Partial_16": { - "$ref": "#/definitions/__type_55" + "$ref": "#/definitions/__type_56" }, "Partial_2": { "$ref": "#/definitions/__type_6" @@ -3940,7 +3946,7 @@ "type": "object" }, "Point": { - "$ref": "#/definitions/__type_39" + "$ref": "#/definitions/__type_40" }, "PopupMenuStyles": { "description": "The styles that can be used to display the popup menus.", @@ -4010,10 +4016,10 @@ "$ref": "#/definitions/__type_19" }, "Record_1": { - "$ref": "#/definitions/__type_51" + "$ref": "#/definitions/__type_52" }, "RectangleByEdgePositions": { - "$ref": "#/definitions/__type_41" + "$ref": "#/definitions/__type_42" }, "ResizeRegion": { "$ref": "#/definitions/__type_11" @@ -4123,7 +4129,7 @@ "type": "object" }, "Snapshot": { - "$ref": "#/definitions/__type_54" + "$ref": "#/definitions/__type_55" }, "SnapshotSourceConnection": { "additionalProperties": false, @@ -7147,6 +7153,48 @@ "type": "object" }, "__type_32": { + "additionalProperties": false, + "properties": { + "conditions": { + "description": "Condition to determine if the item should be shown.", + "items": { + "type": "string" + }, + "type": "array" + }, + "display": { + "description": "Should this entry show a single app or a group of apps.", + "enum": ["group", "individual"], + "type": "string" + }, + "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 there are no tagged apps.", + "type": "string" + }, + "tags": { + "description": "The tags to use to find the single app or a collection of apps that need to be listed. This will be compared\nagainst the tags associated with apps returned from the app data sources.", + "items": { + "type": "string" + }, + "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": ["display"], + "type": "object" + }, + "__type_33": { "additionalProperties": false, "properties": { "appId": { @@ -7176,7 +7224,7 @@ "required": ["appId"], "type": "object" }, - "__type_33": { + "__type_34": { "additionalProperties": false, "properties": { "action": { @@ -7217,7 +7265,7 @@ "required": ["action"], "type": "object" }, - "__type_34": { + "__type_35": { "additionalProperties": false, "properties": { "conditions": { @@ -7247,6 +7295,9 @@ }, { "$ref": "#/definitions/Omit_3" + }, + { + "$ref": "#/definitions/Omit_4" } ] }, @@ -7264,7 +7315,7 @@ "required": ["options"], "type": "object" }, - "__type_35": { + "__type_36": { "additionalProperties": false, "properties": { "clientAPIVersion": { @@ -7322,7 +7373,7 @@ }, "type": "object" }, - "__type_36": { + "__type_37": { "additionalProperties": false, "properties": { "name": { @@ -7336,7 +7387,7 @@ }, "type": "object" }, - "__type_37": { + "__type_38": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7375,7 +7426,7 @@ }, "type": "object" }, - "__type_38": { + "__type_39": { "additionalProperties": false, "properties": { "deviceScaleFactor": { @@ -7466,21 +7517,6 @@ ], "type": "object" }, - "__type_39": { - "additionalProperties": false, - "properties": { - "x": { - "description": "The mouse x position", - "type": "number" - }, - "y": { - "description": "The mouse y position", - "type": "number" - } - }, - "required": ["x", "y"], - "type": "object" - }, "__type_4": { "additionalProperties": false, "description": "Unique identifier for a window, view or iframe.", @@ -7498,6 +7534,21 @@ "type": "object" }, "__type_40": { + "additionalProperties": false, + "properties": { + "x": { + "description": "The mouse x position", + "type": "number" + }, + "y": { + "description": "The mouse y position", + "type": "number" + } + }, + "required": ["x", "y"], + "type": "object" + }, + "__type_41": { "additionalProperties": false, "properties": { "dipRect": { @@ -7510,7 +7561,7 @@ "required": ["dipRect", "scaledRect"], "type": "object" }, - "__type_41": { + "__type_42": { "additionalProperties": false, "properties": { "bottom": { @@ -7529,7 +7580,7 @@ "required": ["bottom", "left", "right", "top"], "type": "object" }, - "__type_42": { + "__type_43": { "additionalProperties": false, "properties": { "available": { @@ -7581,7 +7632,7 @@ ], "type": "object" }, - "__type_43": { + "__type_44": { "additionalProperties": { "additionalProperties": { "additionalProperties": false, @@ -7610,7 +7661,7 @@ }, "type": "object" }, - "__type_44": { + "__type_45": { "additionalProperties": false, "properties": { "alias": { @@ -7647,11 +7698,11 @@ }, "type": "object" }, - "__type_45": { + "__type_46": { "additionalProperties": false, "type": "object" }, - "__type_46": { + "__type_47": { "additionalProperties": false, "properties": { "publickey": { @@ -7672,7 +7723,7 @@ }, "type": "object" }, - "__type_47": { + "__type_48": { "additionalProperties": false, "properties": { "alias": { @@ -7702,7 +7753,7 @@ }, "type": "object" }, - "__type_48": { + "__type_49": { "additionalProperties": false, "properties": { "height": { @@ -7720,21 +7771,6 @@ }, "type": "object" }, - "__type_49": { - "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_5": { "additionalProperties": false, "description": "Configures how new content (e,g, from `window.open` or a link) is opened.", @@ -7767,6 +7803,17 @@ }, "__type_51": { "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_52": { @@ -7774,6 +7821,10 @@ "type": "object" }, "__type_53": { + "additionalProperties": false, + "type": "object" + }, + "__type_54": { "additionalProperties": false, "properties": { "alias": { @@ -7804,7 +7855,7 @@ "required": ["alias", "src", "version"], "type": "object" }, - "__type_54": { + "__type_55": { "additionalProperties": false, "properties": { "interopSnapshotDetails": { @@ -7844,7 +7895,7 @@ "required": ["windows"], "type": "object" }, - "__type_55": { + "__type_56": { "additionalProperties": false, "properties": { "_internalWorkspaceData": {}, @@ -8144,7 +8195,7 @@ }, "type": "object" }, - "__type_56": { + "__type_57": { "additionalProperties": false, "properties": { "contextGroups": { @@ -8172,7 +8223,7 @@ }, "type": "object" }, - "__type_57": { + "__type_58": { "additionalProperties": false, "description": "The display data for a context group.", "properties": { @@ -8191,7 +8242,7 @@ }, "type": "object" }, - "__type_58": { + "__type_59": { "additionalProperties": false, "properties": { "afterAction": { @@ -8220,39 +8271,6 @@ "required": ["afterAction", "beforeAction"], "type": "object" }, - "__type_59": { - "additionalProperties": false, - "properties": { - "rules": { - "items": { - "additionalProperties": false, - "properties": { - "match": { - "items": { - "type": "string" - }, - "type": "array" - }, - "options": { - "additionalProperties": false, - "properties": { - "downloadSettings": { - "$ref": "#/definitions/FileDownloadSettings" - } - }, - "required": ["downloadSettings"], - "type": "object" - } - }, - "required": ["match", "options"], - "type": "object" - }, - "type": "array" - } - }, - "required": ["rules"], - "type": "object" - }, "__type_6": { "additionalProperties": false, "properties": { @@ -8550,6 +8568,39 @@ "type": "object" }, "__type_60": { + "additionalProperties": false, + "properties": { + "rules": { + "items": { + "additionalProperties": false, + "properties": { + "match": { + "items": { + "type": "string" + }, + "type": "array" + }, + "options": { + "additionalProperties": false, + "properties": { + "downloadSettings": { + "$ref": "#/definitions/FileDownloadSettings" + } + }, + "required": ["downloadSettings"], + "type": "object" + } + }, + "required": ["match", "options"], + "type": "object" + }, + "type": "array" + } + }, + "required": ["rules"], + "type": "object" + }, + "__type_61": { "additionalProperties": false, "properties": { "rules": {