Dependencies: Updates all npm dependencies for Client, Login, and UmbracoExtension (#20386)
* build(deps): bump backoffice dependencies * revert types * build(deps): updates @hey-api/openapi-ts to 0.85.0 and regenerates files on client and template * build(deps): updates all icons + regenerate * build(deps): bumps all login dependencies + regenerate api * chore: runs eslint --fix * chore: runs prettier fix on files * chore: fixes imports
This commit is contained in:
915
src/Umbraco.Web.UI.Client/package-lock.json
generated
915
src/Umbraco.Web.UI.Client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -217,10 +217,10 @@
|
||||
"element-internals-polyfill": "^3.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.28.0",
|
||||
"@eslint/js": "^9.33.0",
|
||||
"@babel/core": "^7.28.4",
|
||||
"@eslint/js": "^9.37.0",
|
||||
"@open-wc/testing": "^4.0.0",
|
||||
"@playwright/test": "^1.54.2",
|
||||
"@playwright/test": "^1.55.1",
|
||||
"@storybook/addon-a11y": "9.0.14",
|
||||
"@storybook/addon-docs": "9.0.14",
|
||||
"@storybook/addon-links": "9.0.14",
|
||||
@@ -233,18 +233,18 @@
|
||||
"@web/test-runner": "^0.20.2",
|
||||
"@web/test-runner-playwright": "^0.11.1",
|
||||
"babel-loader": "^10.0.0",
|
||||
"cross-env": "7.0.3",
|
||||
"cssnano": "^7.1.0",
|
||||
"eslint": "^9.33.0",
|
||||
"cross-env": "10.1.0",
|
||||
"cssnano": "^7.1.1",
|
||||
"eslint": "^9.37.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsdoc": "^50.8.0",
|
||||
"eslint-plugin-jsdoc": "^60.8.2",
|
||||
"eslint-plugin-lit": "^2.1.1",
|
||||
"eslint-plugin-local-rules": "^3.0.2",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-storybook": "9.0.14",
|
||||
"eslint-plugin-wc": "^2.2.1",
|
||||
"globals": "^16.3.0",
|
||||
"eslint-plugin-wc": "^3.0.2",
|
||||
"globals": "^16.4.0",
|
||||
"madge": "^8.0.0",
|
||||
"msw": "^1.3.5",
|
||||
"playwright-msw": "^3.0.1",
|
||||
@@ -255,12 +255,12 @@
|
||||
"storybook": "9.0.14",
|
||||
"tiny-glob": "^0.2.9",
|
||||
"tsc-alias": "^1.8.16",
|
||||
"typedoc": "^0.28.10",
|
||||
"typescript": "5.9.2",
|
||||
"typescript-eslint": "^8.39.1",
|
||||
"typedoc": "^0.28.13",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "^8.45.0",
|
||||
"typescript-json-schema": "^0.65.1",
|
||||
"vite": "^7.1.5",
|
||||
"vite-plugin-static-copy": "^3.1.2",
|
||||
"vite": "^7.1.9",
|
||||
"vite-plugin-static-copy": "^3.1.3",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"web-component-analyzer": "^2.0.0"
|
||||
},
|
||||
|
||||
@@ -2472,8 +2472,7 @@ export default {
|
||||
confirmDeleteBlockTypeNotice:
|
||||
'Indholdet vil stadigt eksistere, men redigering af dette indhold vil ikke\n være muligt. Indholdet vil blive vist som ikke understøttet indhold.\n ',
|
||||
confirmDeleteBlockGroupTitle: 'Slet gruppe?',
|
||||
confirmDeleteBlockGroupMessage:
|
||||
'Er du sikker på at du vil slette gruppen <strong>%0%</strong>?',
|
||||
confirmDeleteBlockGroupMessage: 'Er du sikker på at du vil slette gruppen <strong>%0%</strong>?',
|
||||
confirmDeleteBlockGroupNotice:
|
||||
'Indholdet af gruppens blokke vil stadigt eksistere, men redigering af dette indhold vil ikke\n være muligt. Indholdet vil blive vist som ikke understøttet indhold.\n ',
|
||||
blockConfigurationOverlayTitle: "Konfiguration af '%0%'",
|
||||
|
||||
@@ -2605,8 +2605,7 @@ export default {
|
||||
confirmDeleteBlockTypeNotice:
|
||||
'The content of this block will still be present, editing of this content will no longer be available and will be shown as unsupported content.',
|
||||
confirmDeleteBlockGroupTitle: 'Delete group?',
|
||||
confirmDeleteBlockGroupMessage:
|
||||
'Are you sure you want to delete group <strong>%0%</strong>?',
|
||||
confirmDeleteBlockGroupMessage: 'Are you sure you want to delete group <strong>%0%</strong>?',
|
||||
confirmDeleteBlockGroupNotice:
|
||||
'The content of these Blocks will still be present, editing of this content will no longer be available and will be shown as unsupported content.',
|
||||
blockConfigurationOverlayTitle: "Configuration of '%0%'",
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"build": "vite build"
|
||||
},
|
||||
"dependencies": {
|
||||
"dompurify": "^3.2.5"
|
||||
"dompurify": "^3.2.7"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"build": "vite build"
|
||||
},
|
||||
"dependencies": {
|
||||
"lit": "^3.3.0"
|
||||
"lit": "^3.3.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"build": "vite build"
|
||||
},
|
||||
"dependencies": {
|
||||
"marked": "^15.0.9"
|
||||
"marked": "^16.3.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"build": "vite build"
|
||||
},
|
||||
"dependencies": {
|
||||
"monaco-editor": "^0.52.2"
|
||||
"monaco-editor": "^0.54.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ const distAssets = '../../../dist-cms';
|
||||
rmSync(dist, { recursive: true, force: true });
|
||||
|
||||
// copy fonts
|
||||
cpSync('../../../node_modules/monaco-editor/min/vs/base/browser/ui/codicons', `${distAssets}/assets/fonts`, {
|
||||
cpSync('../../../node_modules/monaco-editor/esm/vs/base/browser/ui/codicons', `${distAssets}/assets/fonts`, {
|
||||
recursive: true,
|
||||
});
|
||||
|
||||
|
||||
@@ -33,7 +33,11 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
|
||||
private _blockTypes?: Array<UmbBlockTypeWithGroupKey>;
|
||||
|
||||
@state()
|
||||
private _blockTypesWithElementName: Array<{ type: UmbBlockTypeWithGroupKey; name: string; icon: string | null | undefined }> = [];
|
||||
private _blockTypesWithElementName: Array<{
|
||||
type: UmbBlockTypeWithGroupKey;
|
||||
name: string;
|
||||
icon: string | null | undefined;
|
||||
}> = [];
|
||||
|
||||
@state()
|
||||
private _blockGroups: Array<UmbBlockGridTypeGroupType> = [];
|
||||
@@ -55,7 +59,11 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
|
||||
}
|
||||
return undefined;
|
||||
})
|
||||
.filter((x) => x !== undefined) as Array<{ type: UmbBlockTypeWithGroupKey; name: string; icon: string | null | undefined }>;
|
||||
.filter((x) => x !== undefined) as Array<{
|
||||
type: UmbBlockTypeWithGroupKey;
|
||||
name: string;
|
||||
icon: string | null | undefined;
|
||||
}>;
|
||||
});
|
||||
|
||||
this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, async (context) => {
|
||||
@@ -193,9 +201,7 @@ export class UmbPropertyEditorUIBlockGridAreaTypePermissionElement
|
||||
this._blockGroups,
|
||||
(group) => group.key,
|
||||
(group) =>
|
||||
html`<uui-combobox-list-option
|
||||
.value=${group.key}
|
||||
?selected=${area.groupKey === group.key}>
|
||||
html`<uui-combobox-list-option .value=${group.key} ?selected=${area.groupKey === group.key}>
|
||||
<umb-icon name="icon-folder"></umb-icon>
|
||||
${group.name}
|
||||
</uui-combobox-list-option>`,
|
||||
|
||||
@@ -14,7 +14,7 @@ export interface UmbElementValueModel<ValueType = unknown> extends UmbPropertyVa
|
||||
/**
|
||||
* @deprecated, we do not use entityType on values anymore. To be removed in Umbraco v.18.
|
||||
* Just remove the property.
|
||||
**/
|
||||
*/
|
||||
entityType?: string;
|
||||
segment: string | null;
|
||||
}
|
||||
|
||||
@@ -392,11 +392,11 @@ export abstract class UmbContentDetailWorkspaceContextBase<
|
||||
this.#segments.setValue(data?.items ?? []);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Call `_processIncomingData` instead. `_scaffoldProcessData` will be removed in v.18.
|
||||
*/
|
||||
/**
|
||||
* @deprecated Call `_processIncomingData` instead. `_scaffoldProcessData` will be removed in v.18.
|
||||
*/
|
||||
protected override _scaffoldProcessData(data: DetailModelType): Promise<DetailModelType> {
|
||||
return this._processIncomingData(data);
|
||||
return this._processIncomingData(data);
|
||||
}
|
||||
|
||||
protected override async _processIncomingData(data: DetailModelType): Promise<DetailModelType> {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
import type { ClientOptions } from './types.gen';
|
||||
import { type Config, type ClientOptions as DefaultClientOptions, createClient, createConfig } from './client';
|
||||
import { type ClientOptions, type Config, createClient, createConfig } from './client';
|
||||
import type { ClientOptions as ClientOptions2 } from './types.gen';
|
||||
|
||||
/**
|
||||
* The `createClientConfig()` function will be called on client initialization
|
||||
@@ -11,8 +11,8 @@ import { type Config, type ClientOptions as DefaultClientOptions, createClient,
|
||||
* `setConfig()`. This is useful for example if you're using Next.js
|
||||
* to ensure your client always has the correct values.
|
||||
*/
|
||||
export type CreateClientConfig<T extends DefaultClientOptions = ClientOptions> = (override?: Config<DefaultClientOptions & T>) => Config<Required<DefaultClientOptions> & T>;
|
||||
export type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;
|
||||
|
||||
export const client = createClient(createConfig<ClientOptions>({
|
||||
export const client = createClient(createConfig<ClientOptions2>({
|
||||
throwOnError: true
|
||||
}));
|
||||
}));
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import { createSseClient } from '../core/serverSentEvents.gen';
|
||||
import type { HttpMethod } from '../core/types.gen';
|
||||
import { getValidRequestBody } from '../core/utils.gen';
|
||||
import type {
|
||||
Client,
|
||||
Config,
|
||||
@@ -60,12 +61,12 @@ export const createClient = (config: Config = {}): Client => {
|
||||
await opts.requestValidator(opts);
|
||||
}
|
||||
|
||||
if (opts.body && opts.bodySerializer) {
|
||||
if (opts.body !== undefined && opts.bodySerializer) {
|
||||
opts.serializedBody = opts.bodySerializer(opts.body);
|
||||
}
|
||||
|
||||
// remove Content-Type header if body is empty to avoid sending invalid requests
|
||||
if (opts.serializedBody === undefined || opts.serializedBody === '') {
|
||||
if (opts.body === undefined || opts.serializedBody === '') {
|
||||
opts.headers.delete('Content-Type');
|
||||
}
|
||||
|
||||
@@ -80,12 +81,12 @@ export const createClient = (config: Config = {}): Client => {
|
||||
const requestInit: ReqInit = {
|
||||
redirect: 'follow',
|
||||
...opts,
|
||||
body: opts.serializedBody,
|
||||
body: getValidRequestBody(opts),
|
||||
};
|
||||
|
||||
let request = new Request(url, requestInit);
|
||||
|
||||
for (const fn of interceptors.request._fns) {
|
||||
for (const fn of interceptors.request.fns) {
|
||||
if (fn) {
|
||||
request = await fn(request, opts);
|
||||
}
|
||||
@@ -96,7 +97,7 @@ export const createClient = (config: Config = {}): Client => {
|
||||
const _fetch = opts.fetch!;
|
||||
let response = await _fetch(request);
|
||||
|
||||
for (const fn of interceptors.response._fns) {
|
||||
for (const fn of interceptors.response.fns) {
|
||||
if (fn) {
|
||||
response = await fn(response, request, opts);
|
||||
}
|
||||
@@ -108,23 +109,41 @@ export const createClient = (config: Config = {}): Client => {
|
||||
};
|
||||
|
||||
if (response.ok) {
|
||||
if (
|
||||
response.status === 204 ||
|
||||
response.headers.get('Content-Length') === '0'
|
||||
) {
|
||||
return opts.responseStyle === 'data'
|
||||
? {}
|
||||
: {
|
||||
data: {},
|
||||
...result,
|
||||
};
|
||||
}
|
||||
|
||||
const parseAs =
|
||||
(opts.parseAs === 'auto'
|
||||
? getParseAs(response.headers.get('Content-Type'))
|
||||
: opts.parseAs) ?? 'json';
|
||||
|
||||
if (
|
||||
response.status === 204 ||
|
||||
response.headers.get('Content-Length') === '0'
|
||||
) {
|
||||
let emptyData: any;
|
||||
switch (parseAs) {
|
||||
case 'arrayBuffer':
|
||||
case 'blob':
|
||||
case 'text':
|
||||
emptyData = await response[parseAs]();
|
||||
break;
|
||||
case 'formData':
|
||||
emptyData = new FormData();
|
||||
break;
|
||||
case 'stream':
|
||||
emptyData = response.body;
|
||||
break;
|
||||
case 'json':
|
||||
default:
|
||||
emptyData = {};
|
||||
break;
|
||||
}
|
||||
return opts.responseStyle === 'data'
|
||||
? emptyData
|
||||
: {
|
||||
data: emptyData,
|
||||
...result,
|
||||
};
|
||||
}
|
||||
|
||||
let data: any;
|
||||
switch (parseAs) {
|
||||
case 'arrayBuffer':
|
||||
@@ -173,7 +192,7 @@ export const createClient = (config: Config = {}): Client => {
|
||||
const error = jsonError ?? textError;
|
||||
let finalError = error;
|
||||
|
||||
for (const fn of interceptors.error._fns) {
|
||||
for (const fn of interceptors.error.fns) {
|
||||
if (fn) {
|
||||
finalError = (await fn(error, response, request, opts)) as string;
|
||||
}
|
||||
@@ -206,6 +225,15 @@ export const createClient = (config: Config = {}): Client => {
|
||||
body: opts.body as BodyInit | null | undefined,
|
||||
headers: opts.headers as unknown as Record<string, string>,
|
||||
method,
|
||||
onRequest: async (url, init) => {
|
||||
let request = new Request(url, init);
|
||||
for (const fn of interceptors.request.fns) {
|
||||
if (fn) {
|
||||
request = await fn(request, opts);
|
||||
}
|
||||
}
|
||||
return request;
|
||||
},
|
||||
url,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ export {
|
||||
urlSearchParamsBodySerializer,
|
||||
} from '../core/bodySerializer.gen';
|
||||
export { buildClientParams } from '../core/params.gen';
|
||||
export { serializeQueryKeyValue } from '../core/queryKeySerializer.gen';
|
||||
export { createClient } from './client.gen';
|
||||
export type {
|
||||
Client,
|
||||
|
||||
@@ -26,7 +26,7 @@ export interface Config<T extends ClientOptions = ClientOptions>
|
||||
*
|
||||
* @default globalThis.fetch
|
||||
*/
|
||||
fetch?: (request: Request) => ReturnType<typeof fetch>;
|
||||
fetch?: typeof fetch;
|
||||
/**
|
||||
* Please don't use the Fetch client for Next.js applications. The `next`
|
||||
* options won't have any effect.
|
||||
|
||||
@@ -183,17 +183,27 @@ export const mergeConfigs = (a: Config, b: Config): Config => {
|
||||
return config;
|
||||
};
|
||||
|
||||
const headersEntries = (headers: Headers): Array<[string, string]> => {
|
||||
const entries: Array<[string, string]> = [];
|
||||
headers.forEach((value, key) => {
|
||||
entries.push([key, value]);
|
||||
});
|
||||
return entries;
|
||||
};
|
||||
|
||||
export const mergeHeaders = (
|
||||
...headers: Array<Required<Config>['headers'] | undefined>
|
||||
): Headers => {
|
||||
const mergedHeaders = new Headers();
|
||||
for (const header of headers) {
|
||||
if (!header || typeof header !== 'object') {
|
||||
if (!header) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const iterator =
|
||||
header instanceof Headers ? header.entries() : Object.entries(header);
|
||||
header instanceof Headers
|
||||
? headersEntries(header)
|
||||
: Object.entries(header);
|
||||
|
||||
for (const [key, value] of iterator) {
|
||||
if (value === null) {
|
||||
@@ -234,67 +244,61 @@ type ResInterceptor<Res, Req, Options> = (
|
||||
) => Res | Promise<Res>;
|
||||
|
||||
class Interceptors<Interceptor> {
|
||||
_fns: (Interceptor | null)[];
|
||||
fns: Array<Interceptor | null> = [];
|
||||
|
||||
constructor() {
|
||||
this._fns = [];
|
||||
clear(): void {
|
||||
this.fns = [];
|
||||
}
|
||||
|
||||
clear() {
|
||||
this._fns = [];
|
||||
eject(id: number | Interceptor): void {
|
||||
const index = this.getInterceptorIndex(id);
|
||||
if (this.fns[index]) {
|
||||
this.fns[index] = null;
|
||||
}
|
||||
}
|
||||
|
||||
exists(id: number | Interceptor): boolean {
|
||||
const index = this.getInterceptorIndex(id);
|
||||
return Boolean(this.fns[index]);
|
||||
}
|
||||
|
||||
getInterceptorIndex(id: number | Interceptor): number {
|
||||
if (typeof id === 'number') {
|
||||
return this._fns[id] ? id : -1;
|
||||
} else {
|
||||
return this._fns.indexOf(id);
|
||||
return this.fns[id] ? id : -1;
|
||||
}
|
||||
}
|
||||
exists(id: number | Interceptor) {
|
||||
const index = this.getInterceptorIndex(id);
|
||||
return !!this._fns[index];
|
||||
return this.fns.indexOf(id);
|
||||
}
|
||||
|
||||
eject(id: number | Interceptor) {
|
||||
update(
|
||||
id: number | Interceptor,
|
||||
fn: Interceptor,
|
||||
): number | Interceptor | false {
|
||||
const index = this.getInterceptorIndex(id);
|
||||
if (this._fns[index]) {
|
||||
this._fns[index] = null;
|
||||
}
|
||||
}
|
||||
|
||||
update(id: number | Interceptor, fn: Interceptor) {
|
||||
const index = this.getInterceptorIndex(id);
|
||||
if (this._fns[index]) {
|
||||
this._fns[index] = fn;
|
||||
if (this.fns[index]) {
|
||||
this.fns[index] = fn;
|
||||
return id;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
use(fn: Interceptor) {
|
||||
this._fns = [...this._fns, fn];
|
||||
return this._fns.length - 1;
|
||||
use(fn: Interceptor): number {
|
||||
this.fns.push(fn);
|
||||
return this.fns.length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
// `createInterceptors()` response, meant for external use as it does not
|
||||
// expose internals
|
||||
export interface Middleware<Req, Res, Err, Options> {
|
||||
error: Pick<
|
||||
Interceptors<ErrInterceptor<Err, Res, Req, Options>>,
|
||||
'eject' | 'use'
|
||||
>;
|
||||
request: Pick<Interceptors<ReqInterceptor<Req, Options>>, 'eject' | 'use'>;
|
||||
response: Pick<
|
||||
Interceptors<ResInterceptor<Res, Req, Options>>,
|
||||
'eject' | 'use'
|
||||
>;
|
||||
error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
|
||||
request: Interceptors<ReqInterceptor<Req, Options>>;
|
||||
response: Interceptors<ResInterceptor<Res, Req, Options>>;
|
||||
}
|
||||
|
||||
// do not add `Middleware` as return type so we can use _fns internally
|
||||
export const createInterceptors = <Req, Res, Err, Options>() => ({
|
||||
export const createInterceptors = <Req, Res, Err, Options>(): Middleware<
|
||||
Req,
|
||||
Res,
|
||||
Err,
|
||||
Options
|
||||
> => ({
|
||||
error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),
|
||||
request: new Interceptors<ReqInterceptor<Req, Options>>(),
|
||||
response: new Interceptors<ResInterceptor<Res, Req, Options>>(),
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
/**
|
||||
* JSON-friendly union that mirrors what Pinia Colada can hash.
|
||||
*/
|
||||
export type JsonValue =
|
||||
| null
|
||||
| string
|
||||
| number
|
||||
| boolean
|
||||
| JsonValue[]
|
||||
| { [key: string]: JsonValue };
|
||||
|
||||
/**
|
||||
* Replacer that converts non-JSON values (bigint, Date, etc.) to safe substitutes.
|
||||
*/
|
||||
export const queryKeyJsonReplacer = (_key: string, value: unknown) => {
|
||||
if (
|
||||
value === undefined ||
|
||||
typeof value === 'function' ||
|
||||
typeof value === 'symbol'
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
if (typeof value === 'bigint') {
|
||||
return value.toString();
|
||||
}
|
||||
if (value instanceof Date) {
|
||||
return value.toISOString();
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Safely stringifies a value and parses it back into a JsonValue.
|
||||
*/
|
||||
export const stringifyToJsonValue = (input: unknown): JsonValue | undefined => {
|
||||
try {
|
||||
const json = JSON.stringify(input, queryKeyJsonReplacer);
|
||||
if (json === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
return JSON.parse(json) as JsonValue;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Detects plain objects (including objects with a null prototype).
|
||||
*/
|
||||
const isPlainObject = (value: unknown): value is Record<string, unknown> => {
|
||||
if (value === null || typeof value !== 'object') {
|
||||
return false;
|
||||
}
|
||||
const prototype = Object.getPrototypeOf(value as object);
|
||||
return prototype === Object.prototype || prototype === null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Turns URLSearchParams into a sorted JSON object for deterministic keys.
|
||||
*/
|
||||
const serializeSearchParams = (params: URLSearchParams): JsonValue => {
|
||||
const entries = Array.from(params.entries()).sort(([a], [b]) =>
|
||||
a.localeCompare(b),
|
||||
);
|
||||
const result: Record<string, JsonValue> = {};
|
||||
|
||||
for (const [key, value] of entries) {
|
||||
const existing = result[key];
|
||||
if (existing === undefined) {
|
||||
result[key] = value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Array.isArray(existing)) {
|
||||
(existing as string[]).push(value);
|
||||
} else {
|
||||
result[key] = [existing, value];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Normalizes any accepted value into a JSON-friendly shape for query keys.
|
||||
*/
|
||||
export const serializeQueryKeyValue = (
|
||||
value: unknown,
|
||||
): JsonValue | undefined => {
|
||||
if (value === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (
|
||||
typeof value === 'string' ||
|
||||
typeof value === 'number' ||
|
||||
typeof value === 'boolean'
|
||||
) {
|
||||
return value;
|
||||
}
|
||||
|
||||
if (
|
||||
value === undefined ||
|
||||
typeof value === 'function' ||
|
||||
typeof value === 'symbol'
|
||||
) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (typeof value === 'bigint') {
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
if (value instanceof Date) {
|
||||
return value.toISOString();
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return stringifyToJsonValue(value);
|
||||
}
|
||||
|
||||
if (
|
||||
typeof URLSearchParams !== 'undefined' &&
|
||||
value instanceof URLSearchParams
|
||||
) {
|
||||
return serializeSearchParams(value);
|
||||
}
|
||||
|
||||
if (isPlainObject(value)) {
|
||||
return stringifyToJsonValue(value);
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
@@ -7,6 +7,17 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<
|
||||
'method'
|
||||
> &
|
||||
Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {
|
||||
/**
|
||||
* Fetch API implementation. You can use this option to provide a custom
|
||||
* fetch instance.
|
||||
*
|
||||
* @default globalThis.fetch
|
||||
*/
|
||||
fetch?: typeof fetch;
|
||||
/**
|
||||
* Implementing clients can call request interceptors inside this hook.
|
||||
*/
|
||||
onRequest?: (url: string, init: RequestInit) => Promise<Request>;
|
||||
/**
|
||||
* Callback invoked when a network or parsing error occurs during streaming.
|
||||
*
|
||||
@@ -24,6 +35,7 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<
|
||||
* @returns Nothing (void).
|
||||
*/
|
||||
onSseEvent?: (event: StreamEvent<TData>) => void;
|
||||
serializedBody?: RequestInit['body'];
|
||||
/**
|
||||
* Default retry delay in milliseconds.
|
||||
*
|
||||
@@ -75,6 +87,7 @@ export type ServerSentEventsResult<
|
||||
};
|
||||
|
||||
export const createSseClient = <TData = unknown>({
|
||||
onRequest,
|
||||
onSseError,
|
||||
onSseEvent,
|
||||
responseTransformer,
|
||||
@@ -112,7 +125,21 @@ export const createSseClient = <TData = unknown>({
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(url, { ...options, headers, signal });
|
||||
const requestInit: RequestInit = {
|
||||
redirect: 'follow',
|
||||
...options,
|
||||
body: options.serializedBody,
|
||||
headers,
|
||||
signal,
|
||||
};
|
||||
let request = new Request(url, requestInit);
|
||||
if (onRequest) {
|
||||
request = await onRequest(url, requestInit);
|
||||
}
|
||||
// fetch must be assigned here, otherwise it would throw the error:
|
||||
// TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
|
||||
const _fetch = options.fetch ?? globalThis.fetch;
|
||||
const response = await _fetch(request);
|
||||
|
||||
if (!response.ok)
|
||||
throw new Error(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
import type { QuerySerializer } from './bodySerializer.gen';
|
||||
import type { BodySerializer, QuerySerializer } from './bodySerializer.gen';
|
||||
import {
|
||||
type ArraySeparatorStyle,
|
||||
serializeArrayParam,
|
||||
@@ -112,3 +112,32 @@ export const getUrl = ({
|
||||
}
|
||||
return url;
|
||||
};
|
||||
|
||||
export function getValidRequestBody(options: {
|
||||
body?: unknown;
|
||||
bodySerializer?: BodySerializer | null;
|
||||
serializedBody?: unknown;
|
||||
}) {
|
||||
const hasBody = options.body !== undefined;
|
||||
const isSerializedBody = hasBody && options.bodySerializer;
|
||||
|
||||
if (isSerializedBody) {
|
||||
if ('serializedBody' in options) {
|
||||
const hasSerializedBody =
|
||||
options.serializedBody !== undefined && options.serializedBody !== '';
|
||||
|
||||
return hasSerializedBody ? options.serializedBody : null;
|
||||
}
|
||||
|
||||
// not all clients implement a serializedBody property (i.e. client-axios)
|
||||
return options.body !== '' ? options.body : null;
|
||||
}
|
||||
|
||||
// plain/text body
|
||||
if (hasBody) {
|
||||
return options.body;
|
||||
}
|
||||
|
||||
// no body was provided
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
export * from './types.gen';
|
||||
export * from './client.gen';
|
||||
export * from './sdk.gen';
|
||||
export * from './sdk.gen';
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,9 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
export type ClientOptions = {
|
||||
baseUrl: `${string}://${string}` | (string & {});
|
||||
};
|
||||
|
||||
export type AllowedDocumentTypeModel = {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -2079,7 +2083,7 @@ export type ProblemDetails = {
|
||||
status?: number | null;
|
||||
detail?: string | null;
|
||||
instance?: string | null;
|
||||
[key: string]: unknown | (string | null) | (string | null) | (number | null) | (string | null) | (string | null) | undefined;
|
||||
[key: string]: unknown | string | null | string | null | number | null | string | null | string | null | undefined;
|
||||
};
|
||||
|
||||
export type ProblemDetailsBuilderModel = {
|
||||
@@ -3073,6 +3077,85 @@ export type WebhookResponseModel = {
|
||||
events: Array<WebhookEventResponseModel>;
|
||||
};
|
||||
|
||||
export type DocumentVariantItemResponseModelWritable = {
|
||||
name: string;
|
||||
culture?: string | null;
|
||||
flags: Array<FlagModel>;
|
||||
state: DocumentVariantStateModel;
|
||||
};
|
||||
|
||||
export type DocumentVariantResponseModelWritable = {
|
||||
culture?: string | null;
|
||||
segment?: string | null;
|
||||
name: string;
|
||||
createDate: string;
|
||||
updateDate: string;
|
||||
state: DocumentVariantStateModel;
|
||||
publishDate?: string | null;
|
||||
scheduledPublishDate?: string | null;
|
||||
scheduledUnpublishDate?: string | null;
|
||||
flags: Array<FlagModel>;
|
||||
};
|
||||
|
||||
export type PackageDefinitionResponseModelWritable = {
|
||||
name: string;
|
||||
contentNodeId?: string | null;
|
||||
contentLoadChildNodes: boolean;
|
||||
mediaIds: Array<string>;
|
||||
mediaLoadChildNodes: boolean;
|
||||
documentTypes: Array<string>;
|
||||
mediaTypes: Array<string>;
|
||||
dataTypes: Array<string>;
|
||||
templates: Array<string>;
|
||||
partialViews: Array<string>;
|
||||
stylesheets: Array<string>;
|
||||
scripts: Array<string>;
|
||||
languages: Array<string>;
|
||||
dictionaryItems: Array<string>;
|
||||
id: string;
|
||||
};
|
||||
|
||||
export type RelationResponseModelWritable = {
|
||||
id: string;
|
||||
relationType: ReferenceByIdModel;
|
||||
};
|
||||
|
||||
export type SearchResultResponseModelWritable = {
|
||||
id: string;
|
||||
score: number;
|
||||
fields: Array<FieldPresentationModel>;
|
||||
};
|
||||
|
||||
export type UpdatePackageRequestModelWritable = {
|
||||
name: string;
|
||||
contentNodeId?: string | null;
|
||||
contentLoadChildNodes: boolean;
|
||||
mediaIds: Array<string>;
|
||||
mediaLoadChildNodes: boolean;
|
||||
documentTypes: Array<string>;
|
||||
mediaTypes: Array<string>;
|
||||
dataTypes: Array<string>;
|
||||
templates: Array<string>;
|
||||
partialViews: Array<string>;
|
||||
stylesheets: Array<string>;
|
||||
scripts: Array<string>;
|
||||
languages: Array<string>;
|
||||
dictionaryItems: Array<string>;
|
||||
};
|
||||
|
||||
export type UpgradeSettingsResponseModelWritable = {
|
||||
currentState: string;
|
||||
newState: string;
|
||||
newVersion: string;
|
||||
oldVersion: string;
|
||||
};
|
||||
|
||||
export type UserInstallRequestModelWritable = {
|
||||
name: string;
|
||||
email: string;
|
||||
password: string;
|
||||
};
|
||||
|
||||
export type GetCultureData = {
|
||||
body?: never;
|
||||
path?: never;
|
||||
@@ -11449,7 +11532,7 @@ export type GetPackageCreatedByIdResponses = {
|
||||
export type GetPackageCreatedByIdResponse = GetPackageCreatedByIdResponses[keyof GetPackageCreatedByIdResponses];
|
||||
|
||||
export type PutPackageCreatedByIdData = {
|
||||
body?: UpdatePackageRequestModel;
|
||||
body?: UpdatePackageRequestModelWritable;
|
||||
path: {
|
||||
id: string;
|
||||
};
|
||||
@@ -16428,7 +16511,3 @@ export type GetWebhookLogsResponses = {
|
||||
};
|
||||
|
||||
export type GetWebhookLogsResponse = GetWebhookLogsResponses[keyof GetWebhookLogsResponses];
|
||||
|
||||
export type ClientOptions = {
|
||||
baseUrl: `${string}://${string}` | (string & {});
|
||||
};
|
||||
@@ -1,8 +1,8 @@
|
||||
import { UmbFormControlMixin } from '../../validation/mixins/index.js';
|
||||
import { customElement, html, property } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
import type { UUISliderEvent } from '@umbraco-cms/backoffice/external/uui';
|
||||
import { UmbFormControlMixin } from '../../validation/mixins/index.js';
|
||||
|
||||
function splitString(value: string | undefined): Partial<[number | undefined, number | undefined]> {
|
||||
const [from, to] = (value ?? ',').split(',');
|
||||
|
||||
@@ -72,7 +72,10 @@ export class UmbMultipleColorPickerItemInputElement extends UUIFormControlMixin(
|
||||
|
||||
// If it's 3-digit, expand it
|
||||
if (hex.length === 3) {
|
||||
hex = hex.split('').map(ch => ch + ch).join('');
|
||||
hex = hex
|
||||
.split('')
|
||||
.map((ch) => ch + ch)
|
||||
.join('');
|
||||
}
|
||||
|
||||
return `#${hex}`;
|
||||
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-chart-no-axes-column" viewBox="0 0 24 24"><path d="M18 20V10M12 20V4M6 20v-6"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-chart-no-axes-column" viewBox="0 0 24 24"><path d="M5 21v-6M12 21V3M19 21V9"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-chart-no-axes-column-increasing" viewBox="0 0 24 24"><path d="M12 20V10M18 20V4M6 20v-4"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-chart-no-axes-column-increasing" viewBox="0 0 24 24"><path d="M5 21v-6M12 21V9M19 21V3"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-text-quote" viewBox="0 0 24 24"><path d="M17 6H3M21 12H8M21 18H8M3 12v6"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-text-quote" viewBox="0 0 24 24"><path d="M17 5H3M21 12H8M21 19H8M3 12v7"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-bug" viewBox="0 0 24 24"><path d="m8 2 1.88 1.88M14.12 3.88 16 2M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"/><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6M12 20v-9"/><path d="M6.53 9C4.6 8.8 3 7.1 3 5M6 13H2M3 21c0-2.1 1.7-3.9 3.8-4M20.97 5c0 2.1-1.6 3.8-3.5 4M22 13h-4M17.2 17c2.1.1 3.8 1.9 3.8 4"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-bug" viewBox="0 0 24 24"><path d="M12 20v-9M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4zM14.12 3.88 16 2"/><path d="M21 21a4 4 0 0 0-3.81-4M21 5a4 4 0 0 1-3.55 3.97M22 13h-4M3 21a4 4 0 0 1 3.81-4M3 5a4 4 0 0 0 3.55 3.97M6 13H2M8 2l1.88 1.88M9 7.13V6a3 3 0 1 1 6 0v1.13"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list" viewBox="0 0 24 24"><path d="M3 12h.01M3 18h.01M3 6h.01M8 12h13M8 18h13M8 6h13"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list" viewBox="0 0 24 24"><path d="M3 5h.01M3 12h.01M3 19h.01M8 5h13M8 12h13M8 19h13"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-sliders-horizontal" viewBox="0 0 24 24"><path d="M21 4h-7M10 4H3M21 12h-9M8 12H3M21 20h-5M12 20H3M14 2v4M8 10v4M16 18v4"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-sliders-horizontal" viewBox="0 0 24 24"><path d="M10 5H3M12 19H3M14 3v4M16 17v4M21 12h-9M21 19h-5M21 5h-7M8 10v4M8 12H3"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-house" viewBox="0 0 24 24"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/><path d="M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-house" viewBox="0 0 24 24"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-indent-increase" viewBox="0 0 24 24"><path d="M21 12H11M21 18H11M21 6H11M3 8l4 4-4 4"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-indent-increase" viewBox="0 0 24 24"><path d="M21 5H11M21 12H11M21 19H11M3 8l4 4-4 4"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-justify" viewBox="0 0 24 24"><path d="M3 12h18M3 18h18M3 6h18"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-justify" viewBox="0 0 24 24"><path d="M3 5h18M3 12h18M3 19h18"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list-ordered" viewBox="0 0 24 24"><path d="M10 12h11M10 18h11M10 6h11M4 10h2M4 6h1v4M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list-ordered" viewBox="0 0 24 24"><path d="M11 5h10M11 12h10M11 19h10M4 4h1v5M4 9h2M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-indent-decrease" viewBox="0 0 24 24"><path d="M21 12H11M21 18H11M21 6H11M7 8l-4 4 4 4"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-indent-decrease" viewBox="0 0 24 24"><path d="M21 5H11M21 12H11M21 19H11M7 8l-4 4 4 4"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list-music" viewBox="0 0 24 24"><path d="M21 15V6M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5M12 12H3M16 6H3M12 18H3"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-list-music" viewBox="0 0 24 24"><path d="M16 5H3M11 12H3M11 19H3M21 16V5"/><circle cx="18" cy="16" r="3"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-center" viewBox="0 0 24 24"><path d="M17 12H7M19 18H5M21 6H3"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-center" viewBox="0 0 24 24"><path d="M21 5H3M17 12H7M19 19H5"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-justify" viewBox="0 0 24 24"><path d="M3 12h18M3 18h18M3 6h18"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-justify" viewBox="0 0 24 24"><path d="M3 5h18M3 12h18M3 19h18"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-left" viewBox="0 0 24 24"><path d="M15 12H3M17 18H3M21 6H3"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-left" viewBox="0 0 24 24"><path d="M21 5H3M15 12H3M17 19H3"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-right" viewBox="0 0 24 24"><path d="M21 12H9M21 18H7M21 6H3"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.75" class="lucide lucide-align-right" viewBox="0 0 24 24"><path d="M21 5H3M21 12H9M21 19H7"/></svg>`;
|
||||
@@ -1 +1 @@
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>X</title><path fill="currentColor" d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"/></svg>`;
|
||||
export default `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>X</title><path fill="currentColor" d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg>`;
|
||||
@@ -9,12 +9,12 @@
|
||||
"dependencies": {
|
||||
"@types/diff": "^7.0.2",
|
||||
"diff": "^7.0.0",
|
||||
"uuid": "^11.1.0",
|
||||
"@hey-api/openapi-ts": "0.81.1"
|
||||
"uuid": "^13.0.0",
|
||||
"@hey-api/openapi-ts": "0.85.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"lucide-static": "^0.542.0",
|
||||
"simple-icons": "^15.13.0",
|
||||
"lucide-static": "^0.544.0",
|
||||
"simple-icons": "^15.16.1",
|
||||
"svgo": "^4.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +136,9 @@ export abstract class UmbTreeItemElementBase<
|
||||
.loading=${this._isLoading}
|
||||
.hasChildren=${this._hasChildren}
|
||||
.showChildren=${this._isOpen}
|
||||
.caretLabel=${this._isOpen ? this.localize.term('visuallyHiddenTexts_collapseChildItems') + ' ' + this._label: this.localize.term('visuallyHiddenTexts_expandChildItems') + ' ' + this._label}
|
||||
.caretLabel=${this._isOpen
|
||||
? this.localize.term('visuallyHiddenTexts_collapseChildItems') + ' ' + this._label
|
||||
: this.localize.term('visuallyHiddenTexts_expandChildItems') + ' ' + this._label}
|
||||
label=${this._label}
|
||||
href="${ifDefined(this._isSelectableContext ? undefined : this._href)}">
|
||||
${this.renderIconContainer()} ${this.renderLabel()} ${this.#renderActions()} ${this.#renderChildItems()}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { UMB_WORKSPACE_CONTEXT } from '../../workspace.context-token.js';
|
||||
import type { UmbWorkspaceContext } from '../../workspace-context.interface.js';
|
||||
import type { ManifestWorkspaceDefaultKind } from './types.js';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import { UmbEntityContext, type UmbEntityUnique } from '@umbraco-cms/backoffice/entity';
|
||||
import { UmbViewContext } from '@umbraco-cms/backoffice/view';
|
||||
import type { ManifestWorkspaceDefaultKind } from './types.js';
|
||||
|
||||
export class UmbDefaultWorkspaceContext extends UmbContextBase implements UmbWorkspaceContext {
|
||||
public workspaceAlias!: string;
|
||||
|
||||
@@ -11,7 +11,7 @@ import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation';
|
||||
|
||||
/**
|
||||
* @internal should only be used in the data type workspace.
|
||||
* @internal
|
||||
*/
|
||||
@customElement('umb-data-type-details-workspace-property-editor-picker')
|
||||
export class UmbDataTypeDetailsWorkspacePropertyEditorPickerElement extends UmbFormControlMixin<
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import { UmbPropertyEditorUICheckboxListElement } from './property-editor-ui-checkbox-list.element.js';
|
||||
import { expect, fixture, html } from '@open-wc/testing';
|
||||
import { type UmbTestRunnerWindow, defaultA11yConfig } from '@umbraco-cms/internal/test-utils';
|
||||
import {
|
||||
setupBasicStringConfig,
|
||||
setupObjectConfig,
|
||||
import {
|
||||
setupBasicStringConfig,
|
||||
setupObjectConfig,
|
||||
setupEmptyConfig,
|
||||
getCheckboxListElement,
|
||||
getCheckboxSelection,
|
||||
verifyMultiSelectValueAndDOM,
|
||||
MULTI_SELECT_TEST_DATA
|
||||
MULTI_SELECT_TEST_DATA,
|
||||
} from '../utils/property-editor-test-utils.js';
|
||||
|
||||
describe('UmbPropertyEditorUICheckboxListElement', () => {
|
||||
@@ -23,14 +23,14 @@ describe('UmbPropertyEditorUICheckboxListElement', () => {
|
||||
const checkboxListInput = getCheckboxListElement(element);
|
||||
const checkboxElements = checkboxListInput?.shadowRoot?.querySelectorAll('uui-checkbox') || [];
|
||||
const checkedValues: string[] = [];
|
||||
|
||||
|
||||
checkboxElements.forEach((checkbox: Element) => {
|
||||
const uuiCheckbox = checkbox as any;
|
||||
if (uuiCheckbox.checked) {
|
||||
checkedValues.push(uuiCheckbox.value);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return checkedValues;
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ describe('UmbPropertyEditorUICheckboxListElement', () => {
|
||||
describe('configuration handling', () => {
|
||||
it('should handle string array configuration', async () => {
|
||||
setupBasicStringConfig(element, ['Option1', 'Option2', 'Option3']);
|
||||
|
||||
|
||||
element.value = ['Option1', 'Option3'];
|
||||
await element.updateComplete;
|
||||
|
||||
@@ -130,7 +130,7 @@ describe('UmbPropertyEditorUICheckboxListElement', () => {
|
||||
|
||||
it('should handle object array configuration', async () => {
|
||||
setupObjectConfig(element);
|
||||
|
||||
|
||||
element.value = ['red', 'blue'];
|
||||
await element.updateComplete;
|
||||
|
||||
@@ -139,7 +139,7 @@ describe('UmbPropertyEditorUICheckboxListElement', () => {
|
||||
|
||||
it('should handle empty configuration gracefully', async () => {
|
||||
setupEmptyConfig(element);
|
||||
|
||||
|
||||
element.value = ['test'];
|
||||
await element.updateComplete;
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { UmbPropertyEditorUIDropdownElement } from './property-editor-ui-dropdown.element.js';
|
||||
import { expect, fixture, html } from '@open-wc/testing';
|
||||
import { type UmbTestRunnerWindow, defaultA11yConfig } from '@umbraco-cms/internal/test-utils';
|
||||
import {
|
||||
setupBasicStringConfig,
|
||||
setupObjectConfig,
|
||||
import {
|
||||
setupBasicStringConfig,
|
||||
setupObjectConfig,
|
||||
setupEmptyConfig,
|
||||
MULTI_SELECT_TEST_DATA
|
||||
MULTI_SELECT_TEST_DATA,
|
||||
} from '../utils/property-editor-test-utils.js';
|
||||
|
||||
describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
@@ -27,19 +27,19 @@ describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
function getLocalSelectedValues() {
|
||||
const dropdownInput = getLocalDropdownInput();
|
||||
const selectElement = getNativeSelectElement();
|
||||
|
||||
|
||||
if (dropdownInput) {
|
||||
// Single mode - the dropdown input value might be a string or comma-separated string
|
||||
const value = dropdownInput.value;
|
||||
if (!value) return [];
|
||||
// Handle both single values and comma-separated values
|
||||
return typeof value === 'string' ? value.split(', ').filter(v => v.length > 0) : [value];
|
||||
return typeof value === 'string' ? value.split(', ').filter((v) => v.length > 0) : [value];
|
||||
} else if (selectElement) {
|
||||
// Multiple mode
|
||||
const selectedOptions = selectElement.selectedOptions;
|
||||
return selectedOptions ? Array.from(selectedOptions).map(option => option.value) : [];
|
||||
return selectedOptions ? Array.from(selectedOptions).map((option) => option.value) : [];
|
||||
}
|
||||
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
return multiple;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
} as any;
|
||||
}
|
||||
|
||||
@@ -193,9 +193,9 @@ describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
return false;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
} as any;
|
||||
|
||||
|
||||
element.value = ['Option1'];
|
||||
await element.updateComplete;
|
||||
|
||||
@@ -209,16 +209,16 @@ describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
return [
|
||||
{ name: 'Red Color', value: 'red' },
|
||||
{ name: 'Green Color', value: 'green' },
|
||||
{ name: 'Blue Color', value: 'blue' }
|
||||
{ name: 'Blue Color', value: 'blue' },
|
||||
];
|
||||
}
|
||||
if (alias === 'multiple') {
|
||||
return false;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
},
|
||||
} as any;
|
||||
|
||||
|
||||
element.value = ['red'];
|
||||
await element.updateComplete;
|
||||
|
||||
@@ -227,9 +227,9 @@ describe('UmbPropertyEditorUIDropdownElement', () => {
|
||||
|
||||
it('should handle empty configuration gracefully', async () => {
|
||||
element.config = {
|
||||
getValueByAlias: () => undefined
|
||||
getValueByAlias: () => undefined,
|
||||
} as any;
|
||||
|
||||
|
||||
element.value = ['test'];
|
||||
await element.updateComplete;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
getSelectElement,
|
||||
getSelectedValue,
|
||||
verifySelectValueAndDOM,
|
||||
SINGLE_SELECT_TEST_DATA
|
||||
SINGLE_SELECT_TEST_DATA,
|
||||
} from '../utils/property-editor-test-utils.js';
|
||||
|
||||
describe('UmbPropertyEditorUISelectElement', () => {
|
||||
@@ -19,8 +19,6 @@ describe('UmbPropertyEditorUISelectElement', () => {
|
||||
element = await fixture(html`<umb-property-editor-ui-select></umb-property-editor-ui-select>`);
|
||||
});
|
||||
|
||||
|
||||
|
||||
it('is defined with its own instance', () => {
|
||||
expect(element).to.be.instanceOf(UmbPropertyEditorUISelectElement);
|
||||
});
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
import type { ManifestMarkedExtension } from './marked-extension.extension.js';
|
||||
|
||||
export const manifests: Array<ManifestMarkedExtension> = [
|
||||
{
|
||||
type: 'markedExtension',
|
||||
alias: 'Umb.MarkedExtension.Ufm',
|
||||
name: 'UFM Marked Extension',
|
||||
api: () => import('./ufm-marked-extension.api.js'),
|
||||
meta: {
|
||||
alias: 'ufm',
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'markedExtension',
|
||||
alias: 'Umb.MarkedExtension.Ufmjs',
|
||||
name: 'UFM JS Marked Extension',
|
||||
api: () => import('./ufmjs-marked-extension.api.js'),
|
||||
meta: {
|
||||
alias: 'ufmjs',
|
||||
},
|
||||
},
|
||||
];
|
||||
import type { ManifestMarkedExtension } from './marked-extension.extension.js';
|
||||
|
||||
export const manifests: Array<ManifestMarkedExtension> = [
|
||||
{
|
||||
type: 'markedExtension',
|
||||
alias: 'Umb.MarkedExtension.Ufm',
|
||||
name: 'UFM Marked Extension',
|
||||
api: () => import('./ufm-marked-extension.api.js'),
|
||||
meta: {
|
||||
alias: 'ufm',
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'markedExtension',
|
||||
alias: 'Umb.MarkedExtension.Ufmjs',
|
||||
name: 'UFM JS Marked Extension',
|
||||
api: () => import('./ufmjs-marked-extension.api.js'),
|
||||
meta: {
|
||||
alias: 'ufmjs',
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user