diff --git a/src/Umbraco.Web.UI.Client/.storybook/preview.js b/src/Umbraco.Web.UI.Client/.storybook/preview.js index 42f76464dc..4d309febf7 100644 --- a/src/Umbraco.Web.UI.Client/.storybook/preview.js +++ b/src/Umbraco.Web.UI.Client/.storybook/preview.js @@ -20,6 +20,7 @@ import { UmbIconRegistry } from '../src/packages/core/icon-registry/icon.registr import { UmbLitElement } from '../src/packages/core/lit-element'; import { umbLocalizationRegistry } from '../src/packages/core/localization'; import customElementManifests from '../dist-cms/custom-elements.json'; +import icons from '../src/packages/core/icon-registry/icons/icons'; import '../src/libs/context-api/provide/context-provider.element'; import '../src/packages/core/components'; @@ -36,6 +37,7 @@ class UmbStoryBookElement extends UmbLitElement { constructor() { super(); + this._umbIconRegistry.setIcons(icons); this._umbIconRegistry.attach(this); this._registerExtensions(documentManifests); new UmbModalManagerContext(this); diff --git a/src/Umbraco.Web.UI.Client/devops/icons/index.js b/src/Umbraco.Web.UI.Client/devops/icons/index.js index 909ee19094..10d3f84060 100644 --- a/src/Umbraco.Web.UI.Client/devops/icons/index.js +++ b/src/Umbraco.Web.UI.Client/devops/icons/index.js @@ -18,11 +18,10 @@ const run = async () => { var icons = await collectDictionaryIcons(); icons = await collectDiskIcons(icons); writeIconsToDisk(icons); - generateJSON(icons); + generateJS(icons); }; const collectDictionaryIcons = async () => { - const rawData = readFileSync(iconMapJson); const fileRaw = rawData.toString(); const fileJSON = JSON.parse(fileRaw); @@ -32,11 +31,11 @@ const collectDictionaryIcons = async () => { // Lucide: fileJSON.lucide.forEach((iconDef) => { if (iconDef.file && iconDef.name) { - const path = lucideSvgDirectory + "/" + iconDef.file; + const path = lucideSvgDirectory + '/' + iconDef.file; try { const rawData = readFileSync(path); - // For Lucide icons specially we adjust the icons a bit for them to work in our case: + // For Lucide icons specially we adjust the icons a bit for them to work in our case: [NL] let svg = rawData.toString().replace(' width="24"\n', ''); svg = svg.replace(' height="24"\n', ''); svg = svg.replace('stroke-width="2"', 'stroke-width="1.75"'); @@ -60,11 +59,11 @@ const collectDictionaryIcons = async () => { // SimpleIcons: fileJSON.simpleIcons.forEach((iconDef) => { if (iconDef.file && iconDef.name) { - const path = simpleIconsSvgDirectory + "/" + iconDef.file; + const path = simpleIconsSvgDirectory + '/' + iconDef.file; try { const rawData = readFileSync(path); - let svg = rawData.toString() + let svg = rawData.toString(); const iconFileName = iconDef.name; // SimpleIcons need to use fill="currentColor" @@ -91,11 +90,11 @@ const collectDictionaryIcons = async () => { // Umbraco: fileJSON.umbraco.forEach((iconDef) => { if (iconDef.file && iconDef.name) { - const path = umbracoSvgDirectory + "/" + iconDef.file; + const path = umbracoSvgDirectory + '/' + iconDef.file; try { const rawData = readFileSync(path); - const svg = rawData.toString() + const svg = rawData.toString(); const iconFileName = iconDef.name; const icon = { @@ -136,8 +135,7 @@ const collectDiskIcons = async (icons) => { const iconName = iconFileName; // Only append not already defined icons: - if (!icons.find(x => x.name === iconName)) { - + if (!icons.find((x) => x.name === iconName)) { const icon = { name: iconName, legacy: true, @@ -169,20 +167,20 @@ const writeIconsToDisk = (icons) => { }); }; -const generateJSON = (icons) => { - const JSONPath = `${iconsOutputDirectory}/icons.json`; +const generateJS = (icons) => { + const JSPath = `${iconsOutputDirectory}/icons.ts`; const iconDescriptors = icons.map((icon) => { - return { - name: icon.name, - legacy: icon.legacy, - path: `./icons/${icon.fileName}.js`, - }; + return `{ + name: "${icon.name}", + ${icon.legacy ? 'legacy: true,' : ''} + path: "./icons/${icon.fileName}.js", + }`.replace(/\t/g, ''); // Regex removes white space [NL] }); - const content = `${JSON.stringify(iconDescriptors)}`; + const content = `export default [${iconDescriptors.join(',')}];`; - writeFileWithDir(JSONPath, content, (err) => { + writeFileWithDir(JSPath, content, (err) => { if (err) { // eslint-disable-next-line no-undef console.log(err); diff --git a/src/Umbraco.Web.UI.Client/devops/icons/todo_implement_this_data_thesaurus.json b/src/Umbraco.Web.UI.Client/devops/icons/todo_implement_this_data_thesaurus.json new file mode 100644 index 0000000000..2573d281d8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/devops/icons/todo_implement_this_data_thesaurus.json @@ -0,0 +1,5699 @@ +{ + "$schema": "./thesaurus.schema.json", + "icon-zoom-out": { + "thesaurus": [ + "magnifying glass", + "shrink", + "smaller" + ], + "group": "action zoom", + "related": [ + "icon-zoom-in" + ] + }, + "icon-truck": { + "thesaurus": [ + "lorry", + "vehicle", + "van", + "shipping", + "delivery" + ], + "group": "transport vehicle", + "related": [ + "icon-shipping" + ] + }, + "icon-zoom-in": { + "thesaurus": [ + "magnifying glass", + "grow", + "bigger" + ], + "group": "action zoom", + "related": [ + "icon-zoom-out" + ] + }, + "icon-zip": { + "thesaurus": [ + "zipper" + ], + "group": "file", + "related": [] + }, + "icon-axis-rotation": { + "thesaurus": [ + "refresh", + "recycle", + "sync" + ], + "group": "action rotate", + "related": [ + "icon-sync", + "icon-axis-rotation-2", + "icon-axis-rotation-3", + "icon-refresh" + ] + }, + "icon-yen-bag": { + "thesaurus": [ + "cash", + "swag" + ], + "group": "item money bag", + "related": [] + }, + "icon-axis-rotation-2": { + "thesaurus": [ + "refresh", + "recycle", + "sync" + ], + "group": "action rotate", + "related": [ + "icon-axis-rotation", + "icon-axis-rotation-3", + "icon-sync", + "icon-refresh" + ] + }, + "icon-axis-rotation-3": { + "thesaurus": [ + "refresh", + "recycle" + ], + "group": "action rotate", + "related": [ + "icon-axis-rotation", + "icon-axis-rotation-2", + "icon-refresh" + ] + }, + "icon-wrench": { + "thesaurus": [ + "spanner" + ], + "group": "item tool", + "related": [ + "icon-umb-settings", + "icon-tools" + ] + }, + "icon-wine-glass": { + "thesaurus": [ + "goblets", + "wine", + "glasses", + "crockery", + "drinks", + "dinners", + "restaurants" + ], + "group": "item food drink", + "related": [ + "icon-cocktail", + "icon-beer-glass", + "icon-takeaway-cup", + "icon-coffee" + ] + }, + "icon-wrong": { + "thesaurus": [ + "cross", + "x", + "exit", + "quit", + "close", + "error" + ], + "group": "action boolean", + "related": [ + "icon-delete", + "icon-block", + "icon-delete-key", + "icon-backspace", + "icon-check", + "icon-checkbox", + "icon-checkbox-dotted-active", + "icon-circle-dotted-active", + "icon-application-error" + ] + }, + "icon-windows": { + "thesaurus": [ + "microsoft", + "ms" + ], + "group": "logo", + "related": [ + "icon-os-x" + ] + }, + "icon-window-sizes": { + "thesaurus": [ + "square", + "multiple", + "rectangles", + "three", + "3", + "box" + ], + "group": "action window", + "related": [] + }, + "icon-window-popin": { + "thesaurus": [ + "in", + "arrow", + "box", + "rectangle", + "square" + ], + "group": "action window", + "related": [] + }, + "icon-wifi": { + "thesaurus": [ + "internet", + "broadcast", + "waves" + ], + "group": "item tech", + "related": [] + }, + "icon-width": { + "thesaurus": [ + "arrow", + "size", + "resize", + "length" + ], + "group": "action size", + "related": [] + }, + "icon-weight": { + "thesaurus": [ + "kg", + "tonne", + "mass", + "heavy", + "kilo", + "kilogram" + ], + "group": "item", + "related": [ + "icon-legal" + ] + }, + "icon-war": { + "thesaurus": [ + "tank" + ], + "group": "transport vehicle", + "related": [] + }, + "icon-wand": { + "thesaurus": [ + "magic", + "wizard" + ], + "group": "item", + "related": [] + }, + "icon-wallet": { + "thesaurus": [ + "purse", + "money", + "cash", + "pay", + "payment", + "checkout" + ], + "group": "item money", + "related": [] + }, + "icon-wall-plug": { + "thesaurus": [ + "power", + "electricity", + "cable" + ], + "group": "item tech", + "related": [ + "icon-power-outlet", + "icon-dock-connector" + ] + }, + "icon-voice": { + "thesaurus": [ + "microphone", + "podcast", + "audio", + "record" + ], + "group": "item media", + "related": [] + }, + "icon-video": { + "thesaurus": [ + "media", + "movie", + "film", + "camera", + "record" + ], + "group": "item media", + "related": [] + }, + "icon-vcard": { + "thesaurus": [ + "business cards", + "id cards", + "profiles", + "personas", + "person", + "users" + ], + "group": "file", + "related": [ + "icon-umb-members" + ] + }, + "icon-utilities": { + "thesaurus": [ + "toolbox", + "tools" + ], + "group": "item tool", + "related": [ + "icon-briefcase" + ] + }, + "icon-users": { + "thesaurus": [ + "person", + "people", + "three", + "3", + "men", + "man", + "male" + ], + "group": "user multiple", + "related": [ + "icon-users-alt", + "icon-user-females", + "icon-user-females-alt", + "icon-user", + "icon-user-female", + "icon-umb-users" + ] + }, + "icon-users-alt": { + "thesaurus": [ + "person", + "people", + "three", + "3", + "men", + "man", + "male" + ], + "group": "user multiple", + "related": [ + "icon-users-alt", + "icon-user-females", + "icon-user-females-alt", + "icon-user", + "icon-user-female", + "icon-umb-users" + ] + }, + "icon-user": { + "thesaurus": [ + "person", + "people", + "man", + "men", + "male" + ], + "group": "user", + "related": [ + "icon-user-female", + "icon-people", + "icon-people-alt", + "icon-people-alt-2", + "icon-users", + "icon-users-alt", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-user-glasses": { + "thesaurus": [ + "person", + "people", + "man", + "men", + "male", + "specs", + "nerd" + ], + "group": "user special", + "related": [ + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-user-females": { + "thesaurus": [ + "person", + "people", + "three", + "3", + "women", + "woman" + ], + "group": "user multiple", + "related": [ + "icon-users-alt", + "icon-user-females", + "icon-user-females-alt", + "icon-user", + "icon-user-female", + "icon-umb-users" + ] + }, + "icon-user-females-alt": { + "thesaurus": [ + "person", + "people", + "three", + "3", + "women", + "woman" + ], + "group": "user multiple", + "related": [ + "icon-users-alt", + "icon-user-females", + "icon-user-females-alt", + "icon-user", + "icon-user-female", + "icon-umb-users" + ] + }, + "icon-user-female": { + "thesaurus": [ + "person", + "people", + "woman", + "women" + ], + "group": "user", + "related": [ + "icon-people-female", + "icon-user-females", + "icon-user-females-alt", + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-usb": { + "thesaurus": [], + "group": "item tech", + "related": [ + "icon-usb-connector" + ] + }, + "icon-usb-connector": { + "thesaurus": [ + "plugs", + "peripherals", + "technology" + ], + "group": "item tech", + "related": [ + "icon-usb", + "icon-wall-plug", + "icon-dock-connector" + ] + }, + "icon-unlocked": { + "thesaurus": [ + "padlock", + "insecure" + ], + "group": "item security lock", + "related": [ + "icon-lock", + "icon-combination-lock-open", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-universal": { + "thesaurus": [ + "yin yang", + "circle", + "wave" + ], + "group": "misc", + "related": [] + }, + "icon-undo": { + "thesaurus": [ + "arrow", + "back" + ], + "group": "action arrow", + "related": [ + "icon-redo", + "icon-backspace", + "icon-arrow-left", + "icon-navigation-left", + "icon-left-double-arrow" + ] + }, + "icon-umbrella": { + "thesaurus": [ + "rain", + "shelter" + ], + "group": "item household", + "related": [] + }, + "icon-umb-deploy": { + "thesaurus": [ + "circle", + "arrow", + "upload", + "save" + ], + "group": "action arrow circle", + "related": [ + "icon-save" + ] + }, + "icon-umb-contour": { + "thesaurus": [ + "forms", + "add", + "plus", + "boxes", + "fields", + "inputs", + "multiple", + "two", + "2", + "more" + ], + "group": "shape box", + "related": [] + }, + "icon-umb-settings": { + "thesaurus": [ + "spanner", + "wrench" + ], + "group": "item tool", + "related": [ + "icon-wrench", + "icon-tools" + ] + }, + "icon-umb-users": { + "thesaurus": [ + "person", + "people" + ], + "group": "user", + "related": [ + "icon-user", + "icon-user-female", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-umb-media": { + "thesaurus": [ + "photograph", + "image", + "picture", + "mountains", + "scenery", + "landscape" + ], + "group": "picture", + "related": [ + "icon-picture", + "icon-pictures", + "icon-pictures-alt", + "icon-pictures-alt-2", + "icon-photo-album", + "icon-mountain" + ] + }, + "icon-umb-content": { + "thesaurus": [ + "pages", + "papers", + "documents" + ], + "group": "document", + "related": [ + "icon-document", + "icon-document-dashed-line", + "icon-documents", + "icon-article", + "icon-diploma-alt", + "icon-script", + "icon-script-alt" + ] + }, + "icon-umb-developer": { + "thesaurus": [ + "settings", + "cog", + "wheel", + "preferences" + ], + "group": "settings", + "related": [ + "icon-settings", + "icon-settings-alt", + "icon-settings-alt-2" + ] + }, + "icon-umb-members": { + "thesaurus": [ + "business cards", + "id cards", + "profiles", + "personas", + "person", + "users" + ], + "group": "user", + "related": [ + "icon-vcard" + ] + }, + "icon-umb-translation": { + "thesaurus": [ + "globe", + "i18n", + "internationalisation", + "internationalization", + "world", + "internet" + ], + "group": "item globe", + "related": [ + "icon-globe-alt", + "icon-globe", + "icon-globe-inverted-europe-africa", + "icon-globe-inverted-asia", + "icon-globe-inverted-america", + "icon-globe-europe---africa", + "icon-globe-asia" + ] + }, + "icon-tv": { + "thesaurus": [ + "telly", + "tv", + "monitor", + "display" + ], + "group": "item tech", + "related": [ + "icon-tv-old" + ] + }, + "icon-tv-old": { + "thesaurus": [ + "telly", + "tv", + "retro", + "crt" + ], + "group": "item tech", + "related": [ + "icon-tv" + ] + }, + "icon-trophy": { + "thesaurus": [ + "awards", + "cups", + "winnings", + "rewards" + ], + "group": "item award", + "related": [ + "icon-medal", + "icon-diploma", + "icon-diploma-alt" + ] + }, + "icon-tree": { + "thesaurus": [ + "plants", + "woods", + "forests", + "nature", + "outdoors" + ], + "group": "item nature", + "related": [] + }, + "icon-trash": { + "thesaurus": [ + "bin", + "rubbish" + ], + "group": "item household", + "related": [ + "icon-trash-alt", + "icon-trash-alt-2" + ] + }, + "icon-trash-alt": { + "thesaurus": [ + "bin", + "rubbish" + ], + "group": "item household", + "related": [ + "icon-trash", + "icon-trash-alt-2" + ] + }, + "icon-trash-alt-2": { + "thesaurus": [ + "bin", + "rubbish" + ], + "group": "item household", + "related": [ + "icon-trash", + "icon-trash-alt" + ] + }, + "icon-train": { + "thesaurus": [ + "trams", + "railways", + "trains", + "public transport" + ], + "group": "transport vehicle", + "related": [] + }, + "icon-trafic": { + "thesaurus": [ + "arrows", + "bi-directional", + "two", + "2", + "swap" + ], + "group": "action arrow", + "related": [ + "icon-traffic-alt", + "icon-shuffle", + "icon-repeat", + "icon-navigation-road" + ] + }, + "icon-traffic-alt": { + "thesaurus": [ + "arrows", + "bi-directional", + "two", + "2", + "swap", + "navigation" + ], + "group": "action arrow", + "related": [ + "icon-traffic", + "icon-tab-key", + "icon-shuffle", + "icon-repeat", + "icon-repeat-one", + "icon-navigation-road" + ] + }, + "icon-top": { + "thesaurus": [ + "vest" + ], + "group": "item clothing", + "related": [ + "icon-t-shirt" + ] + }, + "icon-tools": { + "thesaurus": [ + "spanner", + "settings", + "wrench", + "screwdriver" + ], + "group": "item tool", + "related": [ + "icon-wrench", + "icon-tools" + ] + }, + "icon-timer": { + "thesaurus": [ + "clock", + "stopwatch" + ], + "group": "item clock", + "related": [] + }, + "icon-time": { + "thesaurus": [ + "clock", + "stopwatch" + ], + "group": "item clock", + "related": [] + }, + "icon-t-shirt": { + "thesaurus": [ + "tshirt", + "top" + ], + "group": "item clothing", + "related": [ + "icon-top" + ] + }, + "icon-tab-key": { + "thesaurus": [ + "arrow", + "line", + "end", + "stop" + ], + "group": "action key arrow", + "related": [ + "icon-traffic-alt", + "icon-traffic", + "icon-shuffle", + "icon-repeat", + "icon-navigation-road" + ] + }, + "icon-tab": { + "thesaurus": [ + "tabs", + "matryoshka" + ], + "group": "action window tab", + "related": [] + }, + "icon-tactics": { + "thesaurus": [ + "tic tac toe", + "arrows", + "naughts and crosses" + ], + "group": "misc", + "related": [] + }, + "icon-tag": { + "thesaurus": [ + "prices", + "labels", + "tags" + ], + "group": "item", + "related": [ + "icon-tags" + ] + }, + "icon-tags": { + "thesaurus": [ + "two", + "2", + "prices", + "labels", + "tags" + ], + "group": "item", + "related": [ + "icon-tag" + ] + }, + "icon-takeaway-cup": { + "thesaurus": [ + "coffee", + "mug", + "tea" + ], + "group": "item food drink", + "related": [ + "icon-coffee", + "icon-cocktail", + "icon-beer-glass", + "icon-wine-glass" + ] + }, + "icon-target": { + "thesaurus": [ + "circles", + "two", + "2", + "nested", + "nesting", + "bullet point", + "radio buttons", + "radios" + ], + "group": "misc", + "related": [] + }, + "icon-temperatrure-alt": { + "thesaurus": [ + "temperature", + "thermometer", + "guage", + "speed", + "scale", + "fuel" + ], + "group": "measure", + "related": [ + "icon-speed-gauge", + "icon-temperature" + ] + }, + "icon-temperature": { + "thesaurus": [ + "thermometer", + "health" + ], + "group": "measure", + "related": [ + "icon-temperatrure-alt" + ] + }, + "icon-terminal": { + "thesaurus": [ + "console", + "commands", + "line", + "code", + "developers", + "cli" + ], + "group": "action window", + "related": [] + }, + "icon-theater": { + "thesaurus": [ + "theatre", + "masks", + "arts", + "theatrical", + "costume" + ], + "group": "building", + "related": [] + }, + "icon-theif": { + "thesaurus": [ + "burglar", + "criminal", + "secret agent", + "spy", + "bandit" + ], + "group": "user special", + "related": [ + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-operator" + ] + }, + "icon-thought-bubble": { + "thesaurus": [ + "thinking", + "speech bubble", + "thought", + "idea" + ], + "group": "misc", + "related": [] + }, + "icon-thumb-down": { + "thesaurus": [ + "no", + "thumbs down" + ], + "group": "item hand thumb", + "related": [ + "icon-thumb-up" + ] + }, + "icon-thumb-up": { + "thesaurus": [ + "yes", + "thumbs up" + ], + "group": "item hand thumb", + "related": [ + "icon-thumb-down" + ] + }, + "icon-thumbnail-list": { + "thesaurus": [ + "media" + ], + "group": "shape box layout", + "related": [] + }, + "icon-thumbnails-small": { + "thesaurus": [ + "grid", + "boxes", + "squares", + "nine", + "9" + ], + "group": "shape box layout", + "related": [ + "icon-thumbnails", + "icon-grid", + "icon-stop", + "icon-thumbnail-list", + "icon-item-arrangement" + ] + }, + "icon-thumbnails": { + "thesaurus": [ + "grid", + "boxes", + "squares", + "four", + "4" + ], + "group": "shape box layout", + "related": [ + "icon-thumbnails-small", + "icon-grid", + "icon-stop", + "icon-thumbnail-list" + ] + }, + "icon-ticket": { + "thesaurus": [ + "one", + "1" + ], + "group": "item money note ticket", + "related": [ + "icon-coins", + "icon-bills" + ] + }, + "icon-sync": { + "thesaurus": [ + "refresh", + "recycle", + "sync" + ], + "group": "action rotate", + "related": [ + "icon-axis-rotation", + "icon-axis-rotation-2", + "icon-axis-rotation-3", + "icon-refresh", + "icon-re-post" + ] + }, + "icon-sweatshirt": { + "thesaurus": [ + "jumper", + "pullover" + ], + "group": "item clothing", + "related": [ + "icon-top", + "icon-t-shirt" + ] + }, + "icon-sunny": { + "thesaurus": [ + "weather", + "summer" + ], + "group": "weather", + "related": [ + "icon-snow", + "icon-cloudy", + "icon-cloud" + ] + }, + "icon-stream": { + "thesaurus": [ + "circle", + "wave", + "sine", + "alternating current" + ], + "group": "misc", + "related": [] + }, + "icon-store": { + "thesaurus": [ + "shop", + "market", + "supermarket", + "superstore" + ], + "group": "building", + "related": [] + }, + "icon-stop": { + "thesaurus": [ + "square" + ], + "group": "shape box", + "related": [ + "icon-thumbnails", + "icon-thumbnails-small", + "icon-record", + "icon-play", + "icon-pause" + ] + }, + "icon-stop-hand": { + "thesaurus": [ + "palm" + ], + "group": "item hand", + "related": [ + "icon-stop-alt", + "icon-stop-hand" + ] + }, + "icon-stop-alt": { + "thesaurus": [ + "sign", + "octagon", + "eight", + "8" + ], + "group": "misc", + "related": [ + "icon-stop", + "icon-stop-hand" + ] + }, + "icon-stamp": { + "thesaurus": [ + "frame", + "photos", + "photographs", + "pictures", + "images", + "icon-shipping-box" + ], + "group": "item", + "related": [] + }, + "icon-stacked-disks": { + "thesaurus": [ + "hard drives", + "ssd", + "hdd", + "servers", + "rack", + "hardware" + ], + "group": "item tech hardware", + "related": [ + "icon-server", + "icon-disk-image", + "icon-ssd" + ] + }, + "icon-ssd": { + "thesaurus": [ + "disk", + "hdd", + "sata", + "hardware" + ], + "group": "item tech hardware", + "related": [ + "icon-server", + "icon-disk-image", + "icon-ssd" + ] + }, + "icon-squiggly-line": { + "thesaurus": [ + "wave", + "random", + "squiggle" + ], + "group": "misc", + "related": [ + "icon-stream" + ] + }, + "icon-sprout": { + "thesaurus": [ + "plant", + "sapling", + "spring" + ], + "group": "item nature", + "related": [ + "icon-tree" + ] + }, + "icon-split": { + "thesaurus": [ + "arrows", + "fork", + "two", + "2" + ], + "group": "action arrow", + "related": [ + "icon-split-alt" + ] + }, + "icon-split-alt": { + "thesaurus": [ + "arrows", + "fork", + "three", + "3" + ], + "group": "action arrow", + "related": [ + "icon-split" + ] + }, + "icon-speed-gauge": { + "thesaurus": [ + "guage", + "speed", + "scale", + "fuel" + ], + "group": "measure", + "related": [ + "icon-temperatrure-alt" + ] + }, + "icon-speaker": { + "thesaurus": [ + "sounds", + "audio", + "music", + "speakers", + "amplifiers", + "amps" + ], + "group": "item media", + "related": [ + "icon-sound", + "icon-sound-waves" + ] + }, + "icon-sound": { + "thesaurus": [ + "sounds", + "audio", + "music", + "speakers", + "amplifiers", + "amps", + "volume", + "maximum" + ], + "group": "item media", + "related": [ + "icon-sound-medium", + "icon-sound-low", + "icon-sound-off", + "icon-sound-waves", + "icon-speaker" + ] + }, + "icon-spades": { + "thesaurus": [], + "group": "misc game", + "related": [] + }, + "icon-sound-waves": { + "thesaurus": [ + "sounds", + "audio", + "music" + ], + "group": "item media", + "related": [] + }, + "icon-shipping-box": { + "thesaurus": [ + "grid", + "grill", + "lines" + ], + "group": "shape box", + "related": [] + }, + "icon-shipping": { + "thesaurus": [ + "trailer", + "sack truck", + "boxes", + "lift", + "carry" + ], + "group": "commerce", + "related": [ + "icon-truck" + ] + }, + "icon-shoe": { + "thesaurus": [ + "trainers", + "sneakers" + ], + "group": "item clothing", + "related": [] + }, + "icon-shopping-basket-alt-2": { + "thesaurus": [ + "carts", + "checkouts" + ], + "group": "commerce", + "related": [ + "icon-shopping-basket", + "item-shopping-basket-alt" + ] + }, + "icon-shopping-basket": { + "thesaurus": [ + "trolley", + "trollies", + "supermarket" + ], + "group": "commerce", + "related": [ + "icon-shopping-basket-alt", + "item-shopping-basket-alt-2" + ] + }, + "icon-shopping-basket-alt": { + "thesaurus": [ + "bag", + "gift" + ], + "group": "commerce", + "related": [ + "icon-shopping-basket", + "item-shopping-basket-alt-2" + ] + }, + "icon-shorts": { + "thesaurus": [ + "trousers", + "bottoms", + "pants" + ], + "group": "item clothing", + "related": [] + }, + "icon-shuffle": { + "thesaurus": [ + "arrows", + "two", + "2", + "mix", + "random" + ], + "group": "action arrow", + "related": [ + "icon-traffic-alt", + "icon-tab-key", + "icon-traffic", + "icon-repeat", + "icon-navigation-road" + ] + }, + "icon-sience": { + "thesaurus": [ + "nuclear", + "orbit" + ], + "group": "misc", + "related": [] + }, + "icon-simcard": { + "thesaurus": [ + "technology", + "telephony", + "phones", + "mobiles", + "cellphones" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-single-note": { + "thesaurus": [ + "music", + "sounds", + "audio" + ], + "group": "item media", + "related": [] + }, + "icon-sitemap": { + "thesaurus": [ + "trees", + "family trees", + "hierachies", + "hierachy", + "structure", + "flowcharts", + "flow charts", + "flow diagrams" + ], + "group": "data", + "related": [] + }, + "icon-sleep": { + "thesaurus": [ + "moons", + "crescent", + "nighttime" + ], + "group": "weather", + "related": [] + }, + "icon-slideshow": { + "thesaurus": [ + "powerpoints", + "data", + "keynotes", + "presentations", + "slideshows", + "slide shows" + ], + "group": "item workplace", + "related": [] + }, + "icon-smiley-inverted": { + "thesaurus": [ + "emojis", + "emoticons", + "faces", + "people", + "person", + "user", + "happy", + "happiness" + ], + "group": "user", + "related": [ + "icon-smiley" + ] + }, + "icon-smiley": { + "thesaurus": [ + "emojis", + "emoticons", + "faces", + "people", + "person", + "user", + "happy", + "happiness" + ], + "group": "user", + "related": [ + "icon-smiley-inverted" + ] + }, + "icon-snow": { + "thesaurus": [ + "snowing", + "cold", + "winter", + "hailing" + ], + "group": "weather cloud", + "related": [] + }, + "icon-sound-low": { + "thesaurus": [ + "sounds", + "audio", + "music", + "speakers", + "amplifiers", + "amps", + "volume", + "minimum" + ], + "group": "item media", + "related": [ + "icon-sound-medium", + "icon-sound", + "icon-sound-off", + "icon-sound-waves", + "icon-speaker" + ] + }, + "icon-sound-medium": { + "thesaurus": [ + "sounds", + "audio", + "music", + "speakers", + "amplifiers", + "amps", + "volume", + "medium" + ], + "group": "item media", + "related": [ + "icon-sound", + "icon-sound-low", + "icon-sound-off", + "icon-sound-waves", + "icon-speaker" + ] + }, + "icon-sound-off": { + "thesaurus": [ + "sounds", + "audio", + "music", + "speakers", + "amplifiers", + "amps", + "volume", + "muted" + ], + "group": "item media", + "related": [ + "icon-sound-medium", + "icon-sound-low", + "icon-sound", + "icon-sound-waves", + "icon-speaker" + ] + }, + "icon-shift": { + "thesaurus": [ + "arrows", + "up" + ], + "group": "action key", + "related": [] + }, + "icon-shield": { + "thesaurus": [ + "security", + "protect", + "secure", + "badge" + ], + "group": "item security", + "related": [] + }, + "icon-sharing-iphone": { + "thesaurus": [ + "share", + "export", + "arrows", + "boxes" + ], + "group": "action arrow box", + "related": [] + }, + "icon-share": { + "thesaurus": [ + "networks", + "social media" + ], + "group": "action", + "related": [] + }, + "icon-share-alt": { + "thesaurus": [ + "broadcasts", + "waves" + ], + "group": "action", + "related": [] + }, + "icon-share-alt-2": { + "thesaurus": [ + "eyes", + "hands", + "sharing", + "holding" + ], + "group": "action", + "related": [] + }, + "icon-settings": { + "thesaurus": [ + "settings", + "cog", + "wheel", + "preferences" + ], + "group": "settings", + "related": [ + "icon-umb-developer", + "icon-settings-alt", + "icon-settings-alt-2" + ] + }, + "icon-settings-alt": { + "thesaurus": [ + "settings", + "cog", + "wheel", + "preferences" + ], + "group": "settings", + "related": [ + "icon-settings", + "icon-umb-developer", + "icon-settings-alt-2" + ] + }, + "icon-settings-alt-2": { + "thesaurus": [ + "settings", + "cog", + "wheel", + "preferences" + ], + "group": "settings", + "related": [ + "icon-settings", + "icon-settings-alt", + "icon-umb-developer" + ] + }, + "icon-server": { + "thesaurus": [ + "servers", + "rack", + "hardware" + ], + "group": "item tech hardware", + "related": [ + "icon-stacked-disks", + "icon-disk-image", + "icon-ssd" + ] + }, + "icon-server-alt": { + "thesaurus": [ + "db", + "databases", + "data store" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-sensor": { + "thesaurus": [ + "waves", + "earthquake", + "epicentre", + "epicenter" + ], + "group": "misc", + "related": [] + }, + "icon-security-camera": { + "thesaurus": [ + "webcams", + "cctv" + ], + "group": "item tech", + "related": [] + }, + "icon-search": { + "thesaurus": [ + "magnifying glass" + ], + "group": "item household", + "related": [] + }, + "icon-scull": { + "thesaurus": [ + "dead", + "death", + "expired", + "old", + "skull", + "pirate", + "piracy" + ], + "group": "item", + "related": [ + "icon-piracy" + ] + }, + "icon-script": { + "thesaurus": [ + "scroll", + "javascript", + "js" + ], + "group": "file", + "related": [ + "icon-script-alt" + ] + }, + "icon-script-alt": { + "thesaurus": [ + "scroll", + "javascript", + "js" + ], + "group": "file", + "related": [ + "icon-script" + ] + }, + "icon-screensharing": { + "thesaurus": [ + "boxes", + "multiple", + "two", + "2", + "nested", + "restore" + ], + "group": "shape box", + "related": [ + "icon-layers-alt" + ] + }, + "icon-school": { + "thesaurus": [ + "clock tower", + "town hall", + "building", + "university" + ], + "group": "building", + "related": [] + }, + "icon-scan": { + "thesaurus": [ + "radar" + ], + "group": "misc", + "related": [] + }, + "icon-refresh": { + "thesaurus": [ + "arrow", + "recycle", + "sync", + "repeat" + ], + "group": "action rotate", + "related": [ + "icon-axis-rotation", + "icon-axis-rotation-2", + "icon-axis-rotation-3", + "icon-sync", + "icon-re-post" + ] + }, + "icon-remote": { + "thesaurus": [ + "remote controls", + "buttons" + ], + "group": "item household", + "related": [] + }, + "icon-remove": { + "thesaurus": [ + "minus", + "subtracts", + "lines", + "deletes" + ], + "group": "maths", + "related": [] + }, + "icon-repeat-one": { + "thesaurus": [ + "arrows", + "bi-directional", + "two", + "2", + "swap", + "loop", + "reverse" + ], + "group": "action arrow", + "related": [ + "icon-repeat", + "icon-traffic-alt", + "icon-tab-key", + "icon-shuffle", + "icon-traffic", + "icon-navigation-road" + ] + }, + "icon-repeat": { + "thesaurus": [ + "arrows", + "bi-directional", + "two", + "2", + "swap", + "loop", + "reverse" + ], + "group": "action arrow", + "related": [ + "icon-repeat-one", + "icon-traffic-alt", + "icon-tab-key", + "icon-shuffle", + "icon-traffic", + "icon-navigation-road" + ] + }, + "icon-resize": { + "thesaurus": [ + "arrows", + "move", + "resizes", + "scales" + ], + "group": "action arrow", + "related": [] + }, + "icon-reply-arrow": { + "thesaurus": [ + "arrows", + "back" + ], + "group": "action arrow", + "related": [] + }, + "icon-return-to-top": { + "thesaurus": [ + "loops", + "repeats", + "arrows" + ], + "group": "action arrow", + "related": [] + }, + "icon-right-double-arrow": { + "thesaurus": [ + "chevrons", + "two", + "2" + ], + "group": "action arrow", + "related": [] + }, + "icon-road": { + "thesaurus": [ + "streets", + "highways", + "lanes", + "motorways", + "roads" + ], + "group": "transport", + "related": [] + }, + "icon-roadsign": { + "thesaurus": [ + "warnings" + ], + "group": "transport", + "related": [] + }, + "icon-rocket": { + "thesaurus": [ + "space", + "launches" + ], + "group": "transport vehicle", + "related": [] + }, + "icon-rss": { + "thesaurus": [ + "rss feed", + "syndication", + "broadcasts", + "waves" + ], + "group": "item tech", + "related": [] + }, + "icon-ruler-alt": { + "thesaurus": [ + "triangles", + "set squares", + "measures", + "tools" + ], + "group": "item tool", + "related": [] + }, + "icon-ruler": { + "thesaurus": [ + "measures", + "tools" + ], + "group": "item tool", + "related": [] + }, + "icon-sandbox-toys": { + "thesaurus": [ + "bucket", + "spade" + ], + "group": "item tool", + "related": [] + }, + "icon-satellite-dish": { + "thesaurus": [ + "broadcasts", + "transmits", + "receiver" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-save": { + "thesaurus": [ + "imports", + "circles", + "arrows" + ], + "group": "action arrow circle", + "related": [ + "icon-umb-deploy" + ] + }, + "icon-safedial": { + "thesaurus": [ + "codes", + "secrets", + "locked" + ], + "group": "item security lock", + "related": [] + }, + "icon-safe": { + "thesaurus": [ + "codes", + "secrets", + "locked", + "dial" + ], + "group": "item security lock", + "related": [] + }, + "icon-redo": { + "thesaurus": [ + "arrow", + "forward" + ], + "group": "action arrow", + "related": [ + "icon-undo", + "icon-delete-key", + "icon-arrow-right", + "icon-navigation-right", + "icon-right-double-arrow" + ] + }, + "icon-printer-alt": { + "thesaurus": [ + "printers", + "peripherals" + ], + "group": "item tech hardware", + "related": [ + "icon-print" + ] + }, + "icon-planet": { + "thesaurus": [ + "space", + "saturn" + ], + "group": "item globe", + "related": [] + }, + "icon-paste-in": { + "thesaurus": [ + "clipboard" + ], + "group": "action", + "related": [] + }, + "icon-os-x": { + "thesaurus": [ + "mac", + "apple" + ], + "group": "logo", + "related": [ + "icon-windows" + ] + }, + "icon-navigation-left": { + "thesaurus": [ + "arrows", + "triangles" + ], + "group": "action arrow", + "related": [] + }, + "icon-message": { + "thesaurus": [ + "emails", + "envelopes", + "letters", + "sms" + ], + "group": "item household", + "related": [ + "icon-message-unopened", + "icon-message-open" + ] + }, + "icon-lock": { + "thesaurus": [ + "padlocks", + "locks", + "security", + "secret", + "locked" + ], + "group": "item security", + "related": [ + "icon-lock", + "icon-combination-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-layers-alt": { + "thesaurus": [ + "boxes", + "multiple", + "three", + "3", + "nested", + "restore" + ], + "group": "shape box", + "related": [ + "icon-screensharing" + ] + }, + "icon-record": { + "thesaurus": [ + "circles" + ], + "group": "shape", + "related": [] + }, + "icon-print": { + "thesaurus": [ + "printer", + "print" + ], + "group": "item tech hardware", + "related": [ + "icon-printer-alt" + ] + }, + "icon-plane": { + "thesaurus": [ + "airplanes", + "aeroplanes", + "aircraft", + "flying", + "flight" + ], + "group": "transport vehicle", + "related": [] + }, + "icon-partly-cloudy": { + "thesaurus": [ + "sunny spells" + ], + "group": "weather cloud", + "related": [] + }, + "icon-ordered-list": { + "thesaurus": [ + "numbered list", + "numbers" + ], + "group": "action format", + "related": [] + }, + "icon-navigation-last": { + "thesaurus": [ + "end", + "finish" + ], + "group": "action arrow", + "related": [] + }, + "icon-message-unopened": { + "thesaurus": [ + "emails", + "envelopes", + "letters", + "sms" + ], + "group": "item household", + "related": [ + "icon-message", + "icon-message-open" + ] + }, + "icon-location-nearby": { + "thesaurus": [ + "geolocation", + "maps", + "pins" + ], + "group": "misc", + "related": [ + "icon-pin-location", + "icon-location-near-me" + ] + }, + "icon-laptop": { + "thesaurus": [ + "pc", + "computers", + "macbooks" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-reception": { + "thesaurus": [ + "receptionists", + "desks", + "working" + ], + "group": "user", + "related": [] + }, + "icon-price-yen": { + "thesaurus": [ + "buy", + "money" + ], + "group": "item money", + "related": [] + }, + "icon-piracy": { + "thesaurus": [ + "pirates", + "person", + "people", + "users" + ], + "group": "user special", + "related": [ + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator", + "icon-scull" + ] + }, + "icon-parental-control": { + "thesaurus": [ + "children", + "parents", + "family", + "families", + "mom", + "mum", + "mummy", + "mommy", + "mother", + "father", + "dad", + "son", + "daughter" + ], + "group": "user", + "related": [] + }, + "icon-operator": { + "thesaurus": [ + "microphones", + "users", + "people", + "person", + "support", + "phonecalls", + "call centres", + "call centers" + ], + "group": "user special", + "related": [ + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-navigation-horizontal": { + "thesaurus": [ + "arrows", + "lengths", + "widths", + "measure" + ], + "group": "action arrow", + "related": [] + }, + "icon-message-open": { + "thesaurus": [ + "emails", + "envelopes", + "letters", + "sms" + ], + "group": "item household", + "related": [ + "icon-message-unopened", + "icon-message" + ] + }, + "icon-lab": { + "thesaurus": [ + "science", + "beaker", + "test tube", + "testtube" + ], + "group": "misc", + "related": [] + }, + "icon-location-near-me": { + "thesaurus": [ + "geolocation", + "maps", + "pins" + ], + "group": "misc", + "related": [ + "icon-pin-location", + "icon-location-nearby" + ] + }, + "icon-receipt-yen": { + "thesaurus": [ + "invoice" + ], + "group": "item money receipt", + "related": [ + "icon-receipt-pound", + "icon-receipt-euro", + "icon-receipt-dollar", + "icon-receipt-alt" + ] + }, + "icon-price-pound": { + "thesaurus": [], + "group": "item money", + "related": [] + }, + "icon-pin-location": { + "thesaurus": [ + "geolocation", + "maps", + "pins" + ], + "group": "misc", + "related": [ + "icon-location-nearby", + "icon-location-near-me" + ] + }, + "icon-parachute-drop": { + "thesaurus": [], + "group": "sport", + "related": [] + }, + "icon-old-phone": { + "thesaurus": [ + "telephones" + ], + "group": "item household phone", + "related": [ + "icon-iphone", + "icon-phone", + "icon-phone-ring" + ] + }, + "icon-merge": { + "thesaurus": [], + "group": "action arrow", + "related": [] + }, + "icon-navigation-first": { + "thesaurus": [ + "start", + "beginning" + ], + "group": "action arrow", + "related": [] + }, + "icon-locate": { + "thesaurus": [ + "crosshairs", + "gps", + "location" + ], + "group": "space", + "related": [] + }, + "icon-keyhole": { + "thesaurus": [], + "group": "item security", + "related": [ + "icon-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-receipt-pound": { + "thesaurus": [], + "group": "item money receipt", + "related": [ + "icon-receipt-yen", + "icon-receipt-euro", + "icon-receipt-dollar", + "icon-receipt-alt" + ] + }, + "icon-price-euro": { + "thesaurus": [], + "group": "item money", + "related": [] + }, + "icon-piggy-bank": { + "thesaurus": [ + "animals", + "farms", + "pigs" + ], + "group": "item money", + "related": [] + }, + "icon-paper-plane": { + "thesaurus": [ + "paper aeroplane", + "paper airplane", + "sending", + "sends", + "sent", + "delivers" + ], + "group": "item household", + "related": [ + "icon-paper-plane-alt" + ] + }, + "icon-old-key": { + "thesaurus": [], + "group": "item security", + "related": [ + "icon-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-navigation-down": { + "thesaurus": [ + "arrows", + "triangles" + ], + "group": "action arrow", + "related": [] + }, + "icon-megaphone": { + "thesaurus": [ + "announcements" + ], + "group": "item household", + "related": [] + }, + "icon-loading": { + "thesaurus": [ + "watches", + "clocks", + "time" + ], + "group": "item clock", + "related": [] + }, + "icon-keychain": { + "thesaurus": [], + "group": "item security", + "related": [ + "icon-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-receipt-euro": { + "thesaurus": [], + "group": "item money receipt", + "related": [ + "icon-receipt-yen", + "icon-receipt-pound", + "icon-receipt-dollar", + "icon-receipt-alt" + ] + }, + "icon-price-dollar": { + "thesaurus": [], + "group": "item money", + "related": [] + }, + "icon-pie-chart": { + "thesaurus": [ + "pie graph", + "pie chart", + "piece", + "quarters", + "fourths", + "pizzas", + "cakes" + ], + "group": "data", + "related": [] + }, + "icon-paper-plane-alt": { + "thesaurus": [ + "paper aeroplane", + "paper airplane", + "sending", + "sends", + "sent", + "delivers" + ], + "group": "item household", + "related": [ + "icon-paper-plane" + ] + }, + "icon-notepad": { + "thesaurus": [ + "notebook", + "text", + "txt" + ], + "group": "item workplace", + "related": [] + }, + "icon-navigation-bottom": { + "thesaurus": [ + "last", + "end", + "arrows", + "triangles" + ], + "group": "action arrow", + "related": [ + "icon-page-up", + "icon-page-down", + "icon-navigation-top" + ] + }, + "icon-meeting": { + "thesaurus": [ + "boardroom", + "table", + "dinner" + ], + "group": "user", + "related": [] + }, + "icon-keyboard": { + "thesaurus": [ + "type", + "inputs" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-load": { + "thesaurus": [ + "downloads" + ], + "group": "action arrow", + "related": [ + "icon-navigation-bottom" + ] + }, + "icon-receipt-dollar": { + "thesaurus": [], + "group": "item money receipt", + "related": [ + "icon-receipt-yen", + "icon-receipt-pound", + "icon-receipt-euro", + "icon-receipt-alt" + ] + }, + "icon-previous": { + "thesaurus": [ + "arrows", + "triangles" + ], + "group": "action arrow", + "related": [] + }, + "icon-pictures": { + "thesaurus": [ + "photograph", + "photography", + "image", + "picture", + "cameras" + ], + "group": "picture", + "related": [ + "icon-picture", + "icon-umb-media", + "icon-pictures-alt", + "icon-pictures-alt-2", + "icon-photo-album" + ] + }, + "icon-notepad-alt": { + "thesaurus": [], + "group": "item workplace", + "related": [] + }, + "icon-paper-bag": { + "thesaurus": [ + "carrier", + "container", + "sack" + ], + "group": "", + "related": [] + }, + "icon-name-badge": { + "thesaurus": [ + "brooch", + "sheriff", + "sticker" + ], + "group": "", + "related": [] + }, + "icon-medicine": { + "thesaurus": [ + "bottles", + "pills", + "medicines" + ], + "group": "item household", + "related": [ + "icon-medical-emergency" + ] + }, + "icon-list": { + "thesaurus": [ + "menus", + "hamburgers", + "three", + "3", + "catalogue", + "catalog", + "inventory", + "record" + ], + "group": "shape box layout", + "related": [ + "icon-thumbnails", + "icon-thumbnails-small", + "icon-thumbnail-list", + "icon-umb-contour" + ] + }, + "icon-key": { + "thesaurus": [ + "key", + "lock", + "house", + "home" + ], + "group": "item security", + "related": [ + "icon-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-receipt-alt": { + "thesaurus": [], + "group": "item money receipt", + "related": [ + "icon-receipt-yen", + "icon-receipt-pound", + "icon-receipt-euro", + "icon-receipt-dollar" + ] + }, + "icon-previous-media": { + "thesaurus": [ + "rewind", + "skip" + ], + "group": "item media", + "related": [ + "icon-next-media" + ] + }, + "icon-pictures-alt": { + "thesaurus": [ + "photograph", + "image", + "picture", + "mountains", + "scenery", + "landscape" + ], + "group": "picture", + "related": [ + "icon-picture", + "icon-pictures", + "icon-umb-media", + "icon-pictures-alt-2", + "icon-photo-album", + "icon-mountain" + ] + }, + "icon-pants": { + "thesaurus": [ + "trousers" + ], + "group": "item clothing", + "related": [] + }, + "icon-nodes": { + "thesaurus": [ + "git", + "line", + "graph" + ], + "group": "data", + "related": [] + }, + "icon-music": { + "thesaurus": [ + "notes", + "musical", + "sounds" + ], + "group": "item media", + "related": [] + }, + "icon-readonly": { + "thesaurus": [ + "uneditable" + ], + "group": "action", + "related": [] + }, + "icon-presentation": { + "thesaurus": [ + "audience", + "talks", + "powerpoints", + "slideshows", + "keynotes", + "speakers", + "conference" + ], + "group": "item workplace", + "related": [] + }, + "icon-pictures-alt-2": { + "thesaurus": [ + "photograph", + "image", + "picture", + "mountains", + "scenery", + "landscape" + ], + "group": "picture", + "related": [ + "icon-picture", + "icon-pictures", + "icon-pictures-alt", + "icon-umb-media", + "icon-photo-album", + "icon-mountain" + ] + }, + "icon-pannel-close": { + "thesaurus": [ + "panels", + "down", + "triangles", + "minimize", + "minimise" + ], + "group": "action window", + "related": [ + "icon-panel-show" + ] + }, + "icon-next": { + "thesaurus": [ + "right", + "triangles", + "forwards" + ], + "group": "action arrow", + "related": [ + "icon-play" + ] + }, + "icon-multiple-windows": { + "thesaurus": [ + "stacked", + "minimize", + "restore" + ], + "group": "action window", + "related": [] + }, + "icon-medical-emergency": { + "thesaurus": [ + "medicine", + "hospitals", + "ambulances", + "health" + ], + "group": "logo", + "related": [ + "icon-medicine" + ] + }, + "icon-medal": { + "thesaurus": [ + "awards", + "prizes", + "stars", + "heroes" + ], + "group": "item award", + "related": [ + "icon-diploma", + "icon-diploma-alt", + "icon-trophy" + ] + }, + "icon-link": { + "thesaurus": [ + "chains", + "links", + "hyperlinks" + ], + "group": "item tech", + "related": [] + }, + "icon-linux-tux": { + "thesaurus": [ + "penguins" + ], + "group": "logo", + "related": [ + "icon-os-x" + ] + }, + "icon-junk": { + "thesaurus": [ + "trash", + "recycling bin", + "recycle bin", + "bin", + "reuses" + ], + "group": "item household", + "related": [] + }, + "icon-item-arrangement": { + "thesaurus": [ + "rows", + "grid", + "boxes", + "squares", + "six", + "6" + ], + "group": "shape box layout", + "related": [ + "icon-thumbnails", + "icon-grid", + "icon-stop", + "icon-thumbnail-list", + "icon-item-arrangement" + ] + }, + "icon-iphone": { + "thesaurus": [ + "mobiles", + "telephones", + "cellphones", + "cell phones" + ], + "group": "item household phone", + "related": [ + "icon-old-phone", + "icon-phone", + "icon-phone-ring" + ] + }, + "icon-lightning": { + "thesaurus": [ + "storms", + "electricity" + ], + "group": "weather cloud", + "related": [] + }, + "icon-map": { + "thesaurus": [ + "partitions", + "screens", + "leaflets", + "flyers" + ], + "group": "item globe", + "related": [] + }, + "icon-multiple-credit-cards": { + "thesaurus": [ + "payments", + "debit cards", + "credit cards", + "contactless", + "cashless", + "loyalty cards", + "store cards", + "business cards" + ], + "group": "item money card", + "related": [ + "icon-credit-card", + "icon-credit-card-alt", + "icon-multiple-credit-cards" + ] + }, + "icon-next-media": { + "thesaurus": [ + "fast forward", + "skip" + ], + "group": "item media", + "related": [ + "icon-previous-media" + ] + }, + "icon-panel-show": { + "thesaurus": [ + "panels", + "up", + "triangles", + "maximize", + "maximise", + "expand" + ], + "group": "action window", + "related": [ + "icon-pannel-close" + ] + }, + "icon-picture": { + "thesaurus": [ + "photograph", + "image", + "picture", + "mountains", + "scenery", + "landscape" + ], + "group": "picture", + "related": [ + "icon-umb-media", + "icon-pictures", + "icon-pictures-alt", + "icon-pictures-alt-2", + "icon-photo-album", + "icon-mountain" + ] + }, + "icon-power": { + "thesaurus": [ + "shut down", + "on", + "off" + ], + "group": "item tech", + "related": [] + }, + "icon-re-post": { + "thesaurus": [ + "retweet", + "share", + "repost" + ], + "group": "action arrow", + "related": [ + "icon-axis-rotation", + "icon-axis-rotation-2", + "icon-axis-rotation-3", + "icon-sync", + "icon-refresh" + ] + }, + "icon-rate": { + "thesaurus": [ + "stars" + ], + "group": "shape", + "related": [] + }, + "icon-rain": { + "thesaurus": [ + "raining", + "precipitation" + ], + "group": "weather cloud", + "related": [] + }, + "icon-radio": { + "thesaurus": [ + "broadcast", + "tv", + "fm", + "television", + "aerials", + "ariels", + "transmitters", + "podcasts" + ], + "group": "item tech hardware", + "related": [ + "icon-radio-alt", + "icon-radio-receiver" + ] + }, + "icon-radio-receiver": { + "thesaurus": [ + "broadcast", + "tv", + "fm", + "television", + "receivers", + "podcasts", + "retro" + ], + "group": "item tech hardware", + "related": [ + "icon-radio-alt", + "icon-radio" + ] + }, + "icon-radio-alt": { + "thesaurus": [ + "broadcast", + "tv", + "fm", + "television", + "aerials", + "ariels", + "transmitters", + "podcasts" + ], + "group": "item tech hardware", + "related": [ + "icon-radio-alt", + "icon-radio-receiver" + ] + }, + "icon-quote": { + "thesaurus": [ + "quotation marks", + "speech marks", + "speakers", + "talks", + "quotes", + "talking", + "chatting", + "testimonials" + ], + "group": "misc", + "related": [] + }, + "icon-qr-code": { + "thesaurus": [ + "barcode", + "qr codes" + ], + "group": "item tech", + "related": [] + }, + "icon-pushpin": { + "thesaurus": [ + "map pins", + "thumb tack", + "noticeboard" + ], + "group": "item workplace", + "related": [] + }, + "icon-pulse": { + "thesaurus": [ + "heartbeat", + "health", + "line charts", + "monitors", + "line graphs" + ], + "group": "data", + "related": [] + }, + "icon-projector": { + "thesaurus": [ + "home cinema", + "slideshows", + "presentations" + ], + "group": "item media", + "related": [] + }, + "icon-play": { + "thesaurus": [ + "right", + "arrows", + "triangles", + "continue" + ], + "group": "item media", + "related": [ + "icon-next" + ] + }, + "icon-playing-cards": { + "thesaurus": [ + "slideshows", + "carousels", + "poker", + "card games", + "playing cards" + ], + "group": "misc game", + "related": [] + }, + "icon-playlist": { + "thesaurus": [ + "music", + "musical notes" + ], + "group": "item media", + "related": [] + }, + "icon-plugin": { + "thesaurus": [ + "puzzle piece", + "jigsaws", + "games", + "kids", + "children", + "plugins", + "plug-ins", + "extensions", + "packages" + ], + "group": "misc game", + "related": [] + }, + "icon-podcast": { + "thesaurus": [ + "person", + "users", + "people" + ], + "group": "user special", + "related": [] + }, + "icon-poker-chip": { + "thesaurus": [ + "1", + "one", + "coins", + "money", + "cash", + "change", + "poker chips" + ], + "group": "misc game", + "related": [] + }, + "icon-poll": { + "thesaurus": [ + "bar graphs", + "bar charts" + ], + "group": "data", + "related": [] + }, + "icon-post-it": { + "thesaurus": [ + "postits", + "post-its", + "post its", + "labels", + "stickers", + "notes", + "pages", + "sheets" + ], + "group": "document", + "related": [] + }, + "icon-pound-bag": { + "thesaurus": [ + "cash", + "swag" + ], + "group": "item money bag", + "related": [] + }, + "icon-power-outlet": { + "thesaurus": [ + "power sockets", + "power outlets", + "electric", + "electricity" + ], + "group": "item household", + "related": [] + }, + "icon-photo-album": { + "thesaurus": [ + "books", + "photo albums" + ], + "group": "picture", + "related": [] + }, + "icon-phone": { + "thesaurus": [ + "telephones", + "phones", + "calling" + ], + "group": "item household phone", + "related": [] + }, + "icon-phone-ring": { + "thesaurus": [ + "telephones", + "phones", + "calling" + ], + "group": "item household phone", + "related": [] + }, + "icon-people": { + "thesaurus": [ + "person", + "man", + "men", + "male" + ], + "group": "user", + "related": [] + }, + "icon-people-female": { + "thesaurus": [ + "person", + "people", + "woman", + "female", + "women" + ], + "group": "user", + "related": [] + }, + "icon-people-alt": { + "thesaurus": [ + "person", + "man", + "men", + "male" + ], + "group": "user", + "related": [] + }, + "icon-people-alt-2": { + "thesaurus": [ + "person", + "man", + "men", + "male" + ], + "group": "user", + "related": [] + }, + "icon-pc": { + "thesaurus": [ + "computers", + "servers", + "desktops", + "pcs" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-pause": { + "thesaurus": [], + "group": "item media", + "related": [] + }, + "icon-path": { + "thesaurus": [ + "routes", + "paths", + "winding" + ], + "group": "action arrow", + "related": [] + }, + "icon-out": { + "thesaurus": [ + "export", + "external", + "arrows" + ], + "group": "action arrow box", + "related": [] + }, + "icon-outbox": { + "thesaurus": [ + "out tray", + "trays" + ], + "group": "item workplace", + "related": [] + }, + "icon-outdent": { + "thesaurus": [ + "move", + "indentation", + "padding", + "spacing", + "margin" + ], + "group": "action arrow box", + "related": [ + "icon-indent" + ] + }, + "icon-page-add": { + "thesaurus": [ + "new", + "create", + "documents", + "pages" + ], + "group": "document", + "related": [] + }, + "icon-page-down": { + "thesaurus": [ + "bottom" + ], + "group": "action arrow box", + "related": [ + "icon-page-up", + "icon-navigation-top", + "icon-navigation-bottom" + ] + }, + "icon-page-remove": { + "thesaurus": [ + "delete", + "documents", + "pages" + ], + "group": "document", + "related": [] + }, + "icon-page-restricted": { + "thesaurus": [ + "documents", + "pages", + "disabled", + "restricted" + ], + "group": "document", + "related": [] + }, + "icon-page-up": { + "thesaurus": [ + "top" + ], + "group": "action arrow box", + "related": [ + "icon-page-down", + "icon-navigation-top", + "icon-navigation-bottom" + ] + }, + "icon-paint-roller": { + "thesaurus": [ + "decorate", + "decoration", + "decorating", + "themes", + "theming", + "colour", + "color", + "paint" + ], + "group": "item household", + "related": [] + }, + "icon-palette": { + "thesaurus": [ + "artist", + "painting", + "painter", + "themes", + "theming", + "colour", + "color", + "paint" + ], + "group": "item household", + "related": [] + }, + "icon-newspaper": { + "thesaurus": [ + "blogs", + "articles", + "journalism", + "journalist", + "press", + "media", + "magazine" + ], + "group": "item household", + "related": [] + }, + "icon-newspaper-alt": { + "thesaurus": [ + "blogs", + "articles", + "journalism", + "journalist", + "press", + "media", + "magazine" + ], + "group": "item household", + "related": [] + }, + "icon-network-alt": { + "thesaurus": [ + "graphs", + "charts", + "networks", + "trees", + "hierarchy", + "flowcharts", + "flow charts", + "branches", + "paths", + "forks" + ], + "group": "data", + "related": [ + "icon-mindmap" + ] + }, + "icon-navigational-arrow": { + "thesaurus": [ + "satnav", + "sat nav", + "satellite navigation", + "gps" + ], + "group": "action arrow", + "related": [] + }, + "icon-navigation": { + "thesaurus": [ + "move", + "drag and drop", + "drag & drop", + "pan" + ], + "group": "action arrow", + "related": [] + }, + "icon-navigation-vertical": { + "thesaurus": [ + "up", + "down", + "scroll" + ], + "group": "action arrow", + "related": [] + }, + "icon-navigation-up": { + "thesaurus": [ + "triangles", + "arrows" + ], + "group": "action arrow", + "related": [ + "icon-navigation-right" + ] + }, + "icon-navigation-top": { + "thesaurus": [ + "start", + "top", + "arrows", + "triangles" + ], + "group": "action arrow box", + "related": [ + "icon-page-up", + "icon-page-down", + "icon-navigation-bottom" + ] + }, + "icon-navigation-road": { + "thesaurus": [], + "group": "action arrow", + "related": [] + }, + "icon-navigation-right": { + "thesaurus": [ + "arrows", + "triangles" + ], + "group": "action arrow", + "related": [ + "icon-navigation-up" + ] + }, + "icon-microscope": { + "thesaurus": [ + "science", + "lab" + ], + "group": "item", + "related": [ + "icon-lab" + ] + }, + "icon-mindmap": { + "thesaurus": [ + "chart", + "flow chart", + "diagram", + "decision tree" + ], + "group": "data", + "related": [] + }, + "icon-molecular-network": { + "thesaurus": [ + "molecule", + "atoms", + "network", + "hub" + ], + "group": "misc", + "related": [ + "icon-molecular" + ] + }, + "icon-molecular": { + "thesaurus": [ + "molecule", + "atoms", + "network", + "hub", + "virus" + ], + "group": "misc", + "related": [ + "icon-molecular-network" + ] + }, + "icon-mountain": { + "thesaurus": [ + "landscape", + "geography", + "nature", + "natural feature" + ], + "group": "item nature", + "related": [] + }, + "icon-mouse-cursor": { + "thesaurus": [ + "cursors", + "pointers", + "arrows", + "mouse", + "mice" + ], + "group": "action arrow", + "related": [] + }, + "icon-mouse": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-movie-alt": { + "thesaurus": [ + "movies", + "films", + "hollywood", + "action", + "clapperboards", + "filmmaking", + "directors", + "crew" + ], + "group": "item", + "related": [] + }, + "icon-map-marker": { + "thesaurus": [ + "pins", + "maps", + "markers", + "locations", + "lollipop", + "lolly" + ], + "group": "misc", + "related": [] + }, + "icon-movie": { + "thesaurus": [ + "movies", + "films", + "reels" + ], + "group": "item", + "related": [] + }, + "icon-map-loaction": { + "thesaurus": [], + "group": "item", + "related": [] + }, + "icon-map-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-male-symbol": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-male-and-female": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-mailbox": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-magnet": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-loupe": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-mobile": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-logout": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-log-out": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-layers": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-left-double-arrow": { + "thesaurus": [ + "chevrons", + "arrows", + "backwards" + ], + "group": "action arrow", + "related": [] + }, + "icon-layout": { + "thesaurus": [ + "media", + "newspaper", + "layouts", + "magazines" + ], + "group": "shape box layout", + "related": [] + }, + "icon-legal": { + "thesaurus": [ + "scales", + "weight", + "mass", + "compare", + "balance" + ], + "group": "item household", + "related": [ + "icon-weight" + ] + }, + "icon-lense": { + "thesaurus": [ + "circles", + "orbits", + "planets", + "eyeballs", + "target" + ], + "group": "item", + "related": [] + }, + "icon-library": { + "thesaurus": [ + "temple", + "institution", + "government" + ], + "group": "building", + "related": [ + "icon-school" + ] + }, + "icon-light-down": { + "thesaurus": [ + "brightness" + ], + "group": "", + "related": [] + }, + "icon-light-up": { + "thesaurus": [ + "brightness" + ], + "group": "", + "related": [] + }, + "icon-lightbulb-active": { + "thesaurus": [ + "on", + "switch", + "lamps", + "bulbs", + "lights" + ], + "group": "item household", + "related": [] + }, + "icon-lightbulb": { + "thesaurus": [ + "off", + "lights", + "bulbs", + "lamps" + ], + "group": "item household", + "related": [] + }, + "icon-ipad": { + "thesaurus": [ + "tablet" + ], + "group": "", + "related": [] + }, + "icon-invoice": { + "thesaurus": [ + "bills", + "invoices", + "dollar", + "usd", + "currency" + ], + "group": "item money invoice", + "related": [] + }, + "icon-info": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-infinity": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-indent": { + "thesaurus": [ + "move", + "indentation", + "padding", + "spacing", + "margin" + ], + "group": "action arrow box", + "related": [ + "icon-outdent" + ] + }, + "icon-inbox": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-inbox-full": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-inactive-line": { + "thesaurus": [ + "slashes", + "backslashes", + "lines", + "disabled", + "crossed" + ], + "group": "shape", + "related": [] + }, + "icon-imac": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hourglass": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-home": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-grid": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-food": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-favorite": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-door-open-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-diagnostics": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-contrast": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-dollar-alt": { + "thesaurus": [ + "money", + "us", + "usa" + ], + "group": "", + "related": [] + }, + "icon-circle-dotted-active": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cinema": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chip": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chip-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chess": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-checkbox": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-checkbox-empty": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-checkbox-dotted": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-checkbox-dotted-active": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-check": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chat": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chat-active": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chart": { + "thesaurus": [ + "lines", + "graphs", + "charts", + "stocks", + "finance", + "financial" + ], + "group": "data", + "related": [] + }, + "icon-chart-curve": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-certificate": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-categories": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cash-register": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-car": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-caps-lock": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-candy": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-circle-dotted": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-circuits": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-circus": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-client": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-clothes-hanger": { + "thesaurus": [ + "clothes", + "clothing", + "wardrobes" + ], + "group": "item clothing", + "related": [] + }, + "icon-cloud-drive": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cloud-upload": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cloud": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cloudy": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-clubs": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cocktail": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-code": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coffee": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coin-dollar": { + "thesaurus": [ + "money", + "us", + "usa", + "paper", + "cash" + ], + "group": "", + "related": [] + }, + "icon-coin-pound": { + "thesaurus": [ + "money", + "sterling", + "cash" + ], + "group": "", + "related": [] + }, + "icon-coin-yen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coin": { + "thesaurus": [ + "money", + "cash" + ], + "group": "", + "related": [] + }, + "icon-coins-alt": { + "thesaurus": [ + "money", + "cash" + ], + "group": "", + "related": [] + }, + "icon-console": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-connection": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-compress": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-company": { + "thesaurus": [ + "city", + "cities", + "towns", + "companies", + "sky scrapers", + "buildings", + "offices" + ], + "group": "building", + "related": [] + }, + "icon-command": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coin-euro": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-combination-lock": { + "thesaurus": [], + "group": "", + "related": [ + "icon-combination-lock-open", + "icon-lock", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-combination-lock-open": { + "thesaurus": [], + "group": "", + "related": [ + "icon-combination-lock", + "icon-unlocked", + "icon-keyhole", + "icon-old-key", + "icon-keychain", + "icon-key" + ] + }, + "icon-comb": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-columns": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-colorpicker": { + "thesaurus": [ + "pipettes", + "eyedroppers", + "eye droppers", + "eye-droppers", + "color pickers", + "colour pickers", + "colorpickers", + "colourpickers", + "styles" + ], + "group": "item", + "related": [] + }, + "icon-color-bucket": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-yen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-yen-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-pound": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-pound-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-euro": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-euro-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coins-dollar": { + "thesaurus": [ + "money", + "us", + "usa", + "cash" + ], + "group": "", + "related": [] + }, + "icon-conversation-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-conversation": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-coverflow": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-credit-card-alt": { + "thesaurus": [ + "payments", + "debit cards", + "credit cards", + "contactless", + "cashless", + "loyalty cards", + "store cards", + "business cards" + ], + "group": "item money card", + "related": [ + "icon-credit-card", + "icon-credit-card-alt", + "icon-multiple-credit-cards" + ] + }, + "icon-credit-card": { + "thesaurus": [ + "payments", + "debit cards", + "credit cards", + "contactless", + "cashless", + "loyalty cards", + "store cards", + "business cards" + ], + "group": "item money card", + "related": [ + "icon-credit-card", + "icon-credit-card-alt", + "icon-multiple-credit-cards" + ] + }, + "icon-crop": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-crosshair": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-crown-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-crown": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cupcake": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-curve": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-cut": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-dashboard": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-defrag": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-delete": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-delete-key": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-departure": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-desk": { + "thesaurus": [ + "benches", + "desks", + "horses", + "gymnastics", + "hurdles" + ], + "group": "item household", + "related": [] + }, + "icon-desktop": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-donate": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-dollar-bag": { + "thesaurus": [ + "money", + "us", + "usa", + "cash", + "sack" + ], + "group": "", + "related": [] + }, + "icon-documents": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-document": { + "thesaurus": [ + "papers", + "documents", + "pages", + "sheets", + "leaf", + "leaves", + "new", + "blank" + ], + "group": "item", + "related": [] + }, + "icon-document-dashed-line": { + "thesaurus": [ + "documents", + "new", + "create", + "pages", + "papers", + "drafts" + ], + "group": "document", + "related": [] + }, + "icon-dock-connector": { + "thesaurus": [ + "usb", + "apple", + "30-pin", + "adaptor", + "cable", + "charges", + "charging" + ], + "group": "item tech", + "related": [] + }, + "icon-dna": { + "thesaurus": [ + "biology", + "id", + "identity" + ], + "group": "item science", + "related": [] + }, + "icon-display": { + "thesaurus": [ + "displays", + "monitors", + "screens", + "tvs", + "televisions", + "computers", + "pcs" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-disk-image": { + "thesaurus": [ + "cds", + "dvds", + "disk", + "disc", + "drive" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-disc": { + "thesaurus": [ + "cds", + "discs", + "disks", + "record", + "dvds", + "blurays", + "bluerays", + "blu-rays", + "blue rays", + "blue-rays", + "movies", + "films", + "music" + ], + "group": "item tech", + "related": [] + }, + "icon-directions": { + "thesaurus": [ + "signs", + "signposts" + ], + "group": "item", + "related": [] + }, + "icon-directions-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-diploma": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-diploma-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-dice": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-diamonds": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-diamond": { + "thesaurus": [ + "diamonds", + "gems", + "special", + "expensive", + "commodities", + "commodity", + "precious", + "valuable" + ], + "group": "item money", + "related": [] + }, + "icon-diagonal-arrow": { + "thesaurus": [ + "arrows", + "grows", + "expands", + "bigger" + ], + "group": "action arrow", + "related": [ + "icon-diagonal-arrow-alt" + ] + }, + "": { + "thesaurus": [ + "arrows", + "grows", + "expands", + "bigger" + ], + "group": "action arrow", + "related": [ + "icon-diagonal-arrow" + ] + }, + "icon-door-open": { + "thesaurus": [ + "doors", + "entrances", + "exits", + "log out", + "logout", + "log in", + "login" + ], + "group": "item", + "related": [] + }, + "icon-download-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-download": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-drop": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-eco": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-economy": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-edit": { + "thesaurus": [ + "pencils", + "pens", + "edits", + "writers", + "authors", + "writes" + ], + "group": "item", + "related": [] + }, + "icon-eject": { + "thesaurus": [ + "ejects", + "up", + "top" + ], + "group": "action arrow box", + "related": [] + }, + "icon-employee": { + "thesaurus": [], + "group": "user special", + "related": [ + "icon-user", + "icon-user-female", + "icon-umb-users", + "icon-user-glasses", + "icon-client", + "icon-employee", + "icon-piracy", + "icon-theif", + "icon-operator" + ] + }, + "icon-energy-saving-bulb": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-enter": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-equalizer": { + "thesaurus": [ + "equalizers", + "equaliser", + "equalisers", + "settings", + "options", + "configuration" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-escape": { + "thesaurus": [ + "out", + "escapes", + "exits" + ], + "group": "action arrow circle", + "related": [] + }, + "icon-ethernet": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-euro-bag": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-exit-fullscreen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-eye": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-facebook-like": { + "thesaurus": [ + "thumbs up", + "likes", + "social media" + ], + "group": "item hand thumb", + "related": [] + }, + "icon-factory": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-font": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-folders": { + "thesaurus": [ + "files", + "documents", + "storage", + "library", + "components" + ], + "group": "item workplace", + "related": [] + }, + "icon-folder": { + "thesaurus": [ + "folders", + "filing", + "documents", + "stroage" + ], + "group": "item workplace", + "related": [] + }, + "icon-folder-outline": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-folder-open": { + "thesaurus": [ + "filing", + "documents" + ], + "group": "item workplace", + "related": [] + }, + "icon-flowerpot": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-flashlight": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-flash": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-flag": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-flag-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-firewire": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-firewall": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-fire": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-fingerprint": { + "thesaurus": [ + "fingerprints", + "crimes", + "criminals", + "id", + "identification", + "biometrics" + ], + "group": "item security", + "related": [] + }, + "icon-filter": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-filter-arrows": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-files": { + "thesaurus": [ + "storage", + "filing", + "filing cabinets", + "repository", + "repositories" + ], + "group": "item workplace", + "related": [] + }, + "icon-file-cabinet": { + "thesaurus": [ + "filing cabinets", + "offices", + "drawers", + "storage" + ], + "group": "item workplace", + "related": [] + }, + "icon-female-symbol": { + "thesaurus": [ + "woman", + "women", + "females", + "sexes", + "genders" + ], + "group": "misc", + "related": [] + }, + "icon-footprints": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hammer": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hand-active-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-forking": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hand-active": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hand-pointer-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hand-pointer": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-handprint": { + "thesaurus": [ + "hands", + "personalisation", + "personalization", + "ids", + "profiles" + ], + "group": "item hand", + "related": [] + }, + "icon-handshake": { + "thesaurus": [ + "meetings", + "handshakes", + "greetings", + "business" + ], + "group": "item hand", + "related": [] + }, + "icon-handtool": { + "thesaurus": [ + "hands", + "grabs", + "cursor" + ], + "group": "item hand", + "related": [] + }, + "icon-hard-drive": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-help": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-graduate": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-gps": { + "thesaurus": [ + "satellites", + "space", + "satnav", + "sat nav", + "satellite navigation", + "gps" + ], + "group": "item tech hardware", + "related": [] + }, + "icon-help-alt": { + "thesaurus": [ + "questions", + "question marks", + "assistance" + ], + "group": "misc", + "related": [] + }, + "icon-height": { + "thesaurus": [ + "heights", + "distances", + "spaces", + "spacing", + "vertical" + ], + "group": "action arrow box", + "related": [] + }, + "icon-globe": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hearts": { + "thesaurus": [ + "love", + "care", + "caring", + "health" + ], + "group": "shape", + "related": [] + }, + "icon-globe-inverted-europe-africa": { + "thesaurus": [ + "planets", + "earth", + "world" + ], + "group": "item globe", + "related": [] + }, + "icon-headset": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-inverted-asia": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-headphones": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-inverted-america": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hd": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-europe---africa": { + "thesaurus": [ + "planets", + "earth", + "world" + ], + "group": "item globe", + "related": [] + }, + "icon-hat": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-asia": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-hard-drive-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-glasses": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-gift": { + "thesaurus": [ + "gifts", + "presents", + "christmas", + "birthdays", + "giving", + "rewards", + "surprises" + ], + "group": "item", + "related": [] + }, + "icon-handtool-alt": { + "thesaurus": [ + "hands", + "grabs", + "cursor" + ], + "group": "item hand", + "related": [] + }, + "icon-geometry": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-game": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-fullscreen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-fullscreen-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-frame": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-frame-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-camera-roll": { + "thesaurus": [ + "films", + "cameras" + ], + "group": "item tech", + "related": [] + }, + "icon-bookmark": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bill": { + "thesaurus": [ + "currency", + "money", + "notes", + "one", + "1", + "bills" + ], + "group": "item money note", + "related": [] + }, + "icon-baby-stroller": { + "thesaurus": [ + "pram", + "pushchair" + ], + "group": "", + "related": [] + }, + "icon-alarm-clock": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-adressbook": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-add": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-activity": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-untitled": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-camcorder": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-calendar": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-calendar-alt": { + "thesaurus": [ + "dates", + "calendars", + "events" + ], + "group": "item", + "related": [] + }, + "icon-calculator": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bus": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-burn": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bulleted-list": { + "thesaurus": [ + "bulletpoints", + "bullets", + "ul", + "lists" + ], + "group": "shape box layout", + "related": [] + }, + "icon-bug": { + "thesaurus": [ + "ladybugs", + "lady bugs", + "ladybirds", + "lady birds", + "bugs", + "insects", + "minibeasts", + "wildlife", + "issues" + ], + "group": "item nature", + "related": [] + }, + "icon-brush": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-brush-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-brush-alt-2": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-browser-window": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-briefcase": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-brick": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-brackets": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-box": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-box-open": { + "thesaurus": [ + "boxes", + "storage", + "dropbox", + "packages", + "parcels", + "packaging", + "opens" + ], + "group": "item", + "related": [] + }, + "icon-box-alt": { + "thesaurus": [ + "filing", + "boxes", + "storage" + ], + "group": "item workplace", + "related": [] + }, + "icon-books": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-billboard": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bills-dollar": { + "thesaurus": [ + "money", + "us", + "usa", + "paper", + "cash" + ], + "group": "", + "related": [] + }, + "icon-bills-euro": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bills-pound": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bills-yen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bills": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-binarycode": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-binoculars": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bird": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-birthday-cake": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-blueprint": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-block": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bluetooth": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-boat-shipping": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bomb": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-book-alt-2": { + "thesaurus": [ + "books", + "reading", + "documentation", + "library" + ], + "group": "item", + "related": [] + }, + "icon-bones": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-book-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-book": { + "thesaurus": [ + "books", + "dictionary", + "dictionaries", + "thesaurus", + "thesauruses", + "library", + "authors", + "manuals" + ], + "group": "item", + "related": [] + }, + "icon-bill-yen": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-award": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bill-pound": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-autofill": { + "thesaurus": [ + "edits", + "editing", + "editor", + "writes", + "writing", + "text boxes", + "textboxes", + "pencils", + "pens" + ], + "group": "action", + "related": [] + }, + "icon-bill-euro": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-auction-hammer": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bill-dollar": { + "thesaurus": [ + "money", + "us", + "usa", + "paper", + "cash" + ], + "group": "", + "related": [] + }, + "icon-attachment": { + "thesaurus": [ + "paperclips", + "clippy", + "attachments", + "stationery" + ], + "group": "item workplace", + "related": [] + }, + "icon-bell": { + "thesaurus": [ + "bells", + "notifications", + "alerts" + ], + "group": "item", + "related": [] + }, + "icon-article": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bell-off": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-art-easel": { + "thesaurus": [ + "artworks", + "painting", + "paints", + "artist", + "gallary" + ], + "group": "picture", + "related": [] + }, + "icon-beer-glass": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-arrow-up": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-battery-low": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-arrow-right": { + "thesaurus": [ + "arrows", + "forwards" + ], + "group": "action arrow", + "related": [] + }, + "icon-battery-full": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-arrow-left": { + "thesaurus": [ + "arrows", + "back" + ], + "group": "action arrow", + "related": [] + }, + "icon-bars": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-arrow-down": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-barcode": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-arrivals": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-bar-chart": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-application-window": { + "thesaurus": [ + "screen", + "window", + "sidebar" + ], + "group": "action window", + "related": [ + "icon-application-window-alt", + "icon-application-error", + "icon-section" + ] + }, + "icon-band-aid": { + "thesaurus": [ + "bandaids", + "plasters", + "band aids", + "health", + "first aid", + "medical" + ], + "group": "item household", + "related": [] + }, + "icon-application-window-alt": { + "thesaurus": [ + "screen", + "window" + ], + "group": "action window", + "related": [ + "icon-application-window", + "icon-application-error", + "icon-section" + ] + }, + "icon-ball": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-application-error": { + "thesaurus": [ + "screen", + "window", + "404", + "500", + "page not found", + "server error", + "fault" + ], + "group": "action window", + "related": [ + "icon-application-window-alt", + "icon-application", + "icon-section" + ] + }, + "icon-badge-restricted": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-app": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-badge-remove": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-anchor": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-badge-count": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-badge-add": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-alert": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-backspace": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-alert-alt": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-addressbook": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-badge": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chevron-down": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-chevron-up": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-folder-close": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-globe-europe-africa": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-map-location": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-panel-close": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-science": { + "thesaurus": [], + "group": "", + "related": [] + }, + "icon-section": { + "thesaurus": [ + "screen", + "window", + "sidebar" + ], + "group": "action window", + "related": [ + "icon-application-window-alt", + "icon-application-error", + "icon-application" + ] + }, + "icon-traffic": { + "thesaurus": [ + "arrows", + "left", + "right", + "bi-directional", + "two", + "2", + "swap", + "loop", + "reverse", + "navigation" + ], + "group": "action arrow", + "related": [ + "icon-traffic-alt", + "icon-tab-key", + "icon-shuffle", + "icon-repeat", + "icon-repeat-one", + "icon-navigation-road" + ] + } +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index af16267d46..3a51ab3741 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -1,12 +1,12 @@ { "name": "@umbraco-cms/backoffice", - "version": "14.0.0-rc1", + "version": "14.0.0-rc2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@umbraco-cms/backoffice", - "version": "14.0.0-rc1", + "version": "14.0.0-rc2", "license": "MIT", "dependencies": { "@types/diff": "^5.0.9", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index c7543081eb..ca4162e833 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -1,7 +1,7 @@ { "name": "@umbraco-cms/backoffice", "license": "MIT", - "version": "14.0.0-rc1", + "version": "14.0.0-rc2", "type": "module", "exports": { ".": null, diff --git a/src/Umbraco.Web.UI.Client/public-assets/App_Plugins/custom-bundle-package/index.js b/src/Umbraco.Web.UI.Client/public-assets/App_Plugins/custom-bundle-package/index.js index 3301081811..722c6f3878 100644 --- a/src/Umbraco.Web.UI.Client/public-assets/App_Plugins/custom-bundle-package/index.js +++ b/src/Umbraco.Web.UI.Client/public-assets/App_Plugins/custom-bundle-package/index.js @@ -1,4 +1,4 @@ -export const manifests = [ +export const manifests: Array = [ { type: 'section', alias: 'MyBundle.Section.Custom', @@ -9,5 +9,5 @@ export const manifests = [ label: 'My Bundle Section', pathname: 'my-custom-bundle', }, - } + }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app-error.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app-error.element.ts index a071967bc6..92027afa18 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app-error.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app-error.element.ts @@ -1,19 +1,28 @@ import { css, html, nothing, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import type { ProblemDetails } from '@umbraco-cms/backoffice/external/backend-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; /** * A full page error element that can be used either solo or for instance as the error 500 page and BootFailed */ @customElement('umb-app-error') export class UmbAppErrorElement extends UmbLitElement { + /** + * The headline to display + * + * @attr + */ + @property() + errorHeadline?: string | null; + /** * The error message to display * * @attr */ @property() - errorMessage?: string; + errorMessage?: string | null; /** * The error to display @@ -23,31 +32,128 @@ export class UmbAppErrorElement extends UmbLitElement { @property() error?: unknown; - private renderProblemDetails = (problemDetails: ProblemDetails) => html` -

${problemDetails.title}

+ constructor() { + super(); + + this.#generateErrorFromSearchParams(); + } + + /** + * Generates an error from the search params before the properties are set + */ + #generateErrorFromSearchParams() { + const searchParams = new URLSearchParams(window.location.search); + + const flow = searchParams.get('flow'); + + if (flow === 'external-login-callback') { + this.errorHeadline = this.localize.term('errors_externalLoginError'); + console.log('External login error', searchParams.get('error')); + + const status = searchParams.get('status'); + + // "Status" is controlled by Umbraco and is a string + if (status) { + switch (status) { + case 'unauthorized': + this.errorMessage = this.localize.term('errors_unauthorized'); + break; + case 'user-not-found': + this.errorMessage = this.localize.term('errors_userNotFound'); + break; + case 'external-info-not-found': + this.errorMessage = this.localize.term('errors_externalInfoNotFound'); + break; + case 'failed': + this.errorMessage = this.localize.term('errors_externalLoginFailed'); + break; + default: + this.errorMessage = this.localize.term('errors_defaultError'); + break; + } + } + return; + } + + if (flow === 'external-login') { + /** + * "Error" is controlled by OpenID and is a string + * @see https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1 + */ + const error = searchParams.get('error'); + + this.errorHeadline = this.localize.term('errors_externalLoginError'); + + switch (error) { + case 'access_denied': + this.errorMessage = this.localize.term('openidErrors_accessDenied'); + break; + case 'invalid_request': + this.errorMessage = this.localize.term('openidErrors_invalidRequest'); + break; + case 'invalid_client': + this.errorMessage = this.localize.term('openidErrors_invalidClient'); + break; + case 'invalid_grant': + this.errorMessage = this.localize.term('openidErrors_invalidGrant'); + break; + case 'unauthorized_client': + this.errorMessage = this.localize.term('openidErrors_unauthorizedClient'); + break; + case 'unsupported_grant_type': + this.errorMessage = this.localize.term('openidErrors_unsupportedGrantType'); + break; + case 'invalid_scope': + this.errorMessage = this.localize.term('openidErrors_invalidScope'); + break; + case 'server_error': + this.errorMessage = this.localize.term('openidErrors_serverError'); + break; + case 'temporarily_unavailable': + this.errorMessage = this.localize.term('openidErrors_temporarilyUnavailable'); + break; + default: + this.errorMessage = this.localize.term('errors_defaultError'); + break; + } + + // Set the error object with the original error parameters from the search params + let detail = searchParams.get('error_description'); + const errorUri = searchParams.get('error_uri'); + if (errorUri) { + detail = `${detail} (${errorUri})`; + } + this.error = { title: `External error code: ${error}`, detail }; + + return; + } + } + + #renderProblemDetails = (problemDetails: ProblemDetails) => html` +

${problemDetails.title}

${problemDetails.detail}

${problemDetails.stack}
`; - private renderErrorObj = (error: Error) => html` -

${error.name}

+ #renderErrorObj = (error: Error) => html` +

${error.name}

${error.message}

${error.stack}
`; - private isProblemDetails(error: unknown): error is ProblemDetails { + #isProblemDetails(error: unknown): error is ProblemDetails { return typeof error === 'object' && error !== null && 'detail' in error && 'title' in error; } - private isError(error: unknown): error is Error { + #isError(error: unknown): error is Error { return typeof error === 'object' && error !== null && error instanceof Error; } - private renderError(error: unknown) { - if (this.isProblemDetails(error)) { - return this.renderProblemDetails(error); - } else if (this.isError(error)) { - return this.renderErrorObj(error); + #renderError(error: unknown) { + if (this.#isProblemDetails(error)) { + return this.#renderProblemDetails(error); + } else if (this.#isError(error)) { + return this.#renderErrorObj(error); } return nothing; @@ -56,73 +162,93 @@ export class UmbAppErrorElement extends UmbLitElement { render = () => html`
- `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/index.ts index e69de29bb2..60f06132a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/index.ts @@ -0,0 +1 @@ +export * from './workspace/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace-context.interface.ts new file mode 100644 index 0000000000..a1d58e82f5 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace-context.interface.ts @@ -0,0 +1,16 @@ +import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type'; +import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; +import type { + UmbPropertyStructureWorkspaceContext, + UmbRoutableWorkspaceContext, + UmbVariantDatasetWorkspaceContext, +} from '@umbraco-cms/backoffice/workspace'; + +export interface UmbContentWorkspaceContext< + ContentTypeModel extends UmbContentTypeModel = UmbContentTypeModel, + VariantModelType extends UmbVariantModel = UmbVariantModel, +> extends UmbRoutableWorkspaceContext, + UmbVariantDatasetWorkspaceContext, + UmbPropertyStructureWorkspaceContext { + readonly IS_CONTENT_WORKSPACE_CONTEXT: true; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts new file mode 100644 index 0000000000..cf2c295263 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts @@ -0,0 +1,11 @@ +import type { UmbContentWorkspaceContext } from './content-workspace-context.interface.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_CONTENT_WORKSPACE_CONTEXT = new UmbContextToken< + UmbContentWorkspaceContext, + UmbContentWorkspaceContext +>( + 'UmbWorkspaceContext', + undefined, + (context): context is UmbContentWorkspaceContext => (context as any).IS_CONTENT_WORKSPACE_CONTEXT, +); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts new file mode 100644 index 0000000000..662c027fcb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts @@ -0,0 +1,2 @@ +export type * from './content-workspace-context.interface.js'; +export * from './content-workspace.context-token.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts index 4bb240de46..6fa1107a5b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/content-editor-properties.element.ts @@ -7,8 +7,10 @@ import type { } from '@umbraco-cms/backoffice/content-type'; import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UmbDataPathValueFilter } from '@umbraco-cms/backoffice/validation'; +import { UmbDataPathPropertyValueFilter } from '@umbraco-cms/backoffice/validation'; import { UMB_PROPERTY_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; +import type { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property'; @customElement('umb-content-workspace-view-edit-properties') export class UmbContentWorkspaceViewEditPropertiesElement extends UmbLitElement { @@ -21,10 +23,14 @@ export class UmbContentWorkspaceViewEditPropertiesElement extends UmbLitElement } #propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this); + #variantId?: UmbVariantId; @state() _propertyStructure?: Array; + @state() + _dataPaths?: Array; + constructor() { super(); @@ -34,24 +40,41 @@ export class UmbContentWorkspaceViewEditPropertiesElement extends UmbLitElement workspaceContext.structure as unknown as UmbContentTypeStructureManager, ); }); + this.consumeContext(UMB_PROPERTY_DATASET_CONTEXT, (datasetContext) => { + this.#variantId = datasetContext.getVariantId(); + this.#generatePropertyDataPath(); + }); this.observe( this.#propertyStructureHelper.propertyStructure, (propertyStructure) => { this._propertyStructure = propertyStructure; + this.#generatePropertyDataPath(); }, null, ); } + #generatePropertyDataPath() { + if (!this.#variantId || !this._propertyStructure) return; + this._dataPaths = this._propertyStructure.map( + (property) => + `$.values[${UmbDataPathPropertyValueFilter({ + alias: property.alias, + culture: property.variesByCulture ? this.#variantId!.culture : null, + segment: property.variesBySegment ? this.#variantId!.segment : null, + })}].value`, + ); + } + render() { - return this._propertyStructure + return this._propertyStructure && this._dataPaths ? repeat( this._propertyStructure, (property) => property.alias, - (property) => + (property, index) => html` `, ) : ''; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/manifests.ts index 561f903d29..5e3e1ac52a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbCultureRepository } from './culture.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_CULTURE_REPOSITORY_ALIAS = 'Umb.Repository.Culture'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbCultureRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts index b38f9c2533..cefecbe8b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate/manifests.ts index 52c2580961..33f1e8086a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/duplicate/manifests.ts @@ -1,3 +1,4 @@ import { manifest as duplicateKindManifest } from './duplicate.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [duplicateKindManifest]; +export const manifests: Array = [duplicateKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/manifests.ts index 582b6104e2..eb6f76c981 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/duplicate/manifests.ts @@ -1,4 +1,8 @@ import { manifests as duplicateManifests } from './duplicate/manifests.js'; import { manifests as duplicateToManifests } from './duplicate-to/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...duplicateManifests, ...duplicateToManifests]; +export const manifests: Array = [ + ...duplicateManifests, + ...duplicateToManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts index 57623eaa70..88d1336363 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/sort-children-of/modal/sort-children-of-modal.element.ts @@ -146,7 +146,7 @@ export class UmbSortChildrenOfModalElement extends UmbModalBaseElement< render() { return html` - ${this.#renderChildren()} + ${this.#renderChildren()} @@ -155,7 +155,6 @@ export class UmbSortChildrenOfModalElement extends UmbModalBaseElement< #renderChildren() { if (this._children.length === 0) return html`There are no children`; - return html` ${repeat( diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts index de1f6cab4e..a778685a5f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/entity-action.element.ts @@ -1,4 +1,5 @@ import type { UmbEntityAction } from '../entity-action.interface.js'; +import type { UmbEntityActionElement } from '../entity-action-element.interface.js'; import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event'; import { html, nothing, ifDefined, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UUIMenuItemEvent } from '@umbraco-cms/backoffice/external/uui'; @@ -6,10 +7,13 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { ManifestEntityAction, MetaEntityActionDefaultKind } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-entity-action') -export class UmbEntityActionElement< - MetaType extends MetaEntityActionDefaultKind = MetaEntityActionDefaultKind, - ApiType extends UmbEntityAction = UmbEntityAction, -> extends UmbLitElement { +export class UmbEntityActionDefaultElement< + MetaType extends MetaEntityActionDefaultKind = MetaEntityActionDefaultKind, + ApiType extends UmbEntityAction = UmbEntityAction, + > + extends UmbLitElement + implements UmbEntityActionElement +{ #api?: ApiType; // TODO: Do these need to be properties? [NL] @@ -36,6 +40,11 @@ export class UmbEntityActionElement< @state() _href?: string; + async focus() { + await this.updateComplete; + this.shadowRoot?.querySelector('uui-menu-item')?.focus(); + } + async #onClickLabel(event: UUIMenuItemEvent) { if (!this._href) { event.stopPropagation(); @@ -66,10 +75,10 @@ export class UmbEntityActionElement< `; } } -export default UmbEntityActionElement; +export default UmbEntityActionDefaultElement; declare global { interface HTMLElementTagNameMap { - 'umb-entity-action': UmbEntityActionElement; + 'umb-entity-action': UmbEntityActionDefaultElement; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/manifests.ts index e8a0dcdedd..3cb64a6f47 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/default/manifests.ts @@ -1,3 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-element.interface.ts new file mode 100644 index 0000000000..de7365b9b7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-element.interface.ts @@ -0,0 +1,3 @@ +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; + +export interface UmbEntityActionElement extends UmbControllerHostElement {} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts index 3b06e5b891..a9d077242f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/entity-action-list.element.ts @@ -30,6 +30,7 @@ export class UmbEntityActionListElement extends UmbLitElement { return this._props.unique; } public set unique(value: string | null | undefined) { + if (value === this._props.unique) return; this._props.unique = value; this.#generateApiArgs(); this.requestUpdate('_props'); @@ -51,12 +52,14 @@ export class UmbEntityActionListElement extends UmbLitElement { this.#entityContext.setEntityType(this._props.entityType); this.#entityContext.setUnique(this._props.unique); + this.#hasRenderedOnce = false; this._apiArgs = (manifest: ManifestEntityAction) => { return [{ entityType: this._props.entityType!, unique: this._props.unique!, meta: manifest.meta }]; }; } + #hasRenderedOnce?: boolean; render() { return this._filter ? html` @@ -64,7 +67,22 @@ export class UmbEntityActionListElement extends UmbLitElement { type="entityAction" .filter=${this._filter} .elementProps=${this._props} - .apiArgs=${this._apiArgs}> + .apiArgs=${this._apiArgs} + .renderMethod=${(ext: any, i: number) => { + if (!this.#hasRenderedOnce && i === 0) { + // TODO: Replace this block: + ext.component?.updateComplete.then(async () => { + const menuitem = ext.component?.shadowRoot?.querySelector('uui-menu-item'); + menuitem?.updateComplete.then(async () => { + menuitem?.shadowRoot?.querySelector('#label-button')?.focus?.(); + }); + }); + // end of block, with this, when this PR is part of UI Lib: https://github.com/umbraco/Umbraco.UI/pull/789 + // ext.component?.focus(); + this.#hasRenderedOnce = true; + } + return ext.component; + }}> ` : ''; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts index c6591a58f3..05cf739eaa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/index.ts @@ -4,6 +4,7 @@ export * from './entity-action-list.element.js'; export * from './entity-action.event.js'; export * from './entity-action.interface.js'; export * from './types.js'; +export type * from './entity-action-element.interface.js'; export { UmbRequestReloadStructureForEntityEvent } from './request-reload-structure-for-entity.event.js'; export { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from './default/default.action.kind.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts index bbe018524f..a1fe3898be 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/manifests.ts @@ -3,8 +3,9 @@ import { manifests as deleteEntityActionManifests } from './common/delete/manife import { manifests as duplicateEntityActionManifests } from './common/duplicate/manifests.js'; import { manifests as moveEntityActionManifests } from './common/move/manifests.js'; import { manifests as sortChildrenOfEntityActionManifests } from './common/sort-children-of/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...defaultEntityActionManifests, ...deleteEntityActionManifests, ...duplicateEntityActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/manifests.ts index 7b38c042bb..68b0f602fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/manifests.ts @@ -1,7 +1,7 @@ import { UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js'; import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_EXTENSION_COLLECTION_ALIAS = 'Umb.Collection.Extension'; @@ -16,4 +16,8 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests = [collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests]; +export const manifests: Array = [ + collectionManifest, + ...collectionRepositoryManifests, + ...collectionViewManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/repository/manifests.ts index 3a929d8e79..298967e546 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_EXTENSION_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.ExtensionCollection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./extension-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/views/manifests.ts index 004a05d294..fd6ee1d9f1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_EXTENSION_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Extension.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts index de68f3e1cd..7b63b02b4e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/manifests.ts @@ -1,5 +1,10 @@ +import type { ManifestTypes } from '../models/index.js'; import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js'; import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js'; import { manifest as switchConditionManifest } from './switch.condition.js'; -export const manifests = [menuAliasConditionManifest, sectionAliasConditionManifest, switchConditionManifest]; +export const manifests: Array = [ + menuAliasConditionManifest, + sectionAliasConditionManifest, + switchConditionManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts index c1d204e6ba..ab3b172689 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/manifests.ts @@ -2,5 +2,11 @@ import { manifests as conditionManifests } from './conditions/manifests.js'; import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; +import type { ManifestTypes } from './models/index.js'; -export const manifests = [...conditionManifests, ...menuItemManifests, ...workspaceManifests, ...collectionManifests]; +export const manifests: Array = [ + ...conditionManifests, + ...menuItemManifests, + ...workspaceManifests, + ...collectionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/menu-item/manifests.ts index 6604cf0ea2..c50d0a3b4b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/menu-item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestMenuItem } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestMenuItem, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestMenuItem = { type: 'menuItem', @@ -13,4 +13,4 @@ const menuItem: ManifestMenuItem = { }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts index 58a607be4f..1b49c71c2e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts @@ -1,6 +1,5 @@ import type { ConditionTypes } from '../conditions/types.js'; -import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; -import type { UmbEntityAction } from '@umbraco-cms/backoffice/entity-action'; +import type { UmbEntityAction, UmbEntityActionElement } from '@umbraco-cms/backoffice/entity-action'; import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api'; import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal'; @@ -9,7 +8,7 @@ import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@um * For example for content you may wish to create a new document etc */ export interface ManifestEntityAction - extends ManifestElementAndApi>, + extends ManifestElementAndApi>, ManifestWithDynamicConditions { type: 'entityAction'; forEntityTypes: Array; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/icons.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/icons.model.ts new file mode 100644 index 0000000000..97015f568e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/icons.model.ts @@ -0,0 +1,6 @@ +import type { UmbIconDictionary } from '@umbraco-cms/backoffice/icon'; +import type { ManifestPlainJs } from '@umbraco-cms/backoffice/extension-api'; + +export interface ManifestIcons extends ManifestPlainJs<{ default: UmbIconDictionary }> { + type: 'icons'; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts index 3a50d513c9..58cac8ebaa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/index.ts @@ -27,6 +27,8 @@ import type { ManifestExternalLoginProvider } from './external-login-provider.mo import type { ManifestGlobalContext } from './global-context.model.js'; import type { ManifestHeaderApp, ManifestHeaderAppButtonKind } from './header-app.model.js'; import type { ManifestHealthCheck } from './health-check.model.js'; +import type { ManifestIcons } from './icons.model.js'; +import type { ManifestLocalization } from './localization.model.js'; import type { ManifestMenu } from './menu.model.js'; import type { ManifestMenuItem, ManifestMenuItemTreeKind } from './menu-item.model.js'; import type { ManifestModal } from './modal.model.js'; @@ -40,7 +42,6 @@ import type { ManifestSectionView } from './section-view.model.js'; import type { ManifestStore, ManifestTreeStore, ManifestItemStore } from './store.model.js'; import type { ManifestTheme } from './theme.model.js'; import type { ManifestTinyMcePlugin } from './tinymce-plugin.model.js'; -import type { ManifestLocalization } from './localization.model.js'; import type { ManifestTree } from './tree.model.js'; import type { ManifestTreeItem } from './tree-item.model.js'; import type { ManifestUserProfileApp } from './user-profile-app.model.js'; @@ -66,6 +67,7 @@ import type { ManifestBackofficeEntryPoint } from './backoffice-entry-point.mode import type { ManifestEntryPoint } from './entry-point.model.js'; import type { ManifestBase, ManifestBundle, ManifestCondition } from '@umbraco-cms/backoffice/extension-api'; +export type * from './app-entry-point.model.js'; export type * from './auth-provider.model.js'; export type * from './backoffice-entry-point.model.js'; export type * from './block-editor-custom-view.model.js'; @@ -84,6 +86,7 @@ export type * from './external-login-provider.model.js'; export type * from './global-context.model.js'; export type * from './header-app.model.js'; export type * from './health-check.model.js'; +export type * from './icons.model.js'; export type * from './localization.model.js'; export type * from './menu-item.model.js'; export type * from './menu.model.js'; @@ -109,7 +112,6 @@ export type * from './workspace-context.model.js'; export type * from './workspace-footer-app.model.js'; export type * from './workspace-view.model.js'; export type * from './workspace.model.js'; -export type * from './app-entry-point.model.js'; export type ManifestEntityActions = | ManifestEntityAction @@ -163,6 +165,7 @@ export type ManifestTypes = | ManifestHeaderApp | ManifestHeaderAppButtonKind | ManifestHealthCheck + | ManifestIcons | ManifestItemStore | ManifestMenu | ManifestMenuItem diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/workspace/manifests.ts index e117b40154..0b5bbf0afb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/workspace/manifests.ts @@ -1,4 +1,5 @@ import type { + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceView, @@ -20,4 +21,4 @@ const workspaceViews: Array = []; const workspaceActions: Array = []; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context-token.ts new file mode 100644 index 0000000000..a0658a6a47 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context-token.ts @@ -0,0 +1,4 @@ +import type { UmbIconRegistryContext } from './icon-registry.context.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_ICON_REGISTRY_CONTEXT = new UmbContextToken('UmbIconRegistryContext'); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context.ts new file mode 100644 index 0000000000..2dfbcca3bf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-registry.context.ts @@ -0,0 +1,49 @@ +import { UmbIconRegistry } from './icon.registry.js'; +import type { UmbIconDefinition } from './types.js'; +import { UMB_ICON_REGISTRY_CONTEXT } from './icon-registry.context-token.js'; +import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { loadManifestPlainJs } from '@umbraco-cms/backoffice/extension-api'; +import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; +import { type ManifestIcons, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; + +export class UmbIconRegistryContext extends UmbContextBase { + #registry: UmbIconRegistry; + #manifestMap = new Map(); + #icons = new UmbArrayState([], (x) => x.name); + readonly icons = this.#icons.asObservable(); + readonly approvedIcons = this.#icons.asObservablePart((icons) => icons.filter((x) => x.legacy !== true)); + + constructor(host: UmbControllerHost) { + super(host, UMB_ICON_REGISTRY_CONTEXT); + this.#registry = new UmbIconRegistry(); + this.#registry.attach(host.getHostElement()); + + this.observe(this.icons, (icons) => { + //if (icons.length > 0) { + this.#registry.setIcons(icons); + //} + }); + + this.observe(umbExtensionsRegistry.byType('icons'), (manifests) => { + manifests.forEach((manifest) => { + if (this.#manifestMap.has(manifest.alias)) return; + this.#manifestMap.set(manifest.alias, manifest); + // TODO: Should we unInit a entry point if is removed? + this.instantiateEntryPoint(manifest); + }); + }); + } + + async instantiateEntryPoint(manifest: ManifestIcons) { + if (manifest.js) { + const js = await loadManifestPlainJs<{ default?: any }>(manifest.js); + if (!js || !js.default || !Array.isArray(js.default)) { + throw new Error('Icon manifest JS-file must export an array of icons as the default export.'); + } + this.#icons.append(js.default); + } + } +} + +export { UmbIconRegistryContext as api }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.registry.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.registry.ts index ada1f0e660..022241168e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.registry.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.registry.ts @@ -1,5 +1,4 @@ -import icons from './icons/icons.json' assert { type: 'json' }; -import { UUIIconRegistry } from '@umbraco-cms/backoffice/external/uui'; +import { type UUIIconHost, UUIIconRegistry } from '@umbraco-cms/backoffice/external/uui'; interface UmbIconDescriptor { name: string; @@ -13,26 +12,66 @@ interface UmbIconDescriptor { * @description - Icon Registry. Provides icons from the icon manifest. Icons are loaded on demand. All icons are prefixed with 'icon-' */ export class UmbIconRegistry extends UUIIconRegistry { + #initResolve?: () => void; + #init: Promise = new Promise((resolve) => { + this.#initResolve = resolve; + }); + + #icons: UmbIconDescriptor[] = []; + #unhandledProviders: Map = new Map(); + + setIcons(icons: UmbIconDescriptor[]) { + const oldIcons = this.#icons; + this.#icons = icons; + if (this.#initResolve) { + this.#initResolve(); + this.#initResolve = undefined; + } + // Go figure out which of the icons are new. + const newIcons = this.#icons.filter((i) => !oldIcons.find((o) => o.name === i.name)); + newIcons.forEach((icon) => { + // Do we already have a request for this one, then lets initiate the load for those: + const unhandled = this.#unhandledProviders.get(icon.name); + if (unhandled) { + this.#loadIcon(icon.name, unhandled).then(() => { + this.#unhandledProviders.delete(icon.name); + }); + } + }); + } + appendIcons(icons: UmbIconDescriptor[]) { + this.#icons = [...this.#icons, ...icons]; + } /** * @param {string} iconName * @return {*} {boolean} * @memberof UmbIconStore */ acceptIcon(iconName: string): boolean { - const iconManifest = icons.find((i: UmbIconDescriptor) => i.name === iconName); - if (!iconManifest) return false; + const iconProvider = this.provideIcon(iconName); + this.#loadIcon(iconName, iconProvider); + + return true; + } + + async #loadIcon(iconName: string, iconProvider: UUIIconHost): Promise { + await this.#init; + const iconManifest = this.#icons.find((i: UmbIconDescriptor) => i.name === iconName); + // Icon not found, so lets add it to a list of unhandled requests. + if (!iconManifest) { + this.#unhandledProviders.set(iconName, iconProvider); + return false; + } - const icon = this.provideIcon(iconName); const iconPath = iconManifest.path; import(/* @vite-ignore */ iconPath) .then((iconModule) => { - icon.svg = iconModule.default; + iconProvider.svg = iconModule.default; }) .catch((err) => { console.error(`Failed to load icon ${iconName} on path ${iconPath}`, err.message); }); - return true; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.stories.ts index bcb3013f5b..180c09f639 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon.stories.ts @@ -1,5 +1,5 @@ import type { Meta, Story } from '@storybook/web-components'; -import icons from './icons/icons.json'; +import icons from './icons/icons.js'; import { html, repeat } from '@umbraco-cms/backoffice/external/lit'; export default { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.json b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.json deleted file mode 100644 index 70d9dce5be..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.json +++ /dev/null @@ -1 +0,0 @@ -[{"name":"icon-activity","path":"./icons/icon-activity.js"},{"name":"icon-add","path":"./icons/icon-add.js"},{"name":"icon-addressbook","path":"./icons/icon-addressbook.js"},{"name":"icon-alarm-clock","path":"./icons/icon-alarm-clock.js"},{"name":"icon-alert-alt","path":"./icons/icon-alert-alt.js"},{"name":"icon-alert","path":"./icons/icon-alert.js"},{"name":"icon-alt","path":"./icons/icon-alt.js"},{"name":"icon-anchor","path":"./icons/icon-anchor.js"},{"name":"icon-app","path":"./icons/icon-app.js"},{"name":"icon-application-error","path":"./icons/icon-application-error.js"},{"name":"icon-application-window-alt","path":"./icons/icon-application-window-alt.js"},{"name":"icon-application-window","path":"./icons/icon-application-window.js"},{"name":"icon-arrivals","path":"./icons/icon-arrivals.js"},{"name":"icon-arrow-down","path":"./icons/icon-arrow-down.js"},{"name":"icon-arrow-left","path":"./icons/icon-arrow-left.js"},{"name":"icon-arrow-right","path":"./icons/icon-arrow-right.js"},{"name":"icon-arrow-up","path":"./icons/icon-arrow-up.js"},{"name":"icon-attachment","path":"./icons/icon-attachment.js"},{"name":"icon-autofill","path":"./icons/icon-autofill.js"},{"name":"icon-award","path":"./icons/icon-award.js"},{"name":"icon-axis-rotation-2","path":"./icons/icon-axis-rotation-2.js"},{"name":"icon-axis-rotation-3","path":"./icons/icon-axis-rotation-3.js"},{"name":"icon-axis-rotation","path":"./icons/icon-axis-rotation.js"},{"name":"icon-backspace","path":"./icons/icon-backspace.js"},{"name":"icon-badge-add","path":"./icons/icon-badge-add.js"},{"name":"icon-badge-remove","path":"./icons/icon-badge-remove.js"},{"name":"icon-badge-restricted","legacy":true,"path":"./icons/icon-badge-restricted.js"},{"name":"icon-ball","path":"./icons/icon-ball.js"},{"name":"icon-bar-chart","path":"./icons/icon-bar-chart.js"},{"name":"icon-barcode","path":"./icons/icon-barcode.js"},{"name":"icon-bars","path":"./icons/icon-bars.js"},{"name":"icon-battery-full","path":"./icons/icon-battery-full.js"},{"name":"icon-battery-low","path":"./icons/icon-battery-low.js"},{"name":"icon-beer-glass","path":"./icons/icon-beer-glass.js"},{"name":"icon-bell-off","path":"./icons/icon-bell-off.js"},{"name":"icon-bell","path":"./icons/icon-bell.js"},{"name":"icon-binarycode","path":"./icons/icon-binarycode.js"},{"name":"icon-bird","path":"./icons/icon-bird.js"},{"name":"icon-birthday-cake","path":"./icons/icon-birthday-cake.js"},{"name":"icon-block","path":"./icons/icon-block.js"},{"name":"icon-bluetooth","path":"./icons/icon-bluetooth.js"},{"name":"icon-boat-shipping","path":"./icons/icon-boat-shipping.js"},{"name":"icon-bones","path":"./icons/icon-bones.js"},{"name":"icon-book-alt-2","path":"./icons/icon-book-alt-2.js"},{"name":"icon-book-alt","path":"./icons/icon-book-alt.js"},{"name":"icon-book","path":"./icons/icon-book.js"},{"name":"icon-bookmark","path":"./icons/icon-bookmark.js"},{"name":"icon-books","path":"./icons/icon-books.js"},{"name":"icon-box-alt","path":"./icons/icon-box-alt.js"},{"name":"icon-box-open","path":"./icons/icon-box-open.js"},{"name":"icon-box","path":"./icons/icon-box.js"},{"name":"icon-brackets","path":"./icons/icon-brackets.js"},{"name":"icon-brick","path":"./icons/icon-brick.js"},{"name":"icon-briefcase","path":"./icons/icon-briefcase.js"},{"name":"icon-browser-window","path":"./icons/icon-browser-window.js"},{"name":"icon-brush-alt-2","path":"./icons/icon-brush-alt-2.js"},{"name":"icon-brush-alt","path":"./icons/icon-brush-alt.js"},{"name":"icon-brush","path":"./icons/icon-brush.js"},{"name":"icon-bug","path":"./icons/icon-bug.js"},{"name":"icon-bulleted-list","path":"./icons/icon-bulleted-list.js"},{"name":"icon-burn","path":"./icons/icon-burn.js"},{"name":"icon-bus","path":"./icons/icon-bus.js"},{"name":"icon-calculator","path":"./icons/icon-calculator.js"},{"name":"icon-calendar-alt","path":"./icons/icon-calendar-alt.js"},{"name":"icon-calendar","path":"./icons/icon-calendar.js"},{"name":"icon-camcorder","legacy":true,"path":"./icons/icon-camcorder.js"},{"name":"icon-camera-roll","path":"./icons/icon-camera-roll.js"},{"name":"icon-candy","path":"./icons/icon-candy.js"},{"name":"icon-caps-lock","path":"./icons/icon-caps-lock.js"},{"name":"icon-car","path":"./icons/icon-car.js"},{"name":"icon-categories","path":"./icons/icon-categories.js"},{"name":"icon-certificate","path":"./icons/icon-certificate.js"},{"name":"icon-chart-curve","path":"./icons/icon-chart-curve.js"},{"name":"icon-chart","path":"./icons/icon-chart.js"},{"name":"icon-chat-active","legacy":true,"path":"./icons/icon-chat-active.js"},{"name":"icon-chat","path":"./icons/icon-chat.js"},{"name":"icon-check","path":"./icons/icon-check.js"},{"name":"icon-checkbox-dotted","path":"./icons/icon-checkbox-dotted.js"},{"name":"icon-checkbox-empty","legacy":true,"path":"./icons/icon-checkbox-empty.js"},{"name":"icon-checkbox","path":"./icons/icon-checkbox.js"},{"name":"icon-chip-alt","legacy":true,"path":"./icons/icon-chip-alt.js"},{"name":"icon-chip","path":"./icons/icon-chip.js"},{"name":"icon-cinema","path":"./icons/icon-cinema.js"},{"name":"icon-circle-dotted-active","path":"./icons/icon-circle-dotted-active.js"},{"name":"icon-circle-dotted","path":"./icons/icon-circle-dotted.js"},{"name":"icon-circuits","path":"./icons/icon-circuits.js"},{"name":"icon-client","legacy":true,"path":"./icons/icon-client.js"},{"name":"icon-cloud-drive","path":"./icons/icon-cloud-drive.js"},{"name":"icon-cloud-upload","path":"./icons/icon-cloud-upload.js"},{"name":"icon-cloud","path":"./icons/icon-cloud.js"},{"name":"icon-cloudy","path":"./icons/icon-cloudy.js"},{"name":"icon-clubs","path":"./icons/icon-clubs.js"},{"name":"icon-cocktail","path":"./icons/icon-cocktail.js"},{"name":"icon-code","path":"./icons/icon-code.js"},{"name":"icon-coffee","path":"./icons/icon-coffee.js"},{"name":"icon-coin-dollar","path":"./icons/icon-coin-dollar.js"},{"name":"icon-coin-euro","path":"./icons/icon-coin-euro.js"},{"name":"icon-coin-pound","path":"./icons/icon-coin-pound.js"},{"name":"icon-coin-yen","path":"./icons/icon-coin-yen.js"},{"name":"icon-coins-alt","legacy":true,"path":"./icons/icon-coins-alt.js"},{"name":"icon-coins","path":"./icons/icon-coins.js"},{"name":"icon-color-bucket","path":"./icons/icon-color-bucket.js"},{"name":"icon-colorpicker","path":"./icons/icon-colorpicker.js"},{"name":"icon-columns","path":"./icons/icon-columns.js"},{"name":"icon-combination-lock-open","path":"./icons/icon-combination-lock-open.js"},{"name":"icon-combination-lock","path":"./icons/icon-combination-lock.js"},{"name":"icon-command","path":"./icons/icon-command.js"},{"name":"icon-company","path":"./icons/icon-company.js"},{"name":"icon-compress","path":"./icons/icon-compress.js"},{"name":"icon-connection","path":"./icons/icon-connection.js"},{"name":"icon-console","path":"./icons/icon-console.js"},{"name":"icon-contrast","path":"./icons/icon-contrast.js"},{"name":"icon-conversation-alt","path":"./icons/icon-conversation-alt.js"},{"name":"icon-conversation","legacy":true,"path":"./icons/icon-conversation.js"},{"name":"icon-coverflow","path":"./icons/icon-coverflow.js"},{"name":"icon-credit-card-alt","legacy":true,"path":"./icons/icon-credit-card-alt.js"},{"name":"icon-credit-card","path":"./icons/icon-credit-card.js"},{"name":"icon-crop","path":"./icons/icon-crop.js"},{"name":"icon-crosshair","path":"./icons/icon-crosshair.js"},{"name":"icon-crown-alt","legacy":true,"path":"./icons/icon-crown-alt.js"},{"name":"icon-crown","path":"./icons/icon-crown.js"},{"name":"icon-cupcake","legacy":true,"path":"./icons/icon-cupcake.js"},{"name":"icon-curve","path":"./icons/icon-curve.js"},{"name":"icon-cut","path":"./icons/icon-cut.js"},{"name":"icon-dashboard","path":"./icons/icon-dashboard.js"},{"name":"icon-defrag","path":"./icons/icon-defrag.js"},{"name":"icon-delete-key","path":"./icons/icon-delete-key.js"},{"name":"icon-delete","path":"./icons/icon-delete.js"},{"name":"icon-departure","path":"./icons/icon-departure.js"},{"name":"icon-desktop","legacy":true,"path":"./icons/icon-desktop.js"},{"name":"icon-diagnostics","path":"./icons/icon-diagnostics.js"},{"name":"icon-diagonal-arrow-alt","path":"./icons/icon-diagonal-arrow-alt.js"},{"name":"icon-diagonal-arrow","path":"./icons/icon-diagonal-arrow.js"},{"name":"icon-diamond","path":"./icons/icon-diamond.js"},{"name":"icon-diamonds","path":"./icons/icon-diamonds.js"},{"name":"icon-dice","path":"./icons/icon-dice.js"},{"name":"icon-diploma-alt","legacy":true,"path":"./icons/icon-diploma-alt.js"},{"name":"icon-diploma","path":"./icons/icon-diploma.js"},{"name":"icon-directions-alt","path":"./icons/icon-directions-alt.js"},{"name":"icon-directions","path":"./icons/icon-directions.js"},{"name":"icon-disc","path":"./icons/icon-disc.js"},{"name":"icon-disk-image","path":"./icons/icon-disk-image.js"},{"name":"icon-display","path":"./icons/icon-display.js"},{"name":"icon-dna","path":"./icons/icon-dna.js"},{"name":"icon-dock-connector","path":"./icons/icon-dock-connector.js"},{"name":"icon-document-dashed-line","path":"./icons/icon-document-dashed-line.js"},{"name":"icon-document","path":"./icons/icon-document.js"},{"name":"icon-documents","path":"./icons/icon-documents.js"},{"name":"icon-donate","legacy":true,"path":"./icons/icon-donate.js"},{"name":"icon-door-open-alt","legacy":true,"path":"./icons/icon-door-open-alt.js"},{"name":"icon-door-open","path":"./icons/icon-door-open.js"},{"name":"icon-download-alt","path":"./icons/icon-download-alt.js"},{"name":"icon-download","path":"./icons/icon-download.js"},{"name":"icon-drop","path":"./icons/icon-drop.js"},{"name":"icon-eco","path":"./icons/icon-eco.js"},{"name":"icon-economy","legacy":true,"path":"./icons/icon-economy.js"},{"name":"icon-edit","path":"./icons/icon-edit.js"},{"name":"icon-employee","legacy":true,"path":"./icons/icon-employee.js"},{"name":"icon-energy-saving-bulb","path":"./icons/icon-energy-saving-bulb.js"},{"name":"icon-enter","path":"./icons/icon-enter.js"},{"name":"icon-equalizer","path":"./icons/icon-equalizer.js"},{"name":"icon-escape","path":"./icons/icon-escape.js"},{"name":"icon-ethernet","path":"./icons/icon-ethernet.js"},{"name":"icon-eye","path":"./icons/icon-eye.js"},{"name":"icon-exit-fullscreen","path":"./icons/icon-exit-fullscreen.js"},{"name":"icon-facebook-like","path":"./icons/icon-facebook-like.js"},{"name":"icon-factory","path":"./icons/icon-factory.js"},{"name":"icon-favorite","path":"./icons/icon-favorite.js"},{"name":"icon-file-cabinet","path":"./icons/icon-file-cabinet.js"},{"name":"icon-files","path":"./icons/icon-files.js"},{"name":"icon-filter-arrows","path":"./icons/icon-filter-arrows.js"},{"name":"icon-filter","path":"./icons/icon-filter.js"},{"name":"icon-fingerprint","path":"./icons/icon-fingerprint.js"},{"name":"icon-fire","path":"./icons/icon-fire.js"},{"name":"icon-firewire","legacy":true,"path":"./icons/icon-firewire.js"},{"name":"icon-flag-alt","path":"./icons/icon-flag-alt.js"},{"name":"icon-flag","path":"./icons/icon-flag.js"},{"name":"icon-flash","path":"./icons/icon-flash.js"},{"name":"icon-flashlight","path":"./icons/icon-flashlight.js"},{"name":"icon-flowerpot","path":"./icons/icon-flowerpot.js"},{"name":"icon-folder","path":"./icons/icon-folder.js"},{"name":"icon-folders","path":"./icons/icon-folders.js"},{"name":"icon-font","path":"./icons/icon-font.js"},{"name":"icon-food","path":"./icons/icon-food.js"},{"name":"icon-footprints","path":"./icons/icon-footprints.js"},{"name":"icon-forking","path":"./icons/icon-forking.js"},{"name":"icon-frame-alt","legacy":true,"path":"./icons/icon-frame-alt.js"},{"name":"icon-frame","path":"./icons/icon-frame.js"},{"name":"icon-fullscreen-alt","path":"./icons/icon-fullscreen-alt.js"},{"name":"icon-fullscreen","path":"./icons/icon-fullscreen.js"},{"name":"icon-game","path":"./icons/icon-game.js"},{"name":"icon-geometry","legacy":true,"path":"./icons/icon-geometry.js"},{"name":"icon-gift","path":"./icons/icon-gift.js"},{"name":"icon-glasses","path":"./icons/icon-glasses.js"},{"name":"icon-globe-alt","path":"./icons/icon-globe-alt.js"},{"name":"icon-globe-asia","legacy":true,"path":"./icons/icon-globe-asia.js"},{"name":"icon-globe-europe-africa","legacy":true,"path":"./icons/icon-globe-europe-africa.js"},{"name":"icon-globe-inverted-america","legacy":true,"path":"./icons/icon-globe-inverted-america.js"},{"name":"icon-globe-inverted-asia","legacy":true,"path":"./icons/icon-globe-inverted-asia.js"},{"name":"icon-globe-inverted-europe-africa","legacy":true,"path":"./icons/icon-globe-inverted-europe-africa.js"},{"name":"icon-globe","path":"./icons/icon-globe.js"},{"name":"icon-gps","path":"./icons/icon-gps.js"},{"name":"icon-graduate","path":"./icons/icon-graduate.js"},{"name":"icon-grid","path":"./icons/icon-grid.js"},{"name":"icon-hammer","path":"./icons/icon-hammer.js"},{"name":"icon-hand-active-alt","legacy":true,"path":"./icons/icon-hand-active-alt.js"},{"name":"icon-hand-active","path":"./icons/icon-hand-active.js"},{"name":"icon-hand-pointer-alt","legacy":true,"path":"./icons/icon-hand-pointer-alt.js"},{"name":"icon-hand-pointer","path":"./icons/icon-hand-pointer.js"},{"name":"icon-handshake","path":"./icons/icon-handshake.js"},{"name":"icon-handtool-alt","legacy":true,"path":"./icons/icon-handtool-alt.js"},{"name":"icon-handtool","path":"./icons/icon-handtool.js"},{"name":"icon-hard-drive-alt","legacy":true,"path":"./icons/icon-hard-drive-alt.js"},{"name":"icon-hard-drive","legacy":true,"path":"./icons/icon-hard-drive.js"},{"name":"icon-headphones","path":"./icons/icon-headphones.js"},{"name":"icon-headset","legacy":true,"path":"./icons/icon-headset.js"},{"name":"icon-hearts","path":"./icons/icon-hearts.js"},{"name":"icon-height","path":"./icons/icon-height.js"},{"name":"icon-help-alt","path":"./icons/icon-help-alt.js"},{"name":"icon-help","path":"./icons/icon-help.js"},{"name":"icon-home","path":"./icons/icon-home.js"},{"name":"icon-hourglass","path":"./icons/icon-hourglass.js"},{"name":"icon-imac","legacy":true,"path":"./icons/icon-imac.js"},{"name":"icon-inbox-full","legacy":true,"path":"./icons/icon-inbox-full.js"},{"name":"icon-inbox","path":"./icons/icon-inbox.js"},{"name":"icon-indent","path":"./icons/icon-indent.js"},{"name":"icon-infinity","path":"./icons/icon-infinity.js"},{"name":"icon-info","path":"./icons/icon-info.js"},{"name":"icon-invoice","legacy":true,"path":"./icons/icon-invoice.js"},{"name":"icon-ipad","legacy":true,"path":"./icons/icon-ipad.js"},{"name":"icon-iphone","legacy":true,"path":"./icons/icon-iphone.js"},{"name":"icon-item-arrangement","legacy":true,"path":"./icons/icon-item-arrangement.js"},{"name":"icon-junk","path":"./icons/icon-junk.js"},{"name":"icon-key","path":"./icons/icon-key.js"},{"name":"icon-keyboard","path":"./icons/icon-keyboard.js"},{"name":"icon-lab","path":"./icons/icon-lab.js"},{"name":"icon-laptop","path":"./icons/icon-laptop.js"},{"name":"icon-layers-alt","legacy":true,"path":"./icons/icon-layers-alt.js"},{"name":"icon-layers","path":"./icons/icon-layers.js"},{"name":"icon-layout","path":"./icons/icon-layout.js"},{"name":"icon-left-double-arrow","path":"./icons/icon-left-double-arrow.js"},{"name":"icon-legal","path":"./icons/icon-legal.js"},{"name":"icon-lense","legacy":true,"path":"./icons/icon-lense.js"},{"name":"icon-library","path":"./icons/icon-library.js"},{"name":"icon-light-down","path":"./icons/icon-light-down.js"},{"name":"icon-light-up","path":"./icons/icon-light-up.js"},{"name":"icon-lightbulb-active","path":"./icons/icon-lightbulb-active.js"},{"name":"icon-lightbulb","legacy":true,"path":"./icons/icon-lightbulb.js"},{"name":"icon-lightning","path":"./icons/icon-lightning.js"},{"name":"icon-link","path":"./icons/icon-link.js"},{"name":"icon-list","path":"./icons/icon-list.js"},{"name":"icon-load","legacy":true,"path":"./icons/icon-load.js"},{"name":"icon-loading","legacy":true,"path":"./icons/icon-loading.js"},{"name":"icon-locate","path":"./icons/icon-locate.js"},{"name":"icon-location-near-me","legacy":true,"path":"./icons/icon-location-near-me.js"},{"name":"icon-location-nearby","path":"./icons/icon-location-nearby.js"},{"name":"icon-lock","path":"./icons/icon-lock.js"},{"name":"icon-log-out","path":"./icons/icon-log-out.js"},{"name":"icon-logout","legacy":true,"path":"./icons/icon-logout.js"},{"name":"icon-loupe","legacy":true,"path":"./icons/icon-loupe.js"},{"name":"icon-magnet","path":"./icons/icon-magnet.js"},{"name":"icon-mailbox","path":"./icons/icon-mailbox.js"},{"name":"icon-map-alt","path":"./icons/icon-map-alt.js"},{"name":"icon-map-location","legacy":true,"path":"./icons/icon-map-location.js"},{"name":"icon-map-marker","path":"./icons/icon-map-marker.js"},{"name":"icon-map","path":"./icons/icon-map.js"},{"name":"icon-medal","path":"./icons/icon-medal.js"},{"name":"icon-medical-emergency","path":"./icons/icon-medical-emergency.js"},{"name":"icon-medicine","path":"./icons/icon-medicine.js"},{"name":"icon-meeting","legacy":true,"path":"./icons/icon-meeting.js"},{"name":"icon-megaphone","path":"./icons/icon-megaphone.js"},{"name":"icon-merge","path":"./icons/icon-merge.js"},{"name":"icon-message-open","path":"./icons/icon-message-open.js"},{"name":"icon-message-unopened","legacy":true,"path":"./icons/icon-message-unopened.js"},{"name":"icon-message","path":"./icons/icon-message.js"},{"name":"icon-microscope","path":"./icons/icon-microscope.js"},{"name":"icon-mindmap","legacy":true,"path":"./icons/icon-mindmap.js"},{"name":"icon-mobile","path":"./icons/icon-mobile.js"},{"name":"icon-mountain","path":"./icons/icon-mountain.js"},{"name":"icon-mouse-cursor","path":"./icons/icon-mouse-cursor.js"},{"name":"icon-mouse","path":"./icons/icon-mouse.js"},{"name":"icon-movie-alt","path":"./icons/icon-movie-alt.js"},{"name":"icon-movie","path":"./icons/icon-movie.js"},{"name":"icon-multiple-credit-cards","path":"./icons/icon-multiple-credit-cards.js"},{"name":"icon-multiple-windows","path":"./icons/icon-multiple-windows.js"},{"name":"icon-music","path":"./icons/icon-music.js"},{"name":"icon-name-badge","legacy":true,"path":"./icons/icon-name-badge.js"},{"name":"icon-navigation-bottom","legacy":true,"path":"./icons/icon-navigation-bottom.js"},{"name":"icon-navigation-down","legacy":true,"path":"./icons/icon-navigation-down.js"},{"name":"icon-navigation-first","legacy":true,"path":"./icons/icon-navigation-first.js"},{"name":"icon-navigation-horizontal","legacy":true,"path":"./icons/icon-navigation-horizontal.js"},{"name":"icon-navigation-last","legacy":true,"path":"./icons/icon-navigation-last.js"},{"name":"icon-navigation-left","legacy":true,"path":"./icons/icon-navigation-left.js"},{"name":"icon-navigation-right","legacy":true,"path":"./icons/icon-navigation-right.js"},{"name":"icon-navigation-road","legacy":true,"path":"./icons/icon-navigation-road.js"},{"name":"icon-navigation-top","legacy":true,"path":"./icons/icon-navigation-top.js"},{"name":"icon-navigation-up","legacy":true,"path":"./icons/icon-navigation-up.js"},{"name":"icon-navigation-vertical","legacy":true,"path":"./icons/icon-navigation-vertical.js"},{"name":"icon-navigation","legacy":true,"path":"./icons/icon-navigation.js"},{"name":"icon-navigational-arrow","path":"./icons/icon-navigational-arrow.js"},{"name":"icon-network-alt","path":"./icons/icon-network-alt.js"},{"name":"icon-newspaper-alt","legacy":true,"path":"./icons/icon-newspaper-alt.js"},{"name":"icon-newspaper","path":"./icons/icon-newspaper.js"},{"name":"icon-next-media","legacy":true,"path":"./icons/icon-next-media.js"},{"name":"icon-next","legacy":true,"path":"./icons/icon-next.js"},{"name":"icon-nodes","legacy":true,"path":"./icons/icon-nodes.js"},{"name":"icon-notepad-alt","legacy":true,"path":"./icons/icon-notepad-alt.js"},{"name":"icon-notepad","path":"./icons/icon-notepad.js"},{"name":"icon-old-key","path":"./icons/icon-old-key.js"},{"name":"icon-old-phone","legacy":true,"path":"./icons/icon-old-phone.js"},{"name":"icon-operator","path":"./icons/icon-operator.js"},{"name":"icon-ordered-list","path":"./icons/icon-ordered-list.js"},{"name":"icon-out","path":"./icons/icon-out.js"},{"name":"icon-outbox","legacy":true,"path":"./icons/icon-outbox.js"},{"name":"icon-outdent","path":"./icons/icon-outdent.js"},{"name":"icon-page-add","path":"./icons/icon-page-add.js"},{"name":"icon-page-down","path":"./icons/icon-page-down.js"},{"name":"icon-page-remove","path":"./icons/icon-page-remove.js"},{"name":"icon-page-restricted","path":"./icons/icon-page-restricted.js"},{"name":"icon-page-up","path":"./icons/icon-page-up.js"},{"name":"icon-paint-roller","legacy":true,"path":"./icons/icon-paint-roller.js"},{"name":"icon-palette","path":"./icons/icon-palette.js"},{"name":"icon-panel-show","path":"./icons/icon-panel-show.js"},{"name":"icon-pannel-close","path":"./icons/icon-pannel-close.js"},{"name":"icon-paper-bag","legacy":true,"path":"./icons/icon-paper-bag.js"},{"name":"icon-paper-plane-alt","path":"./icons/icon-paper-plane-alt.js"},{"name":"icon-paper-plane","path":"./icons/icon-paper-plane.js"},{"name":"icon-partly-cloudy","path":"./icons/icon-partly-cloudy.js"},{"name":"icon-paste-in","legacy":true,"path":"./icons/icon-paste-in.js"},{"name":"icon-pause","path":"./icons/icon-pause.js"},{"name":"icon-pc","legacy":true,"path":"./icons/icon-pc.js"},{"name":"icon-people-alt-2","legacy":true,"path":"./icons/icon-people-alt-2.js"},{"name":"icon-people-alt","legacy":true,"path":"./icons/icon-people-alt.js"},{"name":"icon-people-female","legacy":true,"path":"./icons/icon-people-female.js"},{"name":"icon-people","path":"./icons/icon-people.js"},{"name":"icon-phone-ring","path":"./icons/icon-phone-ring.js"},{"name":"icon-phone","path":"./icons/icon-phone.js"},{"name":"icon-photo-album","path":"./icons/icon-photo-album.js"},{"name":"icon-picture","path":"./icons/icon-picture.js"},{"name":"icon-pictures-alt-2","path":"./icons/icon-pictures-alt-2.js"},{"name":"icon-pictures-alt","legacy":true,"path":"./icons/icon-pictures-alt.js"},{"name":"icon-pictures","path":"./icons/icon-pictures.js"},{"name":"icon-pie-chart","path":"./icons/icon-pie-chart.js"},{"name":"icon-piggy-bank","path":"./icons/icon-piggy-bank.js"},{"name":"icon-pin-location","path":"./icons/icon-pin-location.js"},{"name":"icon-plane","path":"./icons/icon-plane.js"},{"name":"icon-planet","legacy":true,"path":"./icons/icon-planet.js"},{"name":"icon-play","path":"./icons/icon-play.js"},{"name":"icon-playing-cards","legacy":true,"path":"./icons/icon-playing-cards.js"},{"name":"icon-playlist","path":"./icons/icon-playlist.js"},{"name":"icon-plugin","path":"./icons/icon-plugin.js"},{"name":"icon-podcast","path":"./icons/icon-podcast.js"},{"name":"icon-poll","legacy":true,"path":"./icons/icon-poll.js"},{"name":"icon-post-it","path":"./icons/icon-post-it.js"},{"name":"icon-power-outlet","legacy":true,"path":"./icons/icon-power-outlet.js"},{"name":"icon-power","path":"./icons/icon-power.js"},{"name":"icon-presentation","path":"./icons/icon-presentation.js"},{"name":"icon-previous-media","path":"./icons/icon-previous-media.js"},{"name":"icon-previous","path":"./icons/icon-previous.js"},{"name":"icon-price-dollar","legacy":true,"path":"./icons/icon-price-dollar.js"},{"name":"icon-price-euro","legacy":true,"path":"./icons/icon-price-euro.js"},{"name":"icon-price-pound","legacy":true,"path":"./icons/icon-price-pound.js"},{"name":"icon-price-yen","legacy":true,"path":"./icons/icon-price-yen.js"},{"name":"icon-print","path":"./icons/icon-print.js"},{"name":"icon-printer-alt","legacy":true,"path":"./icons/icon-printer-alt.js"},{"name":"icon-projector","path":"./icons/icon-projector.js"},{"name":"icon-pulse","path":"./icons/icon-pulse.js"},{"name":"icon-pushpin","path":"./icons/icon-pushpin.js"},{"name":"icon-qr-code","path":"./icons/icon-qr-code.js"},{"name":"icon-quote","path":"./icons/icon-quote.js"},{"name":"icon-radio-alt","path":"./icons/icon-radio-alt.js"},{"name":"icon-radio-receiver","path":"./icons/icon-radio-receiver.js"},{"name":"icon-radio","path":"./icons/icon-radio.js"},{"name":"icon-rain","path":"./icons/icon-rain.js"},{"name":"icon-rate","legacy":true,"path":"./icons/icon-rate.js"},{"name":"icon-re-post","path":"./icons/icon-re-post.js"},{"name":"icon-readonly","legacy":true,"path":"./icons/icon-readonly.js"},{"name":"icon-receipt-alt","path":"./icons/icon-receipt-alt.js"},{"name":"icon-reception","path":"./icons/icon-reception.js"},{"name":"icon-record","legacy":true,"path":"./icons/icon-record.js"},{"name":"icon-rectangle-ellipsis","path":"./icons/icon-rectangle-ellipsis.js"},{"name":"icon-redo","path":"./icons/icon-redo.js"},{"name":"icon-refresh","path":"./icons/icon-refresh.js"},{"name":"icon-remote","legacy":true,"path":"./icons/icon-remote.js"},{"name":"icon-remove","path":"./icons/icon-remove.js"},{"name":"icon-repeat-one","path":"./icons/icon-repeat-one.js"},{"name":"icon-repeat","path":"./icons/icon-repeat.js"},{"name":"icon-reply-arrow","path":"./icons/icon-reply-arrow.js"},{"name":"icon-resize","path":"./icons/icon-resize.js"},{"name":"icon-return-to-top","legacy":true,"path":"./icons/icon-return-to-top.js"},{"name":"icon-right-double-arrow","legacy":true,"path":"./icons/icon-right-double-arrow.js"},{"name":"icon-roadsign","legacy":true,"path":"./icons/icon-roadsign.js"},{"name":"icon-rocket","path":"./icons/icon-rocket.js"},{"name":"icon-rss","path":"./icons/icon-rss.js"},{"name":"icon-ruler-alt","path":"./icons/icon-ruler-alt.js"},{"name":"icon-ruler","path":"./icons/icon-ruler.js"},{"name":"icon-satellite-dish","path":"./icons/icon-satellite-dish.js"},{"name":"icon-save","path":"./icons/icon-save.js"},{"name":"icon-scan","path":"./icons/icon-scan.js"},{"name":"icon-school","path":"./icons/icon-school.js"},{"name":"icon-screensharing","path":"./icons/icon-screensharing.js"},{"name":"icon-script-alt","legacy":true,"path":"./icons/icon-script-alt.js"},{"name":"icon-script","path":"./icons/icon-script.js"},{"name":"icon-scull","path":"./icons/icon-scull.js"},{"name":"icon-search","path":"./icons/icon-search.js"},{"name":"icon-sensor","path":"./icons/icon-sensor.js"},{"name":"icon-server-alt","legacy":true,"path":"./icons/icon-server-alt.js"},{"name":"icon-server","path":"./icons/icon-server.js"},{"name":"icon-settings-alt","legacy":true,"path":"./icons/icon-settings-alt.js"},{"name":"icon-settings","path":"./icons/icon-settings.js"},{"name":"icon-share-alt","path":"./icons/icon-share-alt.js"},{"name":"icon-share","path":"./icons/icon-share.js"},{"name":"icon-sharing-iphone","path":"./icons/icon-sharing-iphone.js"},{"name":"icon-shield","path":"./icons/icon-shield.js"},{"name":"icon-shift","path":"./icons/icon-shift.js"},{"name":"icon-shipping-box","path":"./icons/icon-shipping-box.js"},{"name":"icon-shipping","path":"./icons/icon-shipping.js"},{"name":"icon-shoe","path":"./icons/icon-shoe.js"},{"name":"icon-shopping-basket-alt-2","legacy":true,"path":"./icons/icon-shopping-basket-alt-2.js"},{"name":"icon-shopping-basket-alt","path":"./icons/icon-shopping-basket-alt.js"},{"name":"icon-shopping-basket","path":"./icons/icon-shopping-basket.js"},{"name":"icon-shuffle","path":"./icons/icon-shuffle.js"},{"name":"icon-sience","path":"./icons/icon-sience.js"},{"name":"icon-single-note","path":"./icons/icon-single-note.js"},{"name":"icon-sitemap","legacy":true,"path":"./icons/icon-sitemap.js"},{"name":"icon-sleep","path":"./icons/icon-sleep.js"},{"name":"icon-slideshow","legacy":true,"path":"./icons/icon-slideshow.js"},{"name":"icon-smiley-inverted","legacy":true,"path":"./icons/icon-smiley-inverted.js"},{"name":"icon-smiley","path":"./icons/icon-smiley.js"},{"name":"icon-snow","path":"./icons/icon-snow.js"},{"name":"icon-sound-low","path":"./icons/icon-sound-low.js"},{"name":"icon-sound-medium","legacy":true,"path":"./icons/icon-sound-medium.js"},{"name":"icon-sound-off","path":"./icons/icon-sound-off.js"},{"name":"icon-sound-waves","path":"./icons/icon-sound-waves.js"},{"name":"icon-sound","path":"./icons/icon-sound.js"},{"name":"icon-spades","path":"./icons/icon-spades.js"},{"name":"icon-speaker","path":"./icons/icon-speaker.js"},{"name":"icon-speed-gauge","path":"./icons/icon-speed-gauge.js"},{"name":"icon-split-alt","path":"./icons/icon-split-alt.js"},{"name":"icon-split","path":"./icons/icon-split.js"},{"name":"icon-sprout","path":"./icons/icon-sprout.js"},{"name":"icon-squiggly-line","legacy":true,"path":"./icons/icon-squiggly-line.js"},{"name":"icon-ssd","legacy":true,"path":"./icons/icon-ssd.js"},{"name":"icon-stacked-disks","legacy":true,"path":"./icons/icon-stacked-disks.js"},{"name":"icon-stamp","legacy":true,"path":"./icons/icon-stamp.js"},{"name":"icon-stop-alt","path":"./icons/icon-stop-alt.js"},{"name":"icon-stop-hand","legacy":true,"path":"./icons/icon-stop-hand.js"},{"name":"icon-stop","path":"./icons/icon-stop.js"},{"name":"icon-store","path":"./icons/icon-store.js"},{"name":"icon-stream","legacy":true,"path":"./icons/icon-stream.js"},{"name":"icon-sunny","path":"./icons/icon-sunny.js"},{"name":"icon-sweatshirt","legacy":true,"path":"./icons/icon-sweatshirt.js"},{"name":"icon-sync","path":"./icons/icon-sync.js"},{"name":"icon-t-shirt","path":"./icons/icon-t-shirt.js"},{"name":"icon-tab-key","path":"./icons/icon-tab-key.js"},{"name":"icon-tag","path":"./icons/icon-tag.js"},{"name":"icon-tags","path":"./icons/icon-tags.js"},{"name":"icon-takeaway-cup","legacy":true,"path":"./icons/icon-takeaway-cup.js"},{"name":"icon-target","path":"./icons/icon-target.js"},{"name":"icon-temperatrure-alt","path":"./icons/icon-temperatrure-alt.js"},{"name":"icon-temperature","path":"./icons/icon-temperature.js"},{"name":"icon-terminal","path":"./icons/icon-terminal.js"},{"name":"icon-theater","path":"./icons/icon-theater.js"},{"name":"icon-thumb-down","path":"./icons/icon-thumb-down.js"},{"name":"icon-thumb-up","path":"./icons/icon-thumb-up.js"},{"name":"icon-thumbnail-list","path":"./icons/icon-thumbnail-list.js"},{"name":"icon-thumbnails-small","path":"./icons/icon-thumbnails-small.js"},{"name":"icon-thumbnails","path":"./icons/icon-thumbnails.js"},{"name":"icon-ticket","path":"./icons/icon-ticket.js"},{"name":"icon-time","path":"./icons/icon-time.js"},{"name":"icon-timer","path":"./icons/icon-timer.js"},{"name":"icon-tools","legacy":true,"path":"./icons/icon-tools.js"},{"name":"icon-top","legacy":true,"path":"./icons/icon-top.js"},{"name":"icon-traffic-alt","legacy":true,"path":"./icons/icon-traffic-alt.js"},{"name":"icon-trafic","path":"./icons/icon-trafic.js"},{"name":"icon-train","path":"./icons/icon-train.js"},{"name":"icon-trash-alt-2","legacy":true,"path":"./icons/icon-trash-alt-2.js"},{"name":"icon-trash-alt","legacy":true,"path":"./icons/icon-trash-alt.js"},{"name":"icon-trash","path":"./icons/icon-trash.js"},{"name":"icon-tree","path":"./icons/icon-tree.js"},{"name":"icon-trophy","path":"./icons/icon-trophy.js"},{"name":"icon-truck","path":"./icons/icon-truck.js"},{"name":"icon-tv-old","path":"./icons/icon-tv-old.js"},{"name":"icon-tv","path":"./icons/icon-tv.js"},{"name":"icon-umb-content","legacy":true,"path":"./icons/icon-umb-content.js"},{"name":"icon-umb-developer","legacy":true,"path":"./icons/icon-umb-developer.js"},{"name":"icon-umb-media","legacy":true,"path":"./icons/icon-umb-media.js"},{"name":"icon-umb-settings","legacy":true,"path":"./icons/icon-umb-settings.js"},{"name":"icon-umb-users","legacy":true,"path":"./icons/icon-umb-users.js"},{"name":"icon-umbrella","path":"./icons/icon-umbrella.js"},{"name":"icon-undo","path":"./icons/icon-undo.js"},{"name":"icon-unlocked","path":"./icons/icon-unlocked.js"},{"name":"icon-untitled","legacy":true,"path":"./icons/icon-untitled.js"},{"name":"icon-usb-connector","legacy":true,"path":"./icons/icon-usb-connector.js"},{"name":"icon-usb","path":"./icons/icon-usb.js"},{"name":"icon-user-female","legacy":true,"path":"./icons/icon-user-female.js"},{"name":"icon-user-females-alt","legacy":true,"path":"./icons/icon-user-females-alt.js"},{"name":"icon-user-females","legacy":true,"path":"./icons/icon-user-females.js"},{"name":"icon-user-glasses","legacy":true,"path":"./icons/icon-user-glasses.js"},{"name":"icon-user","path":"./icons/icon-user.js"},{"name":"icon-users-alt","legacy":true,"path":"./icons/icon-users-alt.js"},{"name":"icon-users","path":"./icons/icon-users.js"},{"name":"icon-utilities","path":"./icons/icon-utilities.js"},{"name":"icon-vcard","path":"./icons/icon-vcard.js"},{"name":"icon-video","path":"./icons/icon-video.js"},{"name":"icon-voice","path":"./icons/icon-voice.js"},{"name":"icon-wall-plug","path":"./icons/icon-wall-plug.js"},{"name":"icon-wallet","path":"./icons/icon-wallet.js"},{"name":"icon-wand","path":"./icons/icon-wand.js"},{"name":"icon-webhook","path":"./icons/icon-webhook.js"},{"name":"icon-weight","path":"./icons/icon-weight.js"},{"name":"icon-width","path":"./icons/icon-width.js"},{"name":"icon-wifi","path":"./icons/icon-wifi.js"},{"name":"icon-window-popin","path":"./icons/icon-window-popin.js"},{"name":"icon-window-sizes","path":"./icons/icon-window-sizes.js"},{"name":"icon-wine-glass","path":"./icons/icon-wine-glass.js"},{"name":"icon-wrench","path":"./icons/icon-wrench.js"},{"name":"icon-wrong","path":"./icons/icon-wrong.js"},{"name":"icon-zip","path":"./icons/icon-zip.js"},{"name":"icon-zom-out","legacy":true,"path":"./icons/icon-zom-out.js"},{"name":"icon-zoom-in","path":"./icons/icon-zoom-in.js"},{"name":"icon-zoom-out","path":"./icons/icon-zoom-out.js"},{"name":"icon-star","path":"./icons/icon-star.js"},{"name":"icon-database","path":"./icons/icon-database.js"},{"name":"icon-azure","path":"./icons/icon-azure.js"},{"name":"icon-facebook","path":"./icons/icon-facebook.js"},{"name":"icon-gitbook","path":"./icons/icon-gitbook.js"},{"name":"icon-github","path":"./icons/icon-github.js"},{"name":"icon-gitlab","path":"./icons/icon-gitlab.js"},{"name":"icon-google","path":"./icons/icon-google.js"},{"name":"icon-linkedin","path":"./icons/icon-linkedin.js"},{"name":"icon-mastodon","path":"./icons/icon-mastodon.js"},{"name":"icon-microsoft","path":"./icons/icon-microsoft.js"},{"name":"icon-twitter-x","path":"./icons/icon-twitter-x.js"},{"name":"icon-umbraco","path":"./icons/icon-umbraco.js"},{"name":"icon-art-easel","legacy":true,"path":"./icons/icon-art-easel.js"},{"name":"icon-article","legacy":true,"path":"./icons/icon-article.js"},{"name":"icon-auction-hammer","legacy":true,"path":"./icons/icon-auction-hammer.js"},{"name":"icon-baby-stroller","legacy":true,"path":"./icons/icon-baby-stroller.js"},{"name":"icon-badge-count","legacy":true,"path":"./icons/icon-badge-count.js"},{"name":"icon-band-aid","legacy":true,"path":"./icons/icon-band-aid.js"},{"name":"icon-bill-dollar","legacy":true,"path":"./icons/icon-bill-dollar.js"},{"name":"icon-bill-euro","legacy":true,"path":"./icons/icon-bill-euro.js"},{"name":"icon-bill-pound","legacy":true,"path":"./icons/icon-bill-pound.js"},{"name":"icon-bill-yen","legacy":true,"path":"./icons/icon-bill-yen.js"},{"name":"icon-bill","legacy":true,"path":"./icons/icon-bill.js"},{"name":"icon-billboard","legacy":true,"path":"./icons/icon-billboard.js"},{"name":"icon-bills-dollar","legacy":true,"path":"./icons/icon-bills-dollar.js"},{"name":"icon-bills-euro","legacy":true,"path":"./icons/icon-bills-euro.js"},{"name":"icon-bills-pound","legacy":true,"path":"./icons/icon-bills-pound.js"},{"name":"icon-bills-yen","legacy":true,"path":"./icons/icon-bills-yen.js"},{"name":"icon-bills","legacy":true,"path":"./icons/icon-bills.js"},{"name":"icon-binoculars","legacy":true,"path":"./icons/icon-binoculars.js"},{"name":"icon-blueprint","legacy":true,"path":"./icons/icon-blueprint.js"},{"name":"icon-bomb","legacy":true,"path":"./icons/icon-bomb.js"},{"name":"icon-cash-register","legacy":true,"path":"./icons/icon-cash-register.js"},{"name":"icon-checkbox-dotted-active","legacy":true,"path":"./icons/icon-checkbox-dotted-active.js"},{"name":"icon-chess","legacy":true,"path":"./icons/icon-chess.js"},{"name":"icon-circus","legacy":true,"path":"./icons/icon-circus.js"},{"name":"icon-clothes-hanger","legacy":true,"path":"./icons/icon-clothes-hanger.js"},{"name":"icon-coin","legacy":true,"path":"./icons/icon-coin.js"},{"name":"icon-coins-dollar-alt","legacy":true,"path":"./icons/icon-coins-dollar-alt.js"},{"name":"icon-coins-dollar","legacy":true,"path":"./icons/icon-coins-dollar.js"},{"name":"icon-coins-euro-alt","legacy":true,"path":"./icons/icon-coins-euro-alt.js"},{"name":"icon-coins-euro","legacy":true,"path":"./icons/icon-coins-euro.js"},{"name":"icon-coins-pound-alt","legacy":true,"path":"./icons/icon-coins-pound-alt.js"},{"name":"icon-coins-pound","legacy":true,"path":"./icons/icon-coins-pound.js"},{"name":"icon-coins-yen-alt","legacy":true,"path":"./icons/icon-coins-yen-alt.js"},{"name":"icon-coins-yen","legacy":true,"path":"./icons/icon-coins-yen.js"},{"name":"icon-comb","legacy":true,"path":"./icons/icon-comb.js"},{"name":"icon-desk","legacy":true,"path":"./icons/icon-desk.js"},{"name":"icon-dollar-bag","legacy":true,"path":"./icons/icon-dollar-bag.js"},{"name":"icon-eject","legacy":true,"path":"./icons/icon-eject.js"},{"name":"icon-euro-bag","legacy":true,"path":"./icons/icon-euro-bag.js"},{"name":"icon-female-symbol","legacy":true,"path":"./icons/icon-female-symbol.js"},{"name":"icon-firewall","legacy":true,"path":"./icons/icon-firewall.js"},{"name":"icon-folder-open","legacy":true,"path":"./icons/icon-folder-open.js"},{"name":"icon-folder-outline","legacy":true,"path":"./icons/icon-folder-outline.js"},{"name":"icon-handprint","legacy":true,"path":"./icons/icon-handprint.js"},{"name":"icon-hat","legacy":true,"path":"./icons/icon-hat.js"},{"name":"icon-hd","legacy":true,"path":"./icons/icon-hd.js"},{"name":"icon-inactive-line","legacy":true,"path":"./icons/icon-inactive-line.js"},{"name":"icon-keychain","legacy":true,"path":"./icons/icon-keychain.js"},{"name":"icon-keyhole","legacy":true,"path":"./icons/icon-keyhole.js"},{"name":"icon-linux-tux","legacy":true,"path":"./icons/icon-linux-tux.js"},{"name":"icon-male-and-female","legacy":true,"path":"./icons/icon-male-and-female.js"},{"name":"icon-male-symbol","legacy":true,"path":"./icons/icon-male-symbol.js"},{"name":"icon-molecular-network","legacy":true,"path":"./icons/icon-molecular-network.js"},{"name":"icon-molecular","legacy":true,"path":"./icons/icon-molecular.js"},{"name":"icon-os-x","legacy":true,"path":"./icons/icon-os-x.js"},{"name":"icon-pants","legacy":true,"path":"./icons/icon-pants.js"},{"name":"icon-parachute-drop","legacy":true,"path":"./icons/icon-parachute-drop.js"},{"name":"icon-parental-control","legacy":true,"path":"./icons/icon-parental-control.js"},{"name":"icon-path","legacy":true,"path":"./icons/icon-path.js"},{"name":"icon-piracy","legacy":true,"path":"./icons/icon-piracy.js"},{"name":"icon-poker-chip","legacy":true,"path":"./icons/icon-poker-chip.js"},{"name":"icon-pound-bag","legacy":true,"path":"./icons/icon-pound-bag.js"},{"name":"icon-receipt-dollar","legacy":true,"path":"./icons/icon-receipt-dollar.js"},{"name":"icon-receipt-euro","legacy":true,"path":"./icons/icon-receipt-euro.js"},{"name":"icon-receipt-pound","legacy":true,"path":"./icons/icon-receipt-pound.js"},{"name":"icon-receipt-yen","legacy":true,"path":"./icons/icon-receipt-yen.js"},{"name":"icon-road","legacy":true,"path":"./icons/icon-road.js"},{"name":"icon-safe","legacy":true,"path":"./icons/icon-safe.js"},{"name":"icon-safedial","legacy":true,"path":"./icons/icon-safedial.js"},{"name":"icon-sandbox-toys","legacy":true,"path":"./icons/icon-sandbox-toys.js"},{"name":"icon-security-camera","legacy":true,"path":"./icons/icon-security-camera.js"},{"name":"icon-settings-alt-2","legacy":true,"path":"./icons/icon-settings-alt-2.js"},{"name":"icon-share-alt-2","legacy":true,"path":"./icons/icon-share-alt-2.js"},{"name":"icon-shorts","legacy":true,"path":"./icons/icon-shorts.js"},{"name":"icon-simcard","legacy":true,"path":"./icons/icon-simcard.js"},{"name":"icon-tab","legacy":true,"path":"./icons/icon-tab.js"},{"name":"icon-tactics","legacy":true,"path":"./icons/icon-tactics.js"},{"name":"icon-theif","legacy":true,"path":"./icons/icon-theif.js"},{"name":"icon-thought-bubble","legacy":true,"path":"./icons/icon-thought-bubble.js"},{"name":"icon-twitter","legacy":true,"path":"./icons/icon-twitter.js"},{"name":"icon-umb-contour","legacy":true,"path":"./icons/icon-umb-contour.js"},{"name":"icon-umb-deploy","legacy":true,"path":"./icons/icon-umb-deploy.js"},{"name":"icon-umb-members","legacy":true,"path":"./icons/icon-umb-members.js"},{"name":"icon-universal","legacy":true,"path":"./icons/icon-universal.js"},{"name":"icon-war","legacy":true,"path":"./icons/icon-war.js"},{"name":"icon-windows","legacy":true,"path":"./icons/icon-windows.js"},{"name":"icon-yen-bag","legacy":true,"path":"./icons/icon-yen-bag.js"}] \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.ts new file mode 100644 index 0000000000..6a79e57053 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icons.ts @@ -0,0 +1,2489 @@ +export default [{ +name: "icon-activity", + +path: "./icons/icon-activity.js", +},{ +name: "icon-add", + +path: "./icons/icon-add.js", +},{ +name: "icon-addressbook", + +path: "./icons/icon-addressbook.js", +},{ +name: "icon-alarm-clock", + +path: "./icons/icon-alarm-clock.js", +},{ +name: "icon-alert-alt", + +path: "./icons/icon-alert-alt.js", +},{ +name: "icon-alert", + +path: "./icons/icon-alert.js", +},{ +name: "icon-alt", + +path: "./icons/icon-alt.js", +},{ +name: "icon-anchor", + +path: "./icons/icon-anchor.js", +},{ +name: "icon-app", + +path: "./icons/icon-app.js", +},{ +name: "icon-application-error", + +path: "./icons/icon-application-error.js", +},{ +name: "icon-application-window-alt", + +path: "./icons/icon-application-window-alt.js", +},{ +name: "icon-application-window", + +path: "./icons/icon-application-window.js", +},{ +name: "icon-arrivals", + +path: "./icons/icon-arrivals.js", +},{ +name: "icon-arrow-down", + +path: "./icons/icon-arrow-down.js", +},{ +name: "icon-arrow-left", + +path: "./icons/icon-arrow-left.js", +},{ +name: "icon-arrow-right", + +path: "./icons/icon-arrow-right.js", +},{ +name: "icon-arrow-up", + +path: "./icons/icon-arrow-up.js", +},{ +name: "icon-attachment", + +path: "./icons/icon-attachment.js", +},{ +name: "icon-autofill", + +path: "./icons/icon-autofill.js", +},{ +name: "icon-award", + +path: "./icons/icon-award.js", +},{ +name: "icon-axis-rotation-2", + +path: "./icons/icon-axis-rotation-2.js", +},{ +name: "icon-axis-rotation-3", + +path: "./icons/icon-axis-rotation-3.js", +},{ +name: "icon-axis-rotation", + +path: "./icons/icon-axis-rotation.js", +},{ +name: "icon-backspace", + +path: "./icons/icon-backspace.js", +},{ +name: "icon-badge-add", + +path: "./icons/icon-badge-add.js", +},{ +name: "icon-badge-remove", + +path: "./icons/icon-badge-remove.js", +},{ +name: "icon-badge-restricted", +legacy: true, +path: "./icons/icon-badge-restricted.js", +},{ +name: "icon-ball", + +path: "./icons/icon-ball.js", +},{ +name: "icon-bar-chart", + +path: "./icons/icon-bar-chart.js", +},{ +name: "icon-barcode", + +path: "./icons/icon-barcode.js", +},{ +name: "icon-bars", + +path: "./icons/icon-bars.js", +},{ +name: "icon-battery-full", + +path: "./icons/icon-battery-full.js", +},{ +name: "icon-battery-low", + +path: "./icons/icon-battery-low.js", +},{ +name: "icon-beer-glass", + +path: "./icons/icon-beer-glass.js", +},{ +name: "icon-bell-off", + +path: "./icons/icon-bell-off.js", +},{ +name: "icon-bell", + +path: "./icons/icon-bell.js", +},{ +name: "icon-binarycode", + +path: "./icons/icon-binarycode.js", +},{ +name: "icon-bird", + +path: "./icons/icon-bird.js", +},{ +name: "icon-birthday-cake", + +path: "./icons/icon-birthday-cake.js", +},{ +name: "icon-block", + +path: "./icons/icon-block.js", +},{ +name: "icon-bluetooth", + +path: "./icons/icon-bluetooth.js", +},{ +name: "icon-boat-shipping", + +path: "./icons/icon-boat-shipping.js", +},{ +name: "icon-bones", + +path: "./icons/icon-bones.js", +},{ +name: "icon-book-alt-2", + +path: "./icons/icon-book-alt-2.js", +},{ +name: "icon-book-alt", + +path: "./icons/icon-book-alt.js", +},{ +name: "icon-book", + +path: "./icons/icon-book.js", +},{ +name: "icon-bookmark", + +path: "./icons/icon-bookmark.js", +},{ +name: "icon-books", + +path: "./icons/icon-books.js", +},{ +name: "icon-box-alt", + +path: "./icons/icon-box-alt.js", +},{ +name: "icon-box-open", + +path: "./icons/icon-box-open.js", +},{ +name: "icon-box", + +path: "./icons/icon-box.js", +},{ +name: "icon-brackets", + +path: "./icons/icon-brackets.js", +},{ +name: "icon-brick", + +path: "./icons/icon-brick.js", +},{ +name: "icon-briefcase", + +path: "./icons/icon-briefcase.js", +},{ +name: "icon-browser-window", + +path: "./icons/icon-browser-window.js", +},{ +name: "icon-brush-alt-2", + +path: "./icons/icon-brush-alt-2.js", +},{ +name: "icon-brush-alt", + +path: "./icons/icon-brush-alt.js", +},{ +name: "icon-brush", + +path: "./icons/icon-brush.js", +},{ +name: "icon-bug", + +path: "./icons/icon-bug.js", +},{ +name: "icon-bulleted-list", + +path: "./icons/icon-bulleted-list.js", +},{ +name: "icon-burn", + +path: "./icons/icon-burn.js", +},{ +name: "icon-bus", + +path: "./icons/icon-bus.js", +},{ +name: "icon-calculator", + +path: "./icons/icon-calculator.js", +},{ +name: "icon-calendar-alt", + +path: "./icons/icon-calendar-alt.js", +},{ +name: "icon-calendar", + +path: "./icons/icon-calendar.js", +},{ +name: "icon-camcorder", +legacy: true, +path: "./icons/icon-camcorder.js", +},{ +name: "icon-camera-roll", + +path: "./icons/icon-camera-roll.js", +},{ +name: "icon-candy", + +path: "./icons/icon-candy.js", +},{ +name: "icon-caps-lock", + +path: "./icons/icon-caps-lock.js", +},{ +name: "icon-car", + +path: "./icons/icon-car.js", +},{ +name: "icon-categories", + +path: "./icons/icon-categories.js", +},{ +name: "icon-certificate", + +path: "./icons/icon-certificate.js", +},{ +name: "icon-chart-curve", + +path: "./icons/icon-chart-curve.js", +},{ +name: "icon-chart", + +path: "./icons/icon-chart.js", +},{ +name: "icon-chat-active", +legacy: true, +path: "./icons/icon-chat-active.js", +},{ +name: "icon-chat", + +path: "./icons/icon-chat.js", +},{ +name: "icon-check", + +path: "./icons/icon-check.js", +},{ +name: "icon-checkbox-dotted", + +path: "./icons/icon-checkbox-dotted.js", +},{ +name: "icon-checkbox-empty", +legacy: true, +path: "./icons/icon-checkbox-empty.js", +},{ +name: "icon-checkbox", + +path: "./icons/icon-checkbox.js", +},{ +name: "icon-chip-alt", +legacy: true, +path: "./icons/icon-chip-alt.js", +},{ +name: "icon-chip", + +path: "./icons/icon-chip.js", +},{ +name: "icon-cinema", + +path: "./icons/icon-cinema.js", +},{ +name: "icon-circle-dotted-active", + +path: "./icons/icon-circle-dotted-active.js", +},{ +name: "icon-circle-dotted", + +path: "./icons/icon-circle-dotted.js", +},{ +name: "icon-circuits", + +path: "./icons/icon-circuits.js", +},{ +name: "icon-client", +legacy: true, +path: "./icons/icon-client.js", +},{ +name: "icon-cloud-drive", + +path: "./icons/icon-cloud-drive.js", +},{ +name: "icon-cloud-upload", + +path: "./icons/icon-cloud-upload.js", +},{ +name: "icon-cloud", + +path: "./icons/icon-cloud.js", +},{ +name: "icon-cloudy", + +path: "./icons/icon-cloudy.js", +},{ +name: "icon-clubs", + +path: "./icons/icon-clubs.js", +},{ +name: "icon-cocktail", + +path: "./icons/icon-cocktail.js", +},{ +name: "icon-code", + +path: "./icons/icon-code.js", +},{ +name: "icon-coffee", + +path: "./icons/icon-coffee.js", +},{ +name: "icon-coin-dollar", + +path: "./icons/icon-coin-dollar.js", +},{ +name: "icon-coin-euro", + +path: "./icons/icon-coin-euro.js", +},{ +name: "icon-coin-pound", + +path: "./icons/icon-coin-pound.js", +},{ +name: "icon-coin-yen", + +path: "./icons/icon-coin-yen.js", +},{ +name: "icon-coins-alt", +legacy: true, +path: "./icons/icon-coins-alt.js", +},{ +name: "icon-coins", + +path: "./icons/icon-coins.js", +},{ +name: "icon-color-bucket", + +path: "./icons/icon-color-bucket.js", +},{ +name: "icon-colorpicker", + +path: "./icons/icon-colorpicker.js", +},{ +name: "icon-columns", + +path: "./icons/icon-columns.js", +},{ +name: "icon-combination-lock-open", + +path: "./icons/icon-combination-lock-open.js", +},{ +name: "icon-combination-lock", + +path: "./icons/icon-combination-lock.js", +},{ +name: "icon-command", + +path: "./icons/icon-command.js", +},{ +name: "icon-company", + +path: "./icons/icon-company.js", +},{ +name: "icon-compress", + +path: "./icons/icon-compress.js", +},{ +name: "icon-connection", + +path: "./icons/icon-connection.js", +},{ +name: "icon-console", + +path: "./icons/icon-console.js", +},{ +name: "icon-contrast", + +path: "./icons/icon-contrast.js", +},{ +name: "icon-conversation-alt", + +path: "./icons/icon-conversation-alt.js", +},{ +name: "icon-conversation", +legacy: true, +path: "./icons/icon-conversation.js", +},{ +name: "icon-coverflow", + +path: "./icons/icon-coverflow.js", +},{ +name: "icon-credit-card-alt", +legacy: true, +path: "./icons/icon-credit-card-alt.js", +},{ +name: "icon-credit-card", + +path: "./icons/icon-credit-card.js", +},{ +name: "icon-crop", + +path: "./icons/icon-crop.js", +},{ +name: "icon-crosshair", + +path: "./icons/icon-crosshair.js", +},{ +name: "icon-crown-alt", +legacy: true, +path: "./icons/icon-crown-alt.js", +},{ +name: "icon-crown", + +path: "./icons/icon-crown.js", +},{ +name: "icon-cupcake", +legacy: true, +path: "./icons/icon-cupcake.js", +},{ +name: "icon-curve", + +path: "./icons/icon-curve.js", +},{ +name: "icon-cut", + +path: "./icons/icon-cut.js", +},{ +name: "icon-dashboard", + +path: "./icons/icon-dashboard.js", +},{ +name: "icon-defrag", + +path: "./icons/icon-defrag.js", +},{ +name: "icon-delete-key", + +path: "./icons/icon-delete-key.js", +},{ +name: "icon-delete", + +path: "./icons/icon-delete.js", +},{ +name: "icon-departure", + +path: "./icons/icon-departure.js", +},{ +name: "icon-desktop", +legacy: true, +path: "./icons/icon-desktop.js", +},{ +name: "icon-diagnostics", + +path: "./icons/icon-diagnostics.js", +},{ +name: "icon-diagonal-arrow-alt", + +path: "./icons/icon-diagonal-arrow-alt.js", +},{ +name: "icon-diagonal-arrow", + +path: "./icons/icon-diagonal-arrow.js", +},{ +name: "icon-diamond", + +path: "./icons/icon-diamond.js", +},{ +name: "icon-diamonds", + +path: "./icons/icon-diamonds.js", +},{ +name: "icon-dice", + +path: "./icons/icon-dice.js", +},{ +name: "icon-diploma-alt", +legacy: true, +path: "./icons/icon-diploma-alt.js", +},{ +name: "icon-diploma", + +path: "./icons/icon-diploma.js", +},{ +name: "icon-directions-alt", + +path: "./icons/icon-directions-alt.js", +},{ +name: "icon-directions", + +path: "./icons/icon-directions.js", +},{ +name: "icon-disc", + +path: "./icons/icon-disc.js", +},{ +name: "icon-disk-image", + +path: "./icons/icon-disk-image.js", +},{ +name: "icon-display", + +path: "./icons/icon-display.js", +},{ +name: "icon-dna", + +path: "./icons/icon-dna.js", +},{ +name: "icon-dock-connector", + +path: "./icons/icon-dock-connector.js", +},{ +name: "icon-document-dashed-line", + +path: "./icons/icon-document-dashed-line.js", +},{ +name: "icon-document", + +path: "./icons/icon-document.js", +},{ +name: "icon-documents", + +path: "./icons/icon-documents.js", +},{ +name: "icon-donate", +legacy: true, +path: "./icons/icon-donate.js", +},{ +name: "icon-door-open-alt", +legacy: true, +path: "./icons/icon-door-open-alt.js", +},{ +name: "icon-door-open", + +path: "./icons/icon-door-open.js", +},{ +name: "icon-download-alt", + +path: "./icons/icon-download-alt.js", +},{ +name: "icon-download", + +path: "./icons/icon-download.js", +},{ +name: "icon-drop", + +path: "./icons/icon-drop.js", +},{ +name: "icon-eco", + +path: "./icons/icon-eco.js", +},{ +name: "icon-economy", +legacy: true, +path: "./icons/icon-economy.js", +},{ +name: "icon-edit", + +path: "./icons/icon-edit.js", +},{ +name: "icon-employee", +legacy: true, +path: "./icons/icon-employee.js", +},{ +name: "icon-energy-saving-bulb", + +path: "./icons/icon-energy-saving-bulb.js", +},{ +name: "icon-enter", + +path: "./icons/icon-enter.js", +},{ +name: "icon-equalizer", + +path: "./icons/icon-equalizer.js", +},{ +name: "icon-escape", + +path: "./icons/icon-escape.js", +},{ +name: "icon-ethernet", + +path: "./icons/icon-ethernet.js", +},{ +name: "icon-eye", + +path: "./icons/icon-eye.js", +},{ +name: "icon-exit-fullscreen", + +path: "./icons/icon-exit-fullscreen.js", +},{ +name: "icon-facebook-like", + +path: "./icons/icon-facebook-like.js", +},{ +name: "icon-factory", + +path: "./icons/icon-factory.js", +},{ +name: "icon-favorite", + +path: "./icons/icon-favorite.js", +},{ +name: "icon-file-cabinet", + +path: "./icons/icon-file-cabinet.js", +},{ +name: "icon-files", + +path: "./icons/icon-files.js", +},{ +name: "icon-filter-arrows", + +path: "./icons/icon-filter-arrows.js", +},{ +name: "icon-filter", + +path: "./icons/icon-filter.js", +},{ +name: "icon-fingerprint", + +path: "./icons/icon-fingerprint.js", +},{ +name: "icon-fire", + +path: "./icons/icon-fire.js", +},{ +name: "icon-firewire", +legacy: true, +path: "./icons/icon-firewire.js", +},{ +name: "icon-flag-alt", + +path: "./icons/icon-flag-alt.js", +},{ +name: "icon-flag", + +path: "./icons/icon-flag.js", +},{ +name: "icon-flash", + +path: "./icons/icon-flash.js", +},{ +name: "icon-flashlight", + +path: "./icons/icon-flashlight.js", +},{ +name: "icon-flowerpot", + +path: "./icons/icon-flowerpot.js", +},{ +name: "icon-folder", + +path: "./icons/icon-folder.js", +},{ +name: "icon-folders", + +path: "./icons/icon-folders.js", +},{ +name: "icon-font", + +path: "./icons/icon-font.js", +},{ +name: "icon-food", + +path: "./icons/icon-food.js", +},{ +name: "icon-footprints", + +path: "./icons/icon-footprints.js", +},{ +name: "icon-forking", + +path: "./icons/icon-forking.js", +},{ +name: "icon-frame-alt", +legacy: true, +path: "./icons/icon-frame-alt.js", +},{ +name: "icon-frame", + +path: "./icons/icon-frame.js", +},{ +name: "icon-fullscreen-alt", + +path: "./icons/icon-fullscreen-alt.js", +},{ +name: "icon-fullscreen", + +path: "./icons/icon-fullscreen.js", +},{ +name: "icon-game", + +path: "./icons/icon-game.js", +},{ +name: "icon-geometry", +legacy: true, +path: "./icons/icon-geometry.js", +},{ +name: "icon-gift", + +path: "./icons/icon-gift.js", +},{ +name: "icon-glasses", + +path: "./icons/icon-glasses.js", +},{ +name: "icon-globe-alt", + +path: "./icons/icon-globe-alt.js", +},{ +name: "icon-globe-asia", +legacy: true, +path: "./icons/icon-globe-asia.js", +},{ +name: "icon-globe-europe-africa", +legacy: true, +path: "./icons/icon-globe-europe-africa.js", +},{ +name: "icon-globe-inverted-america", +legacy: true, +path: "./icons/icon-globe-inverted-america.js", +},{ +name: "icon-globe-inverted-asia", +legacy: true, +path: "./icons/icon-globe-inverted-asia.js", +},{ +name: "icon-globe-inverted-europe-africa", +legacy: true, +path: "./icons/icon-globe-inverted-europe-africa.js", +},{ +name: "icon-globe", + +path: "./icons/icon-globe.js", +},{ +name: "icon-gps", + +path: "./icons/icon-gps.js", +},{ +name: "icon-graduate", + +path: "./icons/icon-graduate.js", +},{ +name: "icon-grid", + +path: "./icons/icon-grid.js", +},{ +name: "icon-hammer", + +path: "./icons/icon-hammer.js", +},{ +name: "icon-hand-active-alt", +legacy: true, +path: "./icons/icon-hand-active-alt.js", +},{ +name: "icon-hand-active", + +path: "./icons/icon-hand-active.js", +},{ +name: "icon-hand-pointer-alt", +legacy: true, +path: "./icons/icon-hand-pointer-alt.js", +},{ +name: "icon-hand-pointer", + +path: "./icons/icon-hand-pointer.js", +},{ +name: "icon-handshake", + +path: "./icons/icon-handshake.js", +},{ +name: "icon-handtool-alt", +legacy: true, +path: "./icons/icon-handtool-alt.js", +},{ +name: "icon-handtool", + +path: "./icons/icon-handtool.js", +},{ +name: "icon-hard-drive-alt", +legacy: true, +path: "./icons/icon-hard-drive-alt.js", +},{ +name: "icon-hard-drive", +legacy: true, +path: "./icons/icon-hard-drive.js", +},{ +name: "icon-headphones", + +path: "./icons/icon-headphones.js", +},{ +name: "icon-headset", +legacy: true, +path: "./icons/icon-headset.js", +},{ +name: "icon-hearts", + +path: "./icons/icon-hearts.js", +},{ +name: "icon-height", + +path: "./icons/icon-height.js", +},{ +name: "icon-help-alt", + +path: "./icons/icon-help-alt.js", +},{ +name: "icon-help", + +path: "./icons/icon-help.js", +},{ +name: "icon-home", + +path: "./icons/icon-home.js", +},{ +name: "icon-hourglass", + +path: "./icons/icon-hourglass.js", +},{ +name: "icon-imac", +legacy: true, +path: "./icons/icon-imac.js", +},{ +name: "icon-inbox-full", +legacy: true, +path: "./icons/icon-inbox-full.js", +},{ +name: "icon-inbox", + +path: "./icons/icon-inbox.js", +},{ +name: "icon-indent", + +path: "./icons/icon-indent.js", +},{ +name: "icon-infinity", + +path: "./icons/icon-infinity.js", +},{ +name: "icon-info", + +path: "./icons/icon-info.js", +},{ +name: "icon-invoice", +legacy: true, +path: "./icons/icon-invoice.js", +},{ +name: "icon-ipad", +legacy: true, +path: "./icons/icon-ipad.js", +},{ +name: "icon-iphone", +legacy: true, +path: "./icons/icon-iphone.js", +},{ +name: "icon-item-arrangement", +legacy: true, +path: "./icons/icon-item-arrangement.js", +},{ +name: "icon-junk", + +path: "./icons/icon-junk.js", +},{ +name: "icon-key", + +path: "./icons/icon-key.js", +},{ +name: "icon-keyboard", + +path: "./icons/icon-keyboard.js", +},{ +name: "icon-lab", + +path: "./icons/icon-lab.js", +},{ +name: "icon-laptop", + +path: "./icons/icon-laptop.js", +},{ +name: "icon-layers-alt", +legacy: true, +path: "./icons/icon-layers-alt.js", +},{ +name: "icon-layers", + +path: "./icons/icon-layers.js", +},{ +name: "icon-layout", + +path: "./icons/icon-layout.js", +},{ +name: "icon-left-double-arrow", + +path: "./icons/icon-left-double-arrow.js", +},{ +name: "icon-legal", + +path: "./icons/icon-legal.js", +},{ +name: "icon-lense", +legacy: true, +path: "./icons/icon-lense.js", +},{ +name: "icon-library", + +path: "./icons/icon-library.js", +},{ +name: "icon-light-down", + +path: "./icons/icon-light-down.js", +},{ +name: "icon-light-up", + +path: "./icons/icon-light-up.js", +},{ +name: "icon-lightbulb-active", + +path: "./icons/icon-lightbulb-active.js", +},{ +name: "icon-lightbulb", +legacy: true, +path: "./icons/icon-lightbulb.js", +},{ +name: "icon-lightning", + +path: "./icons/icon-lightning.js", +},{ +name: "icon-link", + +path: "./icons/icon-link.js", +},{ +name: "icon-list", + +path: "./icons/icon-list.js", +},{ +name: "icon-load", +legacy: true, +path: "./icons/icon-load.js", +},{ +name: "icon-loading", +legacy: true, +path: "./icons/icon-loading.js", +},{ +name: "icon-locate", + +path: "./icons/icon-locate.js", +},{ +name: "icon-location-near-me", +legacy: true, +path: "./icons/icon-location-near-me.js", +},{ +name: "icon-location-nearby", + +path: "./icons/icon-location-nearby.js", +},{ +name: "icon-lock", + +path: "./icons/icon-lock.js", +},{ +name: "icon-log-out", + +path: "./icons/icon-log-out.js", +},{ +name: "icon-logout", +legacy: true, +path: "./icons/icon-logout.js", +},{ +name: "icon-loupe", +legacy: true, +path: "./icons/icon-loupe.js", +},{ +name: "icon-magnet", + +path: "./icons/icon-magnet.js", +},{ +name: "icon-mailbox", + +path: "./icons/icon-mailbox.js", +},{ +name: "icon-map-alt", + +path: "./icons/icon-map-alt.js", +},{ +name: "icon-map-location", +legacy: true, +path: "./icons/icon-map-location.js", +},{ +name: "icon-map-marker", + +path: "./icons/icon-map-marker.js", +},{ +name: "icon-map", + +path: "./icons/icon-map.js", +},{ +name: "icon-medal", + +path: "./icons/icon-medal.js", +},{ +name: "icon-medical-emergency", + +path: "./icons/icon-medical-emergency.js", +},{ +name: "icon-medicine", + +path: "./icons/icon-medicine.js", +},{ +name: "icon-meeting", +legacy: true, +path: "./icons/icon-meeting.js", +},{ +name: "icon-megaphone", + +path: "./icons/icon-megaphone.js", +},{ +name: "icon-merge", + +path: "./icons/icon-merge.js", +},{ +name: "icon-message-open", + +path: "./icons/icon-message-open.js", +},{ +name: "icon-message-unopened", +legacy: true, +path: "./icons/icon-message-unopened.js", +},{ +name: "icon-message", + +path: "./icons/icon-message.js", +},{ +name: "icon-microscope", + +path: "./icons/icon-microscope.js", +},{ +name: "icon-mindmap", +legacy: true, +path: "./icons/icon-mindmap.js", +},{ +name: "icon-mobile", + +path: "./icons/icon-mobile.js", +},{ +name: "icon-mountain", + +path: "./icons/icon-mountain.js", +},{ +name: "icon-mouse-cursor", + +path: "./icons/icon-mouse-cursor.js", +},{ +name: "icon-mouse", + +path: "./icons/icon-mouse.js", +},{ +name: "icon-movie-alt", + +path: "./icons/icon-movie-alt.js", +},{ +name: "icon-movie", + +path: "./icons/icon-movie.js", +},{ +name: "icon-multiple-credit-cards", + +path: "./icons/icon-multiple-credit-cards.js", +},{ +name: "icon-multiple-windows", + +path: "./icons/icon-multiple-windows.js", +},{ +name: "icon-music", + +path: "./icons/icon-music.js", +},{ +name: "icon-name-badge", +legacy: true, +path: "./icons/icon-name-badge.js", +},{ +name: "icon-navigation-bottom", +legacy: true, +path: "./icons/icon-navigation-bottom.js", +},{ +name: "icon-navigation-down", +legacy: true, +path: "./icons/icon-navigation-down.js", +},{ +name: "icon-navigation-first", +legacy: true, +path: "./icons/icon-navigation-first.js", +},{ +name: "icon-navigation-horizontal", +legacy: true, +path: "./icons/icon-navigation-horizontal.js", +},{ +name: "icon-navigation-last", +legacy: true, +path: "./icons/icon-navigation-last.js", +},{ +name: "icon-navigation-left", +legacy: true, +path: "./icons/icon-navigation-left.js", +},{ +name: "icon-navigation-right", +legacy: true, +path: "./icons/icon-navigation-right.js", +},{ +name: "icon-navigation-road", +legacy: true, +path: "./icons/icon-navigation-road.js", +},{ +name: "icon-navigation-top", +legacy: true, +path: "./icons/icon-navigation-top.js", +},{ +name: "icon-navigation-up", +legacy: true, +path: "./icons/icon-navigation-up.js", +},{ +name: "icon-navigation-vertical", +legacy: true, +path: "./icons/icon-navigation-vertical.js", +},{ +name: "icon-navigation", +legacy: true, +path: "./icons/icon-navigation.js", +},{ +name: "icon-navigational-arrow", + +path: "./icons/icon-navigational-arrow.js", +},{ +name: "icon-network-alt", + +path: "./icons/icon-network-alt.js", +},{ +name: "icon-newspaper-alt", +legacy: true, +path: "./icons/icon-newspaper-alt.js", +},{ +name: "icon-newspaper", + +path: "./icons/icon-newspaper.js", +},{ +name: "icon-next-media", +legacy: true, +path: "./icons/icon-next-media.js", +},{ +name: "icon-next", +legacy: true, +path: "./icons/icon-next.js", +},{ +name: "icon-nodes", +legacy: true, +path: "./icons/icon-nodes.js", +},{ +name: "icon-notepad-alt", +legacy: true, +path: "./icons/icon-notepad-alt.js", +},{ +name: "icon-notepad", + +path: "./icons/icon-notepad.js", +},{ +name: "icon-old-key", + +path: "./icons/icon-old-key.js", +},{ +name: "icon-old-phone", +legacy: true, +path: "./icons/icon-old-phone.js", +},{ +name: "icon-operator", + +path: "./icons/icon-operator.js", +},{ +name: "icon-ordered-list", + +path: "./icons/icon-ordered-list.js", +},{ +name: "icon-out", + +path: "./icons/icon-out.js", +},{ +name: "icon-outbox", +legacy: true, +path: "./icons/icon-outbox.js", +},{ +name: "icon-outdent", + +path: "./icons/icon-outdent.js", +},{ +name: "icon-page-add", + +path: "./icons/icon-page-add.js", +},{ +name: "icon-page-down", + +path: "./icons/icon-page-down.js", +},{ +name: "icon-page-remove", + +path: "./icons/icon-page-remove.js", +},{ +name: "icon-page-restricted", + +path: "./icons/icon-page-restricted.js", +},{ +name: "icon-page-up", + +path: "./icons/icon-page-up.js", +},{ +name: "icon-paint-roller", +legacy: true, +path: "./icons/icon-paint-roller.js", +},{ +name: "icon-palette", + +path: "./icons/icon-palette.js", +},{ +name: "icon-panel-show", + +path: "./icons/icon-panel-show.js", +},{ +name: "icon-pannel-close", + +path: "./icons/icon-pannel-close.js", +},{ +name: "icon-paper-bag", +legacy: true, +path: "./icons/icon-paper-bag.js", +},{ +name: "icon-paper-plane-alt", + +path: "./icons/icon-paper-plane-alt.js", +},{ +name: "icon-paper-plane", + +path: "./icons/icon-paper-plane.js", +},{ +name: "icon-partly-cloudy", + +path: "./icons/icon-partly-cloudy.js", +},{ +name: "icon-paste-in", +legacy: true, +path: "./icons/icon-paste-in.js", +},{ +name: "icon-pause", + +path: "./icons/icon-pause.js", +},{ +name: "icon-pc", +legacy: true, +path: "./icons/icon-pc.js", +},{ +name: "icon-people-alt-2", +legacy: true, +path: "./icons/icon-people-alt-2.js", +},{ +name: "icon-people-alt", +legacy: true, +path: "./icons/icon-people-alt.js", +},{ +name: "icon-people-female", +legacy: true, +path: "./icons/icon-people-female.js", +},{ +name: "icon-people", + +path: "./icons/icon-people.js", +},{ +name: "icon-phone-ring", + +path: "./icons/icon-phone-ring.js", +},{ +name: "icon-phone", + +path: "./icons/icon-phone.js", +},{ +name: "icon-photo-album", + +path: "./icons/icon-photo-album.js", +},{ +name: "icon-picture", + +path: "./icons/icon-picture.js", +},{ +name: "icon-pictures-alt-2", + +path: "./icons/icon-pictures-alt-2.js", +},{ +name: "icon-pictures-alt", +legacy: true, +path: "./icons/icon-pictures-alt.js", +},{ +name: "icon-pictures", + +path: "./icons/icon-pictures.js", +},{ +name: "icon-pie-chart", + +path: "./icons/icon-pie-chart.js", +},{ +name: "icon-piggy-bank", + +path: "./icons/icon-piggy-bank.js", +},{ +name: "icon-pin-location", + +path: "./icons/icon-pin-location.js", +},{ +name: "icon-plane", + +path: "./icons/icon-plane.js", +},{ +name: "icon-planet", +legacy: true, +path: "./icons/icon-planet.js", +},{ +name: "icon-play", + +path: "./icons/icon-play.js", +},{ +name: "icon-playing-cards", +legacy: true, +path: "./icons/icon-playing-cards.js", +},{ +name: "icon-playlist", + +path: "./icons/icon-playlist.js", +},{ +name: "icon-plugin", + +path: "./icons/icon-plugin.js", +},{ +name: "icon-podcast", + +path: "./icons/icon-podcast.js", +},{ +name: "icon-poll", +legacy: true, +path: "./icons/icon-poll.js", +},{ +name: "icon-post-it", + +path: "./icons/icon-post-it.js", +},{ +name: "icon-power-outlet", +legacy: true, +path: "./icons/icon-power-outlet.js", +},{ +name: "icon-power", + +path: "./icons/icon-power.js", +},{ +name: "icon-presentation", + +path: "./icons/icon-presentation.js", +},{ +name: "icon-previous-media", + +path: "./icons/icon-previous-media.js", +},{ +name: "icon-previous", + +path: "./icons/icon-previous.js", +},{ +name: "icon-price-dollar", +legacy: true, +path: "./icons/icon-price-dollar.js", +},{ +name: "icon-price-euro", +legacy: true, +path: "./icons/icon-price-euro.js", +},{ +name: "icon-price-pound", +legacy: true, +path: "./icons/icon-price-pound.js", +},{ +name: "icon-price-yen", +legacy: true, +path: "./icons/icon-price-yen.js", +},{ +name: "icon-print", + +path: "./icons/icon-print.js", +},{ +name: "icon-printer-alt", +legacy: true, +path: "./icons/icon-printer-alt.js", +},{ +name: "icon-projector", + +path: "./icons/icon-projector.js", +},{ +name: "icon-pulse", + +path: "./icons/icon-pulse.js", +},{ +name: "icon-pushpin", + +path: "./icons/icon-pushpin.js", +},{ +name: "icon-qr-code", + +path: "./icons/icon-qr-code.js", +},{ +name: "icon-quote", + +path: "./icons/icon-quote.js", +},{ +name: "icon-radio-alt", + +path: "./icons/icon-radio-alt.js", +},{ +name: "icon-radio-receiver", + +path: "./icons/icon-radio-receiver.js", +},{ +name: "icon-radio", + +path: "./icons/icon-radio.js", +},{ +name: "icon-rain", + +path: "./icons/icon-rain.js", +},{ +name: "icon-rate", +legacy: true, +path: "./icons/icon-rate.js", +},{ +name: "icon-re-post", + +path: "./icons/icon-re-post.js", +},{ +name: "icon-readonly", +legacy: true, +path: "./icons/icon-readonly.js", +},{ +name: "icon-receipt-alt", + +path: "./icons/icon-receipt-alt.js", +},{ +name: "icon-reception", + +path: "./icons/icon-reception.js", +},{ +name: "icon-record", +legacy: true, +path: "./icons/icon-record.js", +},{ +name: "icon-rectangle-ellipsis", + +path: "./icons/icon-rectangle-ellipsis.js", +},{ +name: "icon-redo", + +path: "./icons/icon-redo.js", +},{ +name: "icon-refresh", + +path: "./icons/icon-refresh.js", +},{ +name: "icon-remote", +legacy: true, +path: "./icons/icon-remote.js", +},{ +name: "icon-remove", + +path: "./icons/icon-remove.js", +},{ +name: "icon-repeat-one", + +path: "./icons/icon-repeat-one.js", +},{ +name: "icon-repeat", + +path: "./icons/icon-repeat.js", +},{ +name: "icon-reply-arrow", + +path: "./icons/icon-reply-arrow.js", +},{ +name: "icon-resize", + +path: "./icons/icon-resize.js", +},{ +name: "icon-return-to-top", +legacy: true, +path: "./icons/icon-return-to-top.js", +},{ +name: "icon-right-double-arrow", +legacy: true, +path: "./icons/icon-right-double-arrow.js", +},{ +name: "icon-roadsign", +legacy: true, +path: "./icons/icon-roadsign.js", +},{ +name: "icon-rocket", + +path: "./icons/icon-rocket.js", +},{ +name: "icon-rss", + +path: "./icons/icon-rss.js", +},{ +name: "icon-ruler-alt", + +path: "./icons/icon-ruler-alt.js", +},{ +name: "icon-ruler", + +path: "./icons/icon-ruler.js", +},{ +name: "icon-satellite-dish", + +path: "./icons/icon-satellite-dish.js", +},{ +name: "icon-save", + +path: "./icons/icon-save.js", +},{ +name: "icon-scan", + +path: "./icons/icon-scan.js", +},{ +name: "icon-school", + +path: "./icons/icon-school.js", +},{ +name: "icon-screensharing", + +path: "./icons/icon-screensharing.js", +},{ +name: "icon-script-alt", +legacy: true, +path: "./icons/icon-script-alt.js", +},{ +name: "icon-script", + +path: "./icons/icon-script.js", +},{ +name: "icon-scull", + +path: "./icons/icon-scull.js", +},{ +name: "icon-search", + +path: "./icons/icon-search.js", +},{ +name: "icon-sensor", + +path: "./icons/icon-sensor.js", +},{ +name: "icon-server-alt", +legacy: true, +path: "./icons/icon-server-alt.js", +},{ +name: "icon-server", + +path: "./icons/icon-server.js", +},{ +name: "icon-settings-alt", +legacy: true, +path: "./icons/icon-settings-alt.js", +},{ +name: "icon-settings", + +path: "./icons/icon-settings.js", +},{ +name: "icon-share-alt", + +path: "./icons/icon-share-alt.js", +},{ +name: "icon-share", + +path: "./icons/icon-share.js", +},{ +name: "icon-sharing-iphone", + +path: "./icons/icon-sharing-iphone.js", +},{ +name: "icon-shield", + +path: "./icons/icon-shield.js", +},{ +name: "icon-shift", + +path: "./icons/icon-shift.js", +},{ +name: "icon-shipping-box", + +path: "./icons/icon-shipping-box.js", +},{ +name: "icon-shipping", + +path: "./icons/icon-shipping.js", +},{ +name: "icon-shoe", + +path: "./icons/icon-shoe.js", +},{ +name: "icon-shopping-basket-alt-2", +legacy: true, +path: "./icons/icon-shopping-basket-alt-2.js", +},{ +name: "icon-shopping-basket-alt", + +path: "./icons/icon-shopping-basket-alt.js", +},{ +name: "icon-shopping-basket", + +path: "./icons/icon-shopping-basket.js", +},{ +name: "icon-shuffle", + +path: "./icons/icon-shuffle.js", +},{ +name: "icon-sience", + +path: "./icons/icon-sience.js", +},{ +name: "icon-single-note", + +path: "./icons/icon-single-note.js", +},{ +name: "icon-sitemap", +legacy: true, +path: "./icons/icon-sitemap.js", +},{ +name: "icon-sleep", + +path: "./icons/icon-sleep.js", +},{ +name: "icon-slideshow", +legacy: true, +path: "./icons/icon-slideshow.js", +},{ +name: "icon-smiley-inverted", +legacy: true, +path: "./icons/icon-smiley-inverted.js", +},{ +name: "icon-smiley", + +path: "./icons/icon-smiley.js", +},{ +name: "icon-snow", + +path: "./icons/icon-snow.js", +},{ +name: "icon-sound-low", + +path: "./icons/icon-sound-low.js", +},{ +name: "icon-sound-medium", +legacy: true, +path: "./icons/icon-sound-medium.js", +},{ +name: "icon-sound-off", + +path: "./icons/icon-sound-off.js", +},{ +name: "icon-sound-waves", + +path: "./icons/icon-sound-waves.js", +},{ +name: "icon-sound", + +path: "./icons/icon-sound.js", +},{ +name: "icon-spades", + +path: "./icons/icon-spades.js", +},{ +name: "icon-speaker", + +path: "./icons/icon-speaker.js", +},{ +name: "icon-speed-gauge", + +path: "./icons/icon-speed-gauge.js", +},{ +name: "icon-split-alt", + +path: "./icons/icon-split-alt.js", +},{ +name: "icon-split", + +path: "./icons/icon-split.js", +},{ +name: "icon-sprout", + +path: "./icons/icon-sprout.js", +},{ +name: "icon-squiggly-line", +legacy: true, +path: "./icons/icon-squiggly-line.js", +},{ +name: "icon-ssd", +legacy: true, +path: "./icons/icon-ssd.js", +},{ +name: "icon-stacked-disks", +legacy: true, +path: "./icons/icon-stacked-disks.js", +},{ +name: "icon-stamp", +legacy: true, +path: "./icons/icon-stamp.js", +},{ +name: "icon-stop-alt", + +path: "./icons/icon-stop-alt.js", +},{ +name: "icon-stop-hand", +legacy: true, +path: "./icons/icon-stop-hand.js", +},{ +name: "icon-stop", + +path: "./icons/icon-stop.js", +},{ +name: "icon-store", + +path: "./icons/icon-store.js", +},{ +name: "icon-stream", +legacy: true, +path: "./icons/icon-stream.js", +},{ +name: "icon-sunny", + +path: "./icons/icon-sunny.js", +},{ +name: "icon-sweatshirt", +legacy: true, +path: "./icons/icon-sweatshirt.js", +},{ +name: "icon-sync", + +path: "./icons/icon-sync.js", +},{ +name: "icon-t-shirt", + +path: "./icons/icon-t-shirt.js", +},{ +name: "icon-tab-key", + +path: "./icons/icon-tab-key.js", +},{ +name: "icon-tag", + +path: "./icons/icon-tag.js", +},{ +name: "icon-tags", + +path: "./icons/icon-tags.js", +},{ +name: "icon-takeaway-cup", +legacy: true, +path: "./icons/icon-takeaway-cup.js", +},{ +name: "icon-target", + +path: "./icons/icon-target.js", +},{ +name: "icon-temperatrure-alt", + +path: "./icons/icon-temperatrure-alt.js", +},{ +name: "icon-temperature", + +path: "./icons/icon-temperature.js", +},{ +name: "icon-terminal", + +path: "./icons/icon-terminal.js", +},{ +name: "icon-theater", + +path: "./icons/icon-theater.js", +},{ +name: "icon-thumb-down", + +path: "./icons/icon-thumb-down.js", +},{ +name: "icon-thumb-up", + +path: "./icons/icon-thumb-up.js", +},{ +name: "icon-thumbnail-list", + +path: "./icons/icon-thumbnail-list.js", +},{ +name: "icon-thumbnails-small", + +path: "./icons/icon-thumbnails-small.js", +},{ +name: "icon-thumbnails", + +path: "./icons/icon-thumbnails.js", +},{ +name: "icon-ticket", + +path: "./icons/icon-ticket.js", +},{ +name: "icon-time", + +path: "./icons/icon-time.js", +},{ +name: "icon-timer", + +path: "./icons/icon-timer.js", +},{ +name: "icon-tools", +legacy: true, +path: "./icons/icon-tools.js", +},{ +name: "icon-top", +legacy: true, +path: "./icons/icon-top.js", +},{ +name: "icon-traffic-alt", +legacy: true, +path: "./icons/icon-traffic-alt.js", +},{ +name: "icon-trafic", + +path: "./icons/icon-trafic.js", +},{ +name: "icon-train", + +path: "./icons/icon-train.js", +},{ +name: "icon-trash-alt-2", +legacy: true, +path: "./icons/icon-trash-alt-2.js", +},{ +name: "icon-trash-alt", +legacy: true, +path: "./icons/icon-trash-alt.js", +},{ +name: "icon-trash", + +path: "./icons/icon-trash.js", +},{ +name: "icon-tree", + +path: "./icons/icon-tree.js", +},{ +name: "icon-trophy", + +path: "./icons/icon-trophy.js", +},{ +name: "icon-truck", + +path: "./icons/icon-truck.js", +},{ +name: "icon-tv-old", + +path: "./icons/icon-tv-old.js", +},{ +name: "icon-tv", + +path: "./icons/icon-tv.js", +},{ +name: "icon-umb-content", +legacy: true, +path: "./icons/icon-umb-content.js", +},{ +name: "icon-umb-developer", +legacy: true, +path: "./icons/icon-umb-developer.js", +},{ +name: "icon-umb-media", +legacy: true, +path: "./icons/icon-umb-media.js", +},{ +name: "icon-umb-settings", +legacy: true, +path: "./icons/icon-umb-settings.js", +},{ +name: "icon-umb-users", +legacy: true, +path: "./icons/icon-umb-users.js", +},{ +name: "icon-umbrella", + +path: "./icons/icon-umbrella.js", +},{ +name: "icon-undo", + +path: "./icons/icon-undo.js", +},{ +name: "icon-unlocked", + +path: "./icons/icon-unlocked.js", +},{ +name: "icon-untitled", +legacy: true, +path: "./icons/icon-untitled.js", +},{ +name: "icon-usb-connector", +legacy: true, +path: "./icons/icon-usb-connector.js", +},{ +name: "icon-usb", + +path: "./icons/icon-usb.js", +},{ +name: "icon-user-female", +legacy: true, +path: "./icons/icon-user-female.js", +},{ +name: "icon-user-females-alt", +legacy: true, +path: "./icons/icon-user-females-alt.js", +},{ +name: "icon-user-females", +legacy: true, +path: "./icons/icon-user-females.js", +},{ +name: "icon-user-glasses", +legacy: true, +path: "./icons/icon-user-glasses.js", +},{ +name: "icon-user", + +path: "./icons/icon-user.js", +},{ +name: "icon-users-alt", +legacy: true, +path: "./icons/icon-users-alt.js", +},{ +name: "icon-users", + +path: "./icons/icon-users.js", +},{ +name: "icon-utilities", + +path: "./icons/icon-utilities.js", +},{ +name: "icon-vcard", + +path: "./icons/icon-vcard.js", +},{ +name: "icon-video", + +path: "./icons/icon-video.js", +},{ +name: "icon-voice", + +path: "./icons/icon-voice.js", +},{ +name: "icon-wall-plug", + +path: "./icons/icon-wall-plug.js", +},{ +name: "icon-wallet", + +path: "./icons/icon-wallet.js", +},{ +name: "icon-wand", + +path: "./icons/icon-wand.js", +},{ +name: "icon-webhook", + +path: "./icons/icon-webhook.js", +},{ +name: "icon-weight", + +path: "./icons/icon-weight.js", +},{ +name: "icon-width", + +path: "./icons/icon-width.js", +},{ +name: "icon-wifi", + +path: "./icons/icon-wifi.js", +},{ +name: "icon-window-popin", + +path: "./icons/icon-window-popin.js", +},{ +name: "icon-window-sizes", + +path: "./icons/icon-window-sizes.js", +},{ +name: "icon-wine-glass", + +path: "./icons/icon-wine-glass.js", +},{ +name: "icon-wrench", + +path: "./icons/icon-wrench.js", +},{ +name: "icon-wrong", + +path: "./icons/icon-wrong.js", +},{ +name: "icon-zip", + +path: "./icons/icon-zip.js", +},{ +name: "icon-zom-out", +legacy: true, +path: "./icons/icon-zom-out.js", +},{ +name: "icon-zoom-in", + +path: "./icons/icon-zoom-in.js", +},{ +name: "icon-zoom-out", + +path: "./icons/icon-zoom-out.js", +},{ +name: "icon-star", + +path: "./icons/icon-star.js", +},{ +name: "icon-database", + +path: "./icons/icon-database.js", +},{ +name: "icon-azure", + +path: "./icons/icon-azure.js", +},{ +name: "icon-facebook", + +path: "./icons/icon-facebook.js", +},{ +name: "icon-gitbook", + +path: "./icons/icon-gitbook.js", +},{ +name: "icon-github", + +path: "./icons/icon-github.js", +},{ +name: "icon-gitlab", + +path: "./icons/icon-gitlab.js", +},{ +name: "icon-google", + +path: "./icons/icon-google.js", +},{ +name: "icon-linkedin", + +path: "./icons/icon-linkedin.js", +},{ +name: "icon-mastodon", + +path: "./icons/icon-mastodon.js", +},{ +name: "icon-microsoft", + +path: "./icons/icon-microsoft.js", +},{ +name: "icon-twitter-x", + +path: "./icons/icon-twitter-x.js", +},{ +name: "icon-umbraco", + +path: "./icons/icon-umbraco.js", +},{ +name: "icon-art-easel", +legacy: true, +path: "./icons/icon-art-easel.js", +},{ +name: "icon-article", +legacy: true, +path: "./icons/icon-article.js", +},{ +name: "icon-auction-hammer", +legacy: true, +path: "./icons/icon-auction-hammer.js", +},{ +name: "icon-baby-stroller", +legacy: true, +path: "./icons/icon-baby-stroller.js", +},{ +name: "icon-badge-count", +legacy: true, +path: "./icons/icon-badge-count.js", +},{ +name: "icon-band-aid", +legacy: true, +path: "./icons/icon-band-aid.js", +},{ +name: "icon-bill-dollar", +legacy: true, +path: "./icons/icon-bill-dollar.js", +},{ +name: "icon-bill-euro", +legacy: true, +path: "./icons/icon-bill-euro.js", +},{ +name: "icon-bill-pound", +legacy: true, +path: "./icons/icon-bill-pound.js", +},{ +name: "icon-bill-yen", +legacy: true, +path: "./icons/icon-bill-yen.js", +},{ +name: "icon-bill", +legacy: true, +path: "./icons/icon-bill.js", +},{ +name: "icon-billboard", +legacy: true, +path: "./icons/icon-billboard.js", +},{ +name: "icon-bills-dollar", +legacy: true, +path: "./icons/icon-bills-dollar.js", +},{ +name: "icon-bills-euro", +legacy: true, +path: "./icons/icon-bills-euro.js", +},{ +name: "icon-bills-pound", +legacy: true, +path: "./icons/icon-bills-pound.js", +},{ +name: "icon-bills-yen", +legacy: true, +path: "./icons/icon-bills-yen.js", +},{ +name: "icon-bills", +legacy: true, +path: "./icons/icon-bills.js", +},{ +name: "icon-binoculars", +legacy: true, +path: "./icons/icon-binoculars.js", +},{ +name: "icon-blueprint", +legacy: true, +path: "./icons/icon-blueprint.js", +},{ +name: "icon-bomb", +legacy: true, +path: "./icons/icon-bomb.js", +},{ +name: "icon-cash-register", +legacy: true, +path: "./icons/icon-cash-register.js", +},{ +name: "icon-checkbox-dotted-active", +legacy: true, +path: "./icons/icon-checkbox-dotted-active.js", +},{ +name: "icon-chess", +legacy: true, +path: "./icons/icon-chess.js", +},{ +name: "icon-circus", +legacy: true, +path: "./icons/icon-circus.js", +},{ +name: "icon-clothes-hanger", +legacy: true, +path: "./icons/icon-clothes-hanger.js", +},{ +name: "icon-coin", +legacy: true, +path: "./icons/icon-coin.js", +},{ +name: "icon-coins-dollar-alt", +legacy: true, +path: "./icons/icon-coins-dollar-alt.js", +},{ +name: "icon-coins-dollar", +legacy: true, +path: "./icons/icon-coins-dollar.js", +},{ +name: "icon-coins-euro-alt", +legacy: true, +path: "./icons/icon-coins-euro-alt.js", +},{ +name: "icon-coins-euro", +legacy: true, +path: "./icons/icon-coins-euro.js", +},{ +name: "icon-coins-pound-alt", +legacy: true, +path: "./icons/icon-coins-pound-alt.js", +},{ +name: "icon-coins-pound", +legacy: true, +path: "./icons/icon-coins-pound.js", +},{ +name: "icon-coins-yen-alt", +legacy: true, +path: "./icons/icon-coins-yen-alt.js", +},{ +name: "icon-coins-yen", +legacy: true, +path: "./icons/icon-coins-yen.js", +},{ +name: "icon-comb", +legacy: true, +path: "./icons/icon-comb.js", +},{ +name: "icon-desk", +legacy: true, +path: "./icons/icon-desk.js", +},{ +name: "icon-dollar-bag", +legacy: true, +path: "./icons/icon-dollar-bag.js", +},{ +name: "icon-eject", +legacy: true, +path: "./icons/icon-eject.js", +},{ +name: "icon-euro-bag", +legacy: true, +path: "./icons/icon-euro-bag.js", +},{ +name: "icon-female-symbol", +legacy: true, +path: "./icons/icon-female-symbol.js", +},{ +name: "icon-firewall", +legacy: true, +path: "./icons/icon-firewall.js", +},{ +name: "icon-folder-open", +legacy: true, +path: "./icons/icon-folder-open.js", +},{ +name: "icon-folder-outline", +legacy: true, +path: "./icons/icon-folder-outline.js", +},{ +name: "icon-handprint", +legacy: true, +path: "./icons/icon-handprint.js", +},{ +name: "icon-hat", +legacy: true, +path: "./icons/icon-hat.js", +},{ +name: "icon-hd", +legacy: true, +path: "./icons/icon-hd.js", +},{ +name: "icon-inactive-line", +legacy: true, +path: "./icons/icon-inactive-line.js", +},{ +name: "icon-keychain", +legacy: true, +path: "./icons/icon-keychain.js", +},{ +name: "icon-keyhole", +legacy: true, +path: "./icons/icon-keyhole.js", +},{ +name: "icon-linux-tux", +legacy: true, +path: "./icons/icon-linux-tux.js", +},{ +name: "icon-male-and-female", +legacy: true, +path: "./icons/icon-male-and-female.js", +},{ +name: "icon-male-symbol", +legacy: true, +path: "./icons/icon-male-symbol.js", +},{ +name: "icon-molecular-network", +legacy: true, +path: "./icons/icon-molecular-network.js", +},{ +name: "icon-molecular", +legacy: true, +path: "./icons/icon-molecular.js", +},{ +name: "icon-os-x", +legacy: true, +path: "./icons/icon-os-x.js", +},{ +name: "icon-pants", +legacy: true, +path: "./icons/icon-pants.js", +},{ +name: "icon-parachute-drop", +legacy: true, +path: "./icons/icon-parachute-drop.js", +},{ +name: "icon-parental-control", +legacy: true, +path: "./icons/icon-parental-control.js", +},{ +name: "icon-path", +legacy: true, +path: "./icons/icon-path.js", +},{ +name: "icon-piracy", +legacy: true, +path: "./icons/icon-piracy.js", +},{ +name: "icon-poker-chip", +legacy: true, +path: "./icons/icon-poker-chip.js", +},{ +name: "icon-pound-bag", +legacy: true, +path: "./icons/icon-pound-bag.js", +},{ +name: "icon-receipt-dollar", +legacy: true, +path: "./icons/icon-receipt-dollar.js", +},{ +name: "icon-receipt-euro", +legacy: true, +path: "./icons/icon-receipt-euro.js", +},{ +name: "icon-receipt-pound", +legacy: true, +path: "./icons/icon-receipt-pound.js", +},{ +name: "icon-receipt-yen", +legacy: true, +path: "./icons/icon-receipt-yen.js", +},{ +name: "icon-road", +legacy: true, +path: "./icons/icon-road.js", +},{ +name: "icon-safe", +legacy: true, +path: "./icons/icon-safe.js", +},{ +name: "icon-safedial", +legacy: true, +path: "./icons/icon-safedial.js", +},{ +name: "icon-sandbox-toys", +legacy: true, +path: "./icons/icon-sandbox-toys.js", +},{ +name: "icon-security-camera", +legacy: true, +path: "./icons/icon-security-camera.js", +},{ +name: "icon-settings-alt-2", +legacy: true, +path: "./icons/icon-settings-alt-2.js", +},{ +name: "icon-share-alt-2", +legacy: true, +path: "./icons/icon-share-alt-2.js", +},{ +name: "icon-shorts", +legacy: true, +path: "./icons/icon-shorts.js", +},{ +name: "icon-simcard", +legacy: true, +path: "./icons/icon-simcard.js", +},{ +name: "icon-tab", +legacy: true, +path: "./icons/icon-tab.js", +},{ +name: "icon-tactics", +legacy: true, +path: "./icons/icon-tactics.js", +},{ +name: "icon-theif", +legacy: true, +path: "./icons/icon-theif.js", +},{ +name: "icon-thought-bubble", +legacy: true, +path: "./icons/icon-thought-bubble.js", +},{ +name: "icon-twitter", +legacy: true, +path: "./icons/icon-twitter.js", +},{ +name: "icon-umb-contour", +legacy: true, +path: "./icons/icon-umb-contour.js", +},{ +name: "icon-umb-deploy", +legacy: true, +path: "./icons/icon-umb-deploy.js", +},{ +name: "icon-umb-members", +legacy: true, +path: "./icons/icon-umb-members.js", +},{ +name: "icon-universal", +legacy: true, +path: "./icons/icon-universal.js", +},{ +name: "icon-war", +legacy: true, +path: "./icons/icon-war.js", +},{ +name: "icon-windows", +legacy: true, +path: "./icons/icon-windows.js", +},{ +name: "icon-yen-bag", +legacy: true, +path: "./icons/icon-yen-bag.js", +}]; \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts index bfae467f5a..0ede7960cd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/index.ts @@ -1 +1,4 @@ +export * from './icon-registry.context-token.js'; +export * from './icon-registry.context.js'; export * from './icon.registry.js'; +export * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts new file mode 100644 index 0000000000..ef377f1b7b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/manifests.ts @@ -0,0 +1,16 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'icons', + alias: 'Umb.Icons.Backoffice', + name: 'Backoffice Icons', + js: () => import('./icons/icons.js'), + }, + { + type: 'globalContext', + alias: 'Umb.GlobalContext.Icons', + name: 'Icons Context', + api: () => import('./icon-registry.context.js'), + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/types.ts new file mode 100644 index 0000000000..d4f1f8a98c --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/types.ts @@ -0,0 +1,7 @@ +export interface UmbIconDefinition { + name: string; + path: string; + legacy?: boolean; +} + +export type UmbIconDictionary = Array; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/localization/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/localization/manifests.ts index 0a4ccf43c0..ee75f24d05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/localization/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/localization/manifests.ts @@ -1,6 +1,67 @@ import type { ManifestLocalization } from '../extension-registry/models/localization.model.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const localizationManifests: Array = [ + { + type: 'localization', + alias: 'Umb.Localization.Bs', + weight: -100, + name: 'Bosanski', + meta: { + culture: 'bs', + }, + js: () => import('../../../assets/lang/bs.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Cs-CZ', + weight: -100, + name: 'česky', + meta: { + culture: 'cs-cz', + }, + js: () => import('../../../assets/lang/cs-cz.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Cy-GB', + weight: -100, + name: 'Cymraeg (UK)', + meta: { + culture: 'cy-gb', + }, + js: () => import('../../../assets/lang/cy-gb.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Da_DK', + weight: -100, + name: 'Dansk (Danmark)', + meta: { + culture: 'da-dk', + }, + js: () => import('../../../assets/lang/da-dk.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.De-DE', + weight: -100, + name: 'Deutsch (DE)', + meta: { + culture: 'de-de', + }, + js: () => import('../../../assets/lang/de-de.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.En-GB', + weight: -100, + name: 'English (UK)', + meta: { + culture: 'en', + }, + js: () => import('../../../assets/lang/en.js'), + }, { type: 'localization', alias: 'Umb.Localization.En_US', @@ -13,14 +74,184 @@ const localizationManifests: Array = [ }, { type: 'localization', - alias: 'Umb.Localization.Da_DK', + alias: 'Umb.Localization.Es-ES', weight: -100, - name: 'Dansk (Danmark)', + name: 'español', meta: { - culture: 'da-dk', + culture: 'es-es', }, - js: () => import('../../../assets/lang/da-dk.js'), + js: () => import('../../../assets/lang/es-es.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Fr-FR', + weight: -100, + name: 'français', + meta: { + culture: 'fr-fr', + }, + js: () => import('../../../assets/lang/fr-fr.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.He-IL', + weight: -100, + name: 'Hebrew', + meta: { + culture: 'he-il', + }, + js: () => import('../../../assets/lang/he-il.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Hr-HR', + weight: -100, + name: 'Hrvatski', + meta: { + culture: 'hr-hr', + }, + js: () => import('../../../assets/lang/hr-hr.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.It-IT', + weight: -100, + name: 'italiano', + meta: { + culture: 'it-it', + }, + js: () => import('../../../assets/lang/it-it.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Ja-JP', + weight: -100, + name: '日本語', + meta: { + culture: 'ja-jp', + }, + js: () => import('../../../assets/lang/ja-jp.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Ko-KR', + weight: -100, + name: '한국어', + meta: { + culture: 'ko-kr', + }, + js: () => import('../../../assets/lang/ko-kr.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Nb-NO', + weight: -100, + name: 'norsk', + meta: { + culture: 'nb-no', + }, + js: () => import('../../../assets/lang/nb-no.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Nl-NL', + weight: -100, + name: 'Nederlands', + meta: { + culture: 'nl-nl', + }, + js: () => import('../../../assets/lang/nl-nl.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Pl-PL', + weight: -100, + name: 'polski', + meta: { + culture: 'pl-pl', + }, + js: () => import('../../../assets/lang/pl-pl.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Pt-BR', + weight: -100, + name: 'Portuguese Brazil', + meta: { + culture: 'pt-br', + }, + js: () => import('../../../assets/lang/pt-br.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Ro-RO', + weight: -100, + name: 'romana (Romania)', + meta: { + culture: 'ro-ro', + }, + js: () => import('../../../assets/lang/ro-ro.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Ru-RU', + weight: -100, + name: 'русский', + meta: { + culture: 'ru-ru', + }, + js: () => import('../../../assets/lang/ru-ru.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Sv-SE', + weight: -100, + name: 'Svenska', + meta: { + culture: 'sv-se', + }, + js: () => import('../../../assets/lang/sv-se.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Tr-TR', + weight: -100, + name: 'Türkçe', + meta: { + culture: 'tr-tr', + }, + js: () => import('../../../assets/lang/tr-tr.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Uk-UA', + weight: -100, + name: 'Українська', + meta: { + culture: 'uk-ua', + }, + js: () => import('../../../assets/lang/uk-ua.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Zh-CN', + weight: -100, + name: '中文(简体,中国)', + meta: { + culture: 'zh-cn', + }, + js: () => import('../../../assets/lang/zh-cn.js'), + }, + { + type: 'localization', + alias: 'Umb.Localization.Zh-TW', + weight: -100, + name: '中文(正體,台灣)', + meta: { + culture: 'zh-tw', + }, + js: () => import('../../../assets/lang/zh-tw.js'), }, ]; -export const manifests = [...localizationManifests]; +export const manifests: Array = [...localizationManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts index 63bd854535..460f7acc8d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/manifests.ts @@ -6,10 +6,10 @@ import { manifests as cultureManifests } from './culture/manifests.js'; import { manifests as debugManifests } from './debug/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; import { manifests as extensionManifests } from './extension-registry/manifests.js'; +import { manifests as iconRegistryManifests } from './icon-registry/manifests.js'; import { manifests as localizationManifests } from './localization/manifests.js'; import { manifests as modalManifests } from './modal/common/manifests.js'; import { manifests as propertyActionManifests } from './property-action/manifests.js'; -import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as recycleBinManifests } from './recycle-bin/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; import { manifests as serverFileSystemManifests } from './server-file-system/manifests.js'; @@ -23,6 +23,7 @@ import type { ManifestTypes, UmbBackofficeManifestKind } from './extension-regis export const manifests: Array = [ ...authManifests, ...extensionManifests, + ...iconRegistryManifests, ...cultureManifests, ...localizationManifests, ...themeManifests, @@ -32,7 +33,6 @@ export const manifests: Array = [ ...workspaceManifests, ...contentManifests, ...contentTypeManifests, - ...propertyEditorManifests, ...settingsManifests, ...modalManifests, ...entityActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.element.ts index a994540316..0e236841bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/confirm/confirm-modal.element.ts @@ -1,7 +1,7 @@ import { html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbConfirmModalData, UmbConfirmModalValue, UmbModalContext } from '@umbraco-cms/backoffice/modal'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-confirm-modal') export class UmbConfirmModalElement extends UmbLitElement { @@ -31,7 +31,8 @@ export class UmbConfirmModalElement extends UmbLitElement { color="${this.data?.color || 'positive'}" look="primary" label="${this.data?.confirmLabel || 'Confirm'}" - @click=${this._handleConfirm}> + @click=${this._handleConfirm} + ${umbFocus()}> `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts index 6d454f5156..9df97c18cb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/common/icon-picker/icon-picker-modal.element.ts @@ -1,81 +1,97 @@ -import icons from '../../../icon-registry/icons/icons.json' assert { type: 'json' }; -import type { UUIColorSwatchesEvent } from '@umbraco-cms/backoffice/external/uui'; +import type { UUIColorSwatchesEvent, UUIIconElement } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { css, html, customElement, state, repeat, query, nothing } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbIconPickerModalData, UmbIconPickerModalValue } from '@umbraco-cms/backoffice/modal'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import { extractUmbColorVariable, umbracoColors } from '@umbraco-cms/backoffice/resources'; import { umbFocus } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_ICON_REGISTRY_CONTEXT, type UmbIconDefinition } from '@umbraco-cms/backoffice/icon'; -// TODO: Make use of UmbPickerLayoutBase -// TODO: to prevent element extension we need to move the Picker logic into a separate class we can reuse across all pickers @customElement('umb-icon-picker-modal') export class UmbIconPickerModalElement extends UmbModalBaseElement { - private _iconList = icons.filter((icon) => !icon.legacy); + #icons?: Array; + + @query('#search') + private _searchInput?: HTMLInputElement; @state() - private _iconListFiltered: Array<(typeof icons)[0]> = []; + private _iconsFiltered?: Array; @state() - private _colorList = umbracoColors; + private _colorList = umbracoColors.filter((color) => !color.legacy); @state() - private _modalValue?: UmbIconPickerModalValue; + private _currentIcon?: string; @state() - private _currentAlias = 'text'; + private _currentColor = 'text'; - #changeIcon(e: { target: HTMLInputElement; type: string; key: unknown }) { - if (e.type == 'click' || (e.type == 'keyup' && e.key == 'Enter')) { - this.modalContext?.updateValue({ icon: e.target.id }); - } + constructor() { + super(); + this.consumeContext(UMB_ICON_REGISTRY_CONTEXT, (context) => { + this.observe(context.approvedIcons, (icons) => { + this.#icons = icons; + this.#filterIcons(); + }); + }); } - #filterIcons(e: { target: HTMLInputElement }) { - if (e.target.value) { - this._iconListFiltered = this._iconList.filter((icon) => - icon.name.toLowerCase().includes(e.target.value.toLowerCase()), - ); + #filterIcons() { + if (!this.#icons) return; + const value = this._searchInput?.value; + if (value) { + this._iconsFiltered = this.#icons.filter((icon) => icon.name.toLowerCase().includes(value.toLowerCase())); } else { - this._iconListFiltered = this._iconList; + this._iconsFiltered = this.#icons; } } - #onColorChange(e: UUIColorSwatchesEvent) { - this.modalContext?.updateValue({ color: e.target.value }); - this._currentAlias = e.target.value; - } - connectedCallback() { super.connectedCallback(); - this._iconListFiltered = this._iconList; + this._iconsFiltered = this.#icons; if (this.modalContext) { this.observe( this.modalContext?.value, (newValue) => { - this._modalValue = newValue; - this._currentAlias = newValue?.color ?? 'text'; + this._currentIcon = newValue?.icon; + this._currentColor = newValue?.color ?? 'text'; }, '_observeModalContextValue', ); } } + #changeIcon(e: InputEvent | KeyboardEvent) { + if (e.type == 'click' || (e.type == 'keyup' && (e as KeyboardEvent).key == 'Enter')) { + const iconName = (e.target as UUIIconElement).name; + if (iconName) { + this.modalContext?.updateValue({ icon: iconName }); + } + } + } + + #onColorChange(e: UUIColorSwatchesEvent) { + const colorAlias = e.target.value; + this.modalContext?.updateValue({ color: colorAlias }); + this._currentColor = colorAlias; + } + render() { + // TODO: Missing localization in general. [NL] return html`
- ${this.renderSearchbar()} + ${this.renderSearch()}
${ - // TODO: Missing translation for the color aliases. + // TODO: Missing localization for the color aliases. [NL] this._colorList.map( (color) => html`
- ${this.renderIconSelection()} + ${this.renderIcons()}
- + `; } - renderIconSelection() { - return repeat( - this._iconListFiltered, - (icon) => icon.name, - (icon) => html` - - - `, - ); + renderIcons() { + return this._iconsFiltered + ? repeat( + this._iconsFiltered, + (icon) => icon.name, + (icon) => html` + + + + + `, + ) + : nothing; } static styles = [ @@ -160,15 +177,15 @@ export class UmbIconPickerModalElement extends UmbModalBaseElement - + ${this.localize.term('defaultdialogs_nodeNameLinkPicker')} - ${this._renderTrees()} + ${this.#renderTrees()}
@@ -148,7 +148,7 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement ${this.localize.term('defaultdialogs_link')} `; } - private _renderAnchorInput() { + #renderAnchorInput() { if (this._layout.hideAnchor) return nothing; return html` ${this.localize.term('defaultdialogs_anchorLinkPicker')} @@ -174,8 +174,8 @@ export class UmbLinkPickerModalElement extends UmbModalBaseElement`; } - private _renderTrees() { - //TODO: Make search work + #renderTrees() { + //TODO: Make search work (temporarily disabled) return html` ${this.localize.term('defaultdialogs_linkToPage')}
= [ { @@ -39,4 +39,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/context/modal.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/context/modal.context.ts index 2fc6c8da0c..c8751d8b3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/context/modal.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/context/modal.context.ts @@ -134,7 +134,7 @@ export class UmbModalContext< * @memberof UmbModalContext */ public setValue(value: ModalValue) { - this.#value.update(value); + this.#value.setValue(value); } /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts index ed51668daf..7bab99f381 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/modal/token/link-picker-modal.token.ts @@ -1,5 +1,4 @@ import { UmbModalToken } from './modal-token.js'; -import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; export interface UmbLinkPickerModalData { config: UmbLinkPickerConfig; @@ -26,7 +25,6 @@ export type UmbLinkPickerLinkType = 'document' | 'external' | 'media'; export interface UmbLinkPickerConfig { hideAnchor?: boolean; ignoreUserStartNodes?: boolean; - overlaySize?: UUIModalSidebarSize; } export const UMB_LINK_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts index a95a2244a8..f0e900ceab 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts @@ -6,20 +6,6 @@ export type UmbEntityBase = { name?: string; }; -export interface UmbVariantableValueModel extends UmbInvariantValueModel { - culture?: string | null; - segment?: string | null; -} -export interface UmbVariantValueModel extends UmbInvariantValueModel { - culture: string | null; - segment: string | null; -} - -export interface UmbInvariantValueModel { - alias: string; - value: T; -} - export interface UmbSwatchDetails { label: string; value: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/default/manifests.ts index e8a0dcdedd..3cb64a6f47 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/default/manifests.ts @@ -1,3 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/manifests.ts index 8bc9a56ab9..58ab7db446 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/components/property-action/manifests.ts @@ -1,3 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts index da0692574e..4421213b0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/manifests.ts @@ -1,5 +1,9 @@ import { manifests as defaultManifests } from './components/property-action/manifests.js'; -import type { ManifestPropertyActions } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestPropertyActions, + ManifestTypes, + UmbBackofficeManifestKind, +} from '@umbraco-cms/backoffice/extension-registry'; export const propertyActionManifests: Array = [ { @@ -28,4 +32,7 @@ export const propertyActionManifests: Array = [ }, ]; -export const manifests = [...defaultManifests, ...propertyActionManifests]; +export const manifests: Array = [ + ...defaultManifests, + ...propertyActionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts deleted file mode 100644 index 4936630ae2..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/manifests.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { manifests as propertyEditorSchemaManifests } from './schemas/manifests.js'; -import { manifests as propertyEditorUIManifests } from './uis/manifests.js'; - -export const manifests = [...propertyEditorSchemaManifests, ...propertyEditorUIManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Decimal.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Decimal.ts deleted file mode 100644 index 20d8f4537c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Decimal.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { ManifestPropertyEditorSchema } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorSchema = { - type: 'propertyEditorSchema', - name: 'Decimal', - alias: 'Umbraco.Decimal', - meta: { - defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', - settings: { - properties: [ - { - alias: 'min', - label: 'Minimum', - description: 'Enter the minimum amount of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', - }, - { - alias: 'max', - label: 'Maximum', - description: 'Enter the maximum amount of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', - }, - { - alias: 'step', - label: 'Step size', - description: 'Enter the intervals amount between each step of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', - config: [ - { - alias: 'step', - value: '0.01', - }, - ], - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Integer.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Integer.ts deleted file mode 100644 index e1cedaf759..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Integer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { ManifestPropertyEditorSchema } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorSchema = { - type: 'propertyEditorSchema', - name: 'Integer', - alias: 'Umbraco.Integer', - meta: { - defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.Integer', - settings: { - properties: [ - { - alias: 'min', - label: 'Minimum', - description: 'Enter the minimum amount of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'max', - label: 'Maximum', - description: 'Enter the maximum amount of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'step', - label: 'Step size', - description: 'Enter the intervals amount between each step of number to be entered', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MultipleTextString.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MultipleTextString.ts deleted file mode 100644 index 28e1aead4e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MultipleTextString.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { ManifestPropertyEditorSchema } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorSchema = { - type: 'propertyEditorSchema', - name: 'Multiple Text String', - alias: 'Umbraco.MultipleTextstring', - meta: { - defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', - settings: { - properties: [ - { - alias: 'min', - label: 'Minimum', - description: 'Enter the minimum amount of text boxes to be displayed', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'max', - label: 'Maximum', - description: 'Enter the maximum amount of text boxes to be displayed, enter 0 for unlimited', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - ], - defaultData: [ - { - alias: 'min', - value: 0, - }, - { - alias: 'max', - value: 0, - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/manifests.ts deleted file mode 100644 index 2108dfc379..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/manifests.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { manifest as blockGrid } from './Umbraco.BlockGrid.js'; -import { manifest as blockList } from './Umbraco.BlockList.js'; -import { manifest as checkboxList } from './Umbraco.CheckboxList.js'; -import { manifest as colorPicker } from './Umbraco.ColorPicker.js'; -import { manifest as contentPicker } from './Umbraco.ContentPicker.js'; -import { manifest as dateTime } from './Umbraco.DateTime.js'; -import { manifest as decimal } from './Umbraco.Decimal.js'; -import { manifest as dropdownFlexible } from './Umbraco.Dropdown.Flexible.js'; -import { manifest as emailAddress } from './Umbraco.EmailAddress.js'; -import { manifest as eyeDropper } from './Umbraco.ColorPicker.EyeDropper.js'; -import { manifest as iconPicker } from './Umbraco.IconPicker.js'; -import { manifest as imageCropper } from './Umbraco.ImageCropper.js'; -import { manifest as integer } from './Umbraco.Integer.js'; -import { manifest as label } from './Umbraco.Label.js'; -import { manifest as listView } from './Umbraco.ListView.js'; -import { manifest as markdownEditor } from './Umbraco.MarkdownEditor.js'; -import { manifest as mediaPicker } from './Umbraco.MediaPicker.js'; -import { manifest as memberGroupPicker } from './Umbraco.MemberGroupPicker.js'; -import { manifest as memberPicker } from './Umbraco.MemberPicker.js'; -import { manifest as multiNodeTreePicker } from './Umbraco.MultiNodeTreePicker.js'; -import { manifest as multipleTextString } from './Umbraco.MultipleTextString.js'; -import { manifest as multiUrlPicker } from './Umbraco.MultiUrlPicker.js'; -import { manifest as radioButtonList } from './Umbraco.RadioButtonList.js'; -import { manifest as slider } from './Umbraco.Slider.js'; -import { manifest as tags } from './Umbraco.Tags.js'; -import { manifest as textArea } from './Umbraco.TextArea.js'; -import { manifest as textBox } from './Umbraco.TextBox.js'; -import { manifest as richText } from './Umbraco.RichText.js'; -import { manifest as trueFalse } from './Umbraco.TrueFalse.js'; -import { manifest as uploadField } from './Umbraco.UploadField.js'; -import { manifest as userPicker } from './Umbraco.UserPicker.js'; - -import type { ManifestPropertyEditorSchema } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ - blockGrid, - blockList, - checkboxList, - colorPicker, - contentPicker, - dateTime, - decimal, - dropdownFlexible, - emailAddress, - eyeDropper, - iconPicker, - imageCropper, - integer, - label, - listView, - markdownEditor, - mediaPicker, - memberGroupPicker, - memberPicker, - multiNodeTreePicker, - multipleTextString, - multiUrlPicker, - radioButtonList, - slider, - tags, - textArea, - textBox, - richText, - trueFalse, - uploadField, - userPicker, -]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/manifests.ts deleted file mode 100644 index a4fb438be5..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/manifests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.CheckBoxList', - name: 'Checkbox List Property Editor UI', - element: () => import('./property-editor-ui-checkbox-list.element.js'), - meta: { - label: 'Checkbox List', - propertyEditorSchemaAlias: 'Umbraco.CheckBoxList', - icon: 'icon-bulleted-list', - group: 'lists', - settings: { - properties: [ - { - alias: 'items', - label: 'Add option', - description: 'Add, remove or sort options for the list.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/manifests.ts deleted file mode 100644 index 5a279e45d1..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.ColorPicker', - name: 'Color Picker Property Editor UI', - element: () => import('./property-editor-ui-color-picker.element.js'), - meta: { - label: 'Color Picker', - propertyEditorSchemaAlias: 'Umbraco.ColorPicker', - icon: 'icon-colorpicker', - group: 'pickers', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/manifests.ts deleted file mode 100644 index 78b51bea49..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/manifests.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.DatePicker', - name: 'Date Picker Property Editor UI', - element: () => import('./property-editor-ui-date-picker.element.js'), - meta: { - label: 'Date Picker', - propertyEditorSchemaAlias: 'Umbraco.DateTime', - icon: 'icon-time', - group: 'pickers', - settings: { - properties: [ - { - alias: 'format', - label: 'Date format', - description: 'If left empty then the format is YYYY-MM-DD', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox', - }, - ], - defaultData: [ - { - alias: 'format', - value: 'YYYY-MM-DD HH:mm:ss', - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/manifests.ts deleted file mode 100644 index 0a54e6771c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.Dropdown', - name: 'Dropdown Property Editor UI', - element: () => import('./property-editor-ui-dropdown.element.js'), - meta: { - label: 'Dropdown', - propertyEditorSchemaAlias: 'Umbraco.DropDown.Flexible', - icon: 'icon-list', - group: 'pickers', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/manifests.ts deleted file mode 100644 index 0647a11ac7..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/manifests.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.EyeDropper', - name: 'Eye Dropper Color Picker Property Editor UI', - element: () => import('./property-editor-ui-eye-dropper.element.js'), - meta: { - label: 'Eye Dropper Color Picker', - icon: 'icon-colorpicker', - group: 'pickers', - propertyEditorSchemaAlias: 'Umbraco.ColorPicker.EyeDropper', - settings: { - properties: [ - { - alias: 'showAlpha', - label: 'Show alpha', - description: 'Allow alpha transparency selection.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - { - alias: 'showPalette', - label: 'Show palette', - description: 'Show a palette next to the color picker.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/index.ts deleted file mode 100644 index 0eef45ef3c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// TODO: Currently we export input-checkbox-list because package-builder uses it, but this should be changed over time, so package builder uses the property editor UI and then this export can be removed. -export * from './checkbox-list/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/manifests.ts deleted file mode 100644 index 3210cdc499..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.Label', - name: 'Label Property Editor UI', - element: () => import('./property-editor-ui-label.element.js'), - meta: { - label: 'Label', - icon: 'icon-readonly', - group: 'pickers', - propertyEditorSchemaAlias: 'Umbraco.Label', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts deleted file mode 100644 index 56a9d0a8b1..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/manifests.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { manifest as checkboxList } from './checkbox-list/manifests.js'; -import { manifest as colorEditor } from './color-swatches-editor/manifests.js'; -import { manifest as colorPicker } from './color-picker/manifests.js'; -import { manifest as datePicker } from './date-picker/manifests.js'; -import { manifest as dropdown } from './dropdown/manifests.js'; -import { manifest as eyeDropper } from './eye-dropper/manifests.js'; -import { manifest as iconPicker } from './icon-picker/manifests.js'; -import { manifest as label } from './label/manifests.js'; -import { manifest as memberGroupPicker } from './member-group-picker/manifests.js'; -import { manifest as memberPicker } from './member-picker/manifests.js'; -import { manifest as multipleTextString } from './multiple-text-string/manifests.js'; -import { manifest as multiUrlPicker } from './multi-url-picker/manifests.js'; -import { manifest as numberRange } from './number-range/manifests.js'; -import { manifest as orderDirection } from './order-direction/manifests.js'; -import { manifest as overlaySize } from './overlay-size/manifests.js'; -import { manifest as radioButtonList } from './radio-button-list/manifests.js'; -import { manifest as slider } from './slider/manifests.js'; -import { manifest as textArea } from './textarea/manifests.js'; -import { manifest as toggle } from './toggle/manifests.js'; -import { manifest as uploadField } from './upload-field/manifests.js'; -import { manifest as userPicker } from './user-picker/manifests.js'; -import { manifest as valueType } from './value-type/manifests.js'; -import { manifests as collectionView } from './collection-view/manifests.js'; -import { manifests as numbers } from './number/manifests.js'; -import { manifests as textBoxes } from './text-box/manifests.js'; -import { manifests as treePicker } from './tree-picker/manifests.js'; -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifests: Array = [ - checkboxList, - colorEditor, - colorPicker, - datePicker, - dropdown, - eyeDropper, - iconPicker, - label, - memberGroupPicker, - memberPicker, - multipleTextString, - multiUrlPicker, - numberRange, - orderDirection, - overlaySize, - radioButtonList, - slider, - textArea, - toggle, - uploadField, - userPicker, - valueType, - ...collectionView, - ...numbers, - ...textBoxes, - ...treePicker, -]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/manifests.ts deleted file mode 100644 index 26ed883b0e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.MemberGroupPicker', - name: 'Member Group Picker Property Editor UI', - element: () => import('./property-editor-ui-member-group-picker.element.js'), - meta: { - label: 'Member Group Picker', - propertyEditorSchemaAlias: 'Umbraco.MemberGroupPicker', - icon: 'icon-users-alt', - group: 'people', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/manifests.ts deleted file mode 100644 index c8c52770e4..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.MemberPicker', - name: 'Member Picker Property Editor UI', - element: () => import('./property-editor-ui-member-picker.element.js'), - meta: { - label: 'Member Picker', - propertyEditorSchemaAlias: 'Umbraco.MemberPicker', - icon: 'icon-user', - group: 'people', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.element.ts deleted file mode 100644 index a4602e52ef..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.element.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { UmbLitElement } from '../../../lit-element/index.js'; -import { UMB_PROPERTY_CONTEXT } from '../../../property/property/index.js'; -import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; -import type { UmbInputMultiUrlElement } from '@umbraco-cms/backoffice/components'; -import type { UmbLinkPickerLink } from '@umbraco-cms/backoffice/modal'; -import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; - -/** - * @element umb-property-editor-ui-multi-url-picker - */ -@customElement('umb-property-editor-ui-multi-url-picker') -export class UmbPropertyEditorUIMultiUrlPickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { - @property({ type: Array }) - value: UmbLinkPickerLink[] = []; - - public set config(config: UmbPropertyEditorConfigCollection | undefined) { - this._overlaySize = config?.getValueByAlias('overlaySize'); - this._hideAnchor = config?.getValueByAlias('hideAnchor'); - this._ignoreUserStartNodes = config?.getValueByAlias('ignoreUserStartNodes'); - this._minNumber = config?.getValueByAlias('minNumber'); - this._maxNumber = config?.getValueByAlias('maxNumber'); - } - - @state() - private _overlaySize?: UUIModalSidebarSize; - - @state() - private _hideAnchor?: boolean; - - @state() - private _ignoreUserStartNodes?: boolean; - - @state() - private _maxNumber?: number; - - @state() - private _minNumber?: number; - - @state() - private _alias?: string; - - @state() - private _propertyVariantId?: string; - - constructor() { - super(); - - this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => { - this.observe(context.alias, (alias) => { - this._alias = alias; - }); - this.observe(context.variantId, (variantId) => { - this._propertyVariantId = variantId?.toString() || 'invariant'; - }); - }); - } - - private _onChange(event: CustomEvent) { - this.value = (event.target as UmbInputMultiUrlElement).urls; - this.dispatchEvent(new CustomEvent('property-value-change')); - } - - render() { - return html``; - } -} - -export default UmbPropertyEditorUIMultiUrlPickerElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-property-editor-ui-multi-url-picker': UmbPropertyEditorUIMultiUrlPickerElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/manifests.ts deleted file mode 100644 index e1dbfdc29e..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/manifests.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.MultipleTextString', - name: 'Multiple Text String Property Editor UI', - element: () => import('./property-editor-ui-multiple-text-string.element.js'), - meta: { - label: 'Multiple Text String', - propertyEditorSchemaAlias: 'Umbraco.MultipleTextstring', - icon: 'icon-ordered-list', - group: 'lists', - supportsReadOnly: true, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/manifests.ts deleted file mode 100644 index 794be47a3d..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.RadioButtonList', - name: 'Radio Button List Property Editor UI', - element: () => import('./property-editor-ui-radio-button-list.element.js'), - meta: { - label: 'Radio Button List', - propertyEditorSchemaAlias: 'Umbraco.RadioButtonList', - icon: 'icon-target', - group: 'lists', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/slider/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/slider/manifests.ts deleted file mode 100644 index f9cafa618d..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/slider/manifests.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.Slider', - name: 'Slider Property Editor UI', - element: () => import('./property-editor-ui-slider.element.js'), - meta: { - label: 'Slider', - propertyEditorSchemaAlias: 'Umbraco.Slider', - icon: 'icon-navigation-horizontal', - group: 'common', - settings: { - properties: [ - { - alias: 'enableRange', - label: 'Enable range', - description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - { - alias: 'initVal1', - label: 'Initial value', - description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'initVal2', - label: 'Initial value 2', - description: 'Used when range is enabled', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'step', - label: 'Step increments', - description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - ], - defaultData: [ - { - alias: 'initVal1', - value: 0, - }, - { - alias: 'initVal2', - value: 0, - }, - { - alias: 'step', - value: 0, - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/textarea/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/textarea/manifests.ts deleted file mode 100644 index 25e5da053c..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/textarea/manifests.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.TextArea', - name: 'Text Area Property Editor UI', - element: () => import('./property-editor-ui-textarea.element.js'), - meta: { - label: 'Text Area', - propertyEditorSchemaAlias: 'Umbraco.TextArea', - icon: 'icon-edit', - group: 'common', - settings: { - properties: [ - { - alias: 'rows', - label: 'Number of rows', - description: 'If empty or zero, the textarea is set to auto-height', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'minHeight', - label: 'Min height (pixels)', - description: 'Sets the minimum height of the textarea', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - { - alias: 'maxHeight', - label: 'Max height (pixels)', - description: 'Sets the maximum height of the textarea', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', - }, - ], - defaultData: [ - { - alias: 'rows', - value: 10, - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/toggle/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/toggle/manifests.ts deleted file mode 100644 index 72f9a85268..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/toggle/manifests.ts +++ /dev/null @@ -1,43 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.Toggle', - name: 'Toggle Property Editor UI', - element: () => import('./property-editor-ui-toggle.element.js'), - meta: { - label: 'Toggle', - propertyEditorSchemaAlias: 'Umbraco.TrueFalse', - icon: 'icon-checkbox', - group: 'common', - settings: { - properties: [ - { - alias: 'default', - label: 'Initial State', - description: - 'The initial state for the toggle, when it is displayed for the first time in the backoffice, eg. for a new content item.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - { - alias: 'showLabels', - label: 'Show toggle labels', - description: 'Show labels next to toggle button.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - { - alias: 'labelOn', - label: 'Label On', - description: 'Label text when enabled.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox', - }, - { - alias: 'labelOff', - label: 'Label Off', - description: 'Label text when disabled.', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox', - }, - ], - }, - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/manifests.ts deleted file mode 100644 index 2576fbb1cc..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/manifests.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; - -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.UserPicker', - name: 'User Picker Property Editor UI', - element: () => import('./property-editor-ui-user-picker.element.js'), - meta: { - label: 'User Picker', - propertyEditorSchemaAlias: 'Umbraco.UserPicker', - icon: 'icon-user', - group: 'people', - }, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts index 89241384bb..c6618e9347 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/empty-recycle-bin/manifests.ts @@ -1,3 +1,4 @@ import { manifest as emptyRecycleBinKindManifest } from './empty-recycle-bin.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [emptyRecycleBinKindManifest]; +export const manifests: Array = [emptyRecycleBinKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts index 04e5fa7111..23255c81a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/manifests.ts @@ -1,6 +1,7 @@ import { manifest as kindManifest } from './restore-from-recycle-bin.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ kindManifest, { type: 'modal', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/manifests.ts index 3f3fc9c2c7..f48d4f6879 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/trash/manifests.ts @@ -1,3 +1,4 @@ import { manifest as trashKindManifest } from './trash.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [trashKindManifest]; +export const manifests: Array = [trashKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/manifests.ts index 49e2d1fd73..7a48f5b4e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/manifests.ts @@ -1,8 +1,9 @@ import { manifests as trashEntityActionManifests } from '../recycle-bin/entity-action/trash/manifests.js'; import { manifests as restoreFromRecycleBinEntityActionManifests } from '../recycle-bin/entity-action/restore-from-recycle-bin/manifests.js'; import { manifests as emptyRecycleBinEntityActionManifests } from '../recycle-bin/entity-action/empty-recycle-bin/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...trashEntityActionManifests, ...restoreFromRecycleBinEntityActionManifests, ...emptyRecycleBinEntityActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/resources/extractUmbColorVariable.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/resources/extractUmbColorVariable.function.ts index 1bf79d86ec..07086fe305 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/resources/extractUmbColorVariable.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/resources/extractUmbColorVariable.function.ts @@ -1,13 +1,25 @@ export const umbracoColors = [ { alias: 'text', varName: '--uui-color-text' }, + { alias: 'black', varName: '--uui-color-text' }, { alias: 'yellow', varName: '--uui-palette-sunglow' }, { alias: 'pink', varName: '--uui-palette-spanish-pink' }, - { alias: 'dark', varName: '--uui-palette-gunmetal' }, - { alias: 'darkblue', varName: '--uui-palette-space-cadet' }, { alias: 'blue', varName: '--uui-palette-violet-blue' }, + { alias: 'light-blue', varName: '--uui-palette-malibu' }, { alias: 'red', varName: '--uui-palette-maroon-flush' }, { alias: 'green', varName: '--uui-palette-jungle-green' }, { alias: 'brown', varName: '--uui-palette-chamoisee' }, + { alias: 'grey', varName: '--uui-palette-dusty-grey' }, + + { alias: 'blue-grey', legacy: true, varName: '--uui-palette-dusty-grey' }, + { alias: 'indigo', legacy: true, varName: '--uui-palette-malibu' }, + { alias: 'purple', legacy: true, varName: '--uui-palette-space-cadet' }, + { alias: 'deep-purple', legacy: true, varName: '--uui-palette-space-cadet' }, + { alias: 'cyan', legacy: true, varName: '-uui-palette-jungle-green' }, + { alias: 'light-green', legacy: true, varName: '-uui-palette-jungle-green' }, + { alias: 'lime', legacy: true, varName: '-uui-palette-jungle-green' }, + { alias: 'amber', legacy: true, varName: '--uui-palette-chamoisee' }, + { alias: 'orange', legacy: true, varName: '--uui-palette-chamoisee' }, + { alias: 'deep-orange', legacy: true, varName: '--uui-palette-cocoa-brown' }, ]; export function extractUmbColorVariable(colorAlias: string): string | undefined { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/components/input-section/input-section.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/components/input-section/input-section.element.ts index 63025e5774..bdf8fe3c27 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/components/input-section/input-section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/components/input-section/input-section.element.ts @@ -102,9 +102,11 @@ export class UmbInputSectionElement extends UUIFormControlMixin(UmbLitElement, ' render() { return html` ${this._items?.map((item) => this._renderItem(item))} - this.#pickerContext.openPicker()} label="open" - >Add + this.#pickerContext.openPicker()} + label=${this.localize.term('general_choose')}> `; } @@ -121,7 +123,7 @@ export class UmbInputSectionElement extends UUIFormControlMixin(UmbLitElement, ' static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/item/manifests.ts index f06e755135..09c23128c7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SECTION_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Section.Item'; @@ -9,4 +9,4 @@ const itemRepository: ManifestRepository = { api: () => import('./section-item.repository.js'), }; -export const manifests = [itemRepository]; +export const manifests: Array = [itemRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/manifests.ts index 34d6cf7788..0ed98fb019 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/repository/manifests.ts @@ -1,3 +1,4 @@ import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...itemManifests]; +export const manifests: Array = [...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-default.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-default.element.ts index 859f69b3b7..d4af460978 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-default.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-default.element.ts @@ -86,11 +86,11 @@ export class UmbSectionDefaultElement extends UmbLitElement implements UmbSectio (app) => app.component, )} - ` + ` : nothing} ${this._routes && this._routes.length > 0 - ? html`` + ? html`` : nothing} @@ -105,10 +105,6 @@ export class UmbSectionDefaultElement extends UmbLitElement implements UmbSectio height: 100%; display: flex; } - - h3 { - padding: var(--uui-size-4) var(--uui-size-8); - } `, ]; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-main-views/section-main-views.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-main-views/section-main-views.element.ts index 6a7d3917b6..067981a818 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/section-main-views/section-main-views.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/section-main-views/section-main-views.element.ts @@ -98,7 +98,7 @@ export class UmbSectionMainViewElement extends UmbLitElement { ` - : html`${nothing}`; + : nothing; } #renderDashboards() { @@ -117,7 +117,7 @@ export class UmbSectionMainViewElement extends UmbLitElement { })} ` - : ''; + : nothing; } #renderViews() { @@ -140,7 +140,7 @@ export class UmbSectionMainViewElement extends UmbLitElement { })} ` - : ''; + : nothing; } static styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/manifests.ts index 8670e70cb8..c7b83c28c2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/manifests.ts @@ -1,3 +1,4 @@ import { manifests as renameEntityActionManifests } from '../server-file-system/rename/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...renameEntityActionManifests]; +export const manifests: Array = [...renameEntityActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/manifests.ts index 35a3f6e382..f4131c023b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/manifests.ts @@ -1,4 +1,8 @@ import { manifests as renameModalManifests } from './modal/manifests.js'; import { manifest as renameKindManifest } from './rename-server-file.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...renameModalManifests, renameKindManifest]; +export const manifests: Array = [ + ...renameModalManifests, + renameKindManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts index 803d177dbe..93e7698ef6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/settings/manifests.ts @@ -1,8 +1,9 @@ import { manifests as welcomeDashboardManifests } from './welcome-dashboard/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SETTINGS_SECTION_ALIAS = 'Umb.Section.Settings'; -export const manifests = [ +export const manifests: Array = [ { type: 'section', alias: UMB_SETTINGS_SECTION_ALIAS, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/settings/welcome-dashboard/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/settings/welcome-dashboard/manifests.ts index 5112dd2791..d4764b559c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/settings/welcome-dashboard/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/settings/welcome-dashboard/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.SettingsWelcome', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts index b1cc28248c..15793091f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts @@ -1,12 +1,11 @@ -import { map } from '@umbraco-cms/backoffice/external/rxjs'; -import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; -import { UmbStringState } from '@umbraco-cms/backoffice/observable-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; -import type { ManifestTheme } from '@umbraco-cms/backoffice/extension-registry'; -import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { loadManifestPlainCss } from '@umbraco-cms/backoffice/extension-api'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbStringState } from '@umbraco-cms/backoffice/observable-api'; +import type { ManifestTheme } from '@umbraco-cms/backoffice/extension-registry'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; const LOCAL_STORAGE_KEY = 'umb-theme-alias'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/manifests.ts index d184b7952b..b82cb80c62 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/default/manifests.ts @@ -1,4 +1,4 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; const defaultTreeKind: UmbBackofficeManifestKind = { type: 'kind', @@ -12,4 +12,4 @@ const defaultTreeKind: UmbBackofficeManifestKind = { }, }; -export const manifests = [defaultTreeKind]; +export const manifests: Array = [defaultTreeKind]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/manifests.ts index 1f58200aa2..6aac6266a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/entity-action/manifests.ts @@ -1,5 +1,10 @@ import { manifest as createKindManifest } from './create-folder/create-folder.action.kind.js'; import { manifest as deleteKindManifest } from './delete-folder/delete-folder.action.kind.js'; import { manifest as updateKindManifest } from './update-folder/update-folder.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [createKindManifest, deleteKindManifest, updateKindManifest]; +export const manifests: Array = [ + createKindManifest, + deleteKindManifest, + updateKindManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/manifests.ts index e6a84fb437..fc90ffc72a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/manifests.ts @@ -1,4 +1,8 @@ import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...modalManifests, ...entityActionManifests]; +export const manifests: Array = [ + ...modalManifests, + ...entityActionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/manifests.ts index 84b5ebc9f2..710d9fc4f8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -15,4 +15,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/manifests.ts index 4dfa87dba4..47401fcf73 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/manifests.ts @@ -3,8 +3,9 @@ import { manifests as defaultTreeItemManifests } from './tree-item/tree-item-def import { manifests as defaultTreeManifests } from './default/manifests.js'; import { manifests as treePickerManifests } from './tree-picker/manifests.js'; import { manifests as reloadTreeItemChildrenManifests } from './reload-tree-item-children/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...defaultTreeManifests, ...folderManifests, ...defaultTreeItemManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/reload-tree-item-children/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/reload-tree-item-children/manifests.ts index 34c0978ba9..49838e1b0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/reload-tree-item-children/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/reload-tree-item-children/manifests.ts @@ -1,3 +1,4 @@ import { manifest as reloadTreeItemChildrenKind } from './reload-tree-item-children.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [reloadTreeItemChildrenKind]; +export const manifests: Array = [reloadTreeItemChildrenKind]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-default/manifests.ts index c12ffa730c..e48e690f95 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-default/manifests.ts @@ -1,4 +1,4 @@ -import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; const kind: UmbBackofficeManifestKind = { type: 'kind', @@ -12,4 +12,4 @@ const kind: UmbBackofficeManifestKind = { }, }; -export const manifests = [kind]; +export const manifests: Array = [kind]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker/manifests.ts index fd500d4150..8c015e1440 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.TreePicker', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts index 6895540e28..59f441f2ba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts @@ -17,5 +17,4 @@ export * from './string/generate-umbraco-alias.function.js'; export * from './string/increment-string.function.js'; export * from './string/split-string-to-array.js'; export * from './string/to-camel-case/to-camel-case.function.js'; -export type * from './type/deep-partial-object.type.js'; -export type * from './type/diff.type.js'; +export type * from './type/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/index.ts new file mode 100644 index 0000000000..eb7e9afca7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/index.ts @@ -0,0 +1,3 @@ +export * from './deep-partial-object.type.js'; +export * from './diff.type.js'; +export * from './partial-some.type.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/partial-some.type.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/partial-some.type.ts new file mode 100644 index 0000000000..2676f23bef --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/partial-some.type.ts @@ -0,0 +1 @@ +export type UmbPartialSome = Omit & Partial>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-message-translator.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-message-translator.controller.ts index 709c534a77..a756682389 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-message-translator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/translators/variant-values-validation-message-translator.controller.ts @@ -1,5 +1,5 @@ import type { UmbServerModelValidationContext } from '../context/server-model-validation.context.js'; -import { UmbDataPathValueFilter } from '../utils/data-path-value-filter.function.js'; +import { UmbDataPathPropertyValueFilter } from '../utils/data-path-property-value-filter.function.js'; import type { UmbValidationMessageTranslator } from './validation-message-translator.interface.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; @@ -39,7 +39,7 @@ export class UmbVariantValuesValidationMessageTranslator const specificValue = data.values[index]; // replace the values[ number ] with JSON-Path filter values[@.(...)], continues by the rest of the path: - return '$.values[' + UmbDataPathValueFilter(specificValue) + path.substring(path.indexOf(']')); + return '$.values[' + UmbDataPathPropertyValueFilter(specificValue) + path.substring(path.indexOf(']')); } destroy(): void { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-value-filter.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts similarity index 61% rename from src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-value-filter.function.ts rename to src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts index d3bd97119b..408cf91b06 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-value-filter.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/data-path-property-value-filter.function.ts @@ -1,12 +1,16 @@ -import type { UmbVariantableValueModel } from '@umbraco-cms/backoffice/models'; +import type { UmbPartialSome } from '@umbraco-cms/backoffice/utils'; +import type { UmbVariantPropertyValueModel } from '@umbraco-cms/backoffice/variant'; /** + * Validation Data Path filter for Property Value. * write a JSON-Path filter similar to `?(@.alias = 'myAlias' && @.culture == 'en-us' && @.segment == 'mySegment')` * where culture and segment are optional * @param value * @returns */ -export function UmbDataPathValueFilter(value: Omit): string { +export function UmbDataPathPropertyValueFilter( + value: UmbPartialSome, 'culture' | 'segment'>, +): string { // write a array of strings for each property, where alias must be present and culture and segment are optional const filters: Array = [`@.alias = '${value.alias}'`]; if (value.culture) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts index 74a5d85100..1fb8cf117c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/validation/utils/index.ts @@ -1 +1 @@ -export * from './data-path-value-filter.function.js'; +export * from './data-path-property-value-filter.function.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts index 8de38ee4b2..b20dc31218 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/variant/types.ts @@ -3,16 +3,18 @@ import type { UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; import type { ScheduleRequestModel } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbPropertyValueData } from '@umbraco-cms/backoffice/property'; -export interface UmbVariantPropertyValueModel extends UmbPropertyValueData { +export interface UmbVariantDataModel { culture: string | null; segment: string | null; } +export interface UmbVariantPropertyValueModel extends UmbVariantDataModel, UmbPropertyValueData {} + export interface UmbVariantModel { - createDate: string | null; - culture: string | null; name: string; + culture: string | null; segment: string | null; + createDate: string | null; updateDate: string | null; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/manifests.ts index 4624c1bb72..0870f24cb0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/manifests.ts @@ -2,8 +2,9 @@ import { manifests as workspaceActionManifests } from './workspace-action/manife import { manifests as workspaceActionMenuItemManifests } from './workspace-action-menu-item/manifests.js'; import { manifests as workspaceBreadcrumbManifests } from './workspace-breadcrumb/manifests.js'; import { manifests as workspaceViewManifests } from './workspace-collection/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...workspaceActionManifests, ...workspaceActionMenuItemManifests, ...workspaceBreadcrumbManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts index e8a0dcdedd..3cb64a6f47 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/manifests.ts @@ -1,3 +1,4 @@ import { manifest as defaultKindManifest } from './default.action.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [defaultKindManifest]; +export const manifests: Array = [defaultKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts index 8bc9a56ab9..58ab7db446 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/manifests.ts @@ -1,3 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts index 1656a63439..03af0c4306 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/common/submit/submit.action.ts @@ -23,6 +23,8 @@ export class UmbSubmitWorkspaceAction extends UmbWorkspaceActionBase = [defaultKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/manifests.ts index 8bc9a56ab9..58ab7db446 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/manifests.ts @@ -1,3 +1,4 @@ import { manifests as defaultWorkspaceActionManifests } from './default/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...defaultWorkspaceActionManifests]; +export const manifests: Array = [...defaultWorkspaceActionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts index 20d338c127..a0d8475e76 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/manifests.ts @@ -1,4 +1,8 @@ import { manifest as workspaceBreadcrumbKind } from './workspace-menu-breadcrumb/workspace-menu-breadcrumb.kind.js'; import { manifest as variantBreadcrumbKind } from './workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [workspaceBreadcrumbKind, variantBreadcrumbKind]; +export const manifests: Array = [ + workspaceBreadcrumbKind, + variantBreadcrumbKind, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts index c0d6c00d1c..9e60d8febc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-entity-action-menu/workspace-entity-action-menu.element.ts @@ -52,7 +52,7 @@ export class UmbWorkspaceEntityActionMenuElement extends UmbLitElement { } render() { - return this._unique && this._entityType + return this._unique !== undefined && this._entityType ? html` ( - 'umbWorkspaceSplitViewContext', + 'UmbWorkspaceSplitViewContext', ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/manifests.ts index 0df9d50486..78ced4ccc8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/manifests.ts @@ -1,5 +1,10 @@ import { manifest as workspaceAliasCondition } from './workspace-alias.condition.js'; import { manifest as workspaceEntityTypeCondition } from './workspace-entity-type.condition.js'; import { manifest as workspaceHasCollectionCondition } from './workspace-has-collection.condition.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [workspaceAliasCondition, workspaceEntityTypeCondition, workspaceHasCollectionCondition]; +export const manifests: Array = [ + workspaceAliasCondition, + workspaceEntityTypeCondition, + workspaceHasCollectionCondition, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/property-structure-workspace-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/property-structure-workspace-context.interface.ts index 07e5f045d0..566299a425 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/property-structure-workspace-context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/property-structure-workspace-context.interface.ts @@ -1,12 +1,15 @@ import type { UmbEntityWorkspaceContext } from './entity-workspace-context.interface.js'; -import type { UmbContentTypeModel, UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type'; +import type { + UmbContentTypeModel, + UmbContentTypeStructureManager, + UmbPropertyTypeModel, +} from '@umbraco-cms/backoffice/content-type'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import type { UmbVariantPropertyValueModel } from '@umbraco-cms/backoffice/variant'; export interface UmbPropertyStructureWorkspaceContext< ContentTypeModel extends UmbContentTypeModel = UmbContentTypeModel, > extends UmbEntityWorkspaceContext { structure: UmbContentTypeStructureManager; // TODO: propertyStructureById is not used by anything in the codebase, should we remove it? [NL] - propertyStructureById(id: string): Promise>; + propertyStructureById(id: string): Promise>; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/variant-dataset-workspace-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/variant-dataset-workspace-context.interface.ts index c696e141f9..f6f0adeb9c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/variant-dataset-workspace-context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/variant-dataset-workspace-context.interface.ts @@ -13,10 +13,10 @@ export interface UmbVariantDatasetWorkspaceContext; // Variant: - variants: Observable>; + variants: Observable>; variantOptions: Observable>>; splitView: UmbWorkspaceSplitViewManager; - getVariant(variantId: UmbVariantId): UmbVariantModel | undefined; + getVariant(variantId: UmbVariantId): VariantType | undefined; // Property: // This one is async cause it needs to structure to provide this data: [NL] diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/manifests.ts index 0ff16bb0fc..f36f36118d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/manifests.ts @@ -1,4 +1,5 @@ import { manifest as editableKindManifest } from './editable/editable-workspace.kind.js'; import { manifest as routableKindManifest } from './routable/routable-workspace.kind.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [routableKindManifest, editableKindManifest]; +export const manifests: Array = [routableKindManifest, editableKindManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts index 69da627331..95204a41c6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts @@ -2,5 +2,11 @@ import { manifests as componentManifests } from './components/manifests.js'; import { manifests as workspaceKinds } from './kinds/manifests.js'; import { manifests as workspaceModals } from './modals/manifests.js'; import { manifests as workspaceConditions } from './conditions/manifests.js'; +import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...workspaceConditions, ...workspaceKinds, ...componentManifests, ...workspaceModals]; +export const manifests: Array = [ + ...workspaceConditions, + ...workspaceKinds, + ...componentManifests, + ...workspaceModals, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/manifests.ts index 2a47183d68..7aaf8b0eee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const workspaceModal: ManifestModal = { type: 'modal', @@ -7,4 +7,4 @@ const workspaceModal: ManifestModal = { js: () => import('./workspace-modal.element.js'), }; -export const manifests = [workspaceModal]; +export const manifests: Array = [workspaceModal]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/manifests.ts index 15583d57df..04c66cab30 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/manifests.ts @@ -14,4 +14,4 @@ const collectionManifest: ManifestTypes = { }, }; -export const manifests = [collectionManifest, ...collectionRepositoryManifests]; +export const manifests: Array = [collectionManifest, ...collectionRepositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/repository/manifests.ts index 398220279c..3392019d04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DATA_TYPE_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Collection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./data-type-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/data-type-input/data-type-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/data-type-input/data-type-input.element.ts index 504d13de9c..78c572f3b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/data-type-input/data-type-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/data-type-input/data-type-input.element.ts @@ -1,12 +1,31 @@ import type { UmbDataTypeItemModel } from '../../repository/item/types.js'; import { UmbDataTypePickerContext } from './data-type-input.context.js'; -import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { css, html, customElement, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +// TODO: Rename to 'umb-input-data-type'. [LK] @customElement('umb-data-type-input') export class UmbDataTypeInputElement extends UUIFormControlMixin(UmbLitElement, '') { + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputDataType', + itemSelector: 'uui-ref-node-data-type', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.selection = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); + /** * This is a minimum amount of selected items in this input. * @type {number} @@ -54,20 +73,20 @@ export class UmbDataTypeInputElement extends UUIFormControlMixin(UmbLitElement, maxMessage = 'This field exceeds the allowed amount of items'; @property({ type: Array }) - public set selection(ids: Array | undefined) { - this.#pickerContext.setSelection(ids ?? []); + public set selection(uniques: Array) { + this.#pickerContext.setSelection(uniques ?? []); + this.#sorter.setModel(uniques); } - public get selection(): Array | undefined { + public get selection(): Array { return this.#pickerContext.getSelection(); } @property() - public set value(idsString: string) { - // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection. - this.selection = splitStringToArray(idsString); + public set value(uniques: string) { + this.selection = splitStringToArray(uniques); } public get value(): string { - return this.selection?.join(',') ?? ''; + return this.selection.join(','); } @state() @@ -90,33 +109,58 @@ export class UmbDataTypeInputElement extends UUIFormControlMixin(UmbLitElement, () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(','))); - this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { return undefined; } + #openPicker() { + this.#pickerContext.openPicker({ + hideTreeRoot: true, + }); + } + + #removeItem(item: UmbDataTypeItemModel) { + this.#pickerContext.requestRemoveItem(item.unique); + } + render() { + return html`${this.#renderItems()} ${this.#renderAddButton()}`; + } + + #renderAddButton() { + if (this.max > 0 && this.selection.length >= this.max) return nothing; return html` - ${this._items?.map((item) => this._renderItem(item))} this.#pickerContext.openPicker({ hideTreeRoot: true })} - label=${this.localize.term('general_choose')}> + @click=${this.#openPicker} + label="${this.localize.term('general_choose')}"> `; } - private _renderItem(item: UmbDataTypeItemModel) { + #renderItems() { + if (!this._items) return nothing; + return html` + + ${repeat( + this._items, + (item) => item.unique, + (item) => this.#renderItem(item), + )} + + `; + } + + #renderItem(item: UmbDataTypeItemModel) { if (!item.unique) return; return html` - + - this.#pickerContext.requestRemoveItem(item.unique)} - label=${this.localize.term('general_remove')}> + this.#removeItem(item)} label=${this.localize.term('general_remove')}> `; @@ -124,7 +168,7 @@ export class UmbDataTypeInputElement extends UUIFormControlMixin(UmbLitElement, static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts index cd1cb0c0cf..e8e6660b81 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/components/property-editor-config/property-editor-config.element.ts @@ -3,7 +3,7 @@ import { html, customElement, state, ifDefined, repeat } from '@umbraco-cms/back import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UmbDataPathValueFilter } from '@umbraco-cms/backoffice/validation'; +import { UmbDataPathPropertyValueFilter } from '@umbraco-cms/backoffice/validation'; /** * @element umb-property-editor-config @@ -45,9 +45,8 @@ export class UmbPropertyEditorConfigElement extends UmbLitElement { this._properties, (property) => property.alias, (property) => - // TODO: Make a helper method to generate data-path entry for a property. html` = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/manifests.ts index df0bce2250..5006459a3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts index ed7edcf3f0..62af8d4d0d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/duplicate/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DUPLICATE_DATA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const duplicateRepository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const duplicateRepository: ManifestRepository = { api: () => import('./data-type-duplicate.repository.js'), }; -export const manifests = [duplicateRepository]; +export const manifests: Array = [duplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/manifests.ts index 4220e0dea3..46f094ae6a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/manifests.ts @@ -20,4 +20,9 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests]; +export const manifests: Array = [ + ...entityActions, + ...createManifests, + ...moveManifests, + ...duplicateManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/manifests.ts index eeaeeab9e9..06d1faa568 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/repository/manifests.ts index 42d96b9501..760030f509 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/entity-actions/move-to/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_MOVE_DATA_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const moveRepository: ManifestRepository = { api: () => import('./data-type-move.repository.js'), }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/manifests.ts index 907c67310c..c335520064 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/manifests.ts @@ -5,8 +5,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...entityActions, ...repositoryManifests, ...menuManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts index 810bf7da91..55bd1d665b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/menu/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts index 43db5752e0..5dc42ef411 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -21,4 +21,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.repository.ts index 2115695dbd..092dd1dd11 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.repository.ts @@ -1,8 +1,8 @@ -import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import type { UmbDataTypeDetailModel } from '../../types.js'; import { UmbDataTypeServerDataSource } from './data-type-detail.server.data-source.js'; import type { UmbDataTypeDetailStore } from './data-type-detail.store.js'; import { UMB_DATA_TYPE_DETAIL_STORE_CONTEXT } from './data-type-detail.store.js'; +import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; export class UmbDataTypeDetailRepository extends UmbDetailRepositoryBase { diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/manifests.ts index d8f2c18268..07156d4501 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DATA_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./data-type-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/item/manifests.ts index bb5083b681..907365b6ee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DATA_TYPE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DataType.Item'; export const UMB_DATA_TYPE_STORE_ALIAS = 'Umb.Store.DataType.Item'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./data-type-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/folder/manifests.ts index adb77074df..82299d4f77 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/folder/manifests.ts @@ -33,4 +33,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/manifests.ts index b3af4798cf..f09fd4a50c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/tree/manifests.ts @@ -10,6 +10,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const treeRepository: ManifestRepository = { @@ -44,4 +45,11 @@ const treeItem: ManifestTreeItem = { forEntityTypes: ['data-type-root', 'data-type', 'data-type-folder'], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...folderManifests, ...reloadManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...folderManifests, + ...reloadManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts index 86097a042e..d8887e858d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/manifests.ts @@ -3,6 +3,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const DATA_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.DataType'; @@ -78,4 +79,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts index 181946452e..7fa77c8610 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/action/manifests.ts @@ -1,6 +1,6 @@ import { UMB_DICTIONARY_ROOT_ENTITY_TYPE } from '../../entity.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestCollectionAction = { type: 'collectionAction', @@ -20,4 +20,4 @@ export const createManifest: ManifestCollectionAction = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/manifests.ts index ff6af698de..b512491a08 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/manifests.ts @@ -2,7 +2,7 @@ import { UMB_DICTIONARY_COLLECTION_REPOSITORY_ALIAS } from './repository/index.j import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_COLLECTION_ALIAS = 'Umb.Collection.Dictionary'; @@ -16,7 +16,7 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/repository/manifests.ts index f667ec5725..79f72300f7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbDictionaryCollectionRepository } from './dictionary-collection.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Collection'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDictionaryCollectionRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/views/manifests.ts index 6927fd1bb5..40a7949e2b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Dictionary.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dashboard/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dashboard/manifests.ts index 7d8ca0164f..c9644164c1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dashboard/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dashboard/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DICTIONARY_SECTION_ALIAS } from '../section/index.js'; -import type { ManifestDashboard } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestDashboard, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const dashboards: Array = [ { @@ -20,4 +20,4 @@ const dashboards: Array = [ }, ]; -export const manifests = [...dashboards]; +export const manifests: Array = [...dashboards]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts index 21697bf0ee..f6ce254dec 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/manifests.ts @@ -71,4 +71,4 @@ const modals: Array = [ }, ]; -export const manifests = [...entityActions, ...modals, ...moveManifests]; +export const manifests: Array = [...entityActions, ...modals, ...moveManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/manifests.ts index 5dd01d2e19..7db6f812a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/repository/manifests.ts index 003a41bed2..a4060a215d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/entity-action/move-to/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MOVE_DICTIONARY_REPOSITORY_ALIAS } from './constants.js'; import { UmbMoveDictionaryRepository } from './dictionary-move.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const moveRepository: ManifestRepository = { api: UmbMoveDictionaryRepository, }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/manifests.ts index 457dfd497a..d3ebc98e3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/manifests.ts @@ -6,8 +6,9 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as sectionManifests } from './section/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionManifests, ...dashboardManifests, ...entityActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/menu/manifests.ts index a8cd4f5f9f..f80053ade6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/menu/manifests.ts @@ -1,9 +1,10 @@ import { UMB_DICTIONARY_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_MENU_ALIAS = 'Umb.Menu.Dictionary'; -export const manifests = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_DICTIONARY_MENU_ALIAS, diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/detail/manifests.ts index 68fcac160d..278d7509d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/detail/manifests.ts @@ -1,6 +1,6 @@ import { UmbDictionaryDetailRepository } from './dictionary-detail.repository.js'; import { UmbDictionaryDetailStore } from './dictionary-detail.store.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Detail'; @@ -20,4 +20,4 @@ const store: ManifestStore = { api: UmbDictionaryDetailStore, }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/export/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/export/manifests.ts index dcdc5c9a8d..f797cedb5c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/export/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/export/manifests.ts @@ -1,5 +1,5 @@ import { UmbDictionaryExportRepository } from './dictionary-export.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_EXPORT_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Export'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDictionaryExportRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/import/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/import/manifests.ts index 32fb6a8d92..61422237d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/import/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/import/manifests.ts @@ -1,5 +1,5 @@ import { UmbDictionaryImportRepository } from './dictionary-import.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_IMPORT_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Import'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDictionaryImportRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/item/manifests.ts index 5b26b26d80..49da08aee9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/item/manifests.ts @@ -1,6 +1,6 @@ import { UmbDictionaryItemStore } from './dictionary-item.store.js'; import { UmbDictionaryItemRepository } from './dictionary-item.repository.js'; -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Item'; export const UMB_DICTIONARY_STORE_ALIAS = 'Umb.Store.Dictionary.Item'; @@ -19,4 +19,4 @@ const itemStore: ManifestItemStore = { api: UmbDictionaryItemStore, }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/manifests.ts index fbf4db6081..7e392e6c7a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/repository/manifests.ts @@ -2,5 +2,11 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as importManifests } from './import/manifests.js'; import { manifests as exportManifests } from './export/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests, ...importManifests, ...exportManifests]; +export const manifests: Array = [ + ...detailManifests, + ...itemManifests, + ...importManifests, + ...exportManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts index 2ae5954eab..4c2a22e568 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/section/manifests.ts @@ -1,6 +1,10 @@ import { UMB_DICTIONARY_ROOT_ENTITY_TYPE } from '../entity.js'; import { UMB_DICTIONARY_MENU_ALIAS } from '../menu/manifests.js'; -import type { ManifestSection, ManifestSectionSidebarApp } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestSection, + ManifestSectionSidebarApp, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_SECTION_ALIAS = 'Umb.Section.Translation'; @@ -40,4 +44,4 @@ const menuSectionSidebarApp: ManifestSectionSidebarApp = { ], }; -export const manifests = [section, menuSectionSidebarApp]; +export const manifests: Array = [section, menuSectionSidebarApp]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/tree/manifests.ts index 842d1b7820..2bdfaacf98 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/tree/manifests.ts @@ -7,6 +7,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DICTIONARY_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Dictionary.Tree'; @@ -45,4 +46,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_DICTIONARY_ROOT_ENTITY_TYPE, UMB_DICTIONARY_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts index e7deeb26d4..b2eba38c45 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/workspace/manifests.ts @@ -4,6 +4,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const workspace: ManifestWorkspaces = { @@ -60,4 +61,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/dashboards/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/dashboards/manifests.ts index 6455ec0e8f..f2dd758fb3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/dashboards/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/dashboards/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestDashboard } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestDashboard, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const dashboards: Array = [ { @@ -20,4 +20,4 @@ const dashboards: Array = [ }, ]; -export const manifests = [...dashboards]; +export const manifests: Array = [...dashboards]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts index 8b238686a4..8de72a79c3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/create/manifests.ts @@ -26,4 +26,4 @@ const manifestModals: Array = [ }, ]; -export const manifests = [...entityActions, ...manifestModals]; +export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/manifests.ts index 5a1d51aaed..c3dec90452 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/manifests.ts @@ -4,6 +4,7 @@ import { UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS, } from '../index.js'; import { manifests as createManifests } from './create/manifests.js'; +import { manifests as moveManifests } from './move-to/manifests.js'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ @@ -20,4 +21,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...createManifests]; +export const manifests: Array = [...entityActions, ...createManifests, ...moveManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/index.ts new file mode 100644 index 0000000000..b18d635762 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/index.ts @@ -0,0 +1,4 @@ +export { + UmbMoveDocumentBlueprintRepository, + UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS, +} from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts new file mode 100644 index 0000000000..748c386422 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/manifests.ts @@ -0,0 +1,22 @@ +import { UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE } from '../../entity.js'; +import { UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../../tree/index.js'; +import { UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS } from './repository/index.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +const entityActions: Array = [ + { + type: 'entityAction', + kind: 'moveTo', + alias: 'Umb.EntityAction.DocumentBlueprint.MoveTo', + name: 'Move Document Blueprint Entity Action', + forEntityTypes: [UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE], + meta: { + treeRepositoryAlias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, + moveRepositoryAlias: UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS, + treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, + }, + }, +]; + +export const manifests = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/constants.ts new file mode 100644 index 0000000000..9e63e46dcf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/constants.ts @@ -0,0 +1 @@ +export const UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Move'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.repository.ts new file mode 100644 index 0000000000..15b137055d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.repository.ts @@ -0,0 +1,20 @@ +import { UmbMoveDocumentBlueprintServerDataSource } from './document-blueprint-move.server.data-source.js'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbMoveRepository, UmbMoveToRequestArgs } from '@umbraco-cms/backoffice/entity-action'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbMoveDocumentBlueprintRepository extends UmbRepositoryBase implements UmbMoveRepository { + #moveSource = new UmbMoveDocumentBlueprintServerDataSource(this); + + async requestMoveTo(args: UmbMoveToRequestArgs) { + const { error } = await this.#moveSource.moveTo(args); + + if (!error) { + const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT); + const notification = { data: { message: `Moved` } }; + notificationContext.peek('positive', notification); + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.server.data-source.ts new file mode 100644 index 0000000000..1a751b065b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.server.data-source.ts @@ -0,0 +1,44 @@ +import { DocumentBlueprintService } from '@umbraco-cms/backoffice/external/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; +import type { UmbMoveDataSource, UmbMoveToRequestArgs } from '@umbraco-cms/backoffice/entity-action'; + +/** + * Move DocumentBlueprint Server Data Source + * @export + * @class UmbMoveDocumentBlueprintServerDataSource + */ +export class UmbMoveDocumentBlueprintServerDataSource implements UmbMoveDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbMoveDocumentBlueprintServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbMoveDocumentBlueprintServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Move an item for the given id to the target unique + * @param {string} unique + * @param {(string | null)} targetUnique + * @return {*} + * @memberof UmbMoveDocumentBlueprintServerDataSource + */ + async moveTo(args: UmbMoveToRequestArgs) { + if (!args.unique) throw new Error('Unique is missing'); + if (args.destination.unique === undefined) throw new Error('Destination unique is missing'); + + return tryExecuteAndNotify( + this.#host, + DocumentBlueprintService.putDocumentBlueprintByIdMove({ + id: args.unique, + requestBody: { + target: args.destination.unique ? { id: args.destination.unique } : null, + }, + }), + ); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/index.ts new file mode 100644 index 0000000000..4cbc441a61 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/index.ts @@ -0,0 +1,2 @@ +export { UmbMoveDocumentBlueprintRepository } from './document-blueprint-move.repository.js'; +export { UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS } from './constants.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/manifests.ts new file mode 100644 index 0000000000..6f57c4854f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/entity-actions/move-to/repository/manifests.ts @@ -0,0 +1,12 @@ +import { UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS } from './constants.js'; +import { UmbMoveDocumentBlueprintRepository } from './document-blueprint-move.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +const moveRepository: ManifestRepository = { + type: 'repository', + alias: UMB_MOVE_DOCUMENT_BLUEPRINT_REPOSITORY_ALIAS, + name: 'Move Document Blueprint Repository', + api: UmbMoveDocumentBlueprintRepository, +}; + +export const manifests = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts index cd0755cc73..0e8418c443 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/manifests.ts @@ -3,8 +3,9 @@ import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...entityActionManifests, ...menuItemManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts index 1ccfeb6caf..331ed87793 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/menu-item/manifests.ts @@ -1,4 +1,4 @@ -import { UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/manifests.js'; +import { UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from '../tree/constants.js'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestTypes = { @@ -10,10 +10,8 @@ const menuItem: ManifestTypes = { meta: { treeAlias: UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, label: 'Document Blueprints', - //icon: 'icon-blueprint', - //entityType: 'document-blueprint', menus: ['Umb.Menu.StructureSettings'], }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/manifests.ts index 923eb105ae..a770e64203 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/detail/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentBlueprintDetailRepository } from './document-blueprint-detail.repository.js'; import { UmbDocumentBlueprintDetailStore } from './document-blueprint-detail.store.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_BLUEPRINT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Detail'; @@ -20,4 +20,4 @@ const store: ManifestStore = { api: UmbDocumentBlueprintDetailStore, }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/item/manifests.ts index 5674ac938e..60b3e9c2fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/item/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentBlueprintItemStore } from './document-blueprint-item.store.js'; import { UmbDocumentBlueprintItemRepository } from './document-blueprint-item.repository.js'; -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_BLUEPRINT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Item'; export const UMB_DOCUMENT_BLUEPRINT_STORE_ALIAS = 'Umb.Store.DocumentBlueprint.Item'; @@ -19,4 +19,4 @@ const itemStore: ManifestItemStore = { api: UmbDocumentBlueprintItemStore, }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/constants.ts new file mode 100644 index 0000000000..77a9c5835a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/constants.ts @@ -0,0 +1,3 @@ +export const UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Tree'; +export const UMB_DOCUMENT_BLUEPRINT_TREE_STORE_ALIAS = 'Umb.Store.DocumentBlueprint.Tree'; +export const UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS = 'Umb.Tree.DocumentBlueprint'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/folder/manifests.ts index 9eef583220..9175110c28 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/folder/manifests.ts @@ -34,4 +34,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/index.ts index f098c0956c..e45d296481 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/index.ts @@ -1,2 +1,3 @@ export { UMB_DOCUMENT_BLUEPRINT_TREE_STORE_CONTEXT } from './document-blueprint-tree.store.js'; +export { UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS } from './constants.js'; export * from './folder/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/manifests.ts index f7c4a07d3e..041906b74a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/tree/manifests.ts @@ -1,4 +1,9 @@ import { UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE } from '../entity.js'; +import { + UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS, + UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, + UMB_DOCUMENT_BLUEPRINT_TREE_STORE_ALIAS, +} from './constants.js'; import { manifests as folderManifests } from './folder/manifests.js'; import { manifests as reloadManifests } from './reload-tree-item-children/manifests.js'; import { UmbDocumentBlueprintTreeRepository } from './document-blueprint-tree.repository.js'; @@ -8,12 +13,9 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; -export const UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.DocumentBlueprint.Tree'; -export const UMB_DOCUMENT_BLUEPRINT_TREE_STORE_ALIAS = 'Umb.Store.DocumentBlueprint.Tree'; -export const UMB_DOCUMENT_BLUEPRINT_TREE_ALIAS = 'Umb.Tree.DocumentBlueprint'; - const treeRepository: ManifestRepository = { type: 'repository', alias: UMB_DOCUMENT_BLUEPRINT_TREE_REPOSITORY_ALIAS, @@ -46,4 +48,11 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE, UMB_DOCUMENT_BLUEPRINT_FOLDER_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadManifests, ...folderManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadManifests, + ...folderManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts index bf4a30339a..c63c4f4bd3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace.context.ts @@ -20,7 +20,10 @@ import { UmbWorkspaceSplitViewManager, } from '@umbraco-cms/backoffice/workspace'; import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type'; -import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type'; +import { + type UmbDocumentTypeDetailModel, + UmbDocumentTypeDetailRepository, +} from '@umbraco-cms/backoffice/document-type'; import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; @@ -28,14 +31,15 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; -import type { UmbRoutableWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; +import type { UmbContentWorkspaceContext } from '@umbraco-cms/backoffice/content'; type EntityType = UmbDocumentBlueprintDetailModel; export class UmbDocumentBlueprintWorkspaceContext extends UmbSubmittableWorkspaceContextBase - implements UmbRoutableWorkspaceContext + implements UmbContentWorkspaceContext { + readonly IS_CONTENT_WORKSPACE_CONTEXT = true as const; // readonly repository = new UmbDocumentBlueprintDetailRepository(this); @@ -104,7 +108,7 @@ export class UmbDocumentBlueprintWorkspaceContext } as UmbDocumentBlueprintVariantOptionModel, ]; } - return [] as Array; + return []; }, ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/manifests.ts index 68cda864f1..070a1991fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/manifests.ts @@ -1,6 +1,7 @@ import { UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE } from '../entity.js'; import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceView, @@ -62,4 +63,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts index 86fa8b08ed..0e0833545a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/components/input-document-type/input-document-type.element.ts @@ -1,22 +1,31 @@ import type { UmbDocumentTypeItemModel } from '../../repository/index.js'; import { UmbDocumentTypePickerContext } from './input-document-type.context.js'; -import { - css, - html, - customElement, - property, - state, - ifDefined, - repeat, - nothing, -} from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { css, html, customElement, property, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; -import { UMB_WORKSPACE_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbModalRouteRegistrationController, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-input-document-type') export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitElement, '') { + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputDocumentType', + itemSelector: 'uui-ref-node-document-type', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.selection = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); + /** * Limits to only select Element Types * @type {boolean} @@ -73,17 +82,17 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme maxMessage = 'This field exceeds the allowed amount of items'; @property({ type: Array }) - public set selection(ids: Array | undefined) { - this.#pickerContext.setSelection(ids ?? []); + public set selection(uniques: Array) { + this.#pickerContext.setSelection(uniques); + this.#sorter.setModel(uniques); } public get selection(): Array { return this.#pickerContext.getSelection(); } @property() - public set value(idsString: string) { - // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection. - this.selection = splitStringToArray(idsString); + public set value(uniques: string) { + this.selection = splitStringToArray(uniques); } public get value(): string { return this.selection.join(','); @@ -93,7 +102,7 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme private _items?: Array; @state() - private _editDocumentTypePath = ''; + private _editPath = ''; #pickerContext = new UmbDocumentTypePickerContext(this); @@ -106,7 +115,7 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme return { data: { entityType: 'document-type', preset: {} } }; }) .observeRouteBuilder((routeBuilder) => { - this._editDocumentTypePath = routeBuilder({}); + this._editPath = routeBuilder({}); }); this.addValidator( @@ -121,8 +130,8 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(','))); - this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { @@ -130,64 +139,53 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme } #openPicker() { - if (this.elementTypesOnly) { - this.#pickerContext.openPicker({ - hideTreeRoot: true, - pickableFilter: (x) => x.isElement, - }); - } else { - this.#pickerContext.openPicker({ - hideTreeRoot: true, - }); - } + this.#pickerContext.openPicker({ + hideTreeRoot: true, + pickableFilter: this.elementTypesOnly ? (x) => x.isElement : undefined, + }); + } + + #removeItem(item: UmbDocumentTypeItemModel) { + this.#pickerContext.requestRemoveItem(item.unique); } render() { - return html` ${this.#renderItems()} ${this.#renderAddButton()} `; - } - - #renderItems() { - if (!this._items) return nothing; - return html` - ${repeat( - this._items, - (item) => item.unique, - (item) => this.#renderItem(item), - )} - `; + return html`${this.#renderItems()} ${this.#renderAddButton()}`; } #renderAddButton() { if (this.max > 0 && this.selection.length >= this.max) return nothing; return html` `; } + #renderItems() { + if (!this._items) return nothing; + return html` + + ${repeat( + this._items, + (item) => item.unique, + (item) => this.#renderItem(item), + )} + + `; + } + #renderItem(item: UmbDocumentTypeItemModel) { if (!item.unique) return; + const href = `${this._editPath}edit/${item.unique}`; return html` - + ${this.#renderIcon(item)} - - - - this.#pickerContext.requestRemoveItem(item.unique)} - label="Edit Document Type ${item.name}"> - - + + this.#removeItem(item)} label=${this.localize.term('general_remove')}> `; @@ -200,7 +198,7 @@ export class UmbInputDocumentTypeElement extends UUIFormControlMixin(UmbLitEleme static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts index aa5961bfb1..93e2053474 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/create/manifests.ts @@ -32,4 +32,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts index 0d5e8f7e42..5b7b684ccd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts index cac84b044f..1000bbe837 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/duplicate/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_DUPLICATE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './constants.js'; import { UmbDuplicateDocumentTypeRepository } from './document-type-duplicate.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const duplicateRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const duplicateRepository: ManifestRepository = { api: UmbDuplicateDocumentTypeRepository, }; -export const manifests = [duplicateRepository]; +export const manifests: Array = [duplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts index d6e35494d9..566d23d078 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/manifests.ts @@ -22,4 +22,9 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests]; +export const manifests: Array = [ + ...entityActions, + ...createManifests, + ...moveManifests, + ...duplicateManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/manifests.ts index 91290d49bb..b53091d713 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts index e4e3226bb9..a4117b154a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/entity-actions/move-to/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MOVE_DOCUMENT_TYPE_REPOSITORY_ALIAS } from './constants.js'; import { UmbMoveDocumentTypeRepository } from './document-type-move.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const moveRepository: ManifestRepository = { api: UmbMoveDocumentTypeRepository, }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/manifests.ts index e582d0a40e..da281da540 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/manifests.ts @@ -4,8 +4,9 @@ import { manifests as propertyEditorManifests } from './property-editors/manifes import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...propertyEditorManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts index a075f20fb7..74118de9f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_DOCUMENT_TYPE_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts index 12078a7633..477ba1415d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-editors/document-type-picker/property-editor-ui-document-type-picker.element.ts @@ -1,11 +1,10 @@ import type { UmbInputDocumentTypeElement } from '../../components/input-document-type/input-document-type.element.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { - UmbPropertyValueChangeEvent, - type UmbPropertyEditorConfigCollection, -} from '@umbraco-cms/backoffice/property-editor'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; +import type { NumberRangeValueType } from '@umbraco-cms/backoffice/models'; +import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-property-editor-ui-document-type-picker') export class UmbPropertyEditorUIDocumentTypePickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { @@ -13,48 +12,44 @@ export class UmbPropertyEditorUIDocumentTypePickerElement extends UmbLitElement public value?: string; public set config(config: UmbPropertyEditorConfigCollection | undefined) { - if (config) { - const validationLimit = config.getValueByAlias('validationLimit'); - this._limitMin = validationLimit?.min; - this._limitMax = validationLimit?.max; + if (!config) return; - // We have the need in Block Editors, to just pick a single ID not as an array. So for that we use the multiPicker config, which can be set to true if you wanted to be able to pick multiple. - this._multiPicker = config.getValueByAlias('multiPicker') ?? false; - this._onlyElementTypes = config.getValueByAlias('onlyPickElementTypes') ?? false; - } - } - public get config() { - return undefined; + const minMax = config?.getValueByAlias('validationLimit'); + this.min = minMax?.min ?? 0; + this.max = minMax?.max ?? Infinity; + + this.onlyElementTypes = config.getValueByAlias('onlyPickElementTypes') ?? false; + this.showOpenButton = config?.getValueByAlias('showOpenButton') ?? false; } @state() - private _limitMin?: number; - @state() - private _limitMax?: number; - @state() - private _multiPicker?: boolean; - @state() - private _onlyElementTypes?: boolean; + min = 0; - private _onChange(event: CustomEvent) { - const selection = (event.target as UmbInputDocumentTypeElement).selection; - this.value = this._multiPicker ? selection.join(',') : selection[0]; + @state() + max = Infinity; + + @state() + showOpenButton?: boolean; + + @state() + onlyElementTypes?: boolean; + + #onChange(event: CustomEvent & { target: UmbInputDocumentTypeElement }) { + this.value = event.target.selection.join(','); this.dispatchEvent(new UmbPropertyValueChangeEvent()); } - // TODO: Implement mandatory? render() { - return this._multiPicker !== undefined - ? html` - - - ` - : ''; + return html` + + + `; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts index eb98332a8e..f69ac1b6dc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentTypeCompositionRepository } from './document-type-composition.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Composition'; @@ -10,4 +10,4 @@ const queryRepository: ManifestRepository = { api: UmbDocumentTypeCompositionRepository, }; -export const manifests = [queryRepository]; +export const manifests: Array = [queryRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts index 23019e7fa2..761b8b7422 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts @@ -9,7 +9,7 @@ import type { import { DocumentTypeService } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; +import type { UmbPropertyContainerTypes, UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; /** * A data source for the Document Type that fetches data from the server @@ -236,7 +236,15 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc appearance: property.appearance, }; }), - containers: model.containers, + containers: model.containers.map((container) => { + return { + id: container.id, + parent: container.parent ? { id: container.parent.id } : null, + name: container.name ?? '', + type: container.type as UmbPropertyContainerTypes, // TODO: check if the value is valid + sortOrder: container.sortOrder, + }; + }), allowedDocumentTypes: model.allowedContentTypes.map((allowedContentType) => { return { documentType: { id: allowedContentType.contentType.unique }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/manifests.ts index 4369b8b7f8..64e063d2e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentTypeDetailRepository } from './document-type-detail.repository.js'; import { UmbDocumentTypeDetailStore } from './document-type-detail.store.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Detail'; export const UMB_DOCUMENT_TYPE_DETAIL_STORE_ALIAS = 'Umb.Store.DocumentType.Detail'; @@ -19,4 +19,4 @@ const detailStore: ManifestStore = { api: UmbDocumentTypeDetailStore, }; -export const manifests = [detailRepository, detailStore]; +export const manifests: Array = [detailRepository, detailStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/manifests.ts index e92f65687e..654f60fdc9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/item/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentTypeItemRepository } from './document-type-item.repository.js'; import { UmbDocumentTypeItemStore } from './document-type-item.store.js'; -import type { ManifestItemStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Item'; export const UMB_DOCUMENT_TYPE_ITEM_STORE_ALIAS = 'Umb.Store.DocumentType.Item'; @@ -19,4 +19,4 @@ const itemStore: ManifestItemStore = { api: UmbDocumentTypeItemStore, }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts index 38273b6d7d..ce74b2570d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts @@ -1,5 +1,6 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as compositionManifests } from './composition/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests, ...compositionManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...compositionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts index 182cfe012e..a95711f7c8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/structure/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentTypeStructureRepository } from './document-type-structure.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_STRUCTURE_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Structure'; @@ -10,4 +10,4 @@ const structureRepository: ManifestRepository = { api: UmbDocumentTypeStructureRepository, }; -export const manifests = [structureRepository]; +export const manifests: Array = [structureRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/manifests.ts index 4ceb20018d..10c12789a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/folder/manifests.ts @@ -1,6 +1,10 @@ import { UMB_DOCUMENT_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js'; import { UmbDocumentTypeFolderRepository } from './document-type-folder.repository.js'; -import type { ManifestEntityActions, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestEntityActions, + ManifestRepository, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TYPE_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Folder'; @@ -34,4 +38,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/manifests.ts index e5200f2240..5e7cce4c5a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/tree/manifests.ts @@ -17,6 +17,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const treeRepository: ManifestRepository = { @@ -55,4 +56,11 @@ const treeItem: ManifestTreeItem = { ], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...folderManifests, ...reloadManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...folderManifests, + ...reloadManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts index deaca635a6..80b80f793e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/manifests.ts @@ -1,6 +1,7 @@ import { UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/composition/index.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceViews, @@ -115,4 +116,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts index 3725fba050..93063e75bd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/action/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestCollectionAction = { type: 'collectionAction', @@ -10,7 +10,6 @@ export const createManifest: ManifestCollectionAction = { weight: 100, meta: { label: 'Create', - }, conditions: [ { @@ -20,4 +19,4 @@ export const createManifest: ManifestCollectionAction = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/manifests.ts index 09f88649d4..adec5cd95e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/manifests.ts @@ -4,7 +4,7 @@ import { manifests as collectionRepositoryManifests } from './repository/manifes import { manifests as collectionViewManifests } from './views/manifests.js'; import { UmbDocumentCollectionContext } from './document-collection.context.js'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from './index.js'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const collectionManifest: ManifestCollection = { type: 'collection', @@ -17,7 +17,7 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionActionManifests, ...collectionRepositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/repository/manifests.ts index 823a07ea8b..6ea1d23d97 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/repository/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentCollectionRepository } from './document-collection.repository.js'; import { UMB_DOCUMENT_COLLECTION_REPOSITORY_ALIAS } from './index.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const collectionRepositoryManifest: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const collectionRepositoryManifest: ManifestRepository = { api: UmbDocumentCollectionRepository, }; -export const manifests = [collectionRepositoryManifest]; +export const manifests: Array = [collectionRepositoryManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts index f924c9c90e..ac83466e2f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/grid/document-grid-collection-view.element.ts @@ -2,6 +2,7 @@ import { getPropertyValueByAlias } from '../index.js'; import type { UmbCollectionColumnConfiguration } from '../../../../../core/collection/types.js'; import type { UmbDocumentCollectionFilterModel, UmbDocumentCollectionItemModel } from '../../types.js'; import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit'; +import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_DEFAULT_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/collection'; @@ -137,10 +138,7 @@ export class UmbDocumentGridCollectionViewElement extends UmbLitElement { >${this.localize.term('content_notCreated')}`; default: - // TODO: [LK] Check if we have a `SplitPascalCase`-esque utility function that could be used here. - return html`${item.state.replace(/([A-Z])/g, ' $1')}`; + return html`${fromCamelCase(item.state)}`; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/manifests.ts index 16f5867cbf..36f872a12f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_GRID_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Document.Grid'; export const UMB_DOCUMENT_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Document.Table'; @@ -42,4 +42,4 @@ const tableViewManifest: ManifestCollectionView = { ], }; -export const manifests = [gridViewManifest, tableViewManifest]; +export const manifests: Array = [gridViewManifest, tableViewManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-state.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-state.element.ts index b060f53e49..1a44194e82 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-state.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-state.element.ts @@ -1,5 +1,6 @@ import type { UmbDocumentCollectionItemModel } from '../../../types.js'; import { customElement, html, property } from '@umbraco-cms/backoffice/external/lit'; +import { fromCamelCase } from '@umbraco-cms/backoffice/utils'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbTableColumn, UmbTableColumnLayoutElement, UmbTableItem } from '@umbraco-cms/backoffice/components'; @@ -25,8 +26,7 @@ export class UmbDocumentTableColumnStateElement extends UmbLitElement implements case 'NotCreated': return html`${this.localize.term('content_notCreated')}`; default: - // TODO: [LK] Check if we have a `SplitPascalCase`-esque utility function that could be used here. - return html`${this.value.state.replace(/([A-Z])/g, ' $1')}`; + return html`${fromCamelCase(this.value.state)}`; } } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts index 04da0829b0..cd8205865b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/components/input-document/input-document.element.ts @@ -72,13 +72,13 @@ export class UmbInputDocumentElement extends UUIFormControlMixin(UmbLitElement, @property({ type: String, attribute: 'min-message' }) maxMessage = 'This field exceeds the allowed amount of items'; - public get selection(): Array { - return this.#pickerContext.getSelection(); - } public set selection(ids: Array) { this.#pickerContext.setSelection(ids); this.#sorter.setModel(ids); } + public get selection(): Array { + return this.#pickerContext.getSelection(); + } @property({ type: String }) startNodeId?: string; @@ -120,8 +120,8 @@ export class UmbInputDocumentElement extends UUIFormControlMixin(UmbLitElement, this._editDocumentPath = routeBuilder({}); }); - this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(','))); - this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } connectedCallback(): void { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts index 5950207852..cd349f9e66 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/manifests.ts @@ -33,4 +33,4 @@ const manifestModals: Array = [ }, ]; -export const manifests = [...entityActions, ...manifestModals]; +export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts index f5635547e6..31be0659a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create-blueprint/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentCreateBlueprintRepository } from './document-create-blueprint.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS = 'Umb.Repository.Document.CreateBlueprint'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDocumentCreateBlueprintRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts index 1f7ccebe2d..82338de7b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/create/manifests.ts @@ -33,4 +33,4 @@ const modals: Array = [ }, ]; -export const manifests = [...entityActions, ...modals]; +export const manifests: Array = [...entityActions, ...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts index 42d1b6ccbe..29c31b81ec 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/manifests.ts @@ -34,4 +34,4 @@ const manifestModals: Array = [ }, ]; -export const manifests = [...entityActions, ...manifestModals]; +export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts index 329d442cfc..94fa9c76d4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/culture-and-hostnames/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentCultureAndHostnamesRepository } from './culture-and-hostnames.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_CULTURE_AND_HOSTNAMES_REPOSITORY_ALIAS = 'Umb.Repository.Document.CultureAndHostnames'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDocumentCultureAndHostnamesRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/manifests.ts index 97683cab99..24411dd39d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/manifests.ts @@ -2,8 +2,9 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js'; import { UMB_USER_PERMISSION_DOCUMENT_DUPLICATE } from '../../user-permissions/constants.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as modalManifests } from './modal/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'entityAction', kind: 'duplicateTo', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts index d3d2a07eb9..5b3504146f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_DUPLICATE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; import { UmbDuplicateDocumentRepository } from './document-duplicate.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const duplicateRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const duplicateRepository: ManifestRepository = { api: UmbDuplicateDocumentRepository, }; -export const manifests = [duplicateRepository]; +export const manifests: Array = [duplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts index d59c41a4d4..c9dabd85d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/manifests.ts @@ -15,7 +15,7 @@ import { manifests as moveManifests } from './move-to/manifests.js'; import { manifests as publicAccessManifests } from './public-access/manifests.js'; import { manifests as sortChildrenOfManifests } from './sort-children-of/manifests.js'; -import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ { @@ -113,7 +113,7 @@ const entityActions: Array = [ }, ]; -export const manifests = [ +export const manifests: Array = [ ...createBlueprintManifests, ...createManifests, ...cultureAndHostnamesManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts index fd970dc6ed..dd539de2e2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/manifests.ts @@ -26,4 +26,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts index 3258fe31a1..98e3cb6e0c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/move-to/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MOVE_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; import { UmbMoveDocumentRepository } from './document-move.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const moveRepository: ManifestRepository = { api: UmbMoveDocumentRepository, }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts index 7f75cf107b..1ab9fb6d64 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/manifests.ts @@ -34,4 +34,4 @@ const manifestModals: Array = [ }, ]; -export const manifests = [...entityActions, ...manifestModals]; +export const manifests: Array = [...entityActions, ...manifestModals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts index 9ea231942a..2126f32d8d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/public-access/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentPublicAccessRepository } from './public-access.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_PUBLIC_ACCESS_REPOSITORY_ALIAS = 'Umb.Repository.Document.PublicAccess'; @@ -10,4 +10,4 @@ const repository: ManifestRepository = { api: UmbDocumentPublicAccessRepository, }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts index 0e17f4f6df..50ffe9d4e4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/sort-children-of/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_SORT_CHILDREN_OF_DOCUMENT_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const repository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const repository: ManifestRepository = { api: () => import('./sort-children-of.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts index 1d2db8ffa2..49dcd123ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts @@ -11,8 +11,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as userPermissionManifests } from './user-permissions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as globalContextManifests } from './global-contexts/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionManifests, ...entityActionManifests, ...entityBulkActionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu/manifests.ts index ada6c457c3..72c0cc2818 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/menu/manifests.ts @@ -1,8 +1,9 @@ import { UMB_DOCUMENT_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_CONTENT_MENU_ALIAS = 'Umb.Menu.Content'; -export const manifests = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_CONTENT_MENU_ALIAS, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/manifests.ts index e964a7543a..520453ed02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_ROLLBACK_MODAL_ALIAS = 'Umb.Modal.Rollback'; export const UMB_DOCUMENT_SAVE_MODAL_ALIAS = 'Umb.Modal.DocumentSave'; @@ -46,4 +46,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/rollback/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/rollback/repository/manifests.ts index 1e0c52fc4f..a5c962d56c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/rollback/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/rollback/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_ROLLBACK_REPOSITORY_ALIAS = 'Umb.Repository.Rollback'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./rollback.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ContentPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/Umbraco.ContentPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ContentPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/Umbraco.ContentPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/manifests.ts index cba1329e35..0bcb58633f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/manifests.ts @@ -1,36 +1,40 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.ContentPicker.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.DocumentPicker', - name: 'Document Picker Property Editor UI', - element: () => import('./property-editor-ui-document-picker.element.js'), - meta: { - label: 'Document Picker', - propertyEditorSchemaAlias: 'Umbraco.ContentPicker', - icon: 'icon-document', - group: 'common', - settings: { - properties: [ - { - alias: 'startNodeId', - label: 'Start node', - description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.DocumentPicker', - config: [ - { - alias: 'validationLimit', - value: { min: 0, max: 1 }, - }, - ], - }, - { - alias: 'showOpenButton', - label: 'Show open button', - description: 'Opens the node in a dialog', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', - }, - ], +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.DocumentPicker', + name: 'Document Picker Property Editor UI', + element: () => import('./property-editor-ui-document-picker.element.js'), + meta: { + label: 'Document Picker', + propertyEditorSchemaAlias: 'Umbraco.ContentPicker', + icon: 'icon-document', + group: 'common', + settings: { + properties: [ + { + alias: 'startNodeId', + label: 'Start node', + description: '', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.DocumentPicker', + config: [ + { + alias: 'validationLimit', + value: { min: 0, max: 1 }, + }, + ], + }, + { + alias: 'showOpenButton', + label: 'Show open button', + description: 'Opens the node in a dialog', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', + }, + ], + }, }, }, -}; + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts index 816770d679..042664de21 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/document-picker/property-editor-ui-document-picker.element.ts @@ -14,13 +14,13 @@ export class UmbPropertyEditorUIDocumentPickerElement extends UmbLitElement impl public set config(config: UmbPropertyEditorConfigCollection | undefined) { if (!config) return; - const minMax = config?.getValueByAlias('validationLimit'); + const minMax = config.getValueByAlias('validationLimit'); this.min = minMax?.min ?? 0; this.max = minMax?.max ?? Infinity; - this.ignoreUserStartNodes = config?.getValueByAlias('ignoreUserStartNodes'); - this.startNodeId = config?.getValueByAlias('startNodeId'); - this.showOpenButton = config?.getValueByAlias('showOpenButton'); + this.ignoreUserStartNodes = config.getValueByAlias('ignoreUserStartNodes') ?? false; + this.startNodeId = config.getValueByAlias('startNodeId'); + this.showOpenButton = config.getValueByAlias('showOpenButton') ?? false; } @state() diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/manifests.ts index c7f1d01021..a2131ca272 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/property-editors/manifests.ts @@ -1,4 +1,4 @@ -import { manifest as documentPickerUI } from './document-picker/manifests.js'; -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as documentPickerManifests } from './document-picker/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [documentPickerUI]; +export const manifests: Array = [...documentPickerManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/manifests.ts index 423a1afcc2..a97b720238 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/manifests.ts @@ -2,5 +2,11 @@ import { manifests as entityActionManifests } from './entity-action/manifests.js import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...entityActionManifests, ...menuItemManifests, ...repositoryManifests, ...treeManifests]; +export const manifests: Array = [ + ...entityActionManifests, + ...menuItemManifests, + ...repositoryManifests, + ...treeManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts index 418ed9c109..27ade54b9d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/menu-item/manifests.ts @@ -1,6 +1,6 @@ import { UMB_CONTENT_MENU_ALIAS } from '../../menu/manifests.js'; import { UMB_DOCUMENT_RECYCLE_BIN_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestMenuItemTreeKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestMenuItemTreeKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestMenuItemTreeKind = { type: 'menuItem', @@ -16,4 +16,4 @@ const menuItem: ManifestMenuItemTreeKind = { }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/repository/manifests.ts index b2b0b2ac63..22cb4e70e9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const queryRepository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const queryRepository: ManifestRepository = { api: () => import('./document-recycle-bin.repository.js'), }; -export const manifests = [queryRepository]; +export const manifests: Array = [queryRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/manifests.ts index 69c76b9235..e42c3427a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/tree/manifests.ts @@ -12,6 +12,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const treeRepository: ManifestRepository = { @@ -46,4 +47,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_DOCUMENT_RECYCLE_BIN_ROOT_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/manifests.ts index 4e1826b900..a8e101b348 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/manifests.ts @@ -1,3 +1,4 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...repositoryManifests]; +export const manifests: Array = [...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/repository/manifests.ts index bf5b524279..94820f5042 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS = 'Umb.Repository.Document.Reference'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./document-reference.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts index 1941d61569..8c78931e0a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentDetailRepository } from './document-detail.repository.js'; import { UmbDocumentDetailStore } from './document-detail.store.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Document.Detail'; @@ -20,4 +20,4 @@ const store: ManifestStore = { api: UmbDocumentDetailStore, }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts index 6490290a74..0cec091f39 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/manifests.ts @@ -1,6 +1,6 @@ import { UmbDocumentItemStore } from './document-item.store.js'; import { UmbDocumentItemRepository } from './document-item.repository.js'; -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.DocumentItem'; export const UMB_DOCUMENT_STORE_ALIAS = 'Umb.Store.DocumentItem'; @@ -19,4 +19,4 @@ const itemStore: ManifestItemStore = { api: UmbDocumentItemStore, }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts index 7e4bc9661c..65c26631b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/manifests.ts @@ -1,5 +1,6 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as publishingManifests } from './publishing/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests, ...publishingManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...publishingManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts index f3efa10fac..56a6d3f09f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/publishing/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentPublishingRepository } from './document-publishing.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_PUBLISHING_REPOSITORY_ALIAS = 'Umb.Repository.Document.Publishing'; @@ -10,4 +10,4 @@ const publishingRepository: ManifestRepository = { api: UmbDocumentPublishingRepository, }; -export const manifests = [publishingRepository]; +export const manifests: Array = [publishingRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/validation/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/validation/manifests.ts index c29f9dd9ef..a55d5161e9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/validation/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/validation/manifests.ts @@ -1,5 +1,5 @@ import { UmbDocumentValidationRepository } from './document-validation.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_VALIDATION_REPOSITORY_ALIAS = 'Umb.Repository.Document.Validation'; @@ -10,4 +10,4 @@ const validationRepository: ManifestRepository = { api: UmbDocumentValidationRepository, }; -export const manifests = [validationRepository]; +export const manifests: Array = [validationRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/manifests.ts index 5b964c6b94..cb3362d82e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/manifests.ts @@ -6,6 +6,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Document.Tree'; @@ -53,4 +54,11 @@ const rootTreeItem: ManifestTreeItem = { forEntityTypes: [UMB_DOCUMENT_ROOT_ENTITY_TYPE], }; -export const manifests = [...reloadTreeItemChildrenManifests, tree, treeItem, rootTreeItem, treeRepository, treeStore]; +export const manifests: Array = [ + ...reloadTreeItemChildrenManifests, + tree, + treeItem, + rootTreeItem, + treeRepository, + treeStore, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts index e3d553111f..b9c89006ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.ts @@ -152,18 +152,20 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro #renderItems() { if (!this._items) return; - return html` - ${repeat( - this._items, - (item) => item.unique, - (item) => this.#renderRef(item), - )} - `; + return html` + + ${repeat( + this._items, + (item) => item.unique, + (item) => this.#renderRef(item), + )} + + `; } #renderAddButton() { return html``; @@ -232,7 +234,7 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/manifests.ts index bd7db811ec..e9cc8c2b31 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/manifests.ts @@ -21,6 +21,7 @@ import { manifest as conditionManifest } from './document-user-permission.condit import type { ManifestGranularUserPermission, ManifestEntityUserPermission, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const permissions: Array = [ @@ -212,4 +213,9 @@ export const granularPermissions: Array = [ }, ]; -export const manifests = [...repositoryManifests, ...permissions, ...granularPermissions, conditionManifest]; +export const manifests: Array = [ + ...repositoryManifests, + ...permissions, + ...granularPermissions, + conditionManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/manifests.ts index 2a79116a28..272741bcb5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_PERMISSION_REPOSITORY_ALIAS = 'Umb.Repository.Document.Permission'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./document-permission.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index cfc1c389bc..0c4f621089 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -23,17 +23,13 @@ import { UmbEntityContext } from '@umbraco-cms/backoffice/entity'; import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type'; import { + type UmbCollectionWorkspaceContext, + type UmbPublishableWorkspaceContext, UmbSubmittableWorkspaceContextBase, UmbWorkspaceIsNewRedirectController, UmbWorkspaceRouteManager, UmbWorkspaceSplitViewManager, } from '@umbraco-cms/backoffice/workspace'; -import type { - UmbCollectionWorkspaceContext, - UmbVariantDatasetWorkspaceContext, - UmbPublishableWorkspaceContext, - UmbRoutableWorkspaceContext, -} from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, mergeObservables, @@ -48,23 +44,25 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; import { UmbServerModelValidationContext, UmbVariantValuesValidationMessageTranslator, } from '@umbraco-cms/backoffice/validation'; import { UmbDocumentBlueprintDetailRepository } from '@umbraco-cms/backoffice/document-blueprint'; import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import type { UmbContentWorkspaceContext } from '@umbraco-cms/backoffice/content'; +import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; type EntityType = UmbDocumentDetailModel; export class UmbDocumentWorkspaceContext extends UmbSubmittableWorkspaceContextBase implements - UmbRoutableWorkspaceContext, - UmbVariantDatasetWorkspaceContext, + UmbContentWorkspaceContext, UmbPublishableWorkspaceContext, UmbCollectionWorkspaceContext { + public readonly IS_CONTENT_WORKSPACE_CONTEXT = true as const; + public readonly repository = new UmbDocumentDetailRepository(this); public readonly publishingRepository = new UmbDocumentPublishingRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts index 7fc5c9d526..2423cb77f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts @@ -9,6 +9,7 @@ import type { ManifestWorkspaceActions, ManifestWorkspaceActionMenuItem, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DOCUMENT_WORKSPACE_ALIAS = 'Umb.Workspace.Document'; @@ -201,4 +202,9 @@ const workspaceActionMenuItems: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions, ...workspaceActionMenuItems]; +export const manifests: Array = [ + workspace, + ...workspaceViews, + ...workspaceActions, + ...workspaceActionMenuItems, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/manifests.ts index eb049a21ef..fcc94ab11f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/manifests.ts @@ -3,8 +3,9 @@ import { manifests as documentBlueprintManifests } from './document-blueprints/m import { manifests as documentManifests } from './documents/manifests.js'; import { manifests as documentTypeManifests } from './document-types/manifests.js'; import { manifests as sectionManifests } from './section.manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...dashboardManifests, ...documentBlueprintManifests, ...documentManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/section.manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/section.manifests.ts index bba5937c6b..d1f666a5f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/section.manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/section.manifests.ts @@ -2,6 +2,7 @@ import { UMB_DOCUMENT_ROOT_ENTITY_TYPE, UMB_CONTENT_MENU_ALIAS } from './documen import type { ManifestSection, ManifestSectionSidebarAppMenuWithEntityActionsKind, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const sectionAlias = 'Umb.Section.Content'; @@ -42,4 +43,4 @@ const menuSectionSidebarApp: ManifestSectionSidebarAppMenuWithEntityActionsKind ], }; -export const manifests = [section, menuSectionSidebarApp]; +export const manifests: Array = [section, menuSectionSidebarApp]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/manifests.ts index 4322a89557..f1e10f37be 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/manifests.ts @@ -1,7 +1,5 @@ import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ - ...modalManifests, - ...repositoryManifests, -]; +export const manifests: Array = [...modalManifests, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/modals/manifests.ts index a04fc0ec86..c9a4e2f4dc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/modals/manifests.ts @@ -2,6 +2,7 @@ import type { ManifestDynamicRootOrigin, ManifestDynamicRootQueryStep, ManifestModal, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DYNAMIC_ROOT_ORIGIN_PICKER_MODAL_ALIAS = 'Umb.Modal.DynamicRoot.OriginPicker'; @@ -136,4 +137,4 @@ const querySteps: Array = [ }, ]; -export const manifests = [...modals, ...origins, ...querySteps]; +export const manifests: Array = [...modals, ...origins, ...querySteps]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/repository/manifests.ts index a140a9a729..dff470e8a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dynamic-root/repository/manifests.ts @@ -1,3 +1,5 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + export const UMB_DYNAMIC_ROOT_REPOSITORY_ALIAS = 'Umb.Repository.DynamicRoot'; -export const manifests = []; +export const manifests: Array = []; diff --git a/src/Umbraco.Web.UI.Client/src/packages/health-check/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/health-check/manifests.ts index c630937f90..cad982e849 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/health-check/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/health-check/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.HealthCheck', diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts index e3ba41fad9..b29b0dde84 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSectionSidebarApp } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionSidebarApp, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ { @@ -16,4 +16,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts index c4c98eca4d..4dfa891fbe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/collection/action/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestCollectionAction = { type: 'collectionAction', @@ -19,4 +19,4 @@ export const createManifest: ManifestCollectionAction = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/collection/manifests.ts index d65bcb3b0e..fdd87fdd1a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/collection/manifests.ts @@ -2,7 +2,7 @@ import { UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS } from './repository/index.js' import { manifests as collectionRepositoryManifests } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_LANGUAGE_COLLECTION_ALIAS = 'Umb.Collection.Language'; @@ -16,7 +16,7 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/collection/repository/manifests.ts index f6192d7e3e..d98668dae6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_LANGUAGE_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.LanguageCollection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./language-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/collection/views/manifests.ts index dd0183bcdb..81b06449a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_LANGUAGE_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Language.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/components/input-language/input-language.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/components/input-language/input-language.element.ts index 69d0f4a540..eb119c9875 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/components/input-language/input-language.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/components/input-language/input-language.element.ts @@ -1,12 +1,30 @@ import type { UmbLanguageItemModel } from '../../repository/index.js'; import { UmbLanguagePickerContext } from './input-language.context.js'; -import { css, html, ifDefined, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { css, html, customElement, property, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-input-language') export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, '') { + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputLanguage', + itemSelector: 'uui-ref-node', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.selection = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); + /** * This is a minimum amount of selected items in this input. * @type {number} @@ -56,8 +74,10 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, @property({ type: Object, attribute: false }) public filter: (language: UmbLanguageItemModel) => boolean = () => true; + @property({ type: Array }) public set selection(uniques: Array) { this.#pickerContext.setSelection(uniques); + this.#sorter.setModel(uniques); } public get selection(): Array { return this.#pickerContext.getSelection(); @@ -65,7 +85,6 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, @property() public set value(uniques: string) { - // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection. this.selection = splitStringToArray(uniques); } public get value(): string { @@ -92,8 +111,8 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(','))); - this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { @@ -103,17 +122,39 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, #openPicker() { this.#pickerContext.openPicker({ filter: this.filter, + multiple: this.max > 1 ? true : false, }); } + #removeItem(item: UmbLanguageItemModel) { + this.#pickerContext.requestRemoveItem(item.unique); + } + render() { + return html`${this.#renderItems()} ${this.#renderAddButton()}`; + } + + #renderAddButton() { + if (this.max > 0 && this.selection.length >= this.max) return nothing; return html` - ${this._items.map((item) => this.#renderItem(item))} + label="${this.localize.term('general_choose')}"> + `; + } + + #renderItems() { + if (!this._items) return nothing; + return html` + + ${repeat( + this._items, + (item) => item.unique, + (item) => this.#renderItem(item), + )} + `; } @@ -121,11 +162,9 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, if (!item.unique) return; return html` - + - this.#pickerContext.requestRemoveItem(item.unique)} - label=${this.localize.term('general_remove')}> + this.#removeItem(item)} label=${this.localize.term('general_remove')}> `; @@ -133,7 +172,7 @@ export class UmbInputLanguageElement extends UUIFormControlMixin(UmbLitElement, static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts index edf254f0c7..29fbc0db13 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/entity-actions/manifests.ts @@ -30,4 +30,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/manifests.ts index bcae092c6e..704121a188 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/manifests.ts @@ -6,8 +6,9 @@ import { manifests as appLanguageSelect } from './app-language-select/manifests. import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as globalContextManifests } from './global-contexts/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...repositoryManifests, ...entityActions, ...menuManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/menu/manifests.ts index 198584f08d..c2e7376ee7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/menu/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'menuItem', alias: 'Umb.MenuItem.Languages', diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/modals/language-picker/language-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/modals/language-picker/language-picker-modal.element.ts index f5a050a8cd..474e0be07c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/modals/language-picker/language-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/modals/language-picker/language-picker-modal.element.ts @@ -21,6 +21,10 @@ export class UmbLanguagePickerModalElement extends UmbModalBaseElement< this.#selectionManager.setSelectable(true); this.#selectionManager.setMultiple(this.data?.multiple ?? false); this.#selectionManager.setSelection(this.value?.selection ?? []); + + this.observe(this.#selectionManager.selection, (selection) => { + this.value = { selection }; + }); } async firstUpdated() { @@ -37,7 +41,6 @@ export class UmbLanguagePickerModalElement extends UmbModalBaseElement< } #submit() { - this.value = { selection: this.#selectionManager.getSelection() }; this.modalContext?.submit(); } @@ -57,7 +60,7 @@ export class UmbLanguagePickerModalElement extends UmbModalBaseElement< selectable @selected=${() => this.#selectionManager.select(item.unique)} @deselected=${() => this.#selectionManager.deselect(item.unique)} - ?selected=${this.#selectionManager.isSelected(item.unique)}> + ?selected=${this.value.selection.includes(item.unique)}> `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/modals/manifests.ts index 7f415a3e19..d0c5d69f83 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/repository/detail/language-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/language/repository/detail/language-detail.server.data-source.ts index 46d8e93d94..664a71aefe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/repository/detail/language-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/repository/detail/language-detail.server.data-source.ts @@ -41,7 +41,7 @@ export class UmbLanguageServerDataSource implements UmbDetailDataSource import('./language-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/repository/item/manifests.ts index 6c50c8e918..cbcdf682a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_LANGUAGE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.LanguageItem'; export const UMB_LANGUAGE_STORE_ALIAS = 'Umb.Store.LanguageItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./language-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/manifests.ts index b4f941f425..1d6acda704 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language-root/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestTypes, ManifestWorkspace } from '@umbraco-cms/backoffice/extension-registry'; const workspace: ManifestWorkspace = { type: 'workspace', @@ -10,4 +10,4 @@ const workspace: ManifestWorkspace = { }, }; -export const manifests = [workspace]; +export const manifests: Array = [workspace]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts index ce50e15990..6abbf9bf69 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/manifests.ts @@ -3,6 +3,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const workspace: ManifestWorkspaces = { @@ -58,4 +59,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/manifests.ts index 958dd64504..531e433a1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/manifests.ts @@ -1,4 +1,5 @@ import { manifests as languageManifests } from './language/manifests.js'; import { manifests as languageRootManifests } from './language-root/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...languageManifests, ...languageRootManifests]; +export const manifests: Array = [...languageManifests, ...languageRootManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/manifests.ts index 05be6d3978..cfbac86f79 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/manifests.ts @@ -1,4 +1,5 @@ import { manifests as treeManifests } from './menu-item/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...treeManifests, ...workspaceManifests]; +export const manifests: Array = [...treeManifests, ...workspaceManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/menu-item/manifests.ts index 34a5fff422..ed9dc91933 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/menu-item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestMenuItem } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestMenuItem, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestMenuItem = { type: 'menuItem', @@ -13,4 +13,4 @@ const menuItem: ManifestMenuItem = { }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/manifests.ts index b1076a052c..083ef9e64d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/manifests.ts @@ -1,5 +1,6 @@ import type { ManifestModal, + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceView, @@ -68,4 +69,4 @@ const modals: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions, ...modals]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions, ...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts index e525c752b5..3f8cb8a543 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts @@ -1,17 +1,18 @@ +import { css, html, customElement, query, property, unsafeHTML, when } from '@umbraco-cms/backoffice/external/lit'; import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify'; import { marked } from '@umbraco-cms/backoffice/external/marked'; import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor'; -import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; import { loadCodeEditor } from '@umbraco-cms/backoffice/code-editor'; -import { css, html, customElement, query, property, unsafeHTML, when } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin, type UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import { UMB_LINK_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UMB_APP_CONTEXT } from '@umbraco-cms/backoffice/app'; +import { UMB_LINK_PICKER_MODAL, UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; import { UMB_MEDIA_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/media'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor'; +import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; +import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; /** * @element umb-input-markdown @@ -184,9 +185,10 @@ export class UmbInputMarkdownElement extends UUIFormControlMixin(UmbLitElement, this._focusEditor(); // Focus before opening modal const modalContext = this._modalContext.open(this, UMB_LINK_PICKER_MODAL, { + modal: { size: this.overlaySize }, data: { index: null, - config: { overlaySize: this.overlaySize }, + config: {}, }, value: { link: { name: selectedValue }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/manifests.ts index 81153a42ce..1dcd948374 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/manifests.ts @@ -1,3 +1,4 @@ import { manifests as propertyEditors } from './property-editors/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...propertyEditors]; +export const manifests: Array = [...propertyEditors]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/manifests.ts index cbd2b41c49..b28dd7595f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/manifests.ts @@ -1,4 +1,4 @@ -import { manifest as markdownManifest } from './markdown-editor/manifests.js'; -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as markdownManifest } from './markdown-editor/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [markdownManifest]; +export const manifests: Array = [...markdownManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MarkdownEditor.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/Umbraco.MarkdownEditor.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MarkdownEditor.ts rename to src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/Umbraco.MarkdownEditor.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts index ba1a71a494..3e7ac5cd37 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.MarkdownEditor.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MarkdownEditor', name: 'Markdown Editor Property Editor UI', @@ -34,3 +35,5 @@ export const manifest: ManifestPropertyEditorUi = { }, }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/property-editor-ui-markdown-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/property-editor-ui-markdown-editor.element.ts index 57c6c39dfe..e224d31875 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/property-editor-ui-markdown-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/markdown-editor/property-editors/markdown-editor/property-editor-ui-markdown-editor.element.ts @@ -1,11 +1,13 @@ import type { UmbInputMarkdownElement } from '../../components/input-markdown-editor/index.js'; -import '../../components/input-markdown-editor/index.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; +import '../../components/input-markdown-editor/index.js'; + /** * @element umb-property-editor-ui-markdown-editor */ diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts index 488ffacb71..969da66234 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/manifests.ts @@ -1,7 +1,8 @@ import { manifests as mediaSectionManifests } from './section.manifests.js'; import { manifests as mediaManifests } from './media/manifests.js'; import { manifests as mediaTypesManifests } from './media-types/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import './media/components/index.js'; -export const manifests = [...mediaSectionManifests, ...mediaManifests, ...mediaTypesManifests]; +export const manifests: Array = [...mediaSectionManifests, ...mediaManifests, ...mediaTypesManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts index 6201d1da8d..8c9aab8d6b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/components/input-media-type/input-media-type.element.ts @@ -1,12 +1,31 @@ import type { UmbMediaTypeItemModel } from '../../repository/index.js'; import { UmbMediaTypePickerContext } from './input-media-type.context.js'; -import { css, html, customElement, property, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { css, html, customElement, property, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbModalRouteRegistrationController, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-input-media-type') export class UmbInputMediaTypeElement extends UUIFormControlMixin(UmbLitElement, '') { + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputMediaType', + itemSelector: 'uui-ref-node-document-type', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.selection = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); + /** * This is a minimum amount of selected items in this input. * @type {number} @@ -53,30 +72,43 @@ export class UmbInputMediaTypeElement extends UUIFormControlMixin(UmbLitElement, @property({ type: String, attribute: 'min-message' }) maxMessage = 'This field exceeds the allowed amount of items'; - public set selection(ids: Array) { - this.#pickerContext.setSelection(ids); + @property({ type: Array }) + public set selection(uniques: Array) { + this.#pickerContext.setSelection(uniques); + this.#sorter.setModel(uniques); } public get selection(): Array { return this.#pickerContext.getSelection(); } @property() - public set value(idsString: string) { - // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection. - this.selection = splitStringToArray(idsString); + public set value(uniques: string) { + this.selection = splitStringToArray(uniques); } - public get value() { + public get value(): string { return this.selection.join(','); } @state() private _items?: Array; + @state() + private _editPath = ''; + #pickerContext = new UmbMediaTypePickerContext(this); constructor() { super(); + new UmbModalRouteRegistrationController(this, UMB_WORKSPACE_MODAL) + .addAdditionalPath('media-type') + .onSetup(() => { + return { data: { entityType: 'media-type', preset: {} } }; + }) + .observeRouteBuilder((routeBuilder) => { + this._editPath = routeBuilder({}); + }); + this.addValidator( 'rangeUnderflow', () => this.minMessage, @@ -89,8 +121,8 @@ export class UmbInputMediaTypeElement extends UUIFormControlMixin(UmbLitElement, () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(','))); - this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { @@ -103,12 +135,27 @@ export class UmbInputMediaTypeElement extends UUIFormControlMixin(UmbLitElement, }); } + #removeItem(item: UmbMediaTypeItemModel) { + this.#pickerContext.requestRemoveItem(item.unique); + } + render() { - return html` ${this.#renderItems()} ${this.#renderAddButton()} `; + return html`${this.#renderItems()} ${this.#renderAddButton()}`; + } + + #renderAddButton() { + if (this.max > 0 && this.selection.length >= this.max) return nothing; + return html` + + `; } #renderItems() { - if (!this._items) return; + if (!this._items) return nothing; return html` ${repeat( @@ -120,26 +167,15 @@ export class UmbInputMediaTypeElement extends UUIFormControlMixin(UmbLitElement, `; } - #renderAddButton() { - if (this.max === 1 && this.selection.length >= this.max) return; - return html` - - `; - } - #renderItem(item: UmbMediaTypeItemModel) { if (!item.unique) return; + const href = `${this._editPath}edit/${item.unique}`; return html` - + ${this.#renderIcon(item)} - this.#pickerContext.requestRemoveItem(item.unique)} - label="${this.localize.term('general_remove')} ${item.name}"> + + this.#removeItem(item)} label=${this.localize.term('general_remove')}> `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts index bb47e42037..a2e22eac77 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/create/manifests.ts @@ -28,4 +28,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/manifests.ts index 4668135250..af36d87377 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts index a746d75f5b..e31017374e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/duplicate/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_DUPLICATE_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; import { UmbDuplicateMediaTypeRepository } from './media-type-duplicate.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const duplicateRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const duplicateRepository: ManifestRepository = { api: UmbDuplicateMediaTypeRepository, }; -export const manifests = [duplicateRepository]; +export const manifests: Array = [duplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts index ecb99fee2d..2b726ae1a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/manifests.ts @@ -19,4 +19,9 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...createManifests, ...moveManifests, ...duplicateManifests]; +export const manifests: Array = [ + ...entityActions, + ...createManifests, + ...moveManifests, + ...duplicateManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/manifests.ts index 7446965839..2a05be10df 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts index 6c9199a10e..280e0ad362 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/move-to/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MOVE_MEDIA_TYPE_REPOSITORY_ALIAS } from './constants.js'; import { UmbMoveMediaTypeRepository } from './media-type-move.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const moveRepository: ManifestRepository = { api: UmbMoveMediaTypeRepository, }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts index a868fd5b1e..3af5146cf3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/manifests.ts @@ -4,8 +4,9 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as propertyEditorUiManifests } from './property-editors/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts index 2158b4abaf..7433e0a9b7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_MEDIA_TYPE_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-editors/media-type-picker/property-editor-ui-media-type-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-editors/media-type-picker/property-editor-ui-media-type-picker.element.ts index 3e06b3a684..b683681d17 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-editors/media-type-picker/property-editor-ui-media-type-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-editors/media-type-picker/property-editor-ui-media-type-picker.element.ts @@ -1,11 +1,10 @@ import type { UmbInputMediaTypeElement } from '../../components/index.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { - UmbPropertyValueChangeEvent, - type UmbPropertyEditorConfigCollection, -} from '@umbraco-cms/backoffice/property-editor'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; +import type { NumberRangeValueType } from '@umbraco-cms/backoffice/models'; +import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-property-editor-ui-media-type-picker') export class UmbPropertyEditorUIMediaTypePickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { @@ -13,33 +12,31 @@ export class UmbPropertyEditorUIMediaTypePickerElement extends UmbLitElement imp public value?: string; public set config(config: UmbPropertyEditorConfigCollection | undefined) { - if (config) { - const validationLimit = config.getValueByAlias('validationLimit'); - this._limitMin = validationLimit?.min; - this._limitMax = validationLimit?.max; - } - } - public get config() { - return undefined; + if (!config) return; + + const minMax = config?.getValueByAlias('validationLimit'); + this.min = minMax?.min ?? 0; + this.max = minMax?.max ?? Infinity; } @state() - private _limitMin?: number; - @state() - private _limitMax?: number; + min = 0; - private _onChange(event: CustomEvent) { - this.value = (event.target as UmbInputMediaTypeElement).selection.join(','); + @state() + max = Infinity; + + #onChange(event: CustomEvent & { target: UmbInputMediaTypeElement }) { + this.value = event.target.selection.join(','); this.dispatchEvent(new UmbPropertyValueChangeEvent()); } render() { return html` + @change=${this.#onChange}> `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/manifests.ts index 4ad1df2b13..656fe6dbfe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Detail'; export const UMB_MEDIA_TYPE_DETAIL_STORE_ALIAS = 'Umb.Store.MediaType.Detail'; @@ -17,4 +17,4 @@ const detailStore: ManifestStore = { api: () => import('./media-type-detail.store.js'), }; -export const manifests = [detailRepository, detailStore]; +export const manifests: Array = [detailRepository, detailStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts index a8908fa616..55f1efb5d1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.server.data-source.ts @@ -9,7 +9,7 @@ import type { import { MediaTypeService } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; -import type { UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; +import type { UmbPropertyContainerTypes, UmbPropertyTypeContainerModel } from '@umbraco-cms/backoffice/content-type'; /** * A data source for the Media Type that fetches data from the server @@ -100,7 +100,15 @@ export class UmbMediaTypeServerDataSource implements UmbDetailDataSource { + return { + id: container.id, + parent: container.parent ? { id: container.parent.id } : null, + name: container.name ?? '', + type: container.type as UmbPropertyContainerTypes, // TODO: check if the value is valid + sortOrder: container.sortOrder, + }; + }), allowedContentTypes: data.allowedMediaTypes.map((allowedMediaType) => { return { contentType: { unique: allowedMediaType.mediaType.id }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/manifests.ts index 9104a6ea9b..2897631180 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestItemStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TYPE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Item'; export const UMB_MEDIA_TYPE_ITEM_STORE_ALIAS = 'Umb.Store.MediaType.Item'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./media-type-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/structure/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/structure/manifests.ts index 226045a255..57837c4c6b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/structure/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/structure/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TYPE_STRUCTURE_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Structure'; @@ -9,4 +9,4 @@ const structureRepository: ManifestRepository = { api: () => import('./media-type-structure.repository.js'), }; -export const manifests = [structureRepository]; +export const manifests: Array = [structureRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/manifests.ts index 3eee5b1763..6da2ede1bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/folder/manifests.ts @@ -1,5 +1,9 @@ import { UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestEntityAction, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestEntityAction, + ManifestRepository, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TYPE_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Folder'; @@ -33,4 +37,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/manifests.ts index 3698fda054..441738eace 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/tree/manifests.ts @@ -10,6 +10,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TYPE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.MediaType.Tree'; @@ -48,7 +49,7 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_MEDIA_TYPE_ENTITY_TYPE, UMB_MEDIA_TYPE_ROOT_ENTITY_TYPE, UMB_MEDIA_TYPE_FOLDER_ENTITY_TYPE], }; -export const manifests = [ +export const manifests: Array = [ treeRepository, treeStore, tree, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts index e6534bab5f..ea7451833c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/workspace/manifests.ts @@ -2,6 +2,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceViews, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -78,4 +79,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/manifests.ts index 81a0b068bd..aa03b457ba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/action/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestCollectionAction = { type: 'collectionAction', @@ -19,4 +19,4 @@ export const createManifest: ManifestCollectionAction = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/manifests.ts index f6b1026932..3feab9a71f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/manifests.ts @@ -17,7 +17,7 @@ const collectionManifest: ManifestTypes = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionActionManifests, ...collectionRepositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/manifests.ts index 643e6e0340..ea1cbd3387 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_MEDIA_COLLECTION_REPOSITORY_ALIAS } from './index.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const collectionRepositoryManifest: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const collectionRepositoryManifest: ManifestRepository = { api: () => import('./media-collection.repository.js'), }; -export const manifests = [collectionRepositoryManifest]; +export const manifests: Array = [collectionRepositoryManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/manifests.ts index ecb5f7feb7..1f82ccba39 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/collection/views/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MEDIA_GRID_COLLECTION_VIEW_ALIAS, UMB_MEDIA_TABLE_COLLECTION_VIEW_ALIAS } from './index.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const gridViewManifest: ManifestCollectionView = { type: 'collectionView', @@ -40,4 +40,4 @@ const tableViewManifest: ManifestCollectionView = { ], }; -export const manifests = [gridViewManifest, tableViewManifest]; +export const manifests: Array = [gridViewManifest, tableViewManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts index 1cbc5b8da1..bfcea58eb4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-media/input-media.element.ts @@ -1,30 +1,29 @@ import type { UmbMediaItemModel } from '../../repository/index.js'; import { UmbMediaPickerContext } from './input-media.context.js'; import { css, html, customElement, property, state, ifDefined, repeat } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_WORKSPACE_MODAL, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/modal'; -import { type UmbSorterConfig, UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; - -const SORTER_CONFIG: UmbSorterConfig = { - getUniqueOfElement: (element) => { - return element.getAttribute('detail'); - }, - getUniqueOfModel: (modelEntry) => { - return modelEntry; - }, - identifier: 'Umb.SorterIdentifier.InputMedia', - itemSelector: 'uui-card-media', - containerSelector: '.container', -}; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbModalRouteRegistrationController, UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-input-media') export class UmbInputMediaElement extends UUIFormControlMixin(UmbLitElement, '') { - #sorter = new UmbSorterController(this, { - ...SORTER_CONFIG, + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.getAttribute('detail'); + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputMedia', + itemSelector: 'uui-card-media', + containerSelector: '.container', onChange: ({ model }) => { this.selection = model; + + this.dispatchEvent(new UmbChangeEvent()); }, }); @@ -141,28 +140,20 @@ export class UmbInputMediaElement extends UUIFormControlMixin(UmbLitElement, '') } #pickableFilter: (item: UmbMediaItemModel) => boolean = (item) => { - /* TODO: Media item doesn't have the content/media-type ID available to query. - Commenting out until the Management API model is updated. [LK] - */ - // if (this.allowedContentTypeIds && this.allowedContentTypeIds.length > 0) { - // return this.allowedContentTypeIds.includes(item.contentTypeId); - // } + if (this.allowedContentTypeIds && this.allowedContentTypeIds.length > 0) { + return this.allowedContentTypeIds.includes(item.mediaType.unique); + } return true; }; #openPicker() { - // TODO: Configure the media picker, with `allowedContentTypeIds` and `ignoreUserStartNodes` [LK] + // TODO: Configure the media picker, with `ignoreUserStartNodes` [LK] this.#pickerContext.openPicker({ hideTreeRoot: true, pickableFilter: this.#pickableFilter, }); } - #openItem(item: UmbMediaItemModel) { - // TODO: Implement the Media editing infinity editor. [LK] - console.log('TODO: _openItem', item); - } - render() { return html`
${this.#renderItems()} ${this.#renderAddButton()}
`; } @@ -180,7 +171,7 @@ export class UmbInputMediaElement extends UUIFormControlMixin(UmbLitElement, '') if (this._items && this.max && this._items.length >= this.max) return; return html` @@ -215,9 +206,11 @@ export class UmbInputMediaElement extends UUIFormControlMixin(UmbLitElement, '') #renderIsTrashed(item: UmbMediaItemModel) { if (!item.isTrashed) return; - return html`Trashed`; + return html` + + Trashed + + `; } #renderOpenButton(item: UmbMediaItemModel) { @@ -241,7 +234,7 @@ export class UmbInputMediaElement extends UUIFormControlMixin(UmbLitElement, '') grid-template-rows: repeat(auto-fill, minmax(160px, 1fr)); } - #add-button { + #btn-add { text-align: center; height: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts index 41bfe68cbc..c1ed315604 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/create/manifests.ts @@ -27,4 +27,4 @@ const modals: Array = [ }, ]; -export const manifests = [...entityActions, ...modals]; +export const manifests: Array = [...entityActions, ...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts index 5964af777b..05b0de44cf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...moveManifests]; +export const manifests: Array = [...entityActions, ...moveManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/manifests.ts index b97ac60e72..64715a063c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/repository/manifests.ts index 699791550f..d9a2ed1158 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/entity-actions/move-to/repository/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MOVE_MEDIA_REPOSITORY_ALIAS } from './constants.js'; import { UmbMoveMediaRepository } from './media-move.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const moveRepository: ManifestRepository = { type: 'repository', @@ -9,4 +9,4 @@ const moveRepository: ManifestRepository = { api: UmbMoveMediaRepository, }; -export const manifests = [moveRepository]; +export const manifests: Array = [moveRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts index cbdd5167a5..1d355b70f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts @@ -8,8 +8,9 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionManifests, ...entityActionsManifests, ...entityBulkActionsManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/menu/manifests.ts index 34ad988a1c..c626a95b29 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/menu/manifests.ts @@ -1,8 +1,9 @@ import { UMB_MEDIA_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_MENU_ALIAS = 'Umb.Menu.Media'; -export const manifests = [ +export const manifests: Array = [ { type: 'menu', alias: UMB_MEDIA_MENU_ALIAS, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ImageCropper.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/Umbraco.ImageCropper.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ImageCropper.ts rename to src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/Umbraco.ImageCropper.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/manifests.ts index 3cfe798806..2a2b5f688e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/image-cropper/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.ImageCropper.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.ImageCropper', name: 'Image Cropper Property Editor UI', @@ -12,3 +13,5 @@ export const manifest: ManifestPropertyEditorUi = { propertyEditorSchemaAlias: 'Umbraco.ImageCropper', }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/manifests.ts index 68ba518a23..df593bb995 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/manifests.ts @@ -1,6 +1,12 @@ -import { manifest as imageCropper } from './image-cropper/manifests.js'; +import { manifests as imageCropperManifests } from './image-cropper/manifests.js'; import { manifest as imageCropsConfiguration } from './image-crops-configuration/manifests.js'; import { manifest as mediaEntityPicker } from './media-entity-picker/manifests.js'; -import { manifest as mediaPicker } from './media-picker/manifests.js'; +import { manifests as mediaPickerManifests } from './media-picker/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [imageCropper, imageCropsConfiguration, mediaEntityPicker, mediaPicker]; +export const manifests: Array = [ + ...imageCropperManifests, + imageCropsConfiguration, + mediaEntityPicker, + ...mediaPickerManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MediaPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/Umbraco.MediaPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MediaPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/Umbraco.MediaPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/manifests.ts index 56f5c9ca17..8db76a1bcc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-picker/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.MediaPicker.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MediaPicker', name: 'Media Picker Property Editor UI', @@ -12,3 +13,5 @@ export const manifest: ManifestPropertyEditorUi = { group: 'pickers', }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/manifests.ts index 423a1afcc2..a97b720238 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/manifests.ts @@ -2,5 +2,11 @@ import { manifests as entityActionManifests } from './entity-action/manifests.js import { manifests as menuItemManifests } from './menu-item/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...entityActionManifests, ...menuItemManifests, ...repositoryManifests, ...treeManifests]; +export const manifests: Array = [ + ...entityActionManifests, + ...menuItemManifests, + ...repositoryManifests, + ...treeManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/menu-item/manifests.ts index 3c6b76f1eb..dda0653c7f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/menu-item/manifests.ts @@ -1,6 +1,6 @@ import { UMB_MEDIA_MENU_ALIAS } from '../../menu/manifests.js'; import { UMB_MEDIA_RECYCLE_BIN_TREE_ALIAS } from '../tree/index.js'; -import type { ManifestMenuItemTreeKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestMenuItemTreeKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestMenuItemTreeKind = { type: 'menuItem', @@ -16,4 +16,4 @@ const menuItem: ManifestMenuItemTreeKind = { }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/repository/manifests.ts index d645ed6c0e..e5fd1f6832 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_MEDIA_RECYCLE_BIN_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const repository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const repository: ManifestRepository = { api: () => import('./media-recycle-bin.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/tree/manifests.ts index d3557a6293..7c5258a837 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/recycle-bin/tree/manifests.ts @@ -12,6 +12,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const treeRepository: ManifestRepository = { @@ -46,4 +47,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_MEDIA_RECYCLE_BIN_ROOT_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/manifests.ts index 4e1826b900..a8e101b348 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/manifests.ts @@ -1,3 +1,4 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...repositoryManifests]; +export const manifests: Array = [...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/repository/manifests.ts index 76eaf91825..7f26793ec2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/reference/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_REFERENCE_REPOSITORY_ALIAS = 'Umb.Repository.Media.Reference'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./media-reference.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts index 82c5899135..501b0cde0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Media.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./media-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts index 8ab7f42483..931e4737ae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MediaItem'; export const UMB_MEDIA_STORE_ALIAS = 'Umb.Store.MediaItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./media-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/manifests.ts index bcb5010371..898632f79e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/section-view/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionsViews: Array = [ { @@ -21,4 +21,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [...sectionsViews]; +export const manifests: Array = [...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts index 5e3df74993..7770970b54 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/manifests.ts @@ -5,6 +5,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEDIA_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Media.Tree'; @@ -45,4 +46,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_MEDIA_ROOT_ENTITY_TYPE, UMB_MEDIA_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifests]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts index aa0e96e3c8..491acb51b1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts @@ -3,6 +3,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; const workspace: ManifestWorkspaces = { @@ -96,4 +97,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index bf028b581b..e3db616da6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -3,14 +3,10 @@ import { UmbMediaPropertyDataContext } from '../property-dataset-context/media-p import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js'; import { UmbMediaDetailRepository } from '../repository/index.js'; import type { UmbMediaDetailModel, UmbMediaVariantModel, UmbMediaVariantOptionModel } from '../types.js'; -import UmbMediaWorkspaceEditorElement from './media-workspace-editor.element.js'; import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type'; -import type { - UmbCollectionWorkspaceContext, - UmbVariantDatasetWorkspaceContext, -} from '@umbraco-cms/backoffice/workspace'; import { + type UmbCollectionWorkspaceContext, UmbSubmittableWorkspaceContextBase, UmbWorkspaceIsNewRedirectController, UmbWorkspaceRouteManager, @@ -28,13 +24,17 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbRequestReloadTreeItemChildrenEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action'; import type { UmbMediaTypeDetailModel } from '@umbraco-cms/backoffice/media-type'; +import type { UmbContentWorkspaceContext } from '@umbraco-cms/backoffice/content'; type EntityType = UmbMediaDetailModel; export class UmbMediaWorkspaceContext extends UmbSubmittableWorkspaceContextBase - implements UmbVariantDatasetWorkspaceContext, UmbCollectionWorkspaceContext + implements + UmbContentWorkspaceContext, + UmbCollectionWorkspaceContext { - // + public readonly IS_CONTENT_WORKSPACE_CONTEXT = true as const; + public readonly repository = new UmbMediaDetailRepository(this); #parent = new UmbObjectState<{ entityType: string; unique: string | null } | undefined>(undefined); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts index 3981df871d..39e189b167 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/section.manifests.ts @@ -1,5 +1,9 @@ import { UMB_MEDIA_ROOT_ENTITY_TYPE, UMB_MEDIA_MENU_ALIAS } from './media/index.js'; -import type { ManifestSection, ManifestSectionSidebarApp } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestSection, + ManifestSectionSidebarApp, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; const sectionAlias = 'Umb.Section.Media'; @@ -39,4 +43,4 @@ const menuSectionSidebarApp: ManifestSectionSidebarApp = { ], }; -export const manifests = [section, menuSectionSidebarApp]; +export const manifests: Array = [section, menuSectionSidebarApp]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/manifests.ts index f51c138ecb..79492d90a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/manifests.ts @@ -2,11 +2,12 @@ import { manifests as memberGroupManifests } from './member-group/manifests.js'; import { manifests as memberManifests } from './member/manifests.js'; import { manifests as memberSectionManifests } from './member-section/manifests.js'; import { manifests as memberTypeManifests } from './member-type/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import './member/components/index.js'; import './member-group/components/index.js'; -export const manifests = [ +export const manifests: Array = [ ...memberGroupManifests, ...memberManifests, ...memberSectionManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/action/manifests.ts index e315516b2a..84b75324f7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/action/manifests.ts @@ -19,4 +19,4 @@ export const createManifest: ManifestTypes = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/manifests.ts index 56733e513e..12a22aa1af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/manifests.ts @@ -16,7 +16,7 @@ const collectionManifest: ManifestTypes = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/repository/manifests.ts index d5db06bf05..51b93338fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroup.Collection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./member-group-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/views/manifests.ts index bc604d016b..47dd869885 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.MemberGroup.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/member-group-picker-modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/member-group-picker-modal/manifests.ts index 8c57173863..de79bae236 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/member-group-picker-modal/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/components/member-group-picker-modal/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.MemberGroupPicker', diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts index 218658c438..82184df36f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/entity-actions/manifests.ts @@ -19,4 +19,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/manifests.ts index b86b2211b7..b0e74f6012 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/manifests.ts @@ -1,15 +1,18 @@ -import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as entityActionManifests } from './entity-actions/manifests.js'; -import { manifests as workspaceManifests } from './workspace/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; +import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as memberGroupPickerModalManifests } from './components/member-group-picker-modal/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { manifests as sectionViewManifests } from './section-view/manifests.js'; +import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ - ...repositoryManifests, - ...entityActionManifests, - ...workspaceManifests, - ...sectionViewManifests, +export const manifests: Array = [ ...collectionManifests, + ...entityActionManifests, ...memberGroupPickerModalManifests, + ...propertyEditorManifests, + ...repositoryManifests, + ...sectionViewManifests, + ...workspaceManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/manifests.ts new file mode 100644 index 0000000000..80164507d3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as memberGroupPickerManifests } from './member-group-picker/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [...memberGroupPickerManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MemberGroupPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/Umbraco.MemberGroupPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MemberGroupPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/Umbraco.MemberGroupPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts new file mode 100644 index 0000000000..2ec8bcc4f2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as memberGroupSchemaManifest } from './Umbraco.MemberGroupPicker.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.MemberGroupPicker', + name: 'Member Group Picker Property Editor UI', + element: () => import('./property-editor-ui-member-group-picker.element.js'), + meta: { + label: 'Member Group Picker', + propertyEditorSchemaAlias: 'Umbraco.MemberGroupPicker', + icon: 'icon-users-alt', + group: 'people', + }, + }, + memberGroupSchemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-group-picker/property-editor-ui-member-group-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/member-group-picker/property-editor-ui-member-group-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/detail/manifests.ts index 10dc0d3582..9b4935f48f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroup.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./member-group-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/item/manifests.ts index 10af2015c4..e1a931553c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MemberGroupItem'; export const UMB_MEMBER_GROUP_STORE_ALIAS = 'Umb.Store.MemberGroupItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./member-group-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/section-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/section-view/manifests.ts index fbda90d5ae..695f4c15d4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/section-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/section-view/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionsViews: Array = [ { @@ -21,4 +21,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [...sectionsViews]; +export const manifests: Array = [...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts index 7732091c9b..41de3338ba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-group/workspace/manifests.ts @@ -4,6 +4,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_GROUP_WORKSPACE_ALIAS = 'Umb.Workspace.MemberGroup'; @@ -61,4 +62,4 @@ export const workspaceViews: Array = [ }, ]; -export const manifests = [workspace, ...workspaceActions, ...workspaceViews]; +export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-section/manifests.ts index 368ad7f0d3..8ab8879531 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-section/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const section: ManifestSection = { type: 'section', @@ -17,4 +17,4 @@ const section: ManifestSection = { ], }; -export const manifests = [section]; +export const manifests: Array = [section]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/components/input-member-type/input-member-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/components/input-member-type/input-member-type.element.ts index 2fb0425f57..b541cce85d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/components/input-member-type/input-member-type.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/components/input-member-type/input-member-type.element.ts @@ -5,7 +5,6 @@ import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbUniqueItemModel } from '@umbraco-cms/backoffice/models'; - @customElement('umb-input-member-type') export class UmbInputMemberTypeElement extends UUIFormControlMixin(UmbLitElement, '') { /** @@ -111,13 +110,13 @@ export class UmbInputMemberTypeElement extends UUIFormControlMixin(UmbLitElement #renderItems() { if (!this._items) return; return html` - ${repeat( + + ${repeat( this._items, (item) => item.unique, (item) => this.#renderItem(item), - )} + )} + `; } @@ -125,7 +124,7 @@ export class UmbInputMemberTypeElement extends UUIFormControlMixin(UmbLitElement if (this.max === 1 && this.selection.length >= this.max) return; return html` = [ }, ]; -export const manifests = [...entityActions, ...repositoryManifests]; +export const manifests: Array = [...entityActions, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts index 776a4faef5..65b7aa7872 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/duplicate/repository/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DUPLICATE_MEMBER_TYPE_REPOSITORY_ALIAS } from './constants.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const duplicateRepository: ManifestRepository = { type: 'repository', @@ -8,4 +8,4 @@ const duplicateRepository: ManifestRepository = { api: () => import('./member-type-duplicate.repository.js'), }; -export const manifests = [duplicateRepository]; +export const manifests: Array = [duplicateRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts index 6134b6734c..49088f54a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/entity-actions/manifests.ts @@ -32,4 +32,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions, ...duplicateManifests]; +export const manifests: Array = [...entityActions, ...duplicateManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/manifests.ts index baad2b5948..94e6d5fdca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/manifests.ts @@ -3,10 +3,11 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import './components/index.js'; -export const manifests = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/menu/manifests.ts index 53819ffc24..16a3b5e96e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_MEMBER_TYPE_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/manifests.ts index 6e1f2b4f8f..cf89660e34 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./member-type-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/member-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/member-type-detail.server.data-source.ts index aac637749c..118babc5a9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/member-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/detail/member-type-detail.server.data-source.ts @@ -104,7 +104,7 @@ export class UmbMemberTypeServerDataSource implements UmbDetailDataSource import('./member-type-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/tree/manifests.ts index f60b4a0017..6871b5f059 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/tree/manifests.ts @@ -7,6 +7,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_TYPE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Tree'; @@ -45,4 +46,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_MEMBER_TYPE_ROOT_ENTITY_TYPE, UMB_MEMBER_TYPE_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifest]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts index 8acc0d3acd..ac2e37d3da 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/workspace/manifests.ts @@ -2,6 +2,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -59,4 +60,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/action/manifests.ts index f84bbe5029..4ec6cbb922 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/action/manifests.ts @@ -21,4 +21,4 @@ export const createManifest: ManifestTypes = { // element: () => import('./create-member-collection-action.element.js'), }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/manifests.ts index 46fa9d358a..06239362fe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/manifests.ts @@ -17,7 +17,7 @@ const collectionManifest: ManifestTypes = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/manifests.ts index 46afba79f1..1dbcc427b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.Member.Collection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./member-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/manifests.ts index 0176cb049c..386021aaf6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Member.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/manifests.ts index b9fa9c0cb9..4becb56afd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/components/member-picker-modal/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.MemberPicker', diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/manifests.ts index 712696d704..5bd8c3ee26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/entity-actions/manifests.ts @@ -16,4 +16,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/manifests.ts index db74e42f8a..8470189d3f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/manifests.ts @@ -1,15 +1,18 @@ +import { manifests as collectionManifests } from './collection/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; +import { manifests as memberPickerModalManifests } from './components/member-picker-modal/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; -import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as memberPickerModalManifests } from './components/member-picker-modal/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ + ...collectionManifests, ...entityActionManifests, + ...memberPickerModalManifests, + ...propertyEditorManifests, ...repositoryManifests, ...sectionViewManifests, ...workspaceManifests, - ...collectionManifests, - ...memberPickerModalManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/manifests.ts new file mode 100644 index 0000000000..2d598e3fd6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/manifests.ts @@ -0,0 +1,4 @@ +import { manifests as propertyEditorManifests } from './member-picker/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [...propertyEditorManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MemberPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/Umbraco.MemberPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MemberPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/Umbraco.MemberPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/manifests.ts new file mode 100644 index 0000000000..da67731ba6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as memberPickerSchemaManifest } from './Umbraco.MemberPicker.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.MemberPicker', + name: 'Member Picker Property Editor UI', + element: () => import('./property-editor-ui-member-picker.element.js'), + meta: { + label: 'Member Picker', + propertyEditorSchemaAlias: 'Umbraco.MemberPicker', + icon: 'icon-user', + group: 'people', + }, + }, + memberPickerSchemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/member-picker/property-editor-ui-member-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/members/member/property-editor/member-picker/property-editor-ui-member-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/manifests.ts index d53b76c45f..600f9eded3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Member.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./member-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/manifests.ts index bc2eb24e9b..94928c952c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.MemberItem'; export const UMB_MEMBER_STORE_ALIAS = 'Umb.Store.MemberItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./member-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/section-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/section-view/manifests.ts index 2bf2ad02ed..76a0265a51 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/section-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/section-view/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionsViews: Array = [ { @@ -21,4 +21,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [...sectionsViews]; +export const manifests: Array = [...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts index a89a1c4f53..12cd0df619 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts @@ -4,6 +4,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member'; @@ -79,4 +80,4 @@ export const workspaceViews: Array = [ }, ]; -export const manifests = [workspace, ...workspaceActions, ...workspaceViews]; +export const manifests: Array = [workspace, ...workspaceActions, ...workspaceViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member-workspace.context.ts index edee16d6e3..97cbeb3085 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member-workspace.context.ts @@ -3,14 +3,13 @@ import type { UmbMemberDetailModel, UmbMemberVariantModel, UmbMemberVariantOptio import { UmbMemberPropertyDataContext } from '../property-dataset-context/member-property-dataset-context.js'; import { UMB_MEMBER_WORKSPACE_ALIAS } from './manifests.js'; import { UmbMemberWorkspaceEditorElement } from './member-workspace-editor.element.js'; -import { UmbMemberTypeDetailRepository } from '@umbraco-cms/backoffice/member-type'; +import { type UmbMemberTypeDetailModel, UmbMemberTypeDetailRepository } from '@umbraco-cms/backoffice/member-type'; import { UmbSubmittableWorkspaceContextBase, UmbWorkspaceIsNewRedirectController, UmbWorkspaceRouteManager, UmbWorkspaceSplitViewManager, } from '@umbraco-cms/backoffice/workspace'; -import type { UmbRoutableWorkspaceContext, UmbVariantDatasetWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbArrayState, @@ -23,12 +22,15 @@ import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/var import type { UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language'; import { UmbLanguageCollectionRepository } from '@umbraco-cms/backoffice/language'; import type { UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository'; +import type { UmbContentWorkspaceContext } from '@umbraco-cms/backoffice/content'; type EntityType = UmbMemberDetailModel; export class UmbMemberWorkspaceContext extends UmbSubmittableWorkspaceContextBase - implements UmbVariantDatasetWorkspaceContext, UmbRoutableWorkspaceContext + implements UmbContentWorkspaceContext { + public readonly IS_CONTENT_WORKSPACE_CONTEXT = true as const; + public readonly repository = new UmbMemberDetailRepository(this); #persistedData = new UmbObjectState(undefined); diff --git a/src/Umbraco.Web.UI.Client/src/packages/models-builder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/models-builder/manifests.ts index 1c4999452a..aead81d78e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/models-builder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/models-builder/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'dashboard', alias: 'Umb.Dashboard.ModelsBuilder', diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/manifests.ts index 764eb0bdb4..5ca97a1970 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/manifests.ts @@ -2,8 +2,9 @@ import { manifests as repositoryManifests } from './package/repository/manifests import { manifests as packageBuilderManifests } from './package-builder/manifests.js'; import { manifests as packageRepoManifests } from './package-repo/manifests.js'; import { manifests as packageSectionManifests } from './package-section/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...repositoryManifests, ...packageBuilderManifests, ...packageRepoManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/manifests.ts index f6195ff451..d2d5da69af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package-builder/manifests.ts @@ -1,4 +1,5 @@ import type { + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceView, @@ -17,4 +18,4 @@ const workspace: ManifestWorkspace = { const workspaceViews: Array = []; const workspaceActions: Array = []; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/manifests.ts index 6849284193..ca3f976d04 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/manifests.ts @@ -1,4 +1,5 @@ import type { + ManifestTypes, ManifestWorkspace, ManifestWorkspaceActions, ManifestWorkspaceView, @@ -17,4 +18,4 @@ const workspace: ManifestWorkspace = { const workspaceViews: Array = []; const workspaceActions: Array = []; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package-section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package-section/manifests.ts index fb2c6018c7..c90be8450f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package-section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package-section/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSection, ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSection, ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionAlias = 'Umb.Section.Packages'; @@ -76,4 +76,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [section, ...sectionsViews]; +export const manifests: Array = [section, ...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/manifests.ts index 0f2b49d1bc..4825a19fc6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PACKAGE_REPOSITORY_ALIAS = 'Umb.Repository.Package'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./package.store.js'), }; -export const manifests = [store, repository]; +export const manifests: Array = [store, repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.CheckboxList.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/Umbraco.CheckboxList.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.CheckboxList.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/Umbraco.CheckboxList.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/index.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/index.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/index.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/index.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/index.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/input-checkbox-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.element.ts similarity index 90% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/input-checkbox-list.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.element.ts index 3952186dac..55c17a169e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/input-checkbox-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.element.ts @@ -46,15 +46,17 @@ export class UmbInputCheckboxListElement extends UUIFormControlMixin(UmbLitEleme render() { if (!this.list) return nothing; - return html`
- - ${repeat( - this.list, - (item) => item.value, - (item) => this.#renderCheckbox(item), - )} - -
`; + return html` +
+ + ${repeat( + this.list, + (item) => item.value, + (item) => this.#renderCheckbox(item), + )} + +
+ `; } #renderCheckbox(item: (typeof this.list)[0]) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/input-checkbox-list.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/input-checkbox-list/input-checkbox-list.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/manifests.ts new file mode 100644 index 0000000000..d88679601a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/manifests.ts @@ -0,0 +1,28 @@ +import { manifest as schemaManifest } from './Umbraco.CheckboxList.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.CheckBoxList', + name: 'Checkbox List Property Editor UI', + element: () => import('./property-editor-ui-checkbox-list.element.js'), + meta: { + label: 'Checkbox List', + propertyEditorSchemaAlias: 'Umbraco.CheckBoxList', + icon: 'icon-bulleted-list', + group: 'lists', + settings: { + properties: [ + { + alias: 'items', + label: 'Add option', + description: 'Add, remove or sort options for the list.', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', + }, + ], + }, + }, + }, + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.element.ts similarity index 90% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.element.ts index 7f78f66b71..1341fde46e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.element.ts @@ -1,11 +1,11 @@ -import type { UmbInputCheckboxListElement } from './input-checkbox-list/input-checkbox-list.element.js'; +import type { UmbInputCheckboxListElement } from './components/input-checkbox-list/input-checkbox-list.element.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import './input-checkbox-list/input-checkbox-list.element.js'; +import './components/input-checkbox-list/input-checkbox-list.element.js'; /** * @element umb-property-editor-ui-checkbox-list diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/checkbox-list/property-editor-ui-checkbox-list.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/checkbox-list/property-editor-ui-checkbox-list.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ListView.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/Umbraco.ListView.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ListView.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/Umbraco.ListView.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.element.ts similarity index 99% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.element.ts index 9233e7b7d4..d532c1db53 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.element.ts @@ -1,4 +1,4 @@ -import type { UmbCollectionBulkActionPermissions } from '../../../../../collection/types.js'; +import type { UmbCollectionBulkActionPermissions } from '../../../../core/collection/types.js'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { html, customElement, property, css } from '@umbraco-cms/backoffice/external/lit'; import type { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/bulk-action-permissions/permissions.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/bulk-action-permissions/permissions.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/column/column-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/column/column-configuration.element.ts similarity index 81% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/column/column-configuration.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/column/column-configuration.element.ts index 872a98d141..6461bffc66 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/column/column-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/column/column-configuration.element.ts @@ -1,7 +1,8 @@ -import type { UmbCollectionColumnConfiguration } from '../../../../../collection/types.js'; -import { html, customElement, property, repeat, css, state, nothing } from '@umbraco-cms/backoffice/external/lit'; +import type { UmbCollectionColumnConfiguration } from '../../../../core/collection/types.js'; +import { css, customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import type { UmbInputContentTypePropertyElement } from '@umbraco-cms/backoffice/components'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -16,10 +17,27 @@ export class UmbPropertyEditorUICollectionViewColumnConfigurationElement extends UmbLitElement implements UmbPropertyEditorUiElement { - // TODO: [LK] Add sorting. + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => element.id, + getUniqueOfModel: (modelEntry) => modelEntry.alias, + identifier: 'Umb.SorterIdentifier.CollectionViewColumnConfiguration', + itemSelector: '.layout-item', + containerSelector: '#layout-wrapper', + onChange: ({ model }) => { + this.value = model; + this.dispatchEvent(new UmbPropertyValueChangeEvent()); + }, + }); @property({ type: Array }) - value?: Array = []; + public set value(value: Array) { + this.#value = value; + this.#sorter.setModel(value); + } + public get value(): Array { + return this.#value; + } + #value: Array = []; @property({ type: Object, attribute: false }) public config?: UmbPropertyEditorConfigCollection; @@ -38,6 +56,7 @@ export class UmbPropertyEditorUICollectionViewColumnConfigurationElement if (duplicate) { // TODO: Show error to user, can not add duplicate field/column. [LK] + throw new Error('Duplicate field/columns are not allowed.'); return; } @@ -100,7 +119,7 @@ export class UmbPropertyEditorUICollectionViewColumnConfigurationElement #renderColumn(column: UmbCollectionColumnConfiguration) { return html` -
+
(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return this.#getUnique(modelEntry); + }, + identifier: 'Umb.SorterIdentifier.CollectionViewLayouConfiguration', + itemSelector: '.layout-item', + containerSelector: '#layout-wrapper', + onChange: ({ model }) => { + this.value = model; + this.dispatchEvent(new UmbPropertyValueChangeEvent()); + }, + }); @property({ type: Array }) - value?: Array; + public set value(value: Array) { + this.#value = value; + this.#sorter.setModel(value); + } + public get value(): Array { + return this.#value; + } + #value: Array = []; @property({ type: Object, attribute: false }) public config?: UmbPropertyEditorConfigCollection; @@ -51,7 +74,13 @@ export class UmbPropertyEditorUICollectionViewLayoutConfigurationElement #onAdd(event: { target: UmbInputManifestElement }) { const manifest = event.target.value; - // TODO: [LK] Disallow duplicate `collectionView` aliases selections. [LK] + const duplicate = this.value?.find((config) => manifest?.value === config.collectionView); + + if (duplicate) { + // TODO: Show error to user, can not add duplicate `collectionView` aliases. [LK] + throw new Error('Duplicate `collectionView` aliases are not allowed.'); + return; + } this.value = [ ...(this.value ?? []), @@ -98,6 +127,10 @@ export class UmbPropertyEditorUICollectionViewLayoutConfigurationElement return { icon, color: color?.replace('color-', '') }; } + #getUnique(layout: UmbCollectionLayoutConfiguration): string { + return 'x' + simpleHashCode('' + layout.collectionView + layout.name + layout.icon).toString(16); + } + render() { return html`${this.#renderLayouts()} ${this.#renderInput()}`; } @@ -112,19 +145,18 @@ export class UmbPropertyEditorUICollectionViewLayoutConfigurationElement
${repeat( this.value, - (layout, index) => '' + index + layout.name + layout.icon, + (layout) => this.#getUnique(layout), (layout, index) => this.#renderLayout(layout, index), )}
`; } - #renderLayout(layout: UmbCollectionLayoutConfig, index: number) { + #renderLayout(layout: UmbCollectionLayoutConfiguration, index: number) { const icon = this.#parseIcon(layout.icon); const varName = icon.color ? extractUmbColorVariable(icon.color) : undefined; - return html` -
+
this.#onIconChange(icon, index)}> diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/layout-configuration.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/layout-configuration.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/layout-configuration.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/layout-configuration.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/layout-configuration.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/layout-configuration.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/layout-configuration.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/layout-configuration.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/layout/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/layout/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/config/order-by/order-by.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/config/order-by/order-by.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/manifests.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/manifests.ts index a327ffc009..e6dff8848d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/manifests.ts @@ -2,7 +2,8 @@ import { manifest as bulkActionPermissions } from './config/bulk-action-permissi import { manifest as columnConfiguration } from './config/column/manifests.js'; import { manifest as layoutConfiguration } from './config/layout/manifests.js'; import { manifest as orderBy } from './config/order-by/manifests.js'; -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schema } from './Umbraco.ListView.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', @@ -81,4 +82,4 @@ const config: Array = [ orderBy, ]; -export const manifests = [manifest, ...config]; +export const manifests: Array = [manifest, ...config, schema]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.element.ts similarity index 98% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.element.ts index 3990f98bb9..a0ff07cfbc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.element.ts @@ -1,4 +1,4 @@ -import type { UmbPropertyEditorConfigCollection } from '../../config/index.js'; +import type { UmbPropertyEditorConfigCollection } from '../../core/property-editor/config/index.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from '@umbraco-cms/backoffice/document'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/collection-view/property-editor-ui-collection-view.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ColorPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/Umbraco.ColorPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ColorPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/Umbraco.ColorPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/manifests.ts new file mode 100644 index 0000000000..a1b21b70d7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as schemaManifest } from './Umbraco.ColorPicker.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.ColorPicker', + name: 'Color Picker Property Editor UI', + element: () => import('./property-editor-ui-color-picker.element.js'), + meta: { + label: 'Color Picker', + propertyEditorSchemaAlias: 'Umbraco.ColorPicker', + icon: 'icon-colorpicker', + group: 'pickers', + }, + }, + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-picker/property-editor-ui-color-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-picker/property-editor-ui-color-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-swatches-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-swatches-editor/manifests.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-swatches-editor/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-swatches-editor/manifests.ts index 1abb848960..e3a4e27461 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-swatches-editor/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-swatches-editor/manifests.ts @@ -8,6 +8,6 @@ export const manifest: ManifestPropertyEditorUi = { meta: { label: 'Color Swatches Editor', icon: 'icon-page-add', - group: 'Umbraco.DropDown.Flexible', + group: 'pickers', }, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-swatches-editor/property-editor-ui-color-swatches-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/color-swatches-editor/property-editor-ui-color-swatches-editor.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/color-swatches-editor/property-editor-ui-color-swatches-editor.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/color-swatches-editor/property-editor-ui-color-swatches-editor.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.DateTime.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/Umbraco.DateTime.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.DateTime.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/Umbraco.DateTime.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/manifests.ts new file mode 100644 index 0000000000..5943cf80c0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/manifests.ts @@ -0,0 +1,34 @@ +import { manifest as schemaManifest } from './Umbraco.DateTime.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.DatePicker', + name: 'Date Picker Property Editor UI', + element: () => import('./property-editor-ui-date-picker.element.js'), + meta: { + label: 'Date Picker', + propertyEditorSchemaAlias: 'Umbraco.DateTime', + icon: 'icon-time', + group: 'pickers', + settings: { + properties: [ + { + alias: 'format', + label: 'Date format', + description: 'If left empty then the format is YYYY-MM-DD', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.TextBox', + }, + ], + defaultData: [ + { + alias: 'format', + value: 'YYYY-MM-DD HH:mm:ss', + }, + ], + }, + }, + }, + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts similarity index 93% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts index 9912586cf8..12699ce6d0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.element.ts @@ -1,5 +1,5 @@ -import { UmbPropertyValueChangeEvent } from '../../index.js'; -import type { UmbPropertyEditorConfigCollection } from '../../index.js'; +import { UmbPropertyValueChangeEvent } from '../../core/property-editor/index.js'; +import type { UmbPropertyEditorConfigCollection } from '../../core/property-editor/index.js'; import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbInputDateElement } from '@umbraco-cms/backoffice/components'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.test.ts similarity index 94% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.test.ts index 7568a5eaef..ec822f74f1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/date-picker/property-editor-ui-date-picker.test.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/date-picker/property-editor-ui-date-picker.test.ts @@ -1,5 +1,5 @@ import { expect, fixture, html } from '@open-wc/testing'; -import type { UmbInputDateElement } from '../../../components/input-date/input-date.element.js'; +import type { UmbInputDateElement } from '../../core/components/input-date/input-date.element.js'; import { UmbPropertyEditorUIDatePickerElement } from './property-editor-ui-date-picker.element.js'; import { type UmbTestRunnerWindow, defaultA11yConfig } from '@umbraco-cms/internal/test-utils'; import { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Dropdown.Flexible.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/Umbraco.Dropdown.Flexible.ts similarity index 87% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Dropdown.Flexible.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/Umbraco.Dropdown.Flexible.ts index 98d4b1ff7d..b6c8571d8e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Dropdown.Flexible.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/Umbraco.Dropdown.Flexible.ts @@ -1,6 +1,5 @@ import type { ManifestPropertyEditorSchema } from '@umbraco-cms/backoffice/extension-registry'; -// TODO: We won't include momentjs anymore so we need to find a way to handle date formats export const manifest: ManifestPropertyEditorSchema = { type: 'propertyEditorSchema', name: 'Dropdown', diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/manifests.ts new file mode 100644 index 0000000000..6635738b2d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as schemaManifest } from './Umbraco.Dropdown.Flexible.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.Dropdown', + name: 'Dropdown Property Editor UI', + element: () => import('./property-editor-ui-dropdown.element.js'), + meta: { + label: 'Dropdown', + propertyEditorSchemaAlias: 'Umbraco.DropDown.Flexible', + icon: 'icon-list', + group: 'pickers', + }, + }, + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/dropdown/property-editor-ui-dropdown.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/dropdown/property-editor-ui-dropdown.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/entry-point.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/entry-point.ts new file mode 100644 index 0000000000..a6a004ace8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/entry-point.ts @@ -0,0 +1 @@ +import './checkbox-list/components/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ColorPicker.EyeDropper.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/Umbraco.ColorPicker.EyeDropper.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.ColorPicker.EyeDropper.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/Umbraco.ColorPicker.EyeDropper.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/manifests.ts new file mode 100644 index 0000000000..f7f6276a85 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/manifests.ts @@ -0,0 +1,34 @@ +import { manifest as schemaManifest } from './Umbraco.ColorPicker.EyeDropper.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.EyeDropper', + name: 'Eye Dropper Color Picker Property Editor UI', + element: () => import('./property-editor-ui-eye-dropper.element.js'), + meta: { + label: 'Eye Dropper Color Picker', + icon: 'icon-colorpicker', + group: 'pickers', + propertyEditorSchemaAlias: 'Umbraco.ColorPicker.EyeDropper', + settings: { + properties: [ + { + alias: 'showAlpha', + label: 'Show alpha', + description: 'Allow alpha transparency selection.', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', + }, + { + alias: 'showPalette', + label: 'Show palette', + description: 'Show a palette next to the color picker.', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', + }, + ], + }, + }, + }, + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.element.ts similarity index 90% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.element.ts index e73ae03ea6..d99f7a1aee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.element.ts @@ -55,11 +55,13 @@ export class UmbPropertyEditorUIEyeDropperElement extends UmbLitElement implemen } render() { - return html``; + return html` + + `; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/eye-dropper/property-editor-ui-eye-dropper.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/eye-dropper/property-editor-ui-eye-dropper.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.IconPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/Umbraco.IconPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.IconPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/Umbraco.IconPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/manifests.ts similarity index 51% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/manifests.ts index 9b11f5dab5..437d5fb241 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.IconPicker.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.IconPicker', name: 'Icon Picker Property Editor UI', @@ -12,3 +13,5 @@ export const manifest: ManifestPropertyEditorUi = { group: 'common', }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts similarity index 85% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts index 0637256ae5..147fc4a16e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.stories.ts @@ -1,5 +1,5 @@ import type { Meta, Story } from '@storybook/web-components'; -import type { UmbIconPickerModalElement } from '../../../modal/common/icon-picker/icon-picker-modal.element.js'; +import type { UmbIconPickerModalElement } from '../../core/modal/common/icon-picker/icon-picker-modal.element.js'; import { html } from '@umbraco-cms/backoffice/external/lit'; import './property-editor-ui-icon-picker.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/icon-picker/property-editor-ui-icon-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/icon-picker/property-editor-ui-icon-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/index.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/index.ts new file mode 100644 index 0000000000..b0f0268059 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/index.ts @@ -0,0 +1 @@ +export * from './checkbox-list/components/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Label.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/Umbraco.Label.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Label.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/label/Umbraco.Label.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/manifests.ts new file mode 100644 index 0000000000..34341e6edb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as labelSchemaManifest } from './Umbraco.Label.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.Label', + name: 'Label Property Editor UI', + element: () => import('./property-editor-ui-label.element.js'), + meta: { + label: 'Label', + icon: 'icon-readonly', + group: 'pickers', + propertyEditorSchemaAlias: 'Umbraco.Label', + }, + }, + labelSchemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/label/property-editor-ui-label.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/label/property-editor-ui-label.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/manifests.ts new file mode 100644 index 0000000000..7737fe3c94 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/manifests.ts @@ -0,0 +1,52 @@ +import { manifest as colorEditor } from './color-swatches-editor/manifests.js'; +import { manifest as numberRange } from './number-range/manifests.js'; +import { manifest as orderDirection } from './order-direction/manifests.js'; +import { manifest as overlaySize } from './overlay-size/manifests.js'; +import { manifest as select } from './select/manifests.js'; +import { manifest as valueType } from './value-type/manifests.js'; +import { manifests as checkboxListManifests } from './checkbox-list/manifests.js'; +import { manifests as collectionView } from './collection-view/manifests.js'; +import { manifests as colorPickerManifests } from './color-picker/manifests.js'; +import { manifests as datePickerManifests } from './date-picker/manifests.js'; +import { manifests as dropdownManifests } from './dropdown/manifests.js'; +import { manifests as eyeDropperManifests } from './eye-dropper/manifests.js'; +import { manifests as iconPickerManifests } from './icon-picker/manifests.js'; +import { manifests as labelManifests } from './label/manifests.js'; +import { manifests as multipleTextStringManifests } from './multiple-text-string/manifests.js'; +import { manifests as multiUrlPickerManifests } from './multi-url-picker/manifests.js'; +import { manifests as numberManifests } from './number/manifests.js'; +import { manifests as radioButtonListManifests } from './radio-button-list/manifests.js'; +import { manifests as sliderManifests } from './slider/manifests.js'; +import { manifests as textareaManifests } from './textarea/manifests.js'; +import { manifests as textBoxManifests } from './text-box/manifests.js'; +import { manifests as toggleManifests } from './toggle/manifests.js'; +import { manifests as treePickerManifests } from './tree-picker/manifests.js'; +import { manifests as uploadFieldManifests } from './upload-field/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + ...checkboxListManifests, + ...collectionView, + ...colorPickerManifests, + ...datePickerManifests, + ...dropdownManifests, + ...eyeDropperManifests, + ...iconPickerManifests, + ...labelManifests, + ...multipleTextStringManifests, + ...multiUrlPickerManifests, + ...numberManifests, + ...radioButtonListManifests, + ...sliderManifests, + ...textareaManifests, + ...textBoxManifests, + ...toggleManifests, + ...treePickerManifests, + ...uploadFieldManifests, + colorEditor, + numberRange, + orderDirection, + overlaySize, + select, + valueType, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MultiUrlPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/Umbraco.MultiUrlPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.MultiUrlPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/Umbraco.MultiUrlPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/manifests.ts similarity index 72% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/manifests.ts index 3fe3a6b3cf..f82f93e2f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.MultiUrlPicker.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.MultiUrlPicker', name: 'Multi URL Picker Property Editor UI', @@ -28,3 +29,5 @@ export const manifest: ManifestPropertyEditorUi = { }, }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.element.ts new file mode 100644 index 0000000000..9b21b2be37 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.element.ts @@ -0,0 +1,87 @@ +import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; +import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; +import type { UmbInputMultiUrlElement } from '@umbraco-cms/backoffice/components'; +import type { UmbLinkPickerLink } from '@umbraco-cms/backoffice/modal'; +import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui'; + +/** + * @element umb-property-editor-ui-multi-url-picker + */ +@customElement('umb-property-editor-ui-multi-url-picker') +export class UmbPropertyEditorUIMultiUrlPickerElement extends UmbLitElement implements UmbPropertyEditorUiElement { + @property({ type: Array }) + value: Array = []; + + public set config(config: UmbPropertyEditorConfigCollection | undefined) { + if (!config) return; + + this._hideAnchor = config.getValueByAlias('hideAnchor') ?? false; + this._ignoreUserStartNodes = config.getValueByAlias('ignoreUserStartNodes') ?? false; + this._minNumber = Number(config.getValueByAlias('minNumber')) ?? 0; + this._maxNumber = Number(config.getValueByAlias('maxNumber')) ?? Infinity; + this._overlaySize = config.getValueByAlias('overlaySize') ?? 'small'; + } + + @state() + private _overlaySize?: UUIModalSidebarSize; + + @state() + private _hideAnchor?: boolean; + + @state() + private _ignoreUserStartNodes?: boolean; + + @state() + private _minNumber? = 0; + + @state() + private _maxNumber? = Infinity; + + @state() + private _alias?: string; + + @state() + private _variantId?: string; + + constructor() { + super(); + + this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => { + this.observe(context.alias, (alias) => (this._alias = alias)); + this.observe(context.variantId, (variantId) => (this._variantId = variantId?.toString() || 'invariant')); + }); + } + + #onChange(event: CustomEvent & { target: UmbInputMultiUrlElement }) { + this.value = event.target.urls; + this.dispatchEvent(new UmbPropertyValueChangeEvent()); + } + + render() { + return html` + + + `; + } +} + +export default UmbPropertyEditorUIMultiUrlPickerElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-property-editor-ui-multi-url-picker': UmbPropertyEditorUIMultiUrlPickerElement; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multi-url-picker/property-editor-ui-multi-url-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multi-url-picker/property-editor-ui-multi-url-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts new file mode 100644 index 0000000000..11f2755b0b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/Umbraco.MultipleTextString.ts @@ -0,0 +1,38 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorSchema', + name: 'Multiple Text String', + alias: 'Umbraco.MultipleTextstring', + meta: { + defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', + settings: { + properties: [ + { + alias: 'min', + label: 'Minimum', + description: 'Enter the minimum amount of text boxes to be displayed', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', + }, + { + alias: 'max', + label: 'Maximum', + description: 'Enter the maximum amount of text boxes to be displayed, enter 0 for unlimited', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', + }, + ], + defaultData: [ + { + alias: 'min', + value: 0, + }, + { + alias: 'max', + value: 0, + }, + ], + }, + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/manifests.ts new file mode 100644 index 0000000000..6d70c0d66b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/manifests.ts @@ -0,0 +1,19 @@ +import { manifests as schemaManifests } from './Umbraco.MultipleTextString.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.MultipleTextString', + name: 'Multiple Text String Property Editor UI', + element: () => import('./property-editor-ui-multiple-text-string.element.js'), + meta: { + label: 'Multiple Text String', + propertyEditorSchemaAlias: 'Umbraco.MultipleTextstring', + icon: 'icon-ordered-list', + group: 'lists', + supportsReadOnly: true, + }, + }, + ...schemaManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.element.ts similarity index 96% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.element.ts index 24dec4c9af..5cbb4572b2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.element.ts @@ -1,4 +1,4 @@ -import { UmbPropertyValueChangeEvent } from '../../index.js'; +import { UmbPropertyValueChangeEvent } from '../../core/property-editor/index.js'; import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/multiple-text-string/property-editor-ui-multiple-text-string.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/multiple-text-string/property-editor-ui-multiple-text-string.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.element.ts similarity index 91% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.element.ts index 20341c7838..a74c87da8e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.element.ts @@ -1,4 +1,4 @@ -import type { UmbInputNumberRangeElement } from '../../../components/input-number-range/input-number-range.element.js'; +import type { UmbInputNumberRangeElement } from '../../core/components/input-number-range/input-number-range.element.js'; import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @@ -6,7 +6,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { NumberRangeValueType } from '@umbraco-cms/backoffice/models'; -import '../../../components/input-number-range/input-number-range.element.js'; +import '../../core/components/input-number-range/input-number-range.element.js'; import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation'; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number-range/property-editor-ui-number-range.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number-range/property-editor-ui-number-range.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Decimal.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Decimal.ts new file mode 100644 index 0000000000..48cce8a23a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Decimal.ts @@ -0,0 +1,40 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorSchema', + name: 'Decimal', + alias: 'Umbraco.Decimal', + meta: { + defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', + settings: { + properties: [ + { + alias: 'min', + label: 'Minimum', + description: 'Enter the minimum amount of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', + }, + { + alias: 'max', + label: 'Maximum', + description: 'Enter the maximum amount of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', + }, + { + alias: 'step', + label: 'Step size', + description: 'Enter the intervals amount between each step of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Decimal', + config: [ + { + alias: 'step', + value: '0.01', + }, + ], + }, + ], + }, + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Integer.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Integer.ts new file mode 100644 index 0000000000..638934db71 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/Umbraco.Integer.ts @@ -0,0 +1,34 @@ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorSchema', + name: 'Integer', + alias: 'Umbraco.Integer', + meta: { + defaultPropertyEditorUiAlias: 'Umb.PropertyEditorUi.Integer', + settings: { + properties: [ + { + alias: 'min', + label: 'Minimum', + description: 'Enter the minimum amount of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', + }, + { + alias: 'max', + label: 'Maximum', + description: 'Enter the maximum amount of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', + }, + { + alias: 'step', + label: 'Step size', + description: 'Enter the intervals amount between each step of number to be entered', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Number', + }, + ], + }, + }, + }, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/manifests.ts similarity index 82% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number/manifests.ts index 5a52f872ce..430e463ba6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/manifests.ts @@ -1,4 +1,6 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as decimalSchemaManifests } from './Umbraco.Decimal.js'; +import { manifests as integerSchemaManifests } from './Umbraco.Integer.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; // TODO: we don't really want this config value to be changed from the UI. We need a way to handle hidden config properties. const allowDecimalsConfig = { @@ -7,7 +9,7 @@ const allowDecimalsConfig = { propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle', }; -export const manifests: Array = [ +export const manifests: Array = [ { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.Integer', @@ -66,4 +68,6 @@ export const manifests: Array = [ propertyEditorSchemaAlias: 'Umbraco.Integer', }, }, + ...decimalSchemaManifests, + ...integerSchemaManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/property-editor-ui-number.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/property-editor-ui-number.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/property-editor-ui-number.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number/property-editor-ui-number.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/property-editor-ui-number.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/number/property-editor-ui-number.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/number/property-editor-ui-number.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/number/property-editor-ui-number.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/order-direction/property-editor-ui-order-direction.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/order-direction/property-editor-ui-order-direction.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/manifests.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/manifests.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/manifests.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/overlay-size/property-editor-ui-overlay-size.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/overlay-size/property-editor-ui-overlay-size.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.RadioButtonList.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/Umbraco.RadioButtonList.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.RadioButtonList.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/Umbraco.RadioButtonList.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/manifests.ts new file mode 100644 index 0000000000..dff708c132 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as radioButtonListSchemaManifest } from './Umbraco.RadioButtonList.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.RadioButtonList', + name: 'Radio Button List Property Editor UI', + element: () => import('./property-editor-ui-radio-button-list.element.js'), + meta: { + label: 'Radio Button List', + propertyEditorSchemaAlias: 'Umbraco.RadioButtonList', + icon: 'icon-target', + group: 'lists', + }, + }, + radioButtonListSchemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.element.ts similarity index 87% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.element.ts index e5f2f00257..510e3200d8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.element.ts @@ -1,11 +1,11 @@ -import type { UmbInputRadioButtonListElement } from '../../../components/input-radio-button-list/input-radio-button-list.element.js'; +import type { UmbInputRadioButtonListElement } from '../../core/components/input-radio-button-list/input-radio-button-list.element.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; -import '../../../components/input-radio-button-list/input-radio-button-list.element.js'; +import '../../core/components/input-radio-button-list/input-radio-button-list.element.js'; /** * @element umb-property-editor-ui-radio-button-list diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.test.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/radio-button-list/property-editor-ui-radio-button-list.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/property-editors/radio-button-list/property-editor-ui-radio-button-list.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/manifests.ts new file mode 100644 index 0000000000..06657a35e6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/manifests.ts @@ -0,0 +1,22 @@ +import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifest: ManifestPropertyEditorUi = { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.Select', + name: 'Select Property Editor UI', + element: () => import('./property-editor-ui-select.element.js'), + meta: { + label: 'Select', + icon: 'icon-list', + group: 'pickers', + settings: { + properties: [ + { + alias: 'items', + label: 'Add options', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.MultipleTextString', + }, + ], + }, + }, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/property-editor-ui-select.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/property-editor-ui-select.element.ts new file mode 100644 index 0000000000..6397494094 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/select/property-editor-ui-select.element.ts @@ -0,0 +1,42 @@ +import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; +import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; +import type { UUISelectEvent } from '@umbraco-cms/backoffice/external/uui'; + +/** + * @element umb-property-editor-ui-select + */ +@customElement('umb-property-editor-ui-select') +export class UmbPropertyEditorUISelectElement extends UmbLitElement implements UmbPropertyEditorUiElement { + @property() + value?: string = ''; + + @state() + private _list: Array `; @@ -140,7 +139,7 @@ export class UmbInputStaticFileElement extends UUIFormControlMixin(UmbLitElement static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/manifests.ts index 71ccbaf07c..b19a3a55bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/manifests.ts @@ -1,5 +1,6 @@ import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...propertyEditorManifests, ...treeManifests, ...repositoryManifests]; +export const manifests: Array = [...propertyEditorManifests, ...treeManifests, ...repositoryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/property-editors/manifests.ts index 4093448ac6..2f633a65bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/property-editors/manifests.ts @@ -1,3 +1,4 @@ import { manifest as staticFilePickerManifest } from './static-file-picker/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [staticFilePickerManifest]; +export const manifests: Array = [staticFilePickerManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/manifests.ts index 1d44cf8455..c65da39d1f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STATIC_FILE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.StaticFileItem'; export const UMB_STATIC_FILE_STORE_ALIAS = 'Umb.Store.StaticFileItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./static-file-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/manifests.ts index fc315b7739..a9f81fd83b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/static-file/tree/manifests.ts @@ -8,6 +8,7 @@ import type { ManifestTree, ManifestTreeStore, ManifestTreeItem, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STATIC_FILE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.StaticFile.Tree'; @@ -47,4 +48,4 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_STATIC_FILE_ENTITY_TYPE, UMB_STATIC_FILE_ROOT_ENTITY_TYPE, UMB_STATIC_FILE_FOLDER_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem]; +export const manifests: Array = [treeRepository, treeStore, tree, treeItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/manifests.ts index 106d6c4f3c..219e7cafb9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/manifests.ts @@ -1,4 +1,5 @@ import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as propertyEditorManifests } from './property-editors/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...repositoryManifests, ...propertyEditorManifests]; +export const manifests: Array = [...repositoryManifests, ...propertyEditorManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/manifests.ts index 67558a3376..c10fde3613 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/manifests.ts @@ -1,4 +1,4 @@ -import { manifests as tagsUI } from './tags/manifests.js'; +import { manifests as tagsManifests } from './tags/manifests.js'; import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [...tagsUI]; +export const manifests: Array = [...tagsManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Tags.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/Umbraco.Tags.ts similarity index 93% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Tags.ts rename to src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/Umbraco.Tags.ts index 84d55ed002..4281c69c05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.Tags.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/Umbraco.Tags.ts @@ -18,7 +18,7 @@ export const manifest: ManifestPropertyEditorSchema = { alias: 'storageType', label: 'Storage Type', description: '', - propertyEditorUiAlias: 'Umb.PropertyEditorUi.Dropdown', + propertyEditorUiAlias: 'Umb.PropertyEditorUi.Select', config: [ { alias: 'items', diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/manifests.ts index dbab236de1..ab2bb5c9a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/property-editors/tags/manifests.ts @@ -1,16 +1,18 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.Tags.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -const manifest: ManifestPropertyEditorUi = { - type: 'propertyEditorUi', - alias: 'Umb.PropertyEditorUi.Tags', - name: 'Tags Property Editor UI', - element: () => import('./property-editor-ui-tags.element.js'), - meta: { - label: 'Tags', - propertyEditorSchemaAlias: 'Umbraco.Tags', - icon: 'icon-tags', - group: 'common', +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.Tags', + name: 'Tags Property Editor UI', + element: () => import('./property-editor-ui-tags.element.js'), + meta: { + label: 'Tags', + propertyEditorSchemaAlias: 'Umbraco.Tags', + icon: 'icon-tags', + group: 'common', + }, }, -}; - -export const manifests = [manifest]; + schemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/repository/manifests.ts index 2d328c9173..9db24a63b6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TAG_REPOSITORY_ALIAS = 'Umb.Repository.Tags'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./tag.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/components/templating-item-menu/templating-item-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/components/templating-item-menu/templating-item-menu.element.ts index 1e015209d1..e66e13b16d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/components/templating-item-menu/templating-item-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/components/templating-item-menu/templating-item-menu.element.ts @@ -18,6 +18,9 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement { @property() value = ''; + @property({ type: Boolean }) + hidePartialViews = false; + #modalContext?: UmbModalManagerContext; #dictionaryDetailRepository = new UmbDictionaryDetailRepository(this); @@ -58,7 +61,9 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement { } async #openTemplatingItemPickerModal() { - const itemPickerContext = this.#modalContext?.open(this, UMB_TEMPLATING_ITEM_PICKER_MODAL); + const itemPickerContext = this.#modalContext?.open(this, UMB_TEMPLATING_ITEM_PICKER_MODAL, { + data: { hidePartialViews: this.hidePartialViews }, + }); const result = await itemPickerContext?.onSubmit().catch(() => undefined); if (result === undefined) return; @@ -135,12 +140,14 @@ export class UmbTemplatingInsertMenuElement extends UmbLitElement { label=${this.localize.term('template_insertPageField')} title=${this.localize.term('template_insertPageField')} @click=${this.#openPageFieldBuilderModal}> - - + ${!this.hidePartialViews + ? html` + ` + : ''} = [ ...menuManifests, ...templateManifests, ...stylesheetManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/menu.manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/menu.manifests.ts index a353119dea..7bc48cda16 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/menu.manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/menu.manifests.ts @@ -26,4 +26,4 @@ const menuSectionSidebarApp: ManifestTypes = { ], }; -export const manifests = [menu, menuSectionSidebarApp]; +export const manifests: Array = [menu, menuSectionSidebarApp]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-item-picker/templating-item-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-item-picker/templating-item-picker-modal.element.ts index 4bf27aa8af..ab783b027b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-item-picker/templating-item-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/modals/templating-item-picker/templating-item-picker-modal.element.ts @@ -106,18 +106,20 @@ export class UmbTemplatingItemPickerModalElement extends UmbModalBaseElement<

- -

Partial view

-

- - A partial view is a separate template file which can be rendered inside another template, it's great for - reusing markup or for separating complex templates into separate files. - -

-
+ ${!this.data?.hidePartialViews + ? html` +

Partial view

+

+ + A partial view is a separate template file which can be rendered inside another template, it's great for + reusing markup or for separating complex templates into separate files. + +

+
` + : ''} (this._haveDefault = true)}>` : html` (this._default = e.target.value as string)} label=${this.localize.term('templateEditor_defaultValue')}>`} Recursive (this._recursive = e.target.checked)} ?disabled=${this._field ? false : true}> Output sample diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/manifests.ts index beb71e073a..441327ca49 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/manifests.ts @@ -19,4 +19,4 @@ const partialViewActions: Array = [ }, ]; -export const manifests = [...partialViewActions, ...createManifests, ...renameManifests]; +export const manifests: Array = [...partialViewActions, ...createManifests, ...renameManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/manifests.ts index fda692d2f3..4993bc9400 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/manifests.ts @@ -3,8 +3,9 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...repositoryManifests, ...menuManifests, ...treeManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts index 005929ad4d..2f0721081e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_PARTIAL_VIEW_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/item/manifests.ts index 5440d488b0..5fae01fab9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Item'; export const UMB_PARTIAL_VIEW_ITEM_STORE_ALIAS = 'Umb.ItemStore.PartialView'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./partial-view-item.store.js'), }; -export const manifests = [repository, itemStore]; +export const manifests: Array = [repository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/manifests.ts index 60a9c1fe24..7a14a99191 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/manifests.ts @@ -1,5 +1,5 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Detail'; export const UMB_PARTIAL_VIEW_DETAIL_STORE_ALIAS = 'Umb.Store.PartialView.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./partial-view-detail.store.js'), }; -export const manifests = [repository, store, ...itemManifests]; +export const manifests: Array = [repository, store, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/manifests.ts index a040f428e7..0f6d8cf9e6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/folder/manifests.ts @@ -1,6 +1,6 @@ import { UMB_PARTIAL_VIEW_FOLDER_ENTITY_TYPE } from '../../entity.js'; import { UmbPartialViewFolderRepository } from './partial-view-folder.repository.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Folder'; @@ -26,4 +26,4 @@ const entityActions = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/manifests.ts index 2b1531d8f4..0f7c5b6f7f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/tree/manifests.ts @@ -10,6 +10,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_TREE_REPOSITORY_ALIAS = 'Umb.Repository.PartialView.Tree'; @@ -52,7 +53,7 @@ const treeItem: ManifestTreeItem = { ], }; -export const manifests = [ +export const manifests: Array = [ treeRepository, treeStore, tree, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts index e390ab43c0..899870ea51 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/manifests.ts @@ -1,5 +1,9 @@ import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestWorkspaces, ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestWorkspaces, + ManifestWorkspaceActions, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_PARTIAL_VIEW_WORKSPACE_ALIAS = 'Umb.Workspace.PartialView'; @@ -35,4 +39,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace-editor.element.ts index 980775ae3e..47c00a89d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/workspace/partial-view-workspace-editor.element.ts @@ -102,7 +102,7 @@ export class UmbPartialViewWorkspaceEditorElement extends UmbLitElement {
- + = [ }, ]; -export const manifests = [...scriptViewActions, ...createManifests, ...renameManifests]; +export const manifests: Array = [...scriptViewActions, ...createManifests, ...renameManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/manifests.ts index 97aaa29889..03225ea7b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/manifests.ts @@ -3,8 +3,9 @@ import { manifests as menuManifests } from './menu/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...entityActionsManifests, ...menuManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts index ab0304a7dd..39d5a2f33a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/menu/manifests.ts @@ -1,8 +1,9 @@ import { UMB_SCRIPT_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_MENU_ITEM_ALIAS = 'Umb.MenuItem.Script'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/item/manifests.ts index d540832bc9..ba4d0923af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Script.Item'; export const UMB_SCRIPT_ITEM_STORE_ALIAS = 'Umb.ItemStore.Script'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./script-item.store.js'), }; -export const manifests = [repository, itemStore]; +export const manifests: Array = [repository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/manifests.ts index aa5e20d905..9162520cad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/manifests.ts @@ -1,5 +1,5 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Script.Detail'; export const UMB_SCRIPT_DETAIL_STORE_ALIAS = 'Umb.Store.Script.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./script-detail.store.js'), }; -export const manifests = [repository, store, ...itemManifests]; +export const manifests: Array = [repository, store, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/manifests.ts index 6db24d7ad4..73429e942c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/folder/manifests.ts @@ -1,5 +1,5 @@ import { UMB_SCRIPT_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.Script.Folder'; @@ -25,4 +25,4 @@ const entityActions = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/manifests.ts index 02ad1578e4..8083cc2eda 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/tree/manifests.ts @@ -6,6 +6,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Script.Tree'; @@ -44,7 +45,7 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_SCRIPT_ROOT_ENTITY_TYPE, UMB_SCRIPT_ENTITY_TYPE, UMB_SCRIPT_FOLDER_ENTITY_TYPE], }; -export const manifests = [ +export const manifests: Array = [ treeRepository, treeStore, tree, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts index a440205f97..85b2e4cf99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/workspace/manifests.ts @@ -1,6 +1,10 @@ import { UMB_SCRIPT_ENTITY_TYPE } from '../entity.js'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; -import type { ManifestWorkspaces, ManifestWorkspaceActions } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestWorkspaces, + ManifestWorkspaceActions, + ManifestTypes, +} from '@umbraco-cms/backoffice/extension-registry'; export const UMB_SCRIPT_WORKSPACE_ALIAS = 'Umb.Workspace.Script'; export const UMB_SAVE_SCRIPT_WORKSPACE_ACTION_ALIAS = 'Umb.WorkspaceAction.Script.Save'; @@ -37,4 +41,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/manifests.ts index fc795a1da1..18d09f38e9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/manifests.ts @@ -1,3 +1,4 @@ import { manifests as stylesheetRuleInputManifests } from './stylesheet-rule-input/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...stylesheetRuleInputManifests]; +export const manifests: Array = [...stylesheetRuleInputManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-input/stylesheet-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-input/stylesheet-input.element.ts index b1c9d5b9d9..9cd957bd2a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-input/stylesheet-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-input/stylesheet-input.element.ts @@ -108,7 +108,7 @@ export class UmbStylesheetInputElement extends UUIFormControlMixin(UmbLitElement )} this.#pickerContext.openPicker()} label="Add stylesheet"> @@ -130,7 +130,7 @@ export class UmbStylesheetInputElement extends UUIFormControlMixin(UmbLitElement static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/manifests.ts index 82ac401ac1..27b7854e6e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_RULE_SETTINGS_MODAL_ALIAS = 'Umb.Modal.StylesheetRuleSettings'; @@ -9,4 +9,4 @@ const modal: ManifestModal = { element: () => import('./stylesheet-rule-settings-modal.element.js'), }; -export const manifests = [modal]; +export const manifests: Array = [modal]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/stylesheet-rule-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/stylesheet-rule-input.element.ts index 0aebf5c162..3f04921e11 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/stylesheet-rule-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/components/stylesheet-rule-input/stylesheet-rule-input.element.ts @@ -1,15 +1,26 @@ import type { UmbStylesheetRule } from '../../types.js'; import { UMB_STYLESHEET_RULE_SETTINGS_MODAL } from './stylesheet-rule-settings-modal.token.js'; -import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { css, html, customElement, repeat, property } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; - -// TODO: add sorting when we have a generic sorting component/functionality for ref lists +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-stylesheet-rule-input') export class UmbStylesheetRuleInputElement extends UUIFormControlMixin(UmbLitElement, '') { + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => element.id, + getUniqueOfModel: (modelEntry) => modelEntry.name, + identifier: 'Umb.SorterIdentifier.InputStylesheetRule', + itemSelector: 'umb-stylesheet-rule-ref', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.rules = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); + @property({ type: Array, attribute: false }) rules: UmbStylesheetRule[] = []; @@ -57,6 +68,10 @@ export class UmbStylesheetRuleInputElement extends UUIFormControlMixin(UmbLitEle this.dispatchEvent(new UmbChangeEvent()); }; + firstUpdated() { + this.#sorter.setModel(this.rules); + } + render() { return html` @@ -64,16 +79,20 @@ export class UmbStylesheetRuleInputElement extends UUIFormControlMixin(UmbLitEle this.rules, (rule, index) => rule.name + index, (rule, index) => html` - + - this.#editRule(rule, index)} label="Edit ${rule.name}">Edit - this.#removeRule(rule)} label="Remove ${rule.name}">Remove + this.#editRule(rule, index)}> + this.#removeRule(rule)}> `, )} - Add + `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/manifests.ts index 0590231d9c..5a51586721 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/entity-actions/manifests.ts @@ -18,4 +18,4 @@ const stylesheetActions: Array = [ }, ]; -export const manifests = [...stylesheetActions, ...createManifests, ...renameManifests]; +export const manifests: Array = [...stylesheetActions, ...createManifests, ...renameManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/manifests.ts index 28bf047ad6..61cf551469 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/manifests.ts @@ -4,8 +4,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as componentManifests } from './components/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...repositoryManifests, ...menuManifests, ...treeManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts index 2602fcf894..e608184211 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_STYLESHEET_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/item/manifests.ts index 301f2b217e..9708a23351 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Item'; export const UMB_STYLESHEET_ITEM_STORE_ALIAS = 'Umb.ItemStore.Stylesheet'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./stylesheet-item.store.js'), }; -export const manifests = [repository, itemStore]; +export const manifests: Array = [repository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/manifests.ts index d6647376ec..82519d2a73 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/manifests.ts @@ -1,5 +1,5 @@ import { manifests as itemManifests } from './item/manifests.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Detail'; export const UMB_STYLESHEET_DETAIL_STORE_ALIAS = 'Umb.Store.Stylesheet.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./stylesheet-detail.store.js'), }; -export const manifests = [repository, store, ...itemManifests]; +export const manifests: Array = [repository, store, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/folder/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/folder/manifests.ts index dbdd787b0f..9e73b39964 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/folder/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/folder/manifests.ts @@ -1,5 +1,5 @@ import { UMB_STYLESHEET_FOLDER_ENTITY_TYPE } from '../../entity.js'; -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_FOLDER_REPOSITORY_ALIAS = 'Umb.Repository.Stylesheet.Folder'; @@ -25,4 +25,4 @@ const entityActions = [ }, ]; -export const manifests = [folderRepository, ...entityActions]; +export const manifests: Array = [folderRepository, ...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/manifests.ts index be62c05c96..1b7335f0b5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/tree/manifests.ts @@ -10,6 +10,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_STYLESHEET_TREE_ALIAS = 'Umb.Tree.Stylesheet'; @@ -49,7 +50,7 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_STYLESHEET_ROOT_ENTITY_TYPE, UMB_STYLESHEET_ENTITY_TYPE, UMB_STYLESHEET_FOLDER_ENTITY_TYPE], }; -export const manifests = [ +export const manifests: Array = [ treeRepository, treeStore, tree, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts index 55420b0509..559ce530ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/workspace/manifests.ts @@ -2,6 +2,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -77,4 +78,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts index 49326ca55a..9fe2d4c0d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/components/input-template/input-template.element.ts @@ -191,7 +191,7 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, `, )} @@ -207,7 +207,7 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, grid-template-rows: repeat(auto-fill, minmax(160px, 1fr)); } - #add-button { + #btn-add { text-align: center; height: 100%; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts index 28858cdf13..1a2fd784ee 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/entity-actions/manifests.ts @@ -30,4 +30,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts index 8eaf1de363..73e3bc3fed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/manifests.ts @@ -4,8 +4,9 @@ import { manifests as treeManifests } from './tree/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...modalManifests, ...repositoryManifests, ...menuManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/menu/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/menu/manifests.ts index 99a781953f..dbe1dc6b14 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/menu/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/menu/manifests.ts @@ -1,6 +1,7 @@ import { UMB_TEMPLATE_TREE_ALIAS } from '../tree/index.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ { type: 'menuItem', kind: 'tree', diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts index 1896b64a7a..b214269ac4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-filter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-filter.element.ts index f97e6dc5f9..95a1a90cba 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-filter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-filter.element.ts @@ -51,6 +51,7 @@ export class UmbTemplateQueryBuilderFilterElement extends UmbLitElement { #resetFilter() { this.filter = {}; + this.dispatchEvent(new Event('remove-filter')); } #removeOrReset() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts index 6e1973c023..38f66ed7b4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/modals/query-builder/query-builder-modal.element.ts @@ -167,12 +167,19 @@ export default class UmbTemplateQueryBuilderModalElement extends UmbModalBaseEle }; #updateFilters = () => { - this.#updateQueryRequest({ filters: Array.from(this._filterElements)?.map((filter) => filter.filter) ?? [] }); + // Only use the filter from elements that have everything set + const ready = Array.from(this._filterElements)?.filter((element) => element.isFilterValid); + this.#updateQueryRequest({ filters: ready?.map((element) => element.filter) ?? [] }); }; #removeFilter = (event: Event) => { - const target = event.target as UmbTemplateQueryBuilderFilterElement; - this._filterContainer?.removeChild(target); + if (this._filterElements.length > 1) { + const target = event.target as UmbTemplateQueryBuilderFilterElement; + this._filterContainer?.removeChild(target); + if (this._filterElements.length === 1) { + this._filterElements[0].unremovable = true; + } + } this.#updateFilters(); }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/detail/manifests.ts index 1a71f3967a..63b7505c43 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.Template.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./template-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/item/manifests.ts index e8c305d796..a75b5affdc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.TemplateItem'; export const UMB_TEMPLATE_STORE_ALIAS = 'Umb.Store.TemplateItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./template-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/manifests.ts index 6ea6ae74d1..3047377894 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/manifests.ts @@ -1,5 +1,6 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as queryManifests } from './query/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests, ...queryManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests, ...queryManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/manifests.ts index 58d6cda082..76e7c22f39 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/query/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_QUERY_REPOSITORY_ALIAS = 'Umb.Repository.TemplateQuery'; @@ -9,4 +9,4 @@ const queryRepository: ManifestRepository = { api: () => import('./template-query.repository.js'), }; -export const manifests = [queryRepository]; +export const manifests: Array = [queryRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/manifests.ts index a4adb44cab..d43fe8af2b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/tree/manifests.ts @@ -5,6 +5,7 @@ import type { ManifestTree, ManifestTreeItem, ManifestTreeStore, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_TREE_REPOSITORY_ALIAS = 'Umb.Repository.Template.Tree'; @@ -43,4 +44,10 @@ const treeItem: ManifestTreeItem = { forEntityTypes: [UMB_TEMPLATE_ROOT_ENTITY_TYPE, UMB_TEMPLATE_ENTITY_TYPE], }; -export const manifests = [treeRepository, treeStore, tree, treeItem, ...reloadTreeItemChildrenManifest]; +export const manifests: Array = [ + treeRepository, + treeStore, + tree, + treeItem, + ...reloadTreeItemChildrenManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts index 9648fdcc09..a9e9c75bb1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/workspace/manifests.ts @@ -3,6 +3,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_TEMPLATE_WORKSPACE_ALIAS = 'Umb.Workspace.Template'; @@ -42,4 +43,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/manifests.ts index 23c631bd79..7eb27065e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/manifests.ts @@ -1,5 +1,6 @@ import { manifests as propertyEditors } from './property-editors/manifests.js'; import { manifests as plugins } from './plugins/manifests.js'; import { manifests as modalManifests } from './modals/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...propertyEditors, ...plugins, ...modalManifests]; +export const manifests: Array = [...propertyEditors, ...plugins, ...modalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/modals/manifests.ts index 20054110d1..2dbb99237a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/manifests.ts index 0e30b9b8ee..5b8b076095 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/manifests.ts @@ -1,9 +1,9 @@ import { manifest as blockRteTypeManifest } from './block-configuration/manifests.js'; -import { manifest as tinyMceManifest } from './tiny-mce/manifests.js'; -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifests as tinyMceManifest } from './tiny-mce/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests: Array = [ - tinyMceManifest, +export const manifests: Array = [ + ...tinyMceManifest, blockRteTypeManifest, { type: 'propertyEditorUi', diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.ts index 2b83720faf..ea133d1ce2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/stylesheets/property-editor-ui-tiny-mce-stylesheets-configuration.element.ts @@ -17,13 +17,13 @@ export class UmbPropertyEditorUITinyMceStylesheetsConfigurationElement @property({ type: Array }) public set value(value: Array) { if (!value) return; - this._value = value.map((unique) => this.#serverFilePathUniqueSerializer.toUnique(unique)); + this.#value = value.map((unique) => this.#serverFilePathUniqueSerializer.toUnique(unique)); } public get value(): Array { - if (!this._value) return []; - return this._value.map((unique) => this.#serverFilePathUniqueSerializer.toServerPath(unique)) as string[]; + if (!this.#value) return []; + return this.#value.map((unique) => this.#serverFilePathUniqueSerializer.toServerPath(unique)) as string[]; } - private _value: Array = []; + #value: Array = []; @property({ type: Object, attribute: false }) public config?: UmbPropertyEditorConfigCollection; @@ -32,12 +32,12 @@ export class UmbPropertyEditorUITinyMceStylesheetsConfigurationElement #onChange(event: CustomEvent) { const target = event.target as UmbStylesheetInputElement; - this._value = target.selection ?? []; + this.#value = target.selection ?? []; this.dispatchEvent(new UmbPropertyValueChangeEvent()); } render() { - return html``; + return html``; } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.RichText.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/Umbraco.RichText.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.RichText.ts rename to src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/Umbraco.RichText.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts index 4309ae4240..22e185e3c6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/tiny-mce/manifests.ts @@ -1,6 +1,7 @@ -import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry'; +import { manifest as schemaManifest } from './Umbraco.RichText.js'; +import type { ManifestPropertyEditorUi, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifest: ManifestPropertyEditorUi = { +const manifest: ManifestPropertyEditorUi = { type: 'propertyEditorUi', alias: 'Umb.PropertyEditorUi.TinyMCE', name: 'Rich Text Editor Property Editor UI', @@ -241,3 +242,5 @@ export const manifest: ManifestPropertyEditorUi = { }, }, }; + +export const manifests: Array = [manifest, schemaManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/history/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/history/manifests.ts index 491eb883eb..a3a857334a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/history/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/history/manifests.ts @@ -19,4 +19,4 @@ export const userProfileApps: Array = [ api: () => import('./current-user-history.store.js'), }, ]; -export const manifests = [...userProfileApps]; +export const manifests: Array = [...userProfileApps]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/manifests.ts index 4fec1b55f0..9e50cc71c1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/manifests.ts @@ -1,5 +1,5 @@ import { UmbConfigureMfaProvidersApi } from './configure-mfa-providers-action.js'; -import type { ManifestCurrentUserActionDefaultKind } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCurrentUserActionDefaultKind, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const userProfileApps: Array = [ { @@ -21,4 +21,4 @@ export const userProfileApps: Array = [ ], }, ]; -export const manifests = [...userProfileApps]; +export const manifests: Array = [...userProfileApps]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/mfa-providers-current-user-app.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/mfa-providers-current-user-app.element.ts deleted file mode 100644 index f48ab2e4ed..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/mfa-login/mfa-providers-current-user-app.element.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { UMB_CURRENT_USER_MFA_MODAL } from '../modals/current-user-mfa/current-user-mfa-modal.token.js'; -import { html, customElement, state, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal'; -import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; -import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; - -@customElement('umb-mfa-providers-current-user-app') -export class UmbMfaProvidersCurrentUserAppElement extends UmbLitElement { - @state() - _hasProviders = false; - - constructor() { - super(); - this.#init(); - } - - async #init() { - this._hasProviders = (await firstValueFrom(umbExtensionsRegistry.byType('mfaLoginProvider'))).length > 0; - } - - render() { - if (!this._hasProviders) { - return nothing; - } - - return html` - - - Configure Two Factor - - `; - } - - async #onClick() { - const modalManagerContext = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); - await modalManagerContext.open(this, UMB_CURRENT_USER_MFA_MODAL).onSubmit(); - } - - static styles = [UmbTextStyles]; -} - -export default UmbMfaProvidersCurrentUserAppElement; - -declare global { - interface HTMLElementTagNameMap { - 'umb-mfa-providers-current-user-app': UmbMfaProvidersCurrentUserAppElement; - } -} diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa/current-user-mfa-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa/current-user-mfa-modal.element.ts index c2a2f04bd0..ffa32541ae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa/current-user-mfa-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa/current-user-mfa-modal.element.ts @@ -79,9 +79,7 @@ export class UmbCurrentUserMfaModalElement extends UmbLitElement { )}
- - ${this.localize.term('general_close')} - +
`; @@ -98,7 +96,6 @@ export class UmbCurrentUserMfaModalElement extends UmbLitElement { () => html`

This two-factor provider is enabled -

= [ { @@ -27,4 +27,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/manifests.ts index 70cc917a96..748421f410 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/profile/manifests.ts @@ -2,6 +2,7 @@ import { UmbChangePasswordCurrentUserAction } from './change-password-current-us import { UmbEditCurrentUserAction } from './edit-current-user.action.js'; import type { ManifestCurrentUserActionDefaultKind, + ManifestTypes, ManifestUserProfileApp, } from '@umbraco-cms/backoffice/extension-registry'; @@ -52,4 +53,4 @@ const currentUserActions: Array = [ }, ]; -export const manifests = [...userProfileApps, ...currentUserActions]; +export const manifests: Array = [...userProfileApps, ...currentUserActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/repository/manifests.ts index 0a98822fa5..39dce63e91 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/repository/manifests.ts @@ -1,5 +1,5 @@ import { UmbCurrentUserStore } from './current-user.store.js'; -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_CURRENT_USER_REPOSITORY_ALIAS = 'Umb.Repository.CurrentUser'; @@ -17,4 +17,4 @@ const store: ManifestStore = { api: UmbCurrentUserStore, }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/theme/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/theme/manifests.ts index 19c24ea470..7c438b470f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/theme/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/theme/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestUserProfileApp } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestTypes, ManifestUserProfileApp } from '@umbraco-cms/backoffice/extension-registry'; export const userProfileApps: Array = [ { @@ -13,4 +13,4 @@ export const userProfileApps: Array = [ }, }, ]; -export const manifests = [...userProfileApps]; +export const manifests: Array = [...userProfileApps]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/modals/manifests.ts index aa086f1d21..8c373a336e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/action/manifests.ts index 1153828d5c..14a389b199 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/action/manifests.ts @@ -19,4 +19,4 @@ export const createManifest: ManifestTypes = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/manifests.ts index 27480c73b1..f10ca21e4d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/manifests.ts @@ -17,4 +17,9 @@ const collection: ManifestTypes = { }, }; -export const manifests = [collection, ...repositoryManifests, ...collectionViewManifests, ...collectionActionManifests]; +export const manifests: Array = [ + collection, + ...repositoryManifests, + ...collectionViewManifests, + ...collectionActionManifests, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/manifests.ts index a2d7dfe0e0..9589556dc1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_GROUP_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.UserGroupCollection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./user-group-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/views/manifests.ts index f60f868c07..c6bf84ca57 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const tableCollectionView: ManifestCollectionView = { type: 'collectionView', @@ -19,4 +19,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts index 289c946cae..301e72db65 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/components/input-user-group/user-group-input.element.ts @@ -89,16 +89,8 @@ export class UmbUserGroupInputElement extends UUIFormControlMixin(UmbLitElement, () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe( - this.#pickerContext.selection, - (selection) => (this.value = selection.join(',')), - 'umbUserGroupInputSelectionObserver', - ); - this.observe( - this.#pickerContext.selectedItems, - (selectedItems) => (this._items = selectedItems), - 'umbUserGroupInputItemsObserver', - ); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { @@ -108,9 +100,11 @@ export class UmbUserGroupInputElement extends UUIFormControlMixin(UmbLitElement, render() { return html` ${this._items?.map((item) => this._renderItem(item))} - this.#pickerContext.openPicker()} label="open" - >Add + this.#pickerContext.openPicker()} + label=${this.localize.term('general_choose')}> `; } @@ -119,11 +113,10 @@ export class UmbUserGroupInputElement extends UUIFormControlMixin(UmbLitElement, return html` ${item.icon ? html`` : nothing} - - this.#pickerContext.requestRemoveItem(item.unique)} label="Remove ${item.name}" - >Remove + this.#pickerContext.requestRemoveItem(item.unique)} + label=${this.localize.term('general_remove')}> `; @@ -131,7 +124,7 @@ export class UmbUserGroupInputElement extends UUIFormControlMixin(UmbLitElement, static styles = [ css` - #add-button { + #btn-add { width: 100%; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-actions/manifests.ts index a2eaaa30d4..1b8708bbf1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-actions/manifests.ts @@ -16,4 +16,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts index 77ab18e881..78f0e3edfb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts @@ -3,7 +3,7 @@ import { UMB_USER_GROUP_ENTITY_TYPE } from '../entity.js'; import { UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbDeleteUserGroupEntityBulkAction } from './delete/delete.action.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const entityActions: Array = [ { @@ -25,4 +25,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/manifests.ts index 0fd9d7fe94..4a03fbb339 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/manifests.ts @@ -5,8 +5,9 @@ import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionManifests, ...repositoryManifests, ...workspaceManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/modals/manifests.ts index 82fd2b5cba..2d734fbad0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -9,4 +9,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/manifests.ts index 36de9495e1..201f2474f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.UserGroup.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./user-group-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/manifests.ts index 26c3ac0ad1..85b9866a8d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestItemStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_GROUP_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.UserGroupItem'; export const UMB_USER_GROUP_STORE_ALIAS = 'Umb.Store.UserGroupItem'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./user-group-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/manifests.ts index bb35952020..37dcb889ef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests: Array = [...detailManifests, ...itemManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/manifests.ts index 151502777b..92f8f2d0a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/section-view/manifests.ts @@ -1,5 +1,5 @@ import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from '../../user-section/manifests.js'; -import type { ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionsViews: Array = [ { @@ -22,4 +22,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [...sectionsViews]; +export const manifests: Array = [...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts index cae9d05cd7..4a593776bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/manifests.ts @@ -2,6 +2,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; @@ -38,4 +39,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/manifests.ts index 93d3d11fab..885db54ccc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/manifests.ts @@ -1,3 +1,4 @@ import { manifests as userPermissionModalManifests } from './modals/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...userPermissionModalManifests]; +export const manifests: Array = [...userPermissionModalManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts index 152cdbe431..0ae3077bd0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/manifests.ts @@ -1,4 +1,6 @@ -export const manifests = [ +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ { type: 'modal', alias: 'Umb.Modal.EntityUserPermissionSettings', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-section/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-section/manifests.ts index 2a5b10ef93..92bd37242e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-section/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-section/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestSection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_MANAGEMENT_SECTION_ALIAS = 'Umb.Section.Users'; @@ -19,4 +19,4 @@ const section: ManifestSection = { ], }; -export const manifests = [section]; +export const manifests: Array = [section]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts index 262f90e0dd..710031693f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/action/manifests.ts @@ -20,4 +20,4 @@ export const createManifest: ManifestTypes = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/manifests.ts index 5acf18ab0f..ed2494e45b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/manifests.ts @@ -16,7 +16,7 @@ const collectionManifest: ManifestTypes = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/manifests.ts index 4ee4d4728f..772ef263ed 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.UserCollection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./user-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/manifests.ts index f65daedc51..1837436687 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_COLLECTION_VIEW_USER_TABLE = 'Umb.CollectionView.User.Table'; @@ -42,4 +42,4 @@ const gridCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView, gridCollectionView]; +export const manifests: Array = [tableCollectionView, gridCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts index f7918ae903..d8334de70d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-input/user-input.element.ts @@ -1,13 +1,30 @@ import type { UmbUserItemModel } from '../../repository/index.js'; import { UmbUserPickerContext } from './user-input.context.js'; -import { css, html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { css, customElement, html, nothing, property, repeat, state } from '@umbraco-cms/backoffice/external/lit'; import { splitStringToArray } from '@umbraco-cms/backoffice/utils'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UmbSorterController } from '@umbraco-cms/backoffice/sorter'; +import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; +// TODO: Shall we rename to 'umb-input-user'? [LK] @customElement('umb-user-input') export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') { - // TODO: [LK] Add sorting! + #sorter = new UmbSorterController(this, { + getUniqueOfElement: (element) => { + return element.id; + }, + getUniqueOfModel: (modelEntry) => { + return modelEntry; + }, + identifier: 'Umb.SorterIdentifier.InputUser', + itemSelector: 'uui-ref-node-user', + containerSelector: 'uui-ref-list', + onChange: ({ model }) => { + this.selection = model; + this.dispatchEvent(new UmbChangeEvent()); + }, + }); /** * This is a minimum amount of selected items in this input. @@ -55,17 +72,18 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') @property({ type: String, attribute: 'min-message' }) maxMessage = 'This field exceeds the allowed amount of items'; + @property({ type: Array }) + public set selection(uniques: Array) { + this.#pickerContext.setSelection(uniques); + this.#sorter.setModel(uniques); + } public get selection(): Array { return this.#pickerContext.getSelection(); } - public set selection(ids: Array) { - this.#pickerContext.setSelection(ids); - } @property() - public set value(idsString: string) { - // Its with full purpose we don't call super.value, as thats being handled by the observation of the context selection. - this.selection = splitStringToArray(idsString); + public set value(uniques: string) { + this.selection = splitStringToArray(uniques); } public get value(): string { return this.selection.join(','); @@ -91,16 +109,8 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') () => !!this.max && this.#pickerContext.getSelection().length > this.max, ); - this.observe( - this.#pickerContext.selection, - (selection) => (this.value = selection.join(',')), - 'umbUserInputSelectionObserver', - ); - this.observe( - this.#pickerContext.selectedItems, - (selectedItems) => (this._items = selectedItems), - 'umbUserInputItemsObserver', - ); + this.observe(this.#pickerContext.selection, (selection) => (this.value = selection.join(',')), '_observeSelection'); + this.observe(this.#pickerContext.selectedItems, (selectedItems) => (this._items = selectedItems), '_observerItems'); } protected getFormElement() { @@ -111,35 +121,49 @@ export class UmbUserInputElement extends UUIFormControlMixin(UmbLitElement, '') this.#pickerContext.openPicker({}); } + #removeItem(item: UmbUserItemModel) { + this.#pickerContext.requestRemoveItem(item.unique); + } + render() { + return html`${this.#renderItems()} ${this.#renderAddButton()}`; + } + + #renderAddButton() { + if (this.max > 0 && this.selection.length >= this.max) return nothing; return html` - ${this._items?.map((item) => this.#renderItem(item))} - ${this.#renderAddButton()} + + `; + } + + #renderItems() { + if (!this._items) return nothing; + return html` + + ${repeat( + this._items, + (item) => item.unique, + (item) => this.#renderItem(item), + )} + `; } #renderItem(item: UmbUserItemModel) { if (!item.unique) return; return html` - + - this.#pickerContext.requestRemoveItem(item.unique)} - label=${this.localize.term('general_remove')}> + this.#removeItem(item)}> `; } - #renderAddButton() { - if (this.max === 1 && this.selection.length >= this.max) return nothing; - return html``; - } - static styles = [ css` #btn-add { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts index e085874d5e..d1348a4254 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts @@ -3,8 +3,9 @@ import { manifest as userAllowEnableActionManifest } from './user-allow-enable-a import { manifest as userAllowUnlockActionManifest } from './user-allow-unlock-action.condition.js'; import { manifest as userAllowMfaActionManifest } from './user-allow-mfa-action.condition.js'; import { manifest as userAllowDeleteActionManifest } from './user-allow-delete-action.condition.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ userAllowDisableActionManifest, userAllowEnableActionManifest, userAllowUnlockActionManifest, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts index 6e6b8d2f63..38ec8248f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts @@ -111,4 +111,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-bulk-actions/manifests.ts index e06751cb56..5855a236f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-bulk-actions/manifests.ts @@ -4,7 +4,7 @@ import { UmbEnableUserEntityBulkAction } from './enable/enable.action.js'; import { UmbSetGroupUserEntityBulkAction } from './set-group/set-group.action.js'; import { UmbUnlockUserEntityBulkAction } from './unlock/unlock.action.js'; import { UmbDisableUserEntityBulkAction } from './disable/disable.action.js'; -import type { ManifestEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestEntityBulkAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; const entityActions: Array = [ @@ -78,4 +78,4 @@ const entityActions: Array = [ }, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/collection-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/collection-action/manifests.ts index 296eb22ea1..bf3d03ab4c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/collection-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/collection-action/manifests.ts @@ -20,4 +20,4 @@ export const inviteManifest: ManifestTypes = { ], }; -export const manifests = [inviteManifest]; +export const manifests: Array = [inviteManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/manifests.ts index f2b7db505e..e892368a6b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/manifests.ts @@ -25,4 +25,4 @@ const entityActions: Array = [ conditionManifest, ]; -export const manifests = [...entityActions]; +export const manifests: Array = [...entityActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/manifests.ts index d798737db7..63b76f1ec9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/manifests.ts @@ -2,8 +2,9 @@ import { manifests as collectionActionManifests } from './collection-action/mani import { manifests as modalManifests } from './modal/manifests.js'; import { manifests as repositoryManifests } from './repository/manifests.js'; import { manifests as entityActionManifests } from './entity-action/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionActionManifests, ...modalManifests, ...repositoryManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/modal/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/modal/manifests.ts index 7acfa75d84..33053b0d36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/modal/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/modal/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -15,4 +15,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/repository/manifests.ts index 4bb27f2275..9bf092cbca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_INVITE_USER_REPOSITORY_ALIAS = 'Umb.Repository.User.Invite'; const inviteRepository: ManifestRepository = { @@ -8,4 +8,4 @@ const inviteRepository: ManifestRepository = { api: () => import('./invite-user.repository.js'), }; -export const manifests = [inviteRepository]; +export const manifests: Array = [inviteRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts index b49afe5eb4..a5eb9bfeea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts @@ -1,21 +1,24 @@ import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as inviteManifests } from './invite/manifests.js'; -import { manifests as repositoryManifests } from './repository/manifests.js'; -import { manifests as workspaceManifests } from './workspace/manifests.js'; -import { manifests as modalManifests } from './modals/manifests.js'; -import { manifests as sectionViewManifests } from './section-view/manifests.js'; +import { manifests as conditionsManifests } from './conditions/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; -import { manifests as conditionsManifests } from './conditions/manifests.js'; +import { manifests as inviteManifests } from './invite/manifests.js'; +import { manifests as modalManifests } from './modals/manifests.js'; +import { manifests as repositoryManifests } from './repository/manifests.js'; +import { manifests as sectionViewManifests } from './section-view/manifests.js'; +import { manifests as propertyEditorManifests } from './property-editor/manifests.js'; +import { manifests as workspaceManifests } from './workspace/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...collectionManifests, - ...inviteManifests, - ...repositoryManifests, - ...workspaceManifests, - ...modalManifests, - ...sectionViewManifests, + ...conditionsManifests, ...entityActionsManifests, ...entityBulkActionManifests, - ...conditionsManifests, + ...inviteManifests, + ...modalManifests, + ...repositoryManifests, + ...sectionViewManifests, + ...propertyEditorManifests, + ...workspaceManifests, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/manifests.ts index 1489398aeb..bfb4ce9b21 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestModal, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const modals: Array = [ { @@ -27,4 +27,4 @@ const modals: Array = [ }, ]; -export const manifests = [...modals]; +export const manifests: Array = [...modals]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-mfa/user-mfa-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-mfa/user-mfa-modal.element.ts index faa4bdfded..c10e921421 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-mfa/user-mfa-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/modals/user-mfa/user-mfa-modal.element.ts @@ -79,9 +79,7 @@ export class UmbUserMfaModalElement extends UmbLitElement { )}
- - ${this.localize.term('general_close')} - +
`; @@ -98,7 +96,6 @@ export class UmbUserMfaModalElement extends UmbLitElement { () => html`

This two-factor provider is enabled -

= [...userPickerManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.UserPicker.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/Umbraco.UserPicker.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/schemas/Umbraco.UserPicker.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/Umbraco.UserPicker.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/manifests.ts new file mode 100644 index 0000000000..dc0dccaff7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/manifests.ts @@ -0,0 +1,18 @@ +import { manifest as userPickerSchemaManifest } from './Umbraco.UserPicker.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; + +export const manifests: Array = [ + { + type: 'propertyEditorUi', + alias: 'Umb.PropertyEditorUi.UserPicker', + name: 'User Picker Property Editor UI', + element: () => import('./property-editor-ui-user-picker.element.js'), + meta: { + label: 'User Picker', + propertyEditorSchemaAlias: 'Umbraco.UserPicker', + icon: 'icon-user', + group: 'people', + }, + }, + userPickerSchemaManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.element.ts similarity index 90% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.element.ts index 0535b38937..e27942857c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.element.ts @@ -16,9 +16,8 @@ export class UmbPropertyEditorUIUserPickerElement extends UmbLitElement implemen @property({ attribute: false }) public config?: UmbPropertyEditorConfigCollection; - #onChange(event: CustomEvent) { - const element = event.target as UmbUserInputElement; - this.value = element.selection.join(','); + #onChange(event: CustomEvent & { target: UmbUserInputElement }) { + this.value = event.target.selection.join(','); this.dispatchEvent(new UmbPropertyValueChangeEvent()); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.test.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.test.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/user-picker/property-editor-ui-user-picker.test.ts rename to src/Umbraco.Web.UI.Client/src/packages/user/user/property-editor/user-picker/property-editor-ui-user-picker.test.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/avatar/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/avatar/manifests.ts index b45877cafe..ae4aa735fd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/avatar/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/avatar/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_AVATAR_REPOSITORY_ALIAS = 'Umb.Repository.User.Avatar'; @@ -9,4 +9,4 @@ const avatarRepository: ManifestRepository = { api: () => import('./user-avatar.repository.js'), }; -export const manifests = [avatarRepository]; +export const manifests: Array = [avatarRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/change-password/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/change-password/manifests.ts index 15c3f919b7..43bd6665aa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/change-password/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/change-password/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_CHANGE_USER_PASSWORD_REPOSITORY_ALIAS = 'Umb.Repository.User.ChangePassword'; @@ -9,4 +9,4 @@ const changePasswordRepository: ManifestRepository = { api: () => import('./change-user-password.repository.js'), }; -export const manifests = [changePasswordRepository]; +export const manifests: Array = [changePasswordRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/detail/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/detail/manifests.ts index ffb1eb630f..1f7b40d743 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/detail/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/detail/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository, ManifestStore } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestStore, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_DETAIL_REPOSITORY_ALIAS = 'Umb.Repository.User.Detail'; @@ -18,4 +18,4 @@ const store: ManifestStore = { api: () => import('./user-detail.store.js'), }; -export const manifests = [repository, store]; +export const manifests: Array = [repository, store]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/disable/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/disable/manifests.ts index 395a84d06f..885fd52c36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/disable/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/disable/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_DISABLE_USER_REPOSITORY_ALIAS = 'Umb.Repository.User.Disable'; const disableRepository: ManifestRepository = { @@ -8,4 +8,4 @@ const disableRepository: ManifestRepository = { api: () => import('./disable-user.repository.js'), }; -export const manifests = [disableRepository]; +export const manifests: Array = [disableRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/enable/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/enable/manifests.ts index 838d5bb87a..bc0f704f3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/enable/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/enable/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_ENABLE_USER_REPOSITORY_ALIAS = 'Umb.Repository.User.Enable'; const enableRepository: ManifestRepository = { @@ -8,4 +8,4 @@ const enableRepository: ManifestRepository = { api: () => import('./enable-user.repository.js'), }; -export const manifests = [enableRepository]; +export const manifests: Array = [enableRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/manifests.ts index 347ec7d6d1..3e3d05026a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/item/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestItemStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestItemStore, ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.User.Item'; export const UMB_USER_ITEM_STORE_ALIAS = 'Umb.ItemStore.User'; @@ -17,4 +17,4 @@ const itemStore: ManifestItemStore = { api: () => import('./user-item.store.js'), }; -export const manifests = [itemRepository, itemStore]; +export const manifests: Array = [itemRepository, itemStore]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/manifests.ts index 6f2733a311..d85871ebf3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/manifests.ts @@ -5,8 +5,9 @@ import { manifests as disableManifests } from './disable/manifests.js'; import { manifests as enableManifests } from './enable/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; import { manifests as unlockManifests } from './unlock/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [ +export const manifests: Array = [ ...detailManifests, ...itemManifests, ...avatarManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/new-password/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/new-password/manifests.ts index fda676b38e..8f5a1c94ae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/new-password/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/new-password/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_NEW_USER_PASSWORD_REPOSITORY_ALIAS = 'Umb.Repository.User.NewPassword'; @@ -9,4 +9,4 @@ const newPasswordRepository: ManifestRepository = { api: () => import('./new-user-password.repository.js'), }; -export const manifests = [newPasswordRepository]; +export const manifests: Array = [newPasswordRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/unlock/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/unlock/manifests.ts index c2d302b57b..df50e64fd8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/unlock/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/repository/unlock/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_UNLOCK_USER_REPOSITORY_ALIAS = 'Umb.Repository.User.Unlock'; @@ -9,4 +9,4 @@ const unlockRepository: ManifestRepository = { api: () => import('./unlock-user.repository.js'), }; -export const manifests = [unlockRepository]; +export const manifests: Array = [unlockRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/manifests.ts index 3db7ef495c..fa89a3fedd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/section-view/manifests.ts @@ -1,5 +1,5 @@ import { UMB_USER_MANAGEMENT_SECTION_ALIAS } from '../../user-section/manifests.js'; -import type { ManifestSectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestSectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const sectionsViews: Array = [ { @@ -22,4 +22,4 @@ const sectionsViews: Array = [ }, ]; -export const manifests = [...sectionsViews]; +export const manifests: Array = [...sectionsViews]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts index 9e4423458c..6f92fb8546 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/manifests.ts @@ -4,6 +4,7 @@ import type { ManifestWorkspaces, ManifestWorkspaceActions, ManifestWorkspaceView, + ManifestTypes, } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_USER_WORKSPACE_ALIAS = 'Umb.Workspace.User'; @@ -41,4 +42,4 @@ const workspaceActions: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews, ...workspaceActions]; +export const manifests: Array = [workspace, ...workspaceViews, ...workspaceActions]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts index bfaabbb79a..241ef08add 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/action/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionAction } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const createManifest: ManifestCollectionAction = { type: 'collectionAction', @@ -19,4 +19,4 @@ export const createManifest: ManifestCollectionAction = { ], }; -export const manifests = [createManifest]; +export const manifests: Array = [createManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/manifests.ts index 913d773738..ca36d3b996 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/manifests.ts @@ -4,7 +4,7 @@ import { } from './repository/manifests.js'; import { manifests as collectionViewManifests } from './views/manifests.js'; import { manifests as collectionActionManifests } from './action/manifests.js'; -import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollection, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_WEBHOOK_COLLECTION_ALIAS = 'Umb.Collection.Webhook'; @@ -18,7 +18,7 @@ const collectionManifest: ManifestCollection = { }, }; -export const manifests = [ +export const manifests: Array = [ collectionManifest, ...collectionRepositoryManifests, ...collectionViewManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/repository/manifests.ts index 6295051cb7..b5eaca79bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/repository/manifests.ts @@ -1,4 +1,4 @@ -import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_WEBHOOK_COLLECTION_REPOSITORY_ALIAS = 'Umb.Repository.WebhookCollection'; @@ -9,4 +9,4 @@ const repository: ManifestRepository = { api: () => import('./webhook-collection.repository.js'), }; -export const manifests = [repository]; +export const manifests: Array = [repository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/views/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/views/manifests.ts index 2eed3f5374..d03570c014 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/views/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/collection/views/manifests.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; -import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestCollectionView, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; export const UMB_WEBHOOK_TABLE_COLLECTION_VIEW_ALIAS = 'Umb.CollectionView.Webhook.Table'; @@ -21,4 +21,4 @@ const tableCollectionView: ManifestCollectionView = { ], }; -export const manifests = [tableCollectionView]; +export const manifests: Array = [tableCollectionView]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/manifests.ts index f5ebb840c6..1a567bf2b8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/manifests.ts @@ -1,5 +1,6 @@ import { manifests as treeManifests } from './menu-item/manifests.js'; import { manifests as workspaceManifests } from './workspace/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...treeManifests, ...workspaceManifests, ...collectionManifests]; +export const manifests: Array = [...treeManifests, ...workspaceManifests, ...collectionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/menu-item/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/menu-item/manifests.ts index 0d56d596fd..5b5064bb88 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/menu-item/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/menu-item/manifests.ts @@ -1,5 +1,5 @@ import { UMB_WEBHOOK_ENTITY_TYPE } from '../entity.js'; -import type { ManifestMenuItem } from '@umbraco-cms/backoffice/extension-registry'; +import type { ManifestMenuItem, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; const menuItem: ManifestMenuItem = { type: 'menuItem', @@ -14,4 +14,4 @@ const menuItem: ManifestMenuItem = { }, }; -export const manifests = [menuItem]; +export const manifests: Array = [menuItem]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/manifests.ts index 64e980a76e..3bfd7ea8e4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/manifests.ts @@ -1,3 +1,4 @@ import { manifests as webhookManifests } from './webhook/manifests.js'; +import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry'; -export const manifests = [...webhookManifests]; +export const manifests: Array = [...webhookManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/manifests.ts index 3ce206ad1a..6640d60c48 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/workspace/webhook/manifests.ts @@ -1,5 +1,9 @@ import { UMB_WEBHOOK_ENTITY_TYPE, UMB_WEBHOOK_WORKSPACE } from '../../entity.js'; -import type { ManifestWorkspace, ManifestWorkspaceView } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestTypes, + ManifestWorkspace, + ManifestWorkspaceView, +} from '@umbraco-cms/backoffice/extension-registry'; const workspace: ManifestWorkspace = { type: 'workspace', @@ -51,4 +55,4 @@ const workspaceViews: Array = [ }, ]; -export const manifests = [workspace, ...workspaceViews]; +export const manifests: Array = [workspace, ...workspaceViews];