From c949bf335d3f2479cc86726c2db9026be341c044 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:38:59 +0200 Subject: [PATCH 01/49] build(eslint): replace local rules with naming conventions --- .../enforce-umb-prefix-on-element-name.cjs | 43 --------- ...nsure-relative-import-use-js-extension.cjs | 91 ------------------ .../rules/exported-string-constant-naming.cjs | 54 ----------- .../devops/eslint/rules/umb-class-prefix.cjs | 28 ------ .../eslint-local-rules.cjs | 10 -- src/Umbraco.Web.UI.Client/eslint.config.js | 92 +++++++++++++++++-- 6 files changed, 86 insertions(+), 232 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/enforce-umb-prefix-on-element-name.cjs delete mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs delete mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/exported-string-constant-naming.cjs delete mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/umb-class-prefix.cjs diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/enforce-umb-prefix-on-element-name.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/enforce-umb-prefix-on-element-name.cjs deleted file mode 100644 index e290422e6299..000000000000 --- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/enforce-umb-prefix-on-element-name.cjs +++ /dev/null @@ -1,43 +0,0 @@ -const ALLOWED_PREFIXES = ['umb-', 'ufm-', 'test-', 'example-']; - -/** @type {import('eslint').Rule.RuleModule} */ -module.exports = { - meta: { - type: 'suggestion', - docs: { - description: 'Enforce Custom Element names to start with "umb-".', - category: 'Naming', - recommended: true, - }, - schema: [], - }, - create: function (context) { - return { - CallExpression(node) { - // check if the expression is @customElement decorator - const isCustomElementDecorator = - node.callee.type === 'Identifier' && - node.callee.name === 'customElement' && - node.arguments.length === 1 && - node.arguments[0].type === 'Literal' && - typeof node.arguments[0].value === 'string'; - - if (isCustomElementDecorator) { - const elementName = node.arguments[0].value; - - // check if the element name starts with an allowed prefix: - const isElementNameValid = ALLOWED_PREFIXES.some((prefix) => elementName.startsWith(prefix)); - - if (!isElementNameValid) { - context.report({ - node, - message: 'Custom Element name should start with "umb-" or "ufm-".', - // There is no fixer on purpose because it's not safe to automatically rename the element name. - // Renaming should be done manually with consideration of potential impacts. - }); - } - } - }, - }; - }, -}; diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs deleted file mode 100644 index ee53dab5fcbf..000000000000 --- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs +++ /dev/null @@ -1,91 +0,0 @@ -/** @type {import('eslint').Rule.RuleModule}*/ -module.exports = { - meta: { - type: 'problem', - docs: { - description: 'Ensures relative imports use the ".js" file extension.', - category: 'Best Practices', - recommended: true, - }, - fixable: 'code', - schema: [], - }, - create: (context) => { - function correctImport(value) { - if (value === '.') { - return './index.js'; - } - - if ( - value && - value.startsWith('.') && - !value.endsWith('.js') && - !value.endsWith('.css') && - !value.endsWith('.json') && - !value.endsWith('.svg') && - !value.endsWith('.jpg') && - !value.endsWith('.png') - ) { - return (value.endsWith('/') ? value + 'index' : value) + '.js'; - } - - return null; - } - - return { - ImportDeclaration: (node) => { - const { source } = node; - const { value } = source; - - const fixedValue = correctImport(value); - if (fixedValue) { - context.report({ - node, - message: 'Relative imports should use the ".js" file extension.', - fix: (fixer) => fixer.replaceText(source, `'${fixedValue}'`), - }); - } - }, - ImportExpression: (node) => { - const { source } = node; - const { value } = source; - - const fixedSource = correctImport(value); - if (fixedSource) { - context.report({ - node: source, - message: 'Relative imports should use the ".js" file extension.', - fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), - }); - } - }, - ExportAllDeclaration: (node) => { - const { source } = node; - const { value } = source; - - const fixedSource = correctImport(value); - if (fixedSource) { - context.report({ - node: source, - message: 'Relative exports should use the ".js" file extension.', - fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), - }); - } - }, - ExportNamedDeclaration: (node) => { - const { source } = node; - if (!source) return; - const { value } = source; - - const fixedSource = correctImport(value); - if (fixedSource) { - context.report({ - node: source, - message: 'Relative exports should use the ".js" file extension.', - fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), - }); - } - }, - }; - }, -}; diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/exported-string-constant-naming.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/exported-string-constant-naming.cjs deleted file mode 100644 index 8118a54ab1b9..000000000000 --- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/exported-string-constant-naming.cjs +++ /dev/null @@ -1,54 +0,0 @@ -/** @type {import('eslint').Rule.RuleModule}*/ -module.exports = { - meta: { - type: 'problem', - docs: { - description: - 'Ensure all exported string constants should be in uppercase with words separated by underscores and prefixed with UMB_', - }, - schema: [ - { - type: 'object', - properties: { - excludedFileNames: { - type: 'array', - items: { - type: 'string', - }, - }, - }, - additionalProperties: false, - }, - ], - }, - create: function (context) { - const excludedFileNames = context.options[0]?.excludedFileNames || []; - return { - ExportNamedDeclaration(node) { - const fileName = context.filename; - - if (excludedFileNames.some((excludedFileName) => fileName.includes(excludedFileName))) { - // Skip the rule check for files in the excluded list - return; - } - - if (node.declaration && node.declaration.type === 'VariableDeclaration') { - const declaration = node.declaration.declarations[0]; - const { id, init } = declaration; - - if (id && id.type === 'Identifier' && init && init.type === 'Literal' && typeof init.value === 'string') { - const isValidName = /^[A-Z]+(_[A-Z]+)*$/.test(id.name); - - if (!isValidName || !id.name.startsWith('UMB_')) { - context.report({ - node: id, - message: - 'Exported string constant should be in uppercase with words separated by underscores and prefixed with UMB_', - }); - } - } - } - }, - }; - }, -}; diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/umb-class-prefix.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/umb-class-prefix.cjs deleted file mode 100644 index 7856aec4606f..000000000000 --- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/umb-class-prefix.cjs +++ /dev/null @@ -1,28 +0,0 @@ -const ALLOWED_PREFIXES = ['Umb', 'Example']; - -/** @type {import('eslint').Rule.RuleModule} */ -module.exports = { - meta: { - type: 'problem', - docs: { - description: 'Ensure that all class declarations are prefixed with "Umb"', - category: 'Best Practices', - recommended: true, - }, - schema: [], - }, - create: function (context) { - function checkClassName(node) { - if (node.id && node.id.name && !ALLOWED_PREFIXES.some((prefix) => node.id.name.startsWith(prefix))) { - context.report({ - node: node.id, - message: `Class declaration should be prefixed with one of the following prefixes: ${ALLOWED_PREFIXES.join(', ')}`, - }); - } - } - - return { - ClassDeclaration: checkClassName, - }; - }, -}; diff --git a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs index ed3c3364ff81..8408bf20df59 100644 --- a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs +++ b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs @@ -1,27 +1,17 @@ 'use strict'; -const badTypeImportRule = require('./devops/eslint/rules/bad-type-import.cjs'); const enforceElementSuffixOnElementClassNameRule = require('./devops/eslint/rules/enforce-element-suffix-on-element-class-name.cjs'); -const enforceUmbPrefixOnElementNameRule = require('./devops/eslint/rules/enforce-umb-prefix-on-element-name.cjs'); const enforceUmbracoExternalImportsRule = require('./devops/eslint/rules/enforce-umbraco-external-imports.cjs'); -const ensureRelativeImportUseJsExtensionRule = require('./devops/eslint/rules/ensure-relative-import-use-js-extension.cjs'); -const exportedStringConstantNaming = require('./devops/eslint/rules/exported-string-constant-naming.cjs'); const noDirectApiImportRule = require('./devops/eslint/rules/no-direct-api-import.cjs'); const preferImportAliasesRule = require('./devops/eslint/rules/prefer-import-aliases.cjs'); const preferStaticStylesLastRule = require('./devops/eslint/rules/prefer-static-styles-last.cjs'); -const umbClassPrefixRule = require('./devops/eslint/rules/umb-class-prefix.cjs'); const noRelativeImportToImportMapModule = require('./devops/eslint/rules/no-relative-import-to-import-map-module.cjs'); module.exports = { - 'bad-type-import': badTypeImportRule, 'enforce-element-suffix-on-element-class-name': enforceElementSuffixOnElementClassNameRule, - 'enforce-umb-prefix-on-element-name': enforceUmbPrefixOnElementNameRule, 'enforce-umbraco-external-imports': enforceUmbracoExternalImportsRule, - 'ensure-relative-import-use-js-extension': ensureRelativeImportUseJsExtensionRule, - 'exported-string-constant-naming': exportedStringConstantNaming, 'no-direct-api-import': noDirectApiImportRule, 'prefer-import-aliases': preferImportAliasesRule, 'prefer-static-styles-last': preferStaticStylesLastRule, - 'umb-class-prefix': umbClassPrefixRule, 'no-relative-import-to-import-map-module': noRelativeImportToImportMapModule, }; diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 2bcbbb5b5183..4eb8a72f1635 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -62,12 +62,6 @@ export default [ exceptions: ['@umbraco-cms', '@open-wc/testing', '@storybook', 'msw', '.', 'vite', 'uuid', 'diff'], }, ], - 'local-rules/exported-string-constant-naming': [ - 'error', - { - excludedFileNames: ['umbraco-package'], - }, - ], 'jsdoc/check-tag-names': [ 'warn', { @@ -98,6 +92,92 @@ export default [ '@typescript-eslint/consistent-type-imports': 'error', '@typescript-eslint/no-import-type-side-effects': 'warn', '@typescript-eslint/no-deprecated': 'warn', + '@typescript-eslint/naming-convention': [ + 'error', + // All private members should be camelCase with leading underscore + // This is to ensure that private members are not used outside the class, as they + // are not part of the public API. + // Example NOT OK: private myPrivateVariable + // Example OK: private _myPrivateVariable + { + selector: 'memberLike', + modifiers: ['private'], + format: ['camelCase'], + leadingUnderscore: 'require', + trailingUnderscore: 'forbid', + }, + // All public members and variables should be camelCase without leading underscore + // Example: myPublicVariable, myPublicMethod + { + selector: ['variableLike', 'memberLike'], + modifiers: ['public'], + format: ['camelCase'], + leadingUnderscore: 'forbid', + trailingUnderscore: 'forbid', + }, + // All #private members and variables should be camelCase without leading underscore + // Example: #myPublicVariable, #myPublicMethod + { + selector: ['variableLike', 'memberLike'], + modifiers: ['private'], + format: ['camelCase'], + leadingUnderscore: 'forbid', + trailingUnderscore: 'forbid', + }, + // All protected members and variables should be camelCase without leading underscore + // Example: protected myPublicVariable, protected myPublicMethod + { + selector: ['variableLike', 'memberLike'], + modifiers: ['protected'], + format: ['camelCase'], + leadingUnderscore: 'forbid', + trailingUnderscore: 'forbid', + }, + // Allow quoted properties, as they are often used in JSON or when the property name is not a valid identifier + // This is to ensure that properties can be used in JSON or when the property name + // is not a valid identifier (e.g. contains spaces or special characters) + // Example: { "umb-some-component": UmbSomeComponent } + { + selector: ['objectLiteralProperty', 'typeProperty', 'enumMember'], + modifiers: ['requiresQuotes'], + format: null, + }, + // All (exported) types should be PascalCase with leading 'Umb' or 'Example' + // Example: UmbExampleType, ExampleTypeLike + { + selector: 'typeLike', + modifiers: ['exported'], + format: ['PascalCase'], + prefix: ['Umb', 'Example'] + }, + // All exported constants should be UPPER_CASE with leading 'UMB_' + // Example: UMB_EXAMPLE_CONSTANT + { + selector: 'variable', + modifiers: ['exported', 'const'], + format: ['UPPER_CASE'], + filter: { + // Exclude variables that are not manifest(s) + regex: '^manifests?$', + match: false, + }, + prefix: ['UMB_'], + }, + // All boolean variables should be camelCase with leading 'is', 'should', 'has', 'can', 'did', 'will' + // Example: isActive, shouldUpdate, hasPermission, canEdit, didSave, willSubmit + { + selector: "variable", + types: ["boolean"], + format: ["PascalCase"], + prefix: ["is", "should", "has", "can", "did", "will"] + }, + // Allow destructured variables to be named as they are in the object + { + selector: "variable", + modifiers: ["destructured"], + format: null, + }, + ], }, }, { From cf47838efd242ca85a281dcda11bb6c501967bfa Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:56:05 +0200 Subject: [PATCH 02/49] revert relative js extension imports --- ...nsure-relative-import-use-js-extension.cjs | 91 +++++++++++++++++++ .../eslint-local-rules.cjs | 2 + 2 files changed, 93 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs new file mode 100644 index 000000000000..ee53dab5fcbf --- /dev/null +++ b/src/Umbraco.Web.UI.Client/devops/eslint/rules/ensure-relative-import-use-js-extension.cjs @@ -0,0 +1,91 @@ +/** @type {import('eslint').Rule.RuleModule}*/ +module.exports = { + meta: { + type: 'problem', + docs: { + description: 'Ensures relative imports use the ".js" file extension.', + category: 'Best Practices', + recommended: true, + }, + fixable: 'code', + schema: [], + }, + create: (context) => { + function correctImport(value) { + if (value === '.') { + return './index.js'; + } + + if ( + value && + value.startsWith('.') && + !value.endsWith('.js') && + !value.endsWith('.css') && + !value.endsWith('.json') && + !value.endsWith('.svg') && + !value.endsWith('.jpg') && + !value.endsWith('.png') + ) { + return (value.endsWith('/') ? value + 'index' : value) + '.js'; + } + + return null; + } + + return { + ImportDeclaration: (node) => { + const { source } = node; + const { value } = source; + + const fixedValue = correctImport(value); + if (fixedValue) { + context.report({ + node, + message: 'Relative imports should use the ".js" file extension.', + fix: (fixer) => fixer.replaceText(source, `'${fixedValue}'`), + }); + } + }, + ImportExpression: (node) => { + const { source } = node; + const { value } = source; + + const fixedSource = correctImport(value); + if (fixedSource) { + context.report({ + node: source, + message: 'Relative imports should use the ".js" file extension.', + fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), + }); + } + }, + ExportAllDeclaration: (node) => { + const { source } = node; + const { value } = source; + + const fixedSource = correctImport(value); + if (fixedSource) { + context.report({ + node: source, + message: 'Relative exports should use the ".js" file extension.', + fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), + }); + } + }, + ExportNamedDeclaration: (node) => { + const { source } = node; + if (!source) return; + const { value } = source; + + const fixedSource = correctImport(value); + if (fixedSource) { + context.report({ + node: source, + message: 'Relative exports should use the ".js" file extension.', + fix: (fixer) => fixer.replaceText(source, `'${fixedSource}'`), + }); + } + }, + }; + }, +}; diff --git a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs index 8408bf20df59..94e82feafc1c 100644 --- a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs +++ b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs @@ -2,6 +2,7 @@ const enforceElementSuffixOnElementClassNameRule = require('./devops/eslint/rules/enforce-element-suffix-on-element-class-name.cjs'); const enforceUmbracoExternalImportsRule = require('./devops/eslint/rules/enforce-umbraco-external-imports.cjs'); +const ensureRelativeImportUseJsExtensionRule = require('./devops/eslint/rules/ensure-relative-import-use-js-extension.cjs'); const noDirectApiImportRule = require('./devops/eslint/rules/no-direct-api-import.cjs'); const preferImportAliasesRule = require('./devops/eslint/rules/prefer-import-aliases.cjs'); const preferStaticStylesLastRule = require('./devops/eslint/rules/prefer-static-styles-last.cjs'); @@ -10,6 +11,7 @@ const noRelativeImportToImportMapModule = require('./devops/eslint/rules/no-rela module.exports = { 'enforce-element-suffix-on-element-class-name': enforceElementSuffixOnElementClassNameRule, 'enforce-umbraco-external-imports': enforceUmbracoExternalImportsRule, + 'ensure-relative-import-use-js-extension': ensureRelativeImportUseJsExtensionRule, 'no-direct-api-import': noDirectApiImportRule, 'prefer-import-aliases': preferImportAliasesRule, 'prefer-static-styles-last': preferStaticStylesLastRule, From 8337192cffc8c7d3f19dd40f393d1e0f65556f13 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:56:24 +0200 Subject: [PATCH 03/49] remove unused local rule --- .../devops/eslint/rules/bad-type-import.cjs | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/devops/eslint/rules/bad-type-import.cjs diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/bad-type-import.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/bad-type-import.cjs deleted file mode 100644 index eebdca6c7567..000000000000 --- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/bad-type-import.cjs +++ /dev/null @@ -1,31 +0,0 @@ - /** @type {import('eslint').Rule.RuleModule} */ -module.exports = { - meta: { - type: 'problem', - docs: { - description: 'Ensures the use of the `import type` operator from the `src/core/models/index.ts` file.', - category: 'Best Practices', - recommended: true, - }, - fixable: 'code', - schema: [], - }, - create: function (context) { - return { - ImportDeclaration: function (node) { - if ( - node.source.parent.importKind !== 'type' && - (node.source.value.endsWith('/models') || node.source.value === 'router-slot/model') - ) { - const sourceCode = context.getSourceCode(); - const nodeSource = sourceCode.getText(node); - context.report({ - node, - message: 'Use `import type` instead of `import`.', - fix: (fixer) => fixer.replaceText(node, nodeSource.replace('import', 'import type')), - }); - } - }, - }; - }, -}; \ No newline at end of file From 10e75cf52ee2d543f0d605663bdb9bf3b7fc688a Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:56:45 +0200 Subject: [PATCH 04/49] build(eslint): uses recommended setup for import plugin --- src/Umbraco.Web.UI.Client/eslint.config.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 4eb8a72f1635..44ca6741e841 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -14,6 +14,7 @@ import jsdoc from 'eslint-plugin-jsdoc'; export default [ // Recommended config applied to all files js.configs.recommended, + importPlugin.flatConfigs.recommended, ...tseslint.configs.recommended, wcPlugin.configs['flat/recommended'], litPlugin.configs['flat/recommended'], // We use the non typescript version to allow types to be defined in the jsdoc comments. This will allow js docs as an alternative to typescript types. @@ -39,22 +40,17 @@ export default [ // Global config { plugins: { - import: importPlugin, 'local-rules': localRules, }, rules: { semi: ['warn', 'always'], 'prettier/prettier': ['warn', { endOfLine: 'auto' }], - 'no-unused-vars': 'off', //Let '@typescript-eslint/no-unused-vars' catch the errors to allow unused function parameters (ex: in interfaces) 'no-var': 'error', - ...importPlugin.configs.recommended.rules, 'import/namespace': 'off', 'import/no-unresolved': 'off', 'import/order': ['warn', { groups: ['builtin', 'parent', 'sibling', 'index', 'external'] }], 'import/no-self-import': 'error', 'import/no-cycle': ['error', { maxDepth: 6, allowUnsafeDynamicCyclicDependency: true }], - 'import/no-named-as-default': 'off', // Does not work with eslint 9 - 'import/no-named-as-default-member': 'off', // Does not work with eslint 9 'local-rules/prefer-static-styles-last': 'warn', 'local-rules/enforce-umbraco-external-imports': [ 'error', @@ -84,7 +80,10 @@ export default [ ...globals.browser, }, }, + ...importPlugin.flatConfigs.typescript, rules: { + 'no-unused-vars': 'off', //Let '@typescript-eslint/no-unused-vars' catch the errors to allow unused function parameters (ex: in interfaces) + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/no-unused-vars': 'error', From b298101ac6050ed1d40b6c72e2a1e5c53270c240 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:57:02 +0200 Subject: [PATCH 05/49] chore(eslint): conver const to function to follow naming conventions --- .../src/packages/user/user/utils/is-user.function.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/is-user.function.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/is-user.function.ts index 0488050afcfd..03613d8741a5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/is-user.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/utils/is-user.function.ts @@ -3,13 +3,13 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; /** * Check if the user is an admin - * @param {UmbControllerHost} host - The controller host - * @param {string} userUnique - The user unique identifier - * @returns {Promise} - The result + * @param host - The controller host + * @param userUnique - The user unique identifier + * @returns Promise resolving to true if user is admin */ -export const isUserAdmin = async (host: UmbControllerHost, userUnique: string) => { +export async function isUserAdmin(host: UmbControllerHost, userUnique: string): Promise { const repository = new UmbUserDetailRepository(host); const { data: user } = await repository.requestByUnique(userUnique); return user?.isAdmin ?? false; -}; +} From dc59dddfce4f945205b02966e5c9fff90783f003 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:41:15 +0200 Subject: [PATCH 06/49] chore: removes old file --- src/Umbraco.Web.UI.Docs/.nvmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/Umbraco.Web.UI.Docs/.nvmrc diff --git a/src/Umbraco.Web.UI.Docs/.nvmrc b/src/Umbraco.Web.UI.Docs/.nvmrc deleted file mode 100644 index ec3053c8dcb4..000000000000 --- a/src/Umbraco.Web.UI.Docs/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -10.15 From dc73dac44aa2003313deb92fbc7f8023ff0eb886 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:45:13 +0200 Subject: [PATCH 07/49] build(eslint): allows Ufm as prefix --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 44ca6741e841..3f79f92f3c07 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -147,7 +147,7 @@ export default [ selector: 'typeLike', modifiers: ['exported'], format: ['PascalCase'], - prefix: ['Umb', 'Example'] + prefix: ['Umb', 'Ufm', 'Example'] }, // All exported constants should be UPPER_CASE with leading 'UMB_' // Example: UMB_EXAMPLE_CONSTANT From 5c4ad314397353f77dce03530da103e78fc96b98 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:45:35 +0200 Subject: [PATCH 08/49] build(eslint): allows 'name' and 'extensions' as exports (umbraco-package.ts) --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 3f79f92f3c07..e4a14719d52f 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -157,7 +157,7 @@ export default [ format: ['UPPER_CASE'], filter: { // Exclude variables that are not manifest(s) - regex: '^manifests?$', + regex: '^(manifests?|name|extensions)$', match: false, }, prefix: ['UMB_'], From 813f366e17f88c87422e179d3fb73a3521ec4075 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:36:04 +0200 Subject: [PATCH 09/49] build(eslint): typescript rules should ignore storybook --- src/Umbraco.Web.UI.Client/eslint.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index e4a14719d52f..7b6f287c1776 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -19,6 +19,7 @@ export default [ wcPlugin.configs['flat/recommended'], litPlugin.configs['flat/recommended'], // We use the non typescript version to allow types to be defined in the jsdoc comments. This will allow js docs as an alternative to typescript types. jsdoc.configs['flat/recommended'], + ...storybook.configs['flat/recommended'], localRules.configs.all, eslintPluginPrettierRecommended, @@ -71,6 +72,7 @@ export default [ // Pattern-specific overrides { files: ['**/*.ts'], + ignores: ['.storybook', '**/*.stories.ts'], languageOptions: { parserOptions: { project: true, @@ -188,5 +190,4 @@ export default [ }, }, }, - ...storybook.configs['flat/recommended'], ]; From 62c35ed9a8ec06d1db41a6ad3c2cd4cd33d557bf Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:43:52 +0200 Subject: [PATCH 10/49] chore(eslint): ignores eslint for vite definitions --- src/Umbraco.Web.UI.Client/src/vite-env.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/vite-env.d.ts b/src/Umbraco.Web.UI.Client/src/vite-env.d.ts index ff0a27896b65..b5151abd8174 100644 --- a/src/Umbraco.Web.UI.Client/src/vite-env.d.ts +++ b/src/Umbraco.Web.UI.Client/src/vite-env.d.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ /// interface ImportMetaEnv { From f74bd3b1c85354f7fedc694cfe5b6ecf797c7358 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:44:05 +0200 Subject: [PATCH 11/49] build(eslint): allows UPPER_CASE for properties --- src/Umbraco.Web.UI.Client/eslint.config.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 7b6f287c1776..60e9768c33a8 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -112,7 +112,7 @@ export default [ { selector: ['variableLike', 'memberLike'], modifiers: ['public'], - format: ['camelCase'], + format: ['camelCase', 'UPPER_CASE'], leadingUnderscore: 'forbid', trailingUnderscore: 'forbid', }, @@ -156,12 +156,8 @@ export default [ { selector: 'variable', modifiers: ['exported', 'const'], + types: ['string', 'number', 'boolean'], format: ['UPPER_CASE'], - filter: { - // Exclude variables that are not manifest(s) - regex: '^(manifests?|name|extensions)$', - match: false, - }, prefix: ['UMB_'], }, // All boolean variables should be camelCase with leading 'is', 'should', 'has', 'can', 'did', 'will' From 3d610ed831eec49758e1f7bf053d0b03ad95da64 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:47:56 +0200 Subject: [PATCH 12/49] build(eslint): ignores umbraco-package.ts files (unconventional exports) --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 60e9768c33a8..6005a1ba6460 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -72,7 +72,7 @@ export default [ // Pattern-specific overrides { files: ['**/*.ts'], - ignores: ['.storybook', '**/*.stories.ts'], + ignores: ['.storybook', '**/*.stories.ts', '**/umbraco-package.ts'], languageOptions: { parserOptions: { project: true, From 411685ffa5ce0039512b90187b8772933468a237 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:51:25 +0200 Subject: [PATCH 13/49] chore(storybook): fixes property editor stylesheet picker --- ...rty-editor-ui-stylesheet-picker.stories.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/property-editors/stylesheet-picker/property-editor-ui-stylesheet-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/property-editors/stylesheet-picker/property-editor-ui-stylesheet-picker.stories.ts index 5304fcd1a803..c0ed33c86f75 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/property-editors/stylesheet-picker/property-editor-ui-stylesheet-picker.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/property-editors/stylesheet-picker/property-editor-ui-stylesheet-picker.stories.ts @@ -1,21 +1,22 @@ import { umbDataTypeMockDb } from '../../../../../mocks/data/data-type/data-type.db.js'; -import { html } from '@umbraco-cms/backoffice/external/lit'; -import type { Meta } from '@storybook/web-components-vite'; +import type UmbPropertyEditorUIStylesheetPickerElement from './property-editor-ui-stylesheet-picker.element.js'; +import type { Meta, StoryObj } from '@storybook/web-components-vite'; import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type'; import './property-editor-ui-stylesheet-picker.element.js'; const dataTypeData = umbDataTypeMockDb.read('dt-richTextEditor') as unknown as UmbDataTypeDetailModel; -export default { +const meta: Meta = { title: 'Extension Type/Property Editor UI/Stylesheet Picker', component: 'umb-property-editor-ui-stylesheet-picker', id: 'umb-property-editor-ui-stylesheet-picker', -} as Meta; + args: { + value: dataTypeData?.values?.find((x) => x.alias === 'stylesheets')?.value ?? [], + }, +}; -export const Docs = ({ value }: any) => - html``; +export default meta; +type Story = StoryObj; -Docs.args = { - value: dataTypeData?.values?.find((x) => x.alias === 'stylesheets')?.value ?? [], -}; +export const Docs: Story = {}; From e19007a3144f7fda9e73a8f737ed396659b29a9a Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:52:03 +0200 Subject: [PATCH 14/49] build(eslint): allows Manifest as prefix on interfaces --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 6005a1ba6460..c23fe3021a2e 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -149,7 +149,7 @@ export default [ selector: 'typeLike', modifiers: ['exported'], format: ['PascalCase'], - prefix: ['Umb', 'Ufm', 'Example'] + prefix: ['Umb', 'Ufm', 'Manifest', 'Example'] }, // All exported constants should be UPPER_CASE with leading 'UMB_' // Example: UMB_EXAMPLE_CONSTANT From 6f5247cbaabb30979c1cca9099423487de7d0128 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:56:38 +0200 Subject: [PATCH 15/49] build(eslint): allows underscore on protected members --- src/Umbraco.Web.UI.Client/eslint.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index c23fe3021a2e..a9b241123f1e 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -125,13 +125,13 @@ export default [ leadingUnderscore: 'forbid', trailingUnderscore: 'forbid', }, - // All protected members and variables should be camelCase without leading underscore - // Example: protected myPublicVariable, protected myPublicMethod + // All protected members and variables should be camelCase with optional leading underscore (if needed to be pseudo-private) + // Example: protected myPublicVariable, protected _myPublicMethod { selector: ['variableLike', 'memberLike'], modifiers: ['protected'], format: ['camelCase'], - leadingUnderscore: 'forbid', + leadingUnderscore: 'allow', trailingUnderscore: 'forbid', }, // Allow quoted properties, as they are often used in JSON or when the property name is not a valid identifier From d0fae4b3a5b91d0a01fbc6632a09e39f4c322c80 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 13:57:10 +0200 Subject: [PATCH 16/49] build(eslint): allows Meta as prefix on interfaces --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index a9b241123f1e..f63498cd4266 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -149,7 +149,7 @@ export default [ selector: 'typeLike', modifiers: ['exported'], format: ['PascalCase'], - prefix: ['Umb', 'Ufm', 'Manifest', 'Example'] + prefix: ['Umb', 'Ufm', 'Manifest', 'Meta', 'Example'] }, // All exported constants should be UPPER_CASE with leading 'UMB_' // Example: UMB_EXAMPLE_CONSTANT From b7ba94a8a11b3f9f586f83e4ff9a0198c6af96b2 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:01:36 +0200 Subject: [PATCH 17/49] build(eslint): allows PascalCase for public members --- src/Umbraco.Web.UI.Client/eslint.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index f63498cd4266..e768b3b719dc 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -112,7 +112,7 @@ export default [ { selector: ['variableLike', 'memberLike'], modifiers: ['public'], - format: ['camelCase', 'UPPER_CASE'], + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], leadingUnderscore: 'forbid', trailingUnderscore: 'forbid', }, @@ -151,7 +151,7 @@ export default [ format: ['PascalCase'], prefix: ['Umb', 'Ufm', 'Manifest', 'Meta', 'Example'] }, - // All exported constants should be UPPER_CASE with leading 'UMB_' + // All exported string constants should be UPPER_CASE with leading 'UMB_' // Example: UMB_EXAMPLE_CONSTANT { selector: 'variable', From d15e8a388de8f6a57bda742bbb9eb9cb57b9c1c8 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:04:29 +0200 Subject: [PATCH 18/49] build(eslint): disables enforcement of booleans with verbs for now as it is too harsh --- src/Umbraco.Web.UI.Client/eslint.config.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index e768b3b719dc..e30d197bd641 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -160,14 +160,6 @@ export default [ format: ['UPPER_CASE'], prefix: ['UMB_'], }, - // All boolean variables should be camelCase with leading 'is', 'should', 'has', 'can', 'did', 'will' - // Example: isActive, shouldUpdate, hasPermission, canEdit, didSave, willSubmit - { - selector: "variable", - types: ["boolean"], - format: ["PascalCase"], - prefix: ["is", "should", "has", "can", "did", "will"] - }, // Allow destructured variables to be named as they are in the object { selector: "variable", From d9c89b1ec895c5aa32e1360571670898722c3b21 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:16:19 +0200 Subject: [PATCH 19/49] chore(eslint): add private modifiers as required --- .../models-builder-dashboard.element.ts | 4 +- ...property-editor-ui-number-range.element.ts | 6 +- .../property-editor-ui-toggle.element.ts | 8 +- ...tion-type-detail-workspace-view.element.ts | 22 ++-- .../bulk-delete-with-relation.action.ts | 2 +- ...bulk-delete-with-relation-modal.element.ts | 2 +- .../bulk-trash-with-relation.action.ts | 2 +- .../delete-with-relation-modal.element.ts | 4 +- .../trash-with-relation-modal.element.ts | 4 +- .../trash/trash-with-relation.action.ts | 2 +- ...-action-modal-entity-references.element.ts | 8 +- ...-action-modal-entity-references.element.ts | 4 +- .../views/section-view-examine-indexers.ts | 8 +- .../views/section-view-examine-overview.ts | 8 +- .../views/section-view-examine-searchers.ts | 112 +++++++++--------- .../search-modal/search-modal.element.ts | 4 +- .../tags-input/tags-input.element.ts | 10 +- .../create-from-snippet-modal.ts | 2 +- .../input-template/input-template.element.ts | 23 ++-- .../template-card/template-card.element.ts | 7 +- .../src/packages/templating/types.ts | 2 + .../modals/external-login-modal.element.ts | 2 +- .../current-user-mfa-disable-modal.element.ts | 4 +- .../current-user-mfa-modal.element.ts | 2 +- ...up-table-sections-column-layout.element.ts | 4 +- ...-group-granular-permission-list.element.ts | 4 +- ...-user-permission-settings-modal.element.ts | 6 +- ...te-user-client-credential-modal.element.ts | 5 +- .../user-collection-header.element.ts | 2 +- .../user-avatar/user-avatar.element.ts | 8 +- .../user-document-start-node.element.ts | 2 +- .../user-media-start-node.element.ts | 2 +- .../user-allow-delete-action.condition.ts | 2 +- .../user-allow-disable-action.condition.ts | 2 +- .../user-allow-enable-action.condition.ts | 2 +- .../user-allow-unlock-action.condition.ts | 2 +- .../user-is-default-kind.condition.ts | 2 +- .../create/modal/create-user-modal.element.ts | 2 +- .../create-user-success-modal.element.ts | 4 +- .../resend-invite.action.condition.ts | 2 +- .../user/user/item/user-item-ref.element.ts | 4 +- .../modals/user-mfa/user-mfa-modal.element.ts | 2 +- .../user-workspace-avatar.element.ts | 2 +- .../modal/webhook-events-modal.element.ts | 2 +- .../webhook-workspace-editor.element.ts | 6 +- 45 files changed, 159 insertions(+), 160 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/models-builder/models-builder-dashboard.element.ts b/src/Umbraco.Web.UI.Client/src/packages/models-builder/models-builder-dashboard.element.ts index 70569835fcfc..80660ee69cd6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/models-builder/models-builder-dashboard.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/models-builder/models-builder-dashboard.element.ts @@ -74,7 +74,7 @@ export class UmbModelsBuilderDashboardElement extends UmbLitElement { The ModelsMode is '${this._modelsBuilder.mode}'. ${this.renderModelsMode()} ` : nothing} - ${this.renderList()} + ${this._renderList()}

@@ -99,7 +99,7 @@ export class UmbModelsBuilderDashboardElement extends UmbLitElement { `; } - private renderList() { + private _renderList() { if (this._modelsBuilder?.mode !== ModelsModeModel.NOTHING) { return html`${this._modelsBuilder?.modelsNamespace ? html`

  • The models namespace is ${this._modelsBuilder.modelsNamespace}.
  • ` diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/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 index 21b12acd2ee7..aaeeb1a5aef6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/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 @@ -18,13 +18,13 @@ export class UmbPropertyEditorUINumberRangeElement implements UmbPropertyEditorUiElement { @state() - _minValue?: number; + private _minValue?: number; @state() - _maxValue?: number; + private _maxValue?: number; @state() - _validationRange?: UmbNumberRangeValueType; + private _validationRange?: UmbNumberRangeValueType; @property({ type: Object }) public override set value(value: UmbNumberRangeValueType | undefined) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/toggle/property-editor-ui-toggle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/toggle/property-editor-ui-toggle.element.ts index 3d18b7dd79c0..5c71b27a5e9e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/toggle/property-editor-ui-toggle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/toggle/property-editor-ui-toggle.element.ts @@ -35,16 +35,16 @@ export class UmbPropertyEditorUIToggleElement mandatoryMessage = UMB_VALIDATION_FALSE_LOCALIZATION_KEY; @state() - _ariaLabel?: string; + private _ariaLabel?: string; @state() - _labelOff?: string; + private _labelOff?: string; @state() - _labelOn?: string; + private _labelOn?: string; @state() - _showLabels = false; + private _showLabels = false; public set config(config: UmbPropertyEditorConfigCollection | undefined) { if (!config) return; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts index 511fa35408c6..48c38941f589 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relation-types/workspace/relation-type/views/relation-type-detail-workspace-view.element.ts @@ -14,28 +14,28 @@ import type { UUIPaginationEvent } from '@umbraco-cms/backoffice/external/uui'; @customElement('umb-relation-type-detail-workspace-view') export class UmbRelationTypeDetailWorkspaceViewElement extends UmbLitElement implements UmbWorkspaceViewElement { @state() - _relations: Array = []; + private _relations: Array = []; @state() - _parent?: UmbRelationTypeDetailModel['parent']; + private _parent?: UmbRelationTypeDetailModel['parent']; @state() - _child?: UmbRelationTypeDetailModel['child']; + private _child?: UmbRelationTypeDetailModel['child']; @state() - _isBidirectional?: UmbRelationTypeDetailModel['isBidirectional']; + private _isBidirectional?: UmbRelationTypeDetailModel['isBidirectional']; @state() - _isDependency?: UmbRelationTypeDetailModel['isDependency']; + private _isDependency?: UmbRelationTypeDetailModel['isDependency']; @state() - _currentPageNumber = 1; + private _currentPageNumber = 1; @state() - _totalPages = 1; + private _totalPages = 1; @state() - _loading = false; + private _loading = false; #workspaceContext?: typeof UMB_RELATION_TYPE_WORKSPACE_CONTEXT.TYPE; #relationCollectionRepository = new UmbRelationCollectionRepository(this); @@ -181,9 +181,9 @@ export class UmbRelationTypeDetailWorkspaceViewElement extends UmbLitElement imp .current=${this._currentPageNumber} .total=${this._totalPages} firstlabel=${this.localize.term('general_first')} - previouslabel=${this.localize.term('general_previous')} - nextlabel=${this.localize.term('general_next')} - lastlabel=${this.localize.term('general_last')} + previouslabel=${this.localize.term('general_previous')} + nextlabel=${this.localize.term('general_next')} + lastlabel=${this.localize.term('general_last')} @change=${this.#onPageChange}> ` : nothing} diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/bulk-delete-with-relation.action.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/bulk-delete-with-relation.action.ts index c93f35e1e211..98b1c6c3f3a8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/bulk-delete-with-relation.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/bulk-delete-with-relation.action.ts @@ -4,7 +4,7 @@ import { UmbDeleteEntityBulkAction } from '@umbraco-cms/backoffice/entity-bulk-a import { umbOpenModal } from '@umbraco-cms/backoffice/modal'; export class UmbBulkDeleteWithRelationEntityAction extends UmbDeleteEntityBulkAction { - override async _confirmDelete() { + protected override async _confirmDelete() { await umbOpenModal(this, UMB_BULK_DELETE_WITH_RELATION_CONFIRM_MODAL, { data: { uniques: this.selection, diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/modal/bulk-delete-with-relation-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/modal/bulk-delete-with-relation-modal.element.ts index a6fb98481858..bb9dcd6d444a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/modal/bulk-delete-with-relation-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-delete/modal/bulk-delete-with-relation-modal.element.ts @@ -22,7 +22,7 @@ export class UmbBulkDeleteWithRelationConfirmModalElement extends UmbModalBaseEl UmbBulkDeleteWithRelationConfirmModalValue > { @state() - _referencesConfig?: UmbConfirmBulkActionModalEntityReferencesConfig; + private _referencesConfig?: UmbConfirmBulkActionModalEntityReferencesConfig; protected override firstUpdated(_changedProperties: PropertyValues): void { super.firstUpdated(_changedProperties); diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-trash/bulk-trash-with-relation.action.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-trash/bulk-trash-with-relation.action.ts index 6e7b1a170595..79a49e4668a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-trash/bulk-trash-with-relation.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/bulk-trash/bulk-trash-with-relation.action.ts @@ -4,7 +4,7 @@ import { umbOpenModal } from '@umbraco-cms/backoffice/modal'; import { UmbTrashEntityBulkAction } from '@umbraco-cms/backoffice/recycle-bin'; export class UmbBulkTrashWithRelationEntityAction extends UmbTrashEntityBulkAction { - override async _confirmTrash() { + protected override async _confirmTrash() { await umbOpenModal(this, UMB_BULK_TRASH_WITH_RELATION_CONFIRM_MODAL, { data: { uniques: this.selection, diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/delete/modal/delete-with-relation-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/delete/modal/delete-with-relation-modal.element.ts index 9df34a33b061..2b4e9e0c20ae 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/delete/modal/delete-with-relation-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/delete/modal/delete-with-relation-modal.element.ts @@ -24,10 +24,10 @@ export class UmbDeleteWithRelationConfirmModalElement extends UmbModalBaseElemen UmbDeleteWithRelationConfirmModalValue > { @state() - _name?: string; + private _name?: string; @state() - _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; + private _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; #itemRepository?: UmbItemRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts index e6f3e21a4278..d68a75cbb0af 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts @@ -24,10 +24,10 @@ export class UmbTrashWithRelationConfirmModalElement extends UmbModalBaseElement UmbTrashWithRelationConfirmModalValue > { @state() - _name?: string; + private _name?: string; @state() - _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; + private _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; #itemRepository?: UmbItemRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts index 90e97deef213..3d9754f1eddd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts @@ -9,7 +9,7 @@ import { UmbTrashEntityAction } from '@umbraco-cms/backoffice/recycle-bin'; * @augments {UmbEntityActionBase} */ export class UmbTrashWithRelationEntityAction extends UmbTrashEntityAction { - override async _confirmTrash(item: any) { + protected override async _confirmTrash(item: any) { await umbOpenModal(this, UMB_TRASH_WITH_RELATION_CONFIRM_MODAL, { data: { unique: item.unique, diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-action-modal-entity-references.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-action-modal-entity-references.element.ts index 37cac2a5f26f..c56ed774857a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-action-modal-entity-references.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-action-modal-entity-references.element.ts @@ -26,16 +26,16 @@ export class UmbConfirmActionModalEntityReferencesElement extends UmbLitElement config?: UmbConfirmActionModalEntityReferencesConfig; @state() - _referencedByItems: Array = []; + private _referencedByItems: Array = []; @state() - _totalReferencedByItems: number = 0; + private _totalReferencedByItems: number = 0; @state() - _totalDescendantsWithReferences: number = 0; + private _totalDescendantsWithReferences: number = 0; @state() - _descendantsWithReferences: Array = []; + private _descendantsWithReferences: Array = []; #itemRepository?: UmbItemRepository; #referenceRepository?: UmbEntityReferenceRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-bulk-action-modal-entity-references.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-bulk-action-modal-entity-references.element.ts index 4c7f4f75b4aa..251f78314637 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-bulk-action-modal-entity-references.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/global-components/confirm-bulk-action-modal-entity-references.element.ts @@ -29,10 +29,10 @@ export class UmbConfirmBulkActionModalEntityReferencesElement extends UmbLitElem }; @state() - _items: Array = []; + private _items: Array = []; @state() - _totalItems: number = 0; + private _totalItems: number = 0; #itemRepository?: UmbItemRepository; #referenceRepository?: UmbEntityReferenceRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-indexers.ts b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-indexers.ts index adce05d05bd7..68880c2dba15 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-indexers.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-indexers.ts @@ -120,17 +120,17 @@ export class UmbDashboardExamineIndexElement extends UmbLitElement {

    ${this.#renderHealthStatus(this._indexData.healthStatus)}
    - ${this.renderIndexSearch()} ${this.renderPropertyList()} ${this.renderTools()} + ${this.#renderIndexSearch()} ${this.#renderPropertyList()} ${this.#renderTools()} `; } - private renderIndexSearch() { + #renderIndexSearch() { // Do we want to show the search while rebuilding? if (!this._indexData || this._indexData.healthStatus.status === HealthStatusModel.REBUILDING) return nothing; return html``; } - private renderPropertyList() { + #renderPropertyList() { if (!this._indexData) return nothing; return html` @@ -160,7 +160,7 @@ export class UmbDashboardExamineIndexElement extends UmbLitElement { `; } - private renderTools() { + #renderTools() { return html`

    Tools to manage the ${this.indexName}

    Allows you to view the details of each index and provides some tools for managing the indexes

    - ${this.renderIndexersList()} + ${this.#renderIndexersList()}

    @@ -74,12 +74,12 @@ export class UmbDashboardExamineOverviewElement extends UmbLitElement { >Shows properties and tools for any configured Searcher (i.e. such as a multi-index searcher)

    - ${this.renderSearchersList()} + ${this.#renderSearchersList()}
    `; } - private renderIndexersList() { + #renderIndexersList() { if (this._loadingIndexers) return html``; if (!this._indexers) return nothing; return html` @@ -96,7 +96,7 @@ export class UmbDashboardExamineOverviewElement extends UmbLitElement { `; } - private renderSearchersList() { + #renderSearchersList() { if (this._loadingSearchers) return html``; if (!this._searchers) return nothing; return html` diff --git a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts index 684bc19d31ee..ff77c8d9ff1f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/search/examine-management-dashboard/views/section-view-examine-searchers.ts @@ -37,13 +37,13 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { private _workspacePath = 'aa'; @state() - _totalPages = 1; + private _totalPages = 1; @state() - _currentPage = 1; + private _currentPage = 1; @state() - _totalNumberOfResults = 0; + private _totalNumberOfResults = 0; #paginationManager = new UmbPaginationManager(); @@ -132,7 +132,7 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { type: 'sidebar', size: 'medium', }, - data: { searchResult: rowData, name: this.getSearchResultNodeName(rowData) }, + data: { searchResult: rowData, name: this.#getSearchResultNodeName(rowData) }, }).catch(() => undefined); } @@ -159,13 +159,13 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { label=${this.localize.term('general_search')} @click="${this._onSearch}"> - ${this.renderSearchResults()} + ${this.#renderSearchResults()} `; } // Find the field named 'nodeName' and return its value if it exists in the fields array - private getSearchResultNodeName(searchResult: UmbSearchResultModel): string { + #getSearchResultNodeName(searchResult: UmbSearchResultModel): string { const nodeNameField = searchResult.fields?.find((field) => field.name?.toUpperCase() === 'NODENAME'); return nodeNameField?.values?.join(', ') ?? ''; } @@ -184,7 +184,7 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { this._onSearch(); } - private renderSearchResults() { + #renderSearchResults() { if (this._searchLoading) return html``; if (!this._searchResults) return nothing; if (!this._searchResults.length) { @@ -201,55 +201,55 @@ export class UmbDashboardExamineSearcherElement extends UmbLitElement { this._totalPages, )} -
    - - - - Score - ${this.localize.term('general_id')} - ${this.localize.term('general_name')} - ${this.localize.term('examineManagement_fields')} - ${this.renderHeadCells()} - - ${this._searchResults?.map((rowData) => { - const indexType = rowData.fields?.find((field) => field.name === '__IndexType')?.values?.join(', ') ?? ''; - this.#entityType = this.#getEntityTypeFromIndexType(indexType); - const unique = rowData.fields?.find((field) => field.name === '__Key')?.values?.join(', ') ?? ''; - - return html` - ${rowData.score} - ${rowData.id} - - - ${this.getSearchResultNodeName(rowData)} - - - - this.#onFieldViewClick(rowData)}> - ${rowData.fields ? Object.keys(rowData.fields).length : ''} - ${this.localize.term('examineManagement_fields')} - - - ${rowData.fields ? this.renderBodyCells(rowData.fields) : ''} - `; - })} - - - -
    +
    + + + + Score + ${this.localize.term('general_id')} + ${this.localize.term('general_name')} + ${this.localize.term('examineManagement_fields')} + ${this.renderHeadCells()} + + ${this._searchResults?.map((rowData) => { + const indexType = rowData.fields?.find((field) => field.name === '__IndexType')?.values?.join(', ') ?? ''; + this.#entityType = this.#getEntityTypeFromIndexType(indexType); + const unique = rowData.fields?.find((field) => field.name === '__Key')?.values?.join(', ') ?? ''; + + return html` + ${rowData.score} + ${rowData.id} + + + ${this.#getSearchResultNodeName(rowData)} + + + + this.#onFieldViewClick(rowData)}> + ${rowData.fields ? Object.keys(rowData.fields).length : ''} + ${this.localize.term('examineManagement_fields')} + + + ${rowData.fields ? this.renderBodyCells(rowData.fields) : ''} + `; + })} + + + +
    = []; @state() - _currentGlobalSearcher?: GlobalSearchers; + private _currentGlobalSearcher?: GlobalSearchers; @state() - _loading: boolean = false; + private _loading: boolean = false; #searchItemNavIndex = 0; diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/components/tags-input/tags-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/components/tags-input/tags-input.element.ts index b56d24500743..9efb1b6962ff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/components/tags-input/tags-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/components/tags-input/tags-input.element.ts @@ -23,16 +23,16 @@ export class UmbTagsInputElement extends UUIFormControlMixin(UmbLitElement, '') @property({ type: String }) culture?: string | null; - _items: string[] = []; @property({ type: Array }) public set items(newTags: string[]) { const newItems = newTags.filter((x) => x !== ''); - this._items = newItems; - super.value = this._items.join(','); + this.#items = newItems; + super.value = this.#items.join(','); } public get items(): string[] { - return this._items; + return this.#items; } + #items: string[] = []; /** * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. @@ -220,7 +220,7 @@ export class UmbTagsInputElement extends UUIFormControlMixin(UmbLitElement, '') #renderTagOptions() { if (!this._currentInput.length || !this._matches.length) return nothing; - const matchfilter = this._matches.filter((tag) => tag.text !== this._items.find((x) => x === tag.text)); + const matchfilter = this._matches.filter((tag) => tag.text !== this.#items.find((x) => x === tag.text)); if (!matchfilter.length) return; return html`
    diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/snippet-modal/create-from-snippet-modal.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/snippet-modal/create-from-snippet-modal.ts index 2229bb8409a7..978b78f79054 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/snippet-modal/create-from-snippet-modal.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/entity-actions/create/snippet-modal/create-from-snippet-modal.ts @@ -16,7 +16,7 @@ export class UmbPartialViewCreateFromSnippetModalElement extends UmbModalBaseEle string > { @state() - _snippets: Array = []; + private _snippets: Array = []; #getCreateHref(snippet: PartialViewSnippetItemResponseModel) { return `section/settings/workspace/partial-view/create/parent/${this.data?.parent.entityType}/${ diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts index 4350494327ed..e1ba049486dc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/input-template/input-template.element.ts @@ -51,29 +51,28 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, @property({ type: Array }) public set selection(newKeys: Array | undefined) { - this._selection = newKeys ?? []; + this.#selection = newKeys ?? []; this.#observePickedTemplates(); } public get selection() { - return this._selection; + return this.#selection; } - _selection: Array = []; + #selection: Array = []; - _defaultUnique = ''; @property({ type: String }) public set defaultUnique(newId: string) { - this._defaultUnique = newId; + this.#defaultUnique = newId; super.value = newId; } public get defaultUnique(): string { - return this._defaultUnique; + return this.#defaultUnique; } - - private _templateItemRepository = new UmbTemplateItemRepository(this); + #defaultUnique = ''; @state() - _pickedTemplates: UmbTemplateItemModel[] = []; + private _pickedTemplates: UmbTemplateItemModel[] = []; + #templateItemRepository = new UmbTemplateItemRepository(this); #templatePath = ''; constructor() { @@ -91,7 +90,7 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, async #observePickedTemplates() { this.observe( - (await this._templateItemRepository?.requestItems(this._selection))?.asObservable?.(), + (await this.#templateItemRepository?.requestItems(this.#selection))?.asObservable?.(), (data) => { const oldValue = this._pickedTemplates; this._pickedTemplates = data ?? []; @@ -127,7 +126,7 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, const value = await umbOpenModal(this, UMB_TEMPLATE_PICKER_MODAL, { data: { multiple: true, - pickableFilter: (template) => template.unique !== null && !this._selection.includes(template.unique), + pickableFilter: (template) => template.unique !== null && !this.#selection.includes(template.unique), }, }).catch(() => undefined); @@ -151,7 +150,7 @@ export class UmbInputTemplateElement extends UUIFormControlMixin(UmbLitElement, In current backoffice we just prevent deleting a default when there are other templates. But if its the only one its okay. This is a weird experience, so we should make something that makes more sense. BTW. its weird cause the damage of removing the default template is equally bad when there is one or more templates. */ - this.selection = this._selection.filter((x) => x !== unique); + this.selection = this.#selection.filter((x) => x !== unique); // If the default template is removed, set the first picked template as default or reset defaultUnique. if (unique === this.defaultUnique) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/template-card/template-card.element.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/template-card/template-card.element.ts index 10b94475bd66..3fbcc03cff20 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/template-card/template-card.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/global-components/template-card/template-card.element.ts @@ -18,14 +18,15 @@ export class UmbTemplateCardElement extends UUIFormControlMixin(UmbLitElement, ' @property({ type: Boolean, reflect: true }) default = false; - _id = ''; + #id = ''; + @property({ type: String }) public override set id(newId: string) { - this._id = newId; + this.#id = newId; super.value = newId; } public override get id() { - return this._id; + return this.#id; } protected override getFormElement() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/types.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/types.ts index 46069918b59a..e5ecfafc790e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/types.ts @@ -1,9 +1,11 @@ +// eslint-disable-next-line @typescript-eslint/naming-convention export enum CodeSnippetType { partialView = 'partialView', dictionaryItem = 'dictionaryItem', pageField = 'pageField', } +// eslint-disable-next-line @typescript-eslint/naming-convention export enum TemplatingSectionType { renderChildTemplate = 'RenderChildTemplate', renderANamedSection = 'RenderANamedSection', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/external-login/modals/external-login-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/external-login/modals/external-login-modal.element.ts index daef3e32a4f6..5f8d2bbc35e0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/external-login/modals/external-login-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/external-login/modals/external-login-modal.element.ts @@ -22,7 +22,7 @@ export class UmbCurrentUserExternalLoginModalElement extends UmbLitElement { modalContext?: UmbModalContext; @state() - _items: Array = []; + private _items: Array = []; #currentUserRepository = new UmbCurrentUserRepository(this); #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa-disable/current-user-mfa-disable-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa-disable/current-user-mfa-disable-modal.element.ts index 2d2cce5d468e..dd93ee911c02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa-disable/current-user-mfa-disable-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/modals/current-user-mfa-disable/current-user-mfa-disable-modal.element.ts @@ -16,10 +16,10 @@ export class UmbCurrentUserMfaDisableModalElement extends UmbModalBaseElement< #notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE; @state() - _buttonState?: UUIButtonState; + private _buttonState?: UUIButtonState; @query('#code') - _codeInput!: HTMLInputElement; + private _codeInput!: HTMLInputElement; constructor() { super(); 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 7c7fa88ced0e..5df228dfceb6 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 @@ -20,7 +20,7 @@ export class UmbCurrentUserMfaModalElement extends UmbLitElement { modalContext?: UmbModalContext; @state() - _items: Array = []; + private _items: Array = []; #currentUserRepository = new UmbCurrentUserRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-sections-column-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-sections-column-layout.element.ts index 9b5fa4d0f601..6f43b9ae1f5a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-sections-column-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/components/user-group-table-sections-column-layout.element.ts @@ -16,11 +16,11 @@ export class UmbUserGroupTableSectionsColumnLayoutElement extends UmbLitElement override updated(changedProperties: Map) { if (changedProperties.has('value')) { - this.observeSectionNames(); + this._observeSectionNames(); } } - private observeSectionNames() { + private _observeSectionNames() { this.observe( umbExtensionsRegistry.byType('section'), (sections) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts index 6891f4ab14bd..3721b899855a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group/components/user-group-granular-permission-list.element.ts @@ -9,10 +9,10 @@ import { filterFrozenArray } from '@umbraco-cms/backoffice/observable-api'; @customElement('umb-user-group-granular-permission-list') export class UmbUserGroupGranularPermissionListElement extends UmbLitElement { @state() - _userGroupPermissions?: Array; + private _userGroupPermissions?: Array; @state() - _userGroupFallbackPermissions?: Array; + private _userGroupFallbackPermissions?: Array; #workspaceContext?: typeof UMB_USER_GROUP_WORKSPACE_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts index f1c60d67af74..43fc5040bf87 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/modals/settings/entity-user-permission-settings-modal.element.ts @@ -20,13 +20,13 @@ export class UmbEntityUserPermissionSettingsModalElement extends UmbModalBaseEle } @state() - _headline: string = 'Set permissions'; + private _headline: string = 'Set permissions'; @state() - _entityType?: string; + private _entityType?: string; @state() - _preset?: UmbEntityUserPermissionSettingsModalValue; + private _preset?: UmbEntityUserPermissionSettingsModalValue; override connectedCallback(): void { super.connectedCallback(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts index c18ac77d4bcb..bed79f981377 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/client-credential/create/modal/create-user-client-credential-modal.element.ts @@ -15,11 +15,8 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement< UmbCreateUserClientCredentialModalData, UmbCreateUserClientCredentialModalValue > { - @query('#CreateUserClientCredentialForm') - _form?: HTMLFormElement; - @query('#unique') - _inputUniqueElement?: UUIInputElement; + private _inputUniqueElement?: UUIInputElement; #userClientCredentialRepository = new UmbUserClientCredentialRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 2dec9fc4a308..6e861a6bc8a9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -27,7 +27,7 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { private _orderByOptions: Array = []; @state() - _activeOrderByOption?: UmbUserOrderByOption; + private _activeOrderByOption?: UmbUserOrderByOption; #collectionContext?: typeof UMB_USER_COLLECTION_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts index 84fe60e2da3e..9e07c269c247 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-avatar/user-avatar.element.ts @@ -28,7 +28,7 @@ export class UmbUserAvatarElement extends UmbLitElement { } public set imgUrls(value: Array) { this.#imgUrls = value; - this.hasImgUrls = value.length > 0; + this._hasImgUrls = value.length > 0; this.#setImgSrcSizes(); } #imgUrls: Array = []; @@ -40,7 +40,7 @@ export class UmbUserAvatarElement extends UmbLitElement { private _imgSrc = ''; @state() - private hasImgUrls = false; + private _hasImgUrls = false; @query('uui-avatar') avatarElement!: UUIAvatarElement; @@ -82,7 +82,7 @@ export class UmbUserAvatarElement extends UmbLitElement { } async #setImgSrc() { - if (!this.hasImgUrls) return; + if (!this._hasImgUrls) return; if (!this.avatarElement) return; setTimeout(() => { @@ -104,7 +104,7 @@ export class UmbUserAvatarElement extends UmbLitElement { const classes = { default: this.kind === UmbUserKind.API, api: this.kind === UmbUserKind.API, - 'has-image': this.hasImgUrls, + 'has-image': this._hasImgUrls, }; return html` = []; + private _displayValue: Array = []; async #observeItems() { // TODO: get back to this when documents have been decoupled from users. diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts index 2ed6c18da995..7c5494fd2d02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/components/user-media-start-node/user-media-start-node.element.ts @@ -22,7 +22,7 @@ export class UmbUserMediaStartNodeElement extends UmbLitElement { readonly = false; @state() - _displayValue: Array = []; + private _displayValue: Array = []; async #observeItems() { // TODO: get back to this when documents have been decoupled from users. diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-delete/user-allow-delete-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-delete/user-allow-delete-action.condition.ts index 3bde4033af54..ca95bfdebbc6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-delete/user-allow-delete-action.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-delete/user-allow-delete-action.condition.ts @@ -1,7 +1,7 @@ import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; export class UmbUserAllowDeleteActionCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { // don't allow the current user to delete themselves if (!this.userUnique || (await this.isCurrentUser())) { this.permitted = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-disable/user-allow-disable-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-disable/user-allow-disable-action.condition.ts index 208accbab725..11edd44bc366 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-disable/user-allow-disable-action.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-disable/user-allow-disable-action.condition.ts @@ -2,7 +2,7 @@ import { UmbUserStateEnum } from '../../types.js'; import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; export class UmbUserAllowDisableActionCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { // don't allow the current user to disable themselves if (!this.userUnique || (await this.isCurrentUser())) { this.permitted = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-enable/user-allow-enable-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-enable/user-allow-enable-action.condition.ts index e44449d2878e..1e651137f67c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-enable/user-allow-enable-action.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-enable/user-allow-enable-action.condition.ts @@ -2,7 +2,7 @@ import { UmbUserStateEnum } from '../../types.js'; import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; export class UmbUserAllowEnableActionCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { // don't allow the current user to enable themselves if (!this.userUnique || (await this.isCurrentUser())) { this.permitted = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-unlock/user-allow-unlock-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-unlock/user-allow-unlock-action.condition.ts index 517bd0c12d13..5757109778cb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-unlock/user-allow-unlock-action.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/allow-unlock/user-allow-unlock-action.condition.ts @@ -2,7 +2,7 @@ import { UmbUserStateEnum } from '../../types.js'; import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; export class UmbUserAllowUnlockActionCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { // don't allow the current user to unlock themselves if (!this.userUnique || (await this.isCurrentUser())) { this.permitted = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/is-default-kind/user-is-default-kind.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/is-default-kind/user-is-default-kind.condition.ts index 086e72c181fd..bb657db5d6a4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/is-default-kind/user-is-default-kind.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/is-default-kind/user-is-default-kind.condition.ts @@ -2,7 +2,7 @@ import { UmbUserKind } from '../../utils/index.js'; import { UmbUserActionConditionBase } from '../user-allow-action-base.condition.js'; export class UmbUserIsDefaultKindCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { // don't allow the current user to delete themselves if (this.userKind === UmbUserKind.DEFAULT) { this.permitted = true; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/modal/create-user-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/modal/create-user-modal.element.ts index 14157b73940e..00c545516530 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/modal/create-user-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/create/modal/create-user-modal.element.ts @@ -13,7 +13,7 @@ export class UmbCreateUserModalElement extends UmbModalBaseElement { @state() - _userItem?: UmbUserItemModel; + private _userItem?: UmbUserItemModel; @state() - _initialPassword: string = ''; + private _initialPassword: string = ''; #userItemRepository = new UmbUserItemRepository(this); #userNewPasswordRepository = new UmbNewUserPasswordRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/resend-invite.action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/resend-invite.action.condition.ts index 017e980c6ab8..1c6d27023afb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/resend-invite.action.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/invite/entity-action/resend-invite/resend-invite.action.condition.ts @@ -2,7 +2,7 @@ import { UmbUserActionConditionBase } from '../../../conditions/user-allow-actio import { UserStateModel } from '@umbraco-cms/backoffice/external/backend-api'; export class UmbUserAllowResendInviteActionCondition extends UmbUserActionConditionBase { - async _onUserDataChange() { + protected override async _onUserDataChange() { if (!this.userUnique) { this.permitted = false; return; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/item/user-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/item/user-item-ref.element.ts index f61cc1bec984..87866d755da8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/item/user-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/item/user-item-ref.element.ts @@ -28,10 +28,10 @@ export class UmbUserItemRefElement extends UmbLitElement { standalone = false; @state() - _editPath = ''; + private _editPath = ''; @state() - _userHasSectionAccess = false; + private _userHasSectionAccess = false; constructor() { super(); 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 b43fb0d359c4..3d22900b058c 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 @@ -19,7 +19,7 @@ export class UmbUserMfaModalElement extends UmbLitElement { modalContext?: UmbModalContext; @state() - _items: Array = []; + private _items: Array = []; #unique = ''; #userRepository = new UmbUserRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-avatar/user-workspace-avatar.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-avatar/user-workspace-avatar.element.ts index 932d6327025f..bdb74636720f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-avatar/user-workspace-avatar.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/workspace/user/components/user-workspace-avatar/user-workspace-avatar.element.ts @@ -13,7 +13,7 @@ export class UmbUserAvatarElement extends UmbLitElement { private _allowedFileTypes = 'image/*'; @query('#AvatarFileField') - _avatarFileField?: HTMLInputElement; + private _avatarFileField?: HTMLInputElement; @query('uui-combobox') private _selectElement!: HTMLInputElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook-event/modal/webhook-events-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook-event/modal/webhook-events-modal.element.ts index ff77e8d511f8..163eadd65ca8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook-event/modal/webhook-events-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook-event/modal/webhook-events-modal.element.ts @@ -11,7 +11,7 @@ export class UmbWebhookEventsModalElement extends UmbModalBaseElement< UmbWebhookPickerModalValue > { @state() - _events: Array = []; + private _events: Array = []; #repository = new UmbWebhookEventRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts index c5cef0767e12..8d746a3b8f18 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/webhook/webhook/workspace/webhook-workspace-editor.element.ts @@ -10,13 +10,13 @@ export class UmbWebhookWorkspaceEditorElement extends UmbLitElement { #workspaceContext?: typeof UMB_WEBHOOK_WORKSPACE_CONTEXT.TYPE; @state() - _url: string = ''; + private _url: string = ''; @state() - _name = ''; + private _name = ''; @state() - _description = ''; + private _description = ''; constructor() { super(); From a40a1e09b78e160931f35ac8b6f8c8a4803b96fd Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:20:22 +0200 Subject: [PATCH 20/49] deprecates invalid constant name to replace with Umb prefix --- .../src/mocks/handlers/manifests.handlers.ts | 18 +++++++++--------- .../src/packages/packages/types.ts | 13 ++++++++++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/manifests.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/manifests.handlers.ts index d37caf6bb0dc..e75253ceafc8 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/manifests.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/manifests.handlers.ts @@ -1,9 +1,9 @@ const { rest } = window.MockServiceWorker; -import type { PackageManifestResponse } from '../../packages/packages/types.js'; +import type { UmbPackageManifestResponse } from '../../packages/packages/types.js'; import { umbracoPath } from '@umbraco-cms/backoffice/utils'; -const privateManifests: PackageManifestResponse = [ +const privateManifests: UmbPackageManifestResponse = [ { name: 'My Package Name', version: '1.0.0', @@ -103,7 +103,7 @@ const privateManifests: PackageManifestResponse = [ }, ]; -const publicManifests: PackageManifestResponse = [ +const publicManifests: UmbPackageManifestResponse = [ { name: 'My Auth Package', extensions: [ @@ -148,25 +148,25 @@ export const manifestDevelopmentHandlers = [ return res( // Respond with a 200 status code ctx.status(200), - ctx.json(privateManifests), + ctx.json(privateManifests), ); }), rest.get(umbracoPath('/manifest/manifest/public'), (_req, res, ctx) => { - return res(ctx.status(200), ctx.json(publicManifests)); + return res(ctx.status(200), ctx.json(publicManifests)); }), rest.get(umbracoPath('/manifest/manifest'), (_req, res, ctx) => { - return res(ctx.status(200), ctx.json([...privateManifests, ...publicManifests])); + return res(ctx.status(200), ctx.json([...privateManifests, ...publicManifests])); }), ]; export const manifestEmptyHandlers = [ rest.get(umbracoPath('/manifest/manifest/private'), (_req, res, ctx) => { - return res(ctx.status(200), ctx.json([])); + return res(ctx.status(200), ctx.json([])); }), rest.get(umbracoPath('/manifest/manifest/public'), (_req, res, ctx) => { - return res(ctx.status(200), ctx.json([])); + return res(ctx.status(200), ctx.json([])); }), rest.get(umbracoPath('/manifest/manifest'), (_req, res, ctx) => { - return res(ctx.status(200), ctx.json([])); + return res(ctx.status(200), ctx.json([])); }), ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/types.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/types.ts index b3eb720c5255..b0b8c774202e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/types.ts @@ -2,7 +2,18 @@ import type { ManifestResponseModel } from '@umbraco-cms/backoffice/external/bac export type UmbPackage = ManifestResponseModel; -export type PackageManifestResponse = UmbPackage[]; +/** + * Represents the response from the package manifest endpoint. + * This type is used to define the structure of the package manifest response. + */ +export type UmbPackageManifestResponse = UmbPackage[]; + +/** + * Represents the response from the package manifest endpoint. + * @deprecated Use `UmbPackageManifestResponse` instead. This will be removed in Umbraco 18. + */ +// eslint-disable-next-line @typescript-eslint/naming-convention +export type PackageManifestResponse = UmbPackageManifestResponse; export type UmbPackageWithMigrationStatus = UmbPackage & { hasPendingMigrations: boolean; From 2ac08a9f5bf9d2ab7ec95f833ab7f56ac400c4cb Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:23:53 +0200 Subject: [PATCH 21/49] renames MediaValueType to comply with naming conventions --- .../input-upload-field.element.ts | 6 +++--- .../property-editor-ui-upload-field.element.ts | 4 ++-- .../media/property-editors/upload-field/types.ts | 13 ++++++++++++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts index f4203b0ce5dd..10ec9ab097c2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-upload-field/input-upload-field.element.ts @@ -1,4 +1,4 @@ -import type { MediaValueType } from '../../property-editors/upload-field/types.js'; +import type { UmbMediaValueType } from '../../property-editors/upload-field/types.js'; import type { ManifestFileUploadPreview } from './file-upload-preview.extension.js'; import { getMimeTypeFromExtension } from './utils.js'; import { css, customElement, html, ifDefined, nothing, property, state } from '@umbraco-cms/backoffice/external/lit'; @@ -20,11 +20,11 @@ import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; @customElement('umb-input-upload-field') export class UmbInputUploadFieldElement extends UmbLitElement { @property({ type: Object, attribute: false }) - set value(value: MediaValueType) { + set value(value: UmbMediaValueType) { this.#src = value?.src ?? ''; this.#setPreviewAlias(); } - get value(): MediaValueType { + get value(): UmbMediaValueType { return { src: this.#src, temporaryFileId: this.temporaryFile?.temporaryUnique, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/property-editor-ui-upload-field.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/property-editor-ui-upload-field.element.ts index 168b2b0fc206..3390df20626b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/property-editor-ui-upload-field.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/property-editor-ui-upload-field.element.ts @@ -1,5 +1,5 @@ import type { UmbInputUploadFieldElement } from '../../components/input-upload-field/input-upload-field.element.js'; -import type { MediaValueType } from './types.js'; +import type { UmbMediaValueType } from './types.js'; import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement, @@ -14,7 +14,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; @customElement('umb-property-editor-ui-upload-field') export class UmbPropertyEditorUIUploadFieldElement extends UmbLitElement implements UmbPropertyEditorUiElement { @property({ type: Object }) - value: MediaValueType = {}; + value: UmbMediaValueType = {}; @state() private _fileExtensions?: Array; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/types.ts index dd44a880f744..da498b54ffd0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/upload-field/types.ts @@ -1,4 +1,15 @@ -export interface MediaValueType { +/** + * Defines the structure of a media value type in Umbraco. + */ +export interface UmbMediaValueType { temporaryFileId?: string | null; src?: string; } + +/** + * @deprecated Use `UmbMediaValueType` instead. This will be removed in Umbraco 18. + */ +// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/naming-convention +export interface MediaValueType extends UmbMediaValueType { + // Left empty +} From 10bbb49a15eec19ebed61cd6138cc92fc0aa7a5b Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:53:33 +0200 Subject: [PATCH 22/49] chore(eslint): disable naming conventions for local router-slot package --- .../core/router/generate-route-path-builder.function.ts | 4 ++-- .../modal-registration/modal-route-registration.controller.ts | 1 + .../modal-registration/modal-route-registration.interface.ts | 1 + .../src/packages/core/router/route/route.context.ts | 1 + .../src/packages/core/router/router-slot/config.ts | 2 +- .../src/packages/core/router/router-slot/model.ts | 1 + .../src/packages/core/router/router-slot/router-slot.ts | 3 ++- 7 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/generate-route-path-builder.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/generate-route-path-builder.function.ts index d14780544cd8..36bf0121ef0a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/generate-route-path-builder.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/generate-route-path-builder.function.ts @@ -1,12 +1,12 @@ import { stripSlash } from './router-slot/util.js'; -import { umbUrlPatternToString, type UrlParametersRecord } from '@umbraco-cms/backoffice/utils'; +import { umbUrlPatternToString, type UmbUrlParametersRecord } from '@umbraco-cms/backoffice/utils'; /** * * @param path */ export function umbGenerateRoutePathBuilder(path: string) { - return (params: UrlParametersRecord | null) => { + return (params: UmbUrlParametersRecord | null) => { return '/' + stripSlash(umbUrlPatternToString(path, params)) + '/'; }; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.controller.ts index b8fe83766a35..5886dccdd4a3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.controller.ts @@ -291,6 +291,7 @@ export class UmbModalRouteRegistrationController< this.#urlBuilderCallback = callback; return this; } + // eslint-disable-next-line @typescript-eslint/naming-convention public _internal_setRouteBuilder(urlBuilder: UmbModalRouteBuilder) { if (!this.#routeContext) return; this.#routeBuilder = urlBuilder; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.interface.ts index df8b77a55590..d3dbbf09b98b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/modal-registration/modal-route-registration.interface.ts @@ -20,5 +20,6 @@ export interface UmbModalRouteRegistration< params: Params, ): Promise>; + // eslint-disable-next-line @typescript-eslint/naming-convention _internal_setRouteBuilder(builder: UmbModalRouteBuilder): void; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/route/route.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/route/route.context.ts index fd2e9daeb89f..ecbe3ad29d08 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/route/route.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/route/route.context.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import type { IRouterSlot } from '../router-slot/index.js'; import type { UmbModalRouteRegistration } from '../modal-registration/modal-route-registration.interface.js'; import { umbGenerateRoutePathBuilder } from '../generate-route-path-builder.function.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/config.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/config.ts index 9d1a16a76d48..571e9dee72ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/config.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/config.ts @@ -1,6 +1,6 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import type { PathMatch } from './model.js'; -/* eslint-disable local-rules/exported-string-constant-naming */ export const CATCH_ALL_WILDCARD: string = '**'; export const TRAVERSE_FLAG: string = '\\.\\.\\/'; export const PARAM_IDENTIFIER: RegExp = /:([^\\/]+)/g; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/model.ts index 4b9892946a31..963868ab1d3e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/model.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ export interface IRouterSlot extends HTMLElement { readonly route: IRoute | null; readonly isRoot: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/router-slot.ts b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/router-slot.ts index de09de1d2a4b..d0d982c51fa7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/router-slot.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/router/router-slot/router-slot.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import { GLOBAL_ROUTER_EVENTS_TARGET, ROUTER_SLOT_TAG_NAME } from './config.js'; import type { Cancel, @@ -44,7 +45,7 @@ ensureAnchorHistory(); * @slot - Default content. * @event changestate - Dispatched when the router slot state changes. */ -// eslint-disable-next-line local-rules/enforce-element-suffix-on-element-class-name, local-rules/umb-class-prefix +// eslint-disable-next-line local-rules/enforce-element-suffix-on-element-class-name export class RouterSlot extends HTMLElement implements IRouterSlot { /** * Method to cancel navigation if changed. From ad8cc75f0192abb4ac619e08108716cc56e4a0b7 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:53:41 +0200 Subject: [PATCH 23/49] chore(eslint): follow naming conventions --- .../restore-from-recycle-bin-modal.element.ts | 6 +-- .../bulk-trash/bulk-trash.action.ts | 8 ++-- .../core/resources/cancelable-promise.ts | 6 +-- .../src/packages/core/resources/types.ts | 2 + .../section/conditions/section-alias/types.ts | 2 + .../core/section/section-default.element.ts | 2 +- .../modal/rename-server-file-modal.element.ts | 2 +- .../packages/core/sorter/sorter.controller.ts | 17 ++++---- .../src/packages/core/temporary-file/types.ts | 2 + .../modal/duplicate-to-modal.element.ts | 2 +- .../modal/sort-children-of-modal.element.ts | 4 +- .../modal/folder-create-modal.element.ts | 2 +- .../folder/modal/folder-modal-element-base.ts | 2 +- .../tree-item-base/tree-item-element-base.ts | 2 +- .../core/tree/tree-item/tree-item.element.ts | 12 +++--- .../tree-picker-modal.element.ts | 10 ++--- .../core/utils/bytes/bytes.function.ts | 1 + .../path/url-pattern-to-string.function.ts | 4 +- .../src/packages/core/utils/type/diff.type.ts | 1 + .../workspace-action-menu-item.element.ts | 2 +- .../workspace-action-menu.element.ts | 7 ++-- .../workspace-action-default-kind.element.ts | 4 +- .../workspace-menu-breadcrumb.element.ts | 4 +- ...rkspace-variant-menu-breadcrumb.element.ts | 8 ++-- .../workspace-footer.element.ts | 6 +-- ...ace-split-view-variant-selector.element.ts | 2 +- .../conditions/workspace-alias/types.ts | 2 + .../workspace-entity-is-new/types.ts | 2 +- .../conditions/workspace-entity-type/types.ts | 1 + ...tree-entity-workspace-context.interface.ts | 1 + ...workspace-split-view-manager.controller.ts | 10 ++++- .../entity-detail-workspace-base.ts | 7 +++- .../routable/routable-workspace.element.ts | 2 +- .../core/workspace/workspace.element.ts | 2 +- .../workspace-view-data-type-info.element.ts | 6 +-- ...ment-blueprint-workspace-editor.element.ts | 8 ++-- ...-blueprint-workspace-split-view.element.ts | 4 +- ...ent-type-property-type-item-ref.element.ts | 2 +- .../document-type-workspace.context.ts | 2 +- .../document-table-column-name.element.ts | 2 +- .../document-table-column-state.element.ts | 2 +- .../modal/duplicate-document-modal.element.ts | 2 +- .../save-modal/document-save-modal.element.ts | 2 +- ...ocument-variant-language-picker.element.ts | 4 +- ...-publish-with-descendants-modal.element.ts | 4 +- .../modal/document-publish-modal.element.ts | 8 ++-- .../modal/document-unpublish-modal.element.ts | 12 +++--- .../document-reference-table.element.ts | 6 +-- .../rollback/modal/rollback-modal.element.ts | 12 +++--- .../document-search-result-item.element.ts | 6 +-- ...rty-value-permission-flow-modal.element.ts | 2 +- .../property-type-modal.element.ts | 4 +- ...-property-value-user-permission.element.ts | 14 +++---- ...cument-granular-user-permission.element.ts | 14 +++---- .../workspace/actions/save.action.ts | 2 +- .../document-workspace-editor.element.ts | 8 ++-- .../document-workspace-split-view.element.ts | 6 +-- .../modal/embedded-media-modal.stories.ts | 29 ++++++------- .../health-check/health-check.extension.ts | 13 +++++- ...health-check-group-box-overview.element.ts | 8 ++-- .../views/health-check-group.element.ts | 8 ++-- .../app-language-select.element.ts | 41 +++++++++---------- .../item/langauge-item-ref.element.ts | 2 +- ...language-details-workspace-view.element.ts | 6 +-- .../donut-chart/donut-chart.element.ts | 18 ++++---- .../log-viewer-date-range-selector.element.ts | 4 +- .../log-viewer/repository/sources/index.ts | 4 +- .../sources/log-viewer.server.data.ts | 8 ++-- .../workspace/logviewer-workspace.context.ts | 20 ++++----- .../log-viewer-log-types-chart.element.ts | 18 ++++---- .../log-viewer-messages-list.element.ts | 16 ++++---- .../log-viewer-polling-button.element.ts | 19 +++++---- .../log-viewer-search-input.element.ts | 10 ++--- .../input-dropzone/input-dropzone.element.ts | 4 +- ...rty-editor-ui-media-type-picker.element.ts | 4 +- ...dia-type-property-type-item-ref.element.ts | 2 +- ...edia-history-workspace-info-app.element.ts | 10 ++--- .../image-cropper-focus-setter.element.ts | 26 ++++++------ .../image-cropper.element.ts | 17 ++++---- .../media/dropzone/dropzone-media.element.ts | 4 +- .../media/item/media-item-ref.element.ts | 4 +- .../media-picker-modal.element.ts | 8 ++-- ...y-editor-ui-media-entity-picker.element.ts | 4 +- .../media-workspace-editor.element.ts | 8 ++-- .../media-workspace-split-view.element.ts | 6 +-- ...y-editor-ui-member-group-picker.element.ts | 4 +- ...ber-type-property-type-item-ref.element.ts | 2 +- .../member-workspace-split-view.element.ts | 6 +-- .../input-multi-url.element.ts | 4 +- .../workspace/workspace-package.element.ts | 2 +- .../repository/sources/package.server.data.ts | 22 +++++----- ...dashboard-performance-profiling.element.ts | 6 ++- .../input-content-picker-source.element.ts | 2 +- ...r-ui-content-picker-source-type.element.ts | 10 ++--- 94 files changed, 347 insertions(+), 311 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.element.ts index c299d944ad54..8370cc78b0dd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.element.ts @@ -18,13 +18,13 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement< UmbRestoreFromRecycleBinModalValue > { @state() - _isAutomaticRestore = false; + private _isAutomaticRestore = false; @state() - _restoreItem?: any; + private _restoreItem?: any; @state() - _destinationItem?: any; + private _destinationItem?: any; #recycleBinRepository?: UmbRecycleBinRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts index 384e111ed5eb..996de8b45523 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts @@ -18,7 +18,7 @@ export class UmbTrashEntityBulkAction< MetaKindType extends MetaEntityBulkActionTrashKind = MetaEntityBulkActionTrashKind, > extends UmbEntityBulkActionBase { #localize = new UmbLocalizationController(this); - _items: Array = []; + #items: Array = []; override async execute() { if (this.selection?.length === 0) { @@ -27,7 +27,7 @@ export class UmbTrashEntityBulkAction< // TODO: Move item look up to a future bulk action context await this.#requestItems(); - await this._confirmTrash(this._items); + await this._confirmTrash(this.#items); await this.#requestBulkTrash(this.selection); } @@ -52,7 +52,7 @@ export class UmbTrashEntityBulkAction< const { data } = await itemRepository.requestItems(this.selection); - this._items = data ?? []; + this.#items = data ?? []; } async #requestBulkTrash(uniques: Array) { @@ -106,7 +106,7 @@ export class UmbTrashEntityBulkAction< eventContext.dispatchEvent(reloadStructure); } - const succeededItems = this._items.filter((item) => succeeded.includes(item.unique)); + const succeededItems = this.#items.filter((item) => succeeded.includes(item.unique)); succeededItems.forEach((item) => { const trashedEvent = new UmbEntityTrashedEvent({ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/resources/cancelable-promise.ts b/src/Umbraco.Web.UI.Client/src/packages/core/resources/cancelable-promise.ts index a3454d7c6adf..74c58c211fbc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/resources/cancelable-promise.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/resources/cancelable-promise.ts @@ -1,6 +1,6 @@ import { UmbCancelError } from './umb-error.js'; -export interface OnCancel { +export interface UmbOnCancel { readonly isResolved: boolean; readonly isRejected: boolean; readonly isCancelled: boolean; @@ -21,7 +21,7 @@ export class UmbCancelablePromise implements Promise { executor: ( resolve: (value: T | PromiseLike) => void, reject: (reason?: unknown) => void, - onCancel: OnCancel, + onCancel: UmbOnCancel, ) => void, ) { this._isResolved = false; @@ -67,7 +67,7 @@ export class UmbCancelablePromise implements Promise { get: (): boolean => this._isCancelled, }); - return executor(onResolve, onReject, onCancel as OnCancel); + return executor(onResolve, onReject, onCancel as UmbOnCancel); }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/resources/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/resources/types.ts index bd685f00892d..60e415e0d5b0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/resources/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/resources/types.ts @@ -1,6 +1,8 @@ import type { UmbApiError, UmbCancelError } from './umb-error.js'; export type * from './data-api/types.js'; +// TODO: Rename this to `UmbXhrRequestOptions` in a future version. +// eslint-disable-next-line @typescript-eslint/naming-convention export interface XhrRequestOptions extends UmbTryExecuteOptions { baseUrl?: string; method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/section/conditions/section-alias/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/section/conditions/section-alias/types.ts index 5ef40e419d40..dac6d0e2385e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/section/conditions/section-alias/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/section/conditions/section-alias/types.ts @@ -1,6 +1,8 @@ import type { UMB_SECTION_ALIAS_CONDITION_ALIAS } from './constants.js'; import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; +// TODO: Rename this to `UmbSectionAliasConditionConfig` in a future version. +// eslint-disable-next-line @typescript-eslint/naming-convention export type SectionAliasConditionConfig = UmbConditionConfigBase & { /** * Define the section that this extension should be available in 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 7161de8a2ac0..9b3d6fc293bf 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 @@ -43,7 +43,7 @@ export class UmbSectionDefaultElement extends UmbLitElement implements UmbSectio private _sidebarApps?: Array>; @state() - _splitPanelPosition = '300px'; + private _splitPanelPosition = '300px'; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/modal/rename-server-file-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/modal/rename-server-file-modal.element.ts index 66a597b1b315..75f51d9a1893 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/modal/rename-server-file-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/server-file-system/rename/modal/rename-server-file-modal.element.ts @@ -17,7 +17,7 @@ export class UmbRenameModalElement extends UmbModalBaseElement; @state() - _name = ''; + private _name = ''; override connectedCallback(): void { super.connectedCallback(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts index 8b7546a4fcea..2961604efb23 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts @@ -113,6 +113,7 @@ export type UmbSorterResolvePlacementArgs = UmbSorterResolvePlacementArgs< T, ElementType @@ -934,7 +935,7 @@ export class UmbSorterController { - this.#autoScrollEl!.scrollLeft += this.autoScrollX * autoScrollSpeed; - this.#autoScrollEl!.scrollTop += this.autoScrollY * autoScrollSpeed; + this.#autoScrollEl!.scrollLeft += this._autoScrollX * autoScrollSpeed; + this.#autoScrollEl!.scrollTop += this._autoScrollY * autoScrollSpeed; this.#autoScrollRAF = requestAnimationFrame(this.#performAutoScroll); }; #stopAutoScroll() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/temporary-file/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/temporary-file/types.ts index 821a770766df..9c5af3f492f7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/temporary-file/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/temporary-file/types.ts @@ -1,5 +1,7 @@ import type { TemporaryFileConfigurationResponseModel } from '@umbraco-cms/backoffice/external/backend-api'; +// TODO: Rename this to `UmbTemporaryFileStatus` in a future version. +// eslint-disable-next-line @typescript-eslint/naming-convention export enum TemporaryFileStatus { SUCCESS = 'success', WAITING = 'waiting', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/modal/duplicate-to-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/modal/duplicate-to-modal.element.ts index 6689f250f73e..941bd38ee070 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/modal/duplicate-to-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/duplicate-to/modal/duplicate-to-modal.element.ts @@ -9,7 +9,7 @@ const elementName = 'umb-duplicate-to-modal'; @customElement(elementName) export class UmbDuplicateToModalElement extends UmbModalBaseElement { @state() - _destinationUnique?: string | null; + private _destinationUnique?: string | null; #onTreeSelectionChange(event: UmbSelectionChangeEvent) { const target = event.target as UmbTreeElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/modal/sort-children-of-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/modal/sort-children-of-modal.element.ts index 57ef96988f68..14faaf5d2dac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/modal/sort-children-of-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/entity-actions/sort-children-of/modal/sort-children-of-modal.element.ts @@ -27,10 +27,10 @@ export class UmbSortChildrenOfModalElement< protected _children: Array = []; @state() - _currentPage = 1; + private _currentPage = 1; @state() - _totalPages = 1; + private _totalPages = 1; @state() protected _tableColumns: Array = []; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-create-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-create-modal.element.ts index d5e4a787c8d0..60eeaca3fae2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-create-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-create-modal.element.ts @@ -9,7 +9,7 @@ export class UmbFolderCreateModalElement extends UmbFolderModalElementBase< UmbFolderCreateModalValue > { @state() - _folderScaffold?: UmbFolderModel; + private _folderScaffold?: UmbFolderModel; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-modal-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-modal-element-base.ts index 6d55666c21b2..823969c9b24e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-modal-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/folder/modal/folder-modal-element-base.ts @@ -12,7 +12,7 @@ export abstract class UmbFolderModalElementBase< FolderModalValueType extends { folder: UmbFolderModel }, > extends UmbModalBaseElement { @state() - _isNew = false; + protected _isNew = false; folderRepository?: UmbDetailRepository; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-element-base.ts index 4879f2865ca9..b325590d1ffa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item-base/tree-item-element-base.ts @@ -23,7 +23,7 @@ export abstract class UmbTreeItemElementBase< protected _item?: TreeItemModelType; @state() - _label?: string; + private _label?: string; @property({ type: Object, attribute: false }) public set api(value: TreeItemContextType | undefined) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item.element.ts index 90ab9c2cdc08..bd85ac906864 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item/tree-item.element.ts @@ -8,22 +8,22 @@ import { createObservablePart } from '@umbraco-cms/backoffice/observable-api'; @customElement('umb-tree-item') export class UmbTreeItemElement extends UmbExtensionElementAndApiSlotElementBase { - _entityType?: string; @property({ type: String, reflect: true }) get entityType() { - return this._entityType; + return this.#entityType; } set entityType(newVal) { - this._entityType = newVal; + this.#entityType = newVal; this.#observeEntityType(); } + #entityType?: string; #observeEntityType() { - if (!this._entityType) return; + if (!this.#entityType) return; const filterByEntityType = (manifest: ManifestTreeItem) => { - if (!this._entityType) return false; - return manifest.forEntityTypes.includes(this._entityType); + if (!this.#entityType) return false; + return manifest.forEntityTypes.includes(this.#entityType); }; this.observe( diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts index b2e6c660845e..43bd74613646 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-picker-modal/tree-picker-modal.element.ts @@ -14,23 +14,23 @@ export class UmbTreePickerModalElement { @state() - _selectionConfiguration: UmbTreeSelectionConfiguration = { + private _selectionConfiguration: UmbTreeSelectionConfiguration = { multiple: false, selectable: true, selection: [], }; @state() - _hasSelection: boolean = false; + private _hasSelection: boolean = false; @state() - _createPath?: string; + private _createPath?: string; @state() - _createLabel?: string; + private _createLabel?: string; @state() - _searchQuery?: string; + private _searchQuery?: string; #pickerContext = new UmbTreeItemPickerContext(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/bytes/bytes.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/bytes/bytes.function.ts index d4c8fa242958..af449fb4e288 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/bytes/bytes.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/bytes/bytes.function.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ /* * This Source Code has been derived from Contentment. * https://github.com/leekelleher/umbraco-contentment/blob/develop/src/Umbraco.Community.Contentment/DataEditors/Bytes/bytes.js diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts index 9b200c97855b..8ff2829f6da1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts @@ -1,4 +1,4 @@ -export type UrlParametersRecord = Record string } | null>; +export type UmbUrlParametersRecord = Record string } | null>; const PARAM_IDENTIFIER = /:([^/]+)/g; @@ -7,7 +7,7 @@ const PARAM_IDENTIFIER = /:([^/]+)/g; * @param pattern * @param params */ -export function umbUrlPatternToString(pattern: string, params: UrlParametersRecord | null): string { +export function umbUrlPatternToString(pattern: string, params: UmbUrlParametersRecord | null): string { return params ? pattern.replace(PARAM_IDENTIFIER, (_substring: string, ...args: string[]) => { const segmentValue = params![args[0]]; // (segmentValue is the value to replace the parameter) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/diff.type.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/diff.type.ts index 699ea2524f57..197c63bdb4bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/diff.type.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/type/diff.type.ts @@ -2,4 +2,5 @@ type _FilterKeys = { [K in keyof T]: K extends keyof U ? never : K; }; +// eslint-disable-next-line @typescript-eslint/naming-convention export type Diff = Pick[keyof T]>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts index 3f776ed25df8..f161fbe6711f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu-item/default/workspace-action-menu-item.element.ts @@ -16,7 +16,7 @@ export class UmbWorkspaceActionMenuItemElement< #api?: ApiType; @state() - _href?: string; + private _href?: string; @property({ attribute: false }) public manifest?: ManifestWorkspaceActionMenuItemDefaultKind; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts index 8094fab6649e..93fd02d32609 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action-menu/workspace-action-menu.element.ts @@ -17,7 +17,7 @@ export class UmbWorkspaceActionMenuElement extends UmbLitElement { items: Array> = []; @state() - _popoverOpen = false; + private _popoverOpen = false; #onPopoverToggle(event: ToggleEvent) { // TODO: This ignorer is just neede for JSON SCHEMA TO WORK, As its not updated with latest TS jet. @@ -73,7 +73,6 @@ export class UmbWorkspaceActionMenuElement extends UmbLitElement { #workspace-action-popover { min-width: 200px; - } #popover-trigger { @@ -82,8 +81,8 @@ export class UmbWorkspaceActionMenuElement extends UmbLitElement { } #workspace-action-popover-layout { - overflow: visible; - } + overflow: visible; + } `, ]; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts index 019657e5d7a5..00666645e847 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-action/default/workspace-action-default-kind.element.ts @@ -73,7 +73,7 @@ export class UmbWorkspaceActionElement< private _href?: string; @state() - _isDisabled = false; + private _isDisabled = false; @state() private _items: Array> = []; @@ -141,7 +141,7 @@ export class UmbWorkspaceActionElement< } #initButtonStateReset() { - /* When the button has additional options, we do not show the waiting state. + /* When the button has additional options, we do not show the waiting state. Therefore, we need to ensure the button state is reset, so we are able to show the success state again. */ this.#clearButtonStateResetTimeout(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.element.ts index 4160be3e0bfa..c23a374acd0d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-menu-breadcrumb/workspace-menu-breadcrumb.element.ts @@ -9,10 +9,10 @@ import type { UmbMenuStructureWorkspaceContext, UmbStructureItemModel } from '@u @customElement('umb-workspace-breadcrumb') export class UmbWorkspaceBreadcrumbElement extends UmbLitElement { @state() - _name: string = ''; + private _name: string = ''; @state() - _structure: UmbStructureItemModel[] = []; + private _structure: UmbStructureItemModel[] = []; // TODO: figure out the correct context type #workspaceContext?: any; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.ts index 05a7d9c44904..994c17993885 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.ts @@ -13,16 +13,16 @@ import type { UmbVariantStructureItemModel } from '@umbraco-cms/backoffice/menu' @customElement('umb-workspace-variant-menu-breadcrumb') export class UmbWorkspaceVariantMenuBreadcrumbElement extends UmbLitElement { @state() - _name: string = ''; + private _name: string = ''; @state() - _structure: Array = []; + private _structure: Array = []; @state() - _workspaceActiveVariantId?: UmbVariantId; + private _workspaceActiveVariantId?: UmbVariantId; @state() - _appDefaultCulture?: string; + private _appDefaultCulture?: string; #sectionContext?: typeof UMB_SECTION_CONTEXT.TYPE; #workspaceContext?: UmbVariantDatasetWorkspaceContext; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts index 912b4f3f65e4..789994afc5c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-footer/workspace-footer.element.ts @@ -29,13 +29,13 @@ function ExtensionApiArgsMethod( @customElement('umb-workspace-footer') export class UmbWorkspaceFooterLayoutElement extends UmbLitElement { @state() - _withinModal = false; + private _withinModal = false; @state() - _modalContext?: UmbModalContext; + private _modalContext?: UmbModalContext; @state() - _isNew?: boolean; + private _isNew?: boolean; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts index 3ee0a82c3302..cc06cf5222f1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.ts @@ -26,7 +26,7 @@ export class UmbWorkspaceSplitViewVariantSelectorElement< private _cultureVariantOptions: Array = []; @state() - _activeVariants: Array = []; + private _activeVariants: Array = []; #splitViewContext?: typeof UMB_WORKSPACE_SPLIT_VIEW_CONTEXT.TYPE; #datasetContext?: typeof UMB_PROPERTY_DATASET_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias/types.ts index af930a9cdd23..1dc1c622e756 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias/types.ts @@ -1,6 +1,8 @@ import type { UMB_WORKSPACE_CONDITION_ALIAS } from './constants.js'; import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; +// TODO: Rename this to `UmbWorkspaceAliasConditionConfig` in a future version. +// eslint-disable-next-line @typescript-eslint/naming-convention export interface WorkspaceAliasConditionConfig extends UmbConditionConfigBase { /** * Define the workspace that this extension should be available in diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-is-new/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-is-new/types.ts index 8294ef15fb32..d1d305f5115b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-is-new/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-is-new/types.ts @@ -9,7 +9,7 @@ export interface UmbWorkspaceEntityIsNewConditionConfig /** * @deprecated Use `UmbWorkspaceEntityIsNewConditionConfig` instead. This will be removed in Umbraco 17. */ -// eslint-disable-next-line @typescript-eslint/no-empty-object-type +// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/naming-convention export interface WorkspaceEntityIsNewConditionConfig extends UmbWorkspaceEntityIsNewConditionConfig {} declare global { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type/types.ts index 89a5df4e5ced..1604124d993b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type/types.ts @@ -14,6 +14,7 @@ export type UmbWorkspaceEntityTypeConditionConfig = UmbConditionConfigBase< /** * @deprecated Use `UmbWorkspaceEntityTypeConditionConfig` instead. This will be removed in Umbraco 17. */ +// eslint-disable-next-line @typescript-eslint/naming-convention export type WorkspaceEntityTypeConditionConfig = UmbWorkspaceEntityTypeConditionConfig; declare global { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/submittable-tree-entity-workspace-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/submittable-tree-entity-workspace-context.interface.ts index a47776c2ab22..2af26a1bb7f7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/submittable-tree-entity-workspace-context.interface.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/contexts/tokens/submittable-tree-entity-workspace-context.interface.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import type { UmbSubmittableWorkspaceContext } from './submittable-workspace-context.interface.js'; import type { UmbEntityModel, UmbEntityUnique } from '@umbraco-cms/backoffice/entity'; import type { Observable } from '@umbraco-cms/backoffice/observable-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-split-view-manager.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-split-view-manager.controller.ts index e365c08b3edd..2c40f645e5b8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-split-view-manager.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/controllers/workspace-split-view-manager.controller.ts @@ -1,18 +1,24 @@ import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -export type ActiveVariant = { +export type UmbActiveVariant = { index: number; culture: string | null; segment: string | null; }; +/** + * @deprecated Use {@link UmbActiveVariant} instead. This will be removed in Umbraco 18. + */ +// eslint-disable-next-line @typescript-eslint/naming-convention +export type ActiveVariant = UmbActiveVariant; + /** * @class UmbWorkspaceSplitViewManager * @description - Class managing the split view state for a workspace context. */ export class UmbWorkspaceSplitViewManager { - #activeVariantsInfo = new UmbArrayState([], (x) => x.index).sortBy( + #activeVariantsInfo = new UmbArrayState([], (x) => x.index).sortBy( (a, b) => (a.index || 0) - (b.index || 0), ); public readonly activeVariantsInfo = this.#activeVariantsInfo.asObservable(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts index 30fbf2019ecc..333c00a22830 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts @@ -63,12 +63,15 @@ export abstract class UmbEntityDetailWorkspaceContextBase< #eventContext?: typeof UMB_ACTION_EVENT_CONTEXT.TYPE; #createUnderParent = new UmbObjectState(undefined); - _internal_createUnderParent = this.#createUnderParent.asObservable(); + // eslint-disable-next-line @typescript-eslint/naming-convention + public readonly _internal_createUnderParent = this.#createUnderParent.asObservable(); + // eslint-disable-next-line @typescript-eslint/naming-convention public readonly _internal_createUnderParentEntityUnique = this.#createUnderParent.asObservablePart((parent) => parent ? parent.unique : undefined, ); + // eslint-disable-next-line @typescript-eslint/naming-convention public readonly _internal_createUnderParentEntityType = this.#createUnderParent.asObservablePart((parent) => parent ? parent.entityType : undefined, ); @@ -177,6 +180,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< * Gets the parent that a new entity will be created under. * @returns { UmbEntityModel | undefined } The parent entity */ + // eslint-disable-next-line @typescript-eslint/naming-convention _internal_getCreateUnderParent(): UmbEntityModel | undefined { return this.#createUnderParent.getValue(); } @@ -185,6 +189,7 @@ export abstract class UmbEntityDetailWorkspaceContextBase< * Sets the parent that a new entity will be created under. * @param {UmbEntityModel} parent The parent entity */ + // eslint-disable-next-line @typescript-eslint/naming-convention _internal_setCreateUnderParent(parent: UmbEntityModel): void { this.#createUnderParent.setValue(parent); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/routable/routable-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/routable/routable-workspace.element.ts index 6c6d1e4b738f..038da49fbb5a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/routable/routable-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/kinds/routable/routable-workspace.element.ts @@ -6,7 +6,7 @@ import type { UmbRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-routable-workspace') export class UmbRoutableWorkspaceElement extends UmbLitElement { @state() - _routes: UmbRoute[] = []; + private _routes: UmbRoute[] = []; public set api(api: UmbRoutableWorkspaceContext) { this.observe(api.routes.routes, (routes) => (this._routes = routes)); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts index b54f387944d4..89060c90efcc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace.element.ts @@ -19,7 +19,7 @@ export class UmbWorkspaceElement extends UmbLitElement { #entityType?: string; @state() - _component?: HTMLElement; + private _component?: HTMLElement; @property({ type: String, attribute: 'entity-type' }) public get entityType(): string | undefined { diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts index e6814696a8e3..fb9188218bfd 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/workspace/views/info/workspace-view-data-type-info.element.ts @@ -7,13 +7,13 @@ import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/workspace' @customElement('umb-workspace-view-data-type-info') export class UmbWorkspaceViewDataTypeInfoElement extends UmbLitElement implements UmbWorkspaceViewElement { @state() - _unique: string = ''; + private _unique: string = ''; @state() - _schemaAlias?: string; + private _schemaAlias?: string; @state() - _uiAlias?: string | null; + private _uiAlias?: string | null; private _workspaceContext?: typeof UMB_DATA_TYPE_WORKSPACE_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.ts index 875b5b00d255..49845d193977 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.ts @@ -10,14 +10,14 @@ import type { UmbRoute, UmbRouterSlotInitEvent } from '@umbraco-cms/backoffice/r export class UmbDocumentBlueprintWorkspaceEditorElement extends UmbLitElement { // // TODO: Refactor: when having a split view/variants context token, we can rename the split view/variants component to a generic and make this component generic as well. [NL] - private splitViewElement = new UmbDocumentBlueprintWorkspaceSplitViewElement(); + private _splitViewElement = new UmbDocumentBlueprintWorkspaceSplitViewElement(); #workspaceContext?: typeof UMB_DOCUMENT_BLUEPRINT_WORKSPACE_CONTEXT.TYPE; #variants?: Array; #isForbidden = false; @state() - _routes?: Array; + private _routes?: Array; constructor() { super(); @@ -68,7 +68,7 @@ export class UmbDocumentBlueprintWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique is URL Safe... [NL] path: variantA.unique + '_&_' + variantB.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // Set split view/active info.. const variantSplit = info.match.fragments.consumed.split('_&_'); @@ -85,7 +85,7 @@ export class UmbDocumentBlueprintWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique is URL Safe... [NL] path: variant.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // cause we might come from a split-view, we need to reset index 1. this.#workspaceContext?.splitView.removeActiveVariant(1); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-split-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-split-view.element.ts index afb717dd2db6..5977605c71c0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-split-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-blueprints/workspace/document-blueprint-workspace-split-view.element.ts @@ -1,7 +1,7 @@ import { UMB_DOCUMENT_BLUEPRINT_WORKSPACE_ALIAS, UMB_DOCUMENT_BLUEPRINT_WORKSPACE_CONTEXT } from './constants.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit'; -import type { ActiveVariant } from '@umbraco-cms/backoffice/workspace'; +import type { UmbActiveVariant } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-document-blueprint-workspace-split-view') @@ -10,7 +10,7 @@ export class UmbDocumentBlueprintWorkspaceSplitViewElement extends UmbLitElement private _workspaceContext?: typeof UMB_DOCUMENT_BLUEPRINT_WORKSPACE_CONTEXT.TYPE; @state() - _variants?: Array; + private _variants?: Array; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-type/document-type-property-type-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-type/document-type-property-type-item-ref.element.ts index a841c162c983..9a64800ee576 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-type/document-type-property-type-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/property-type/document-type-property-type-item-ref.element.ts @@ -18,7 +18,7 @@ export class UmbDocumentTypePropertyTypeItemRefElement extends UmbLitElement { standalone = false; @state() - _editPath = ''; + private _editPath = ''; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts index 8c9a66f575ff..7a2086245887 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type/document-type-workspace.context.ts @@ -166,7 +166,7 @@ export class UmbDocumentTypeWorkspaceContext this.createScaffold({ parent, preset }); } - override async _create(currentData: DetailModelType, parent: UmbEntityModel) { + protected override async _create(currentData: DetailModelType, parent: UmbEntityModel) { // TODO: move this responsibility to the template package if (this.createTemplateMode) { await this.#createAndAssignTemplate(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-name.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-name.element.ts index f8cc6fc29735..ebaa889b1e1d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-name.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/collection/views/table/column-layouts/document-table-column-name.element.ts @@ -23,7 +23,7 @@ export class UmbDocumentTableColumnNameElement extends UmbLitElement implements } @state() - _name = ''; + private _name = ''; #item = new UmbDocumentItemDataResolver(this); 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 e7d2c56c2d89..ced42c55b973 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 @@ -24,7 +24,7 @@ export class UmbDocumentTableColumnStateElement extends UmbLitElement implements } @state() - _state = ''; + private _state = ''; #item = new UmbDocumentItemDataResolver(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/modal/duplicate-document-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/modal/duplicate-document-modal.element.ts index 03869a8cab11..a465242dcc62 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/modal/duplicate-document-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/entity-actions/duplicate/modal/duplicate-document-modal.element.ts @@ -18,7 +18,7 @@ export class UmbDocumentDuplicateToModalElement extends UmbModalBaseElement< UmbDuplicateDocumentModalValue > { @state() - _destinationUnique?: string | null; + private _destinationUnique?: string | null; #onTreeSelectionChange(event: UmbSelectionChangeEvent) { const target = event.target as UmbTreeElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/save-modal/document-save-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/save-modal/document-save-modal.element.ts index aa2f39cceb61..6eebcb0c707c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/save-modal/document-save-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/save-modal/document-save-modal.element.ts @@ -15,7 +15,7 @@ export class UmbDocumentSaveModalElement extends UmbModalBaseElement< #selectionManager = new UmbSelectionManager(this); @state() - _options: Array = []; + private _options: Array = []; #pickableFilter = (option: UmbDocumentVariantOptionModel) => { if (!option.variant) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/shared/document-variant-language-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/shared/document-variant-language-picker.element.ts index f8fd8b58702c..43f0f0c23d7a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/shared/document-variant-language-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/modals/shared/document-variant-language-picker.element.ts @@ -38,10 +38,10 @@ export class UmbDocumentVariantLanguagePickerElement extends UmbLitElement { } @state() - _selection: Array = []; + private _selection: Array = []; @state() - _isAllSelected: boolean = false; + private _isAllSelected: boolean = false; /** * A filter function that determines if an item is pickableFilter or not. diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish-with-descendants/modal/document-publish-with-descendants-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish-with-descendants/modal/document-publish-with-descendants-modal.element.ts index 56509ca26340..75340bdaa0c0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish-with-descendants/modal/document-publish-with-descendants-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish-with-descendants/modal/document-publish-with-descendants-modal.element.ts @@ -20,10 +20,10 @@ export class UmbDocumentPublishWithDescendantsModalElement extends UmbModalBaseE #includeUnpublishedDescendants = false; @state() - _options: Array = []; + private _options: Array = []; @state() - _hasNotSelectedMandatory?: boolean; + private _hasNotSelectedMandatory?: boolean; #pickableFilter = (option: UmbDocumentVariantOptionModel) => { if (!option.variant) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish/modal/document-publish-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish/modal/document-publish-modal.element.ts index b59254f4c0a8..755a366b4fb8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish/modal/document-publish-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/publish/modal/document-publish-modal.element.ts @@ -16,16 +16,16 @@ export class UmbDocumentPublishModalElement extends UmbModalBaseElement< #selectionManager = new UmbSelectionManager(this); @state() - _options: Array = []; + private _options: Array = []; @state() - _hasNotSelectedMandatory?: boolean; + private _hasNotSelectedMandatory?: boolean; @state() - _hasInvalidSelection = true; + private _hasInvalidSelection = true; @state() - _isInvariant = false; + private _isInvariant = false; #pickableFilter = (option: UmbDocumentVariantOptionModel) => { if (!option.variant || option.variant.state === UmbDocumentVariantState.NOT_CREATED) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/unpublish/modal/document-unpublish-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/unpublish/modal/document-unpublish-modal.element.ts index d356a82072a3..a264efa61149 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/unpublish/modal/document-unpublish-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/unpublish/modal/document-unpublish-modal.element.ts @@ -37,22 +37,22 @@ export class UmbDocumentUnpublishModalElement extends UmbModalBaseElement< protected readonly _selectionManager = new UmbSelectionManager(this); @state() - _options: Array = []; + private _options: Array = []; @state() - _selection: Array = []; + private _selection: Array = []; @state() - _canUnpublish = true; + private _canUnpublish = true; @state() - _hasInvalidSelection = true; + private _hasInvalidSelection = true; @state() - _isInvariant = false; + private _isInvariant = false; @state() - _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; + private _referencesConfig?: UmbConfirmActionModalEntityReferencesConfig; #pickableFilter = (option: UmbDocumentVariantOptionModel) => { if (!option.variant) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/components/document-reference-table.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/components/document-reference-table.element.ts index 1574e85a4922..d392378130d4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/components/document-reference-table.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/reference/components/document-reference-table.element.ts @@ -24,17 +24,17 @@ export class UmbDocumentReferenceTableElement extends UmbLitElement { unique = ''; @state() - _items: Array = []; + private _items: Array = []; /** * Indicates if there are more references to load, i.e. if the server has more references to return. * This is used to determine if the "...and X more references" text should be displayed. */ @state() - _hasMoreReferences = 0; + private _hasMoreReferences = 0; @state() - _errorMessage = ''; + private _errorMessage = ''; override firstUpdated() { new UmbDeprecation({ diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts index 56fa6371a355..1ce732fdba54 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/rollback/modal/rollback-modal.element.ts @@ -29,10 +29,10 @@ type DocumentVersion = { @customElement('umb-rollback-modal') export class UmbRollbackModalElement extends UmbModalBaseElement { @state() - _versions: DocumentVersion[] = []; + private _versions: DocumentVersion[] = []; @state() - _selectedVersion?: { + private _selectedVersion?: { date: string; name: string; user: string; @@ -44,16 +44,16 @@ export class UmbRollbackModalElement extends UmbModalBaseElement = []; + private _diffs: Array<{ alias: string; diff: UmbDiffChange[] }> = []; #rollbackRepository = new UmbRollbackRepository(this); #userItemRepository = new UmbUserItemRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search-result-item.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search-result-item.element.ts index b7dc6c2395ba..b7cb75bbbd6e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search-result-item.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/search/document-search-result-item.element.ts @@ -19,13 +19,13 @@ export class UmbDocumentSearchResultItemElement extends UmbLitElement { item?: UmbSearchResultItemModel & UmbDocumentItemModel; @state() - _currentCulture?: string; + private _currentCulture?: string; @state() - _defaultCulture?: string; + private _defaultCulture?: string; @state() - _variant?: UmbDocumentItemVariantModel; + private _variant?: UmbDocumentItemVariantModel; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/document-property-value-permission-flow-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/document-property-value-permission-flow-modal.element.ts index d9c8e9b90c48..81ab5cfb79c8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/document-property-value-permission-flow-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/document-property-value-permission-flow-modal.element.ts @@ -15,7 +15,7 @@ export class UmbDocumentPropertyValueUserPermissionFlowModalElement extends UmbM UmbDocumentPropertyValueUserPermissionFlowModalValue > { @state() - _selection: Array = []; + private _selection: Array = []; async #next() { if (this._selection.length === 0) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/property-type-modal/property-type-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/property-type-modal/property-type-modal.element.ts index cccfe38107a7..d5c836d5c09f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/property-type-modal/property-type-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/document-property-value-permission-flow-modal/property-type-modal/property-type-modal.element.ts @@ -21,10 +21,10 @@ export class UmbDocumentPropertyValueUserPermissionFlowPropertyTypeModalElement private _documentTypeName?: string; @state() - _selectedItem: UmbPropertyTypeModel | null = null; + private _selectedItem: UmbPropertyTypeModel | null = null; @state() - _pickableFilter: (propertyType: UmbPropertyTypeModel) => boolean = () => true; + private _pickableFilter: (propertyType: UmbPropertyTypeModel) => boolean = () => true; #detailRepository = new UmbDocumentTypeDetailRepository(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/input-document-property-value-user-permission/input-document-property-value-user-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/input-document-property-value-user-permission/input-document-property-value-user-permission.element.ts index f2548a45b7b8..a0adc8968cc5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/input-document-property-value-user-permission/input-document-property-value-user-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document-property-value/input-document-property-value-user-permission/input-document-property-value-user-permission.element.ts @@ -28,12 +28,12 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; @customElement('umb-input-document-property-value-user-permission') export class UmbInputDocumentPropertyValueUserPermissionElement extends UUIFormControlMixin(UmbLitElement, '') { - _permissions: Array = []; + #permissions: Array = []; public get permissions(): Array { - return this._permissions; + return this.#permissions; } public set permissions(value: Array) { - this._permissions = value; + this.#permissions = value; const uniques = value.map((item) => item.documentType.unique); this.#observePickedDocumentTypes(uniques); } @@ -73,7 +73,7 @@ export class UmbInputDocumentPropertyValueUserPermissionElement extends UUIFormC verbs: this.#getFallbackPermissionVerbsForEntityType(UMB_DOCUMENT_PROPERTY_VALUE_ENTITY_TYPE), }, pickablePropertyTypeFilter: (propertyType) => - !this._permissions.some((permission) => permission.propertyType.unique === propertyType.unique), + !this.#permissions.some((permission) => permission.propertyType.unique === propertyType.unique), }, }); @@ -89,7 +89,7 @@ export class UmbInputDocumentPropertyValueUserPermissionElement extends UUIFormC verbs: value.verbs, }; - this.permissions = [...this._permissions, permissionItem]; + this.permissions = [...this.#permissions, permissionItem]; this.dispatchEvent(new UmbChangeEvent()); } catch (error) { console.error(error); @@ -132,7 +132,7 @@ export class UmbInputDocumentPropertyValueUserPermissionElement extends UUIFormC if (JSON.stringify(value.allowedVerbs) === JSON.stringify(currentPermission.verbs)) return; // update permission with new verbs - this.permissions = this._permissions.map((permission) => { + this.permissions = this.#permissions.map((permission) => { if (permission.propertyType.unique === currentPermission.propertyType.unique) { return { ...permission, @@ -149,7 +149,7 @@ export class UmbInputDocumentPropertyValueUserPermissionElement extends UUIFormC } #removePermission(permission: UmbDocumentPropertyValueUserPermissionModel) { - this.permissions = this._permissions.filter((v) => JSON.stringify(v) !== JSON.stringify(permission)); + this.permissions = this.#permissions.filter((v) => JSON.stringify(v) !== JSON.stringify(permission)); this.dispatchEvent(new UmbChangeEvent()); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document/input-document-granular-user-permission/input-document-granular-user-permission.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document/input-document-granular-user-permission/input-document-granular-user-permission.element.ts index bacebca22708..dfbf95e05d07 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document/input-document-granular-user-permission/input-document-granular-user-permission.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/document/input-document-granular-user-permission/input-document-granular-user-permission.element.ts @@ -17,12 +17,12 @@ import { @customElement('umb-input-document-granular-user-permission') export class UmbInputDocumentGranularUserPermissionElement extends UUIFormControlMixin(UmbLitElement, '') { - _permissions: Array = []; + #permissions: Array = []; public get permissions(): Array { - return this._permissions; + return this.#permissions; } public set permissions(value: Array) { - this._permissions = value; + this.#permissions = value; const uniques = value.map((item) => item.document.id); this.#observePickedDocuments(uniques); } @@ -60,7 +60,7 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro if (JSON.stringify(result) === JSON.stringify(currentPermissionVerbs)) return; // update permission with new verbs - this.permissions = this._permissions.map((permission) => { + this.permissions = this.#permissions.map((permission) => { if (permission.document.id === item.unique) { return { ...permission, @@ -101,7 +101,7 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro verbs: result, }; - this.permissions = [...this._permissions, permissionItem]; + this.permissions = [...this.#permissions, permissionItem]; this.dispatchEvent(new UmbChangeEvent()); }, () => { @@ -153,7 +153,7 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro const permission = this.#getPermissionForDocument(item.unique); if (!permission) return; - this.permissions = this._permissions.filter((v) => JSON.stringify(v) !== JSON.stringify(permission)); + this.permissions = this.#permissions.filter((v) => JSON.stringify(v) !== JSON.stringify(permission)); this.dispatchEvent(new UmbChangeEvent()); } @@ -223,7 +223,7 @@ export class UmbInputDocumentGranularUserPermissionElement extends UUIFormContro } #getPermissionForDocument(unique: string) { - return this._permissions?.find((permission) => permission.document.id === unique); + return this.#permissions?.find((permission) => permission.document.id === unique); } #getPermissionNamesForDocument(unique: string) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts index c17c8b7e6617..bae7c347a3d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/actions/save.action.ts @@ -32,7 +32,7 @@ export class UmbDocumentSaveWorkspaceAction return cultureVariantOptions ? cultureVariantOptions?.length > 1 : false; } - override _gotWorkspaceContext() { + protected override _gotWorkspaceContext() { super._gotWorkspaceContext(); this.#observeVariants(); this.#observeReadOnlyGuardRules(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-editor.element.ts index b05120a59795..40697df02b4a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-editor.element.ts @@ -12,7 +12,7 @@ import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language'; export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { // // TODO: Refactor: when having a split view/variants context token, we can rename the split view/variants component to a generic and make this component generic as well. [NL] - private splitViewElement = new UmbDocumentWorkspaceSplitViewElement(); + private _splitViewElement = new UmbDocumentWorkspaceSplitViewElement(); #appLanguage?: typeof UMB_APP_LANGUAGE_CONTEXT.TYPE; #workspaceContext?: typeof UMB_DOCUMENT_WORKSPACE_CONTEXT.TYPE; @@ -23,7 +23,7 @@ export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { #isForbidden = false; @state() - _routes?: Array; + private _routes?: Array; constructor() { super(); @@ -80,7 +80,7 @@ export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique still is URL Safe, cause its most likely not... [NL] path: variantA.unique + '_&_' + variantB.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // Set split view/active info.. const variantSplit = info.match.fragments.consumed.split('_&_'); @@ -97,7 +97,7 @@ export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique still is URL Safe, cause its most likely not... [NL] path: variant.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // cause we might come from a split-view, we need to reset index 1. this.#workspaceContext?.splitView.removeActiveVariant(1); diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-split-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-split-view.element.ts index b84adc1175ec..bd82b1d110d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-split-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace-split-view.element.ts @@ -1,7 +1,7 @@ import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from './document-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import type { ActiveVariant } from '@umbraco-cms/backoffice/workspace'; +import type { UmbActiveVariant } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import './document-workspace-split-view-variant-selector.element.js'; @@ -12,10 +12,10 @@ export class UmbDocumentWorkspaceSplitViewElement extends UmbLitElement { private _workspaceContext?: typeof UMB_DOCUMENT_WORKSPACE_CONTEXT.TYPE; @state() - _variants?: Array; + private _variants?: Array; @state() - _icon?: string; + private _icon?: string; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts index 94c81fe4901d..ebf8e5435b43 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/embedded-media/modal/embedded-media-modal.stories.ts @@ -1,14 +1,8 @@ import './embedded-media-modal.element.js'; +import type UmbEmbeddedMediaModalElement from './embedded-media-modal.element.js'; import type { UmbEmbeddedMediaModalData } from './embedded-media-modal.token.js'; -import type { Meta } from '@storybook/web-components-vite'; -import { html } from '@umbraco-cms/backoffice/external/lit'; - -export default { - title: 'Extension Type/Modal/Embedded Media', - component: 'umb-embedded-media-modal', - id: 'umb-embedded-media-modal', -} as Meta; +import type { Meta, StoryObj } from '@storybook/web-components-vite'; const data: UmbEmbeddedMediaModalData = { url: 'https://youtu.be/wJNbtYdr-Hg', @@ -17,9 +11,16 @@ const data: UmbEmbeddedMediaModalData = { constrain: true, }; -export const Docs = () => html` - - -`; +const meta: Meta = { + title: 'Extension Type/Modal/Embedded Media', + component: 'umb-embedded-media-modal', + id: 'umb-embedded-media-modal', + args: { + data, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Docs: Story = {}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/health-check/health-check.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/health-check/health-check.extension.ts index 01835d490965..94455ed6fdfc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/health-check/health-check.extension.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/health-check/health-check.extension.ts @@ -13,12 +13,23 @@ export interface MetaHealthCheck { label: string; } -export interface HealthCheck { +/** + * Represents a health check. + */ +export interface UmbHealthCheck { alias: string; name: string; description: string; } +/** + * @deprecated Use `UmbHealthCheck` instead. This will be removed in Umbraco 18. + */ +// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/naming-convention +export interface HealthCheck extends UmbHealthCheck { + // Left empty +} + declare global { interface UmbExtensionManifestMap { umbHealthCheck: ManifestHealthCheck; diff --git a/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group-box-overview.element.ts b/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group-box-overview.element.ts index 6780414d12d3..22d8155cf140 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group-box-overview.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group-box-overview.element.ts @@ -46,11 +46,11 @@ export class UmbHealthCheckGroupBoxOverviewElement extends UmbLitElement { override render() { return html` - ${this.manifest?.meta.label} ${this._renderStatus()} + ${this.manifest?.meta.label} ${this.#renderStatus()} `; } - _renderStatus() { + #renderStatus() { const res: StatusResultTypeModel[] = []; this._keyResults?.checks?.forEach((item) => { item?.results?.forEach((result) => { @@ -58,10 +58,10 @@ export class UmbHealthCheckGroupBoxOverviewElement extends UmbLitElement { }); }); this._tagResults = res; - return html`
    ${this._renderCheckResults(this.filterResults(this._tagResults))}
    `; + return html`
    ${this.#renderCheckResults(this.filterResults(this._tagResults))}
    `; } - _renderCheckResults(resultObject: any) { + #renderCheckResults(resultObject: any) { return html`${resultObject.success > 0 ? html` diff --git a/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group.element.ts b/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group.element.ts index 00bae1f180bd..225c77c17d09 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/health-check/views/health-check-group.element.ts @@ -102,11 +102,11 @@ export class UmbDashboardHealthCheckGroupElement extends UmbLitElement { ${checkResults.results?.map((result) => { return html`
    - ${this.renderIcon(result.resultType)} + ${this.#renderIcon(result.resultType)}

    ${unsafeHTML(result.message)}

    - ${result.actions ? this.renderActions(result.actions) : nothing} + ${result.actions ? this.#renderActions(result.actions) : nothing} ${result.readMoreLink ? html``; } - private renderIcon(type?: StatusResultTypeModel) { + #renderIcon(type?: StatusResultTypeModel) { switch (type) { case StatusResultTypeModel.SUCCESS: return html``; @@ -139,7 +139,7 @@ export class UmbDashboardHealthCheckGroupElement extends UmbLitElement { } } - private renderActions(actions: HealthCheckActionRequestModel[]) { + #renderActions(actions: HealthCheckActionRequestModel[]) { if (actions.length) return html`
    ${actions.map( diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/app-language-select.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/app-language-select.element.ts index 6149ff5cc69d..91acaa5cdb75 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/app-language-select.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/app-language-select/app-language-select.element.ts @@ -33,6 +33,9 @@ export class UmbAppLanguageSelectElement extends UmbLitElement { @state() private _isOpen = false; + @state() + private _disallowedLanguages: Array = []; + #collectionRepository = new UmbLanguageCollectionRepository(this); #appLanguageContext?: UmbAppLanguageContext; #languagesObserver?: any; @@ -41,9 +44,6 @@ export class UmbAppLanguageSelectElement extends UmbLitElement { #currentUserAllowedLanguages?: Array; #currentUserHasAccessToAllLanguages?: boolean; - @state() - _disallowedLanguages: Array = []; - constructor() { super(); @@ -138,24 +138,23 @@ export class UmbAppLanguageSelectElement extends UmbLitElement { id="dropdown-popover" data-mark="app-language-menu" @beforetoggle=${this.#onPopoverToggle}> - - - ${repeat( - this._languages, - (language) => language.unique, - (language) => html` - this.#chooseLanguage(language.unique)}> - ${this.#isLanguageReadOnly(language.unique) ? this.#renderReadOnlyTag(language.unique) : nothing} - - `, - )} + + + ${repeat( + this._languages, + (language) => language.unique, + (language) => html` + this.#chooseLanguage(language.unique)}> + ${this.#isLanguageReadOnly(language.unique) ? this.#renderReadOnlyTag(language.unique) : nothing} + + `, + )} - - + `; } @@ -200,7 +199,7 @@ export class UmbAppLanguageSelectElement extends UmbLitElement { uui-menu-item { color: var(--uui-color-text); - + width: auto; } `, diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/item/langauge-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/item/langauge-item-ref.element.ts index 3a20d16cc805..db639c2800d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/item/langauge-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/item/langauge-item-ref.element.ts @@ -18,7 +18,7 @@ export class UmbLanguageItemRefElement extends UmbLitElement { standalone = false; @state() - _editPath = ''; + private _editPath = ''; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts index b5e2674a886c..ae8ec3e5da3a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/language/workspace/language/views/language-details-workspace-view.element.ts @@ -14,13 +14,13 @@ import '@umbraco-cms/backoffice/culture'; @customElement('umb-language-details-workspace-view') export class UmbLanguageDetailsWorkspaceViewElement extends UmbLitElement implements UmbWorkspaceViewElement { @state() - _language?: UmbLanguageDetailModel; + private _language?: UmbLanguageDetailModel; @state() - _isDefaultLanguage = false; + private _isDefaultLanguage = false; @state() - _isNew?: boolean; + private _isNew?: boolean; #languageWorkspaceContext?: typeof UMB_LANGUAGE_WORKSPACE_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/donut-chart/donut-chart.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/donut-chart/donut-chart.element.ts index 4fb4e3bbb467..095b60c80edc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/donut-chart/donut-chart.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/donut-chart/donut-chart.element.ts @@ -13,7 +13,7 @@ import { } from '@umbraco-cms/backoffice/external/lit'; import { clamp } from '@umbraco-cms/backoffice/utils'; -export interface Circle { +interface Circle { color: string; name: string; percent: number; @@ -82,10 +82,10 @@ export class UmbDonutChartElement extends LitElement { private _detailsBox!: HTMLDivElement; @state() - private circles: CircleWithCommands[] = []; + private _circles: CircleWithCommands[] = []; @state() - private viewBox = 100; + private _viewBox = 100; @state() private _posY = 0; @@ -133,7 +133,7 @@ export class UmbDonutChartElement extends LitElement { #printCircles(event: Event | null = null) { this._totalAmount = this._slices.reduce((acc, slice) => acc + slice.amount, 0); event?.stopPropagation(); - this.circles = this.#addCommands( + this._circles = this.#addCommands( this._slices.map((slice) => { return { percent: this.#calculatePercentage(slice.amount), @@ -190,7 +190,7 @@ export class UmbDonutChartElement extends LitElement { #setDetailsBoxData(event: MouseEvent) { const target = event.target as SVGPathElement; const index = target.dataset.index as unknown as number; - const circle = this.circles[index]; + const circle = this._circles[index]; this._detailName = circle.name; this._detailAmount = circle.number; this._detailColor = circle.color; @@ -231,7 +231,7 @@ export class UmbDonutChartElement extends LitElement { ${this.description} - ${this.circles.map( + ${this._circles.map( (circle, i) => svg` + transform="rotate(${circle.offset} ${this._viewBox / 2} ${this._viewBox / 2})"> + transform="rotate(${circle.offset} ${this._viewBox / 2} ${this._viewBox / 2})"> `, )} @@ -259,7 +259,7 @@ export class UmbDonutChartElement extends LitElement { override render() { return html`
    - ${this.#renderCircles()} + ${this.#renderCircles()}
    diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts index 5333f3a7c1c3..a776f4499c0a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts @@ -1,4 +1,4 @@ -import type { LogViewerDateRange, UmbLogViewerWorkspaceContext } from '../workspace/logviewer-workspace.context.js'; +import type { UmbLogViewerDateRange, UmbLogViewerWorkspaceContext } from '../workspace/logviewer-workspace.context.js'; import { UMB_APP_LOG_VIEWER_CONTEXT } from '../workspace/logviewer-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; @@ -31,7 +31,7 @@ export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement { if (!this.#logViewerContext) return; this.observe( this.#logViewerContext.dateRange, - (dateRange: LogViewerDateRange) => { + (dateRange: UmbLogViewerDateRange) => { this._startDate = dateRange.startDate; this._endDate = dateRange.endDate; }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/index.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/index.ts index 1af46a0c81f0..347bd229d3c7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/index.ts @@ -10,7 +10,7 @@ import type { } from '@umbraco-cms/backoffice/external/backend-api'; import type { UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository'; -export interface LogSearchDataSource { +export interface UmbLogSearchDataSource { getAllSavedSearches({ skip, take, @@ -23,7 +23,7 @@ export interface LogSearchDataSource { postLogViewerSavedSearch({ name, query }: SavedLogSearchResponseModel): Promise>; } -export interface LogMessagesDataSource { +export interface UmbLogMessagesDataSource { getLogViewerLevel({ skip, take, diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/log-viewer.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/log-viewer.server.data.ts index fd47bf682fff..27dfae37b8ec 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/log-viewer.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/repository/sources/log-viewer.server.data.ts @@ -1,4 +1,4 @@ -import type { LogMessagesDataSource, LogSearchDataSource } from './index.js'; +import type { UmbLogMessagesDataSource, UmbLogSearchDataSource } from './index.js'; import type { DirectionModel, LogLevelModel, @@ -13,7 +13,7 @@ import { tryExecute } from '@umbraco-cms/backoffice/resources'; * @class UmbLogSearchesServerDataSource * @implements {TemplateDetailDataSource} */ -export class UmbLogSearchesServerDataSource implements LogSearchDataSource { +export class UmbLogSearchesServerDataSource implements UmbLogSearchDataSource { #host: UmbControllerHost; /** @@ -66,9 +66,9 @@ export class UmbLogSearchesServerDataSource implements LogSearchDataSource { /** * A data source for the log messages and levels * @class UmbLogMessagesServerDataSource - * @implements {LogMessagesDataSource} + * @implements {UmbLogMessagesDataSource} */ -export class UmbLogMessagesServerDataSource implements LogMessagesDataSource { +export class UmbLogMessagesServerDataSource implements UmbLogMessagesDataSource { #host: UmbControllerHost; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer-workspace.context.ts index 030360d083cf..e765508dd202 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer-workspace.context.ts @@ -16,12 +16,12 @@ import { query } from '@umbraco-cms/backoffice/router'; import type { UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; -export type PoolingInterval = 0 | 2000 | 5000 | 10000 | 20000 | 30000; -export interface PoolingCOnfig { +export type UmbPoolingInterval = 0 | 2000 | 5000 | 10000 | 20000 | 30000; +export interface UmbPoolingConfig { enabled: boolean; - interval: PoolingInterval; + interval: UmbPoolingInterval; } -export interface LogViewerDateRange { +export interface UmbLogViewerDateRange { startDate: string; endDate: string; } @@ -57,7 +57,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW return yyyy + '-' + mm + '-' + dd; } - defaultDateRange: LogViewerDateRange = { + defaultDateRange: UmbLogViewerDateRange = { startDate: this.yesterday, endDate: this.today, }; @@ -68,7 +68,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW #logCount = new UmbObjectState(null); logCount = this.#logCount.asObservable(); - #dateRange = new UmbObjectState(this.defaultDateRange); + #dateRange = new UmbObjectState(this.defaultDateRange); dateRange = this.#dateRange.asObservable(); #loggers = new UmbObjectState(null); @@ -93,7 +93,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW logs = this.#logs.asObservablePart((data) => data?.items); logsTotal = this.#logs.asObservablePart((data) => data?.total); - #polling = new UmbObjectState({ enabled: false, interval: 2000 }); + #polling = new UmbObjectState({ enabled: false, interval: 2000 }); polling = this.#polling.asObservable(); #sortingDirection = new UmbBasicState(DirectionModel.DESCENDING); @@ -136,7 +136,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW } this.setLogLevelsFilter(validLogLevels); - const dateRange: LogViewerDateRange = this.getDateRange() as LogViewerDateRange; + const dateRange: UmbLogViewerDateRange = this.getDateRange() as UmbLogViewerDateRange; this.setDateRange({ startDate: searchQuery.startDate || dateRange.startDate, @@ -148,7 +148,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW this.getLogs(); }; - setDateRange(dateRange: Partial) { + setDateRange(dateRange: Partial) { let { startDate, endDate } = dateRange; if (!startDate) startDate = this.defaultDateRange.startDate; @@ -318,7 +318,7 @@ export class UmbLogViewerWorkspaceContext extends UmbContextBase implements UmbW clearInterval(this.#intervalID as number); } - setPollingInterval(interval: PoolingInterval) { + setPollingInterval(interval: UmbPoolingInterval) { this.#polling.update({ interval }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts index ecf92c1b217d..fbc61d9b126f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-log-types-chart.element.ts @@ -17,10 +17,10 @@ export class UmbLogViewerLogTypesChartElement extends UmbLitElement { } @state() - private _logLevelCount: LogLevelCountsReponseModel | null = null; + private _logLevelCountResponse: LogLevelCountsReponseModel | null = null; @state() - private logLevelCount: [string, number][] = []; + private _logLevelCount: [string, number][] = []; @state() private _logLevelCountFilter: string[] = []; @@ -41,15 +41,15 @@ export class UmbLogViewerLogTypesChartElement extends UmbLitElement { } setLogLevelCount() { - this.logLevelCount = this._logLevelCount - ? Object.entries(this._logLevelCount).filter(([level]) => !this._logLevelCountFilter.includes(level)) + this._logLevelCount = this._logLevelCountResponse + ? Object.entries(this._logLevelCountResponse).filter(([level]) => !this._logLevelCountFilter.includes(level)) : []; } #observeStuff() { if (!this.#logViewerContext) return; this.observe(this.#logViewerContext.logCount, (logLevel) => { - this._logLevelCount = logLevel ?? null; + this._logLevelCountResponse = logLevel ?? null; this.setLogLevelCount(); }); } @@ -61,8 +61,8 @@ export class UmbLogViewerLogTypesChartElement extends UmbLitElement {
      - ${this._logLevelCount - ? Object.keys(this._logLevelCount).map( + ${this._logLevelCountResponse + ? Object.keys(this._logLevelCountResponse).map( (level) => html`
    - ${this._logLevelCount - ? this.logLevelCount.map( + ${this._logLevelCountResponse + ? this._logLevelCount.map( ([level, number]) => html` - +
    `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-polling-button.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-polling-button.element.ts index 2254811beda4..5bef958d4504 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-polling-button.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-polling-button.element.ts @@ -1,6 +1,6 @@ import type { - PoolingCOnfig, - PoolingInterval, + UmbPoolingConfig, + UmbPoolingInterval, UmbLogViewerWorkspaceContext, } from '../../../logviewer-workspace.context.js'; import { UMB_APP_LOG_VIEWER_CONTEXT } from '../../../logviewer-workspace.context-token.js'; @@ -11,11 +11,12 @@ import type { UmbDropdownElement } from '@umbraco-cms/backoffice/components'; @customElement('umb-log-viewer-polling-button') export class UmbLogViewerPollingButtonElement extends UmbLitElement { @query('#polling-rate-dropdown') - private dropdownElement?: UmbDropdownElement; + private _dropdownElement?: UmbDropdownElement; + @state() - private _poolingConfig: PoolingCOnfig = { enabled: false, interval: 0 }; + private _poolingConfig: UmbPoolingConfig = { enabled: false, interval: 0 }; - #pollingIntervals: PoolingInterval[] = [2000, 5000, 10000, 20000, 30000]; + #pollingIntervals: UmbPoolingInterval[] = [2000, 5000, 10000, 20000, 30000]; #logViewerContext?: UmbLogViewerWorkspaceContext; @@ -39,15 +40,15 @@ export class UmbLogViewerPollingButtonElement extends UmbLitElement { this.#logViewerContext?.togglePolling(); } - #setPolingInterval = (interval: PoolingInterval) => { + #setPolingInterval = (interval: UmbPoolingInterval) => { this.#logViewerContext?.setPollingInterval(interval); this.#closePoolingPopover(); }; #closePoolingPopover() { - if (this.dropdownElement) { - this.dropdownElement.open = false; + if (this._dropdownElement) { + this._dropdownElement.open = false; } this.#togglePolling(); @@ -65,7 +66,7 @@ export class UmbLogViewerPollingButtonElement extends UmbLitElement { ${this.#pollingIntervals.map( - (interval: PoolingInterval) => + (interval: UmbPoolingInterval) => html` this.#setPolingInterval(interval)}>`, diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-search-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-search-input.element.ts index 710871a541c6..da8bdd722c8f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-search-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-search-input.element.ts @@ -30,7 +30,7 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement { private _isQuerySaved = false; // TODO: Revisit this code, to not use RxJS directly: - private inputQuery$ = new Subject(); + #inputQuery$ = new Subject(); #logViewerContext?: UmbLogViewerWorkspaceContext; @@ -42,7 +42,7 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement { this.#logViewerContext?.getSavedSearches(); }); - this.inputQuery$ + this.#inputQuery$ .pipe( tap(() => (this._showLoader = true)), debounceTime(250), @@ -70,11 +70,11 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement { #setQuery(event: Event) { const target = event.target as UUIInputElement; - this.inputQuery$.next(target.value as string); + this.#inputQuery$.next(target.value as string); } #setQueryFromSavedSearch(query: string) { - this.inputQuery$.next(query); + this.#inputQuery$.next(query); this._searchDropdownElement.open = false; } @@ -90,7 +90,7 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement { } #clearQuery() { - this.inputQuery$.next(''); + this.#inputQuery$.next(''); this.#logViewerContext?.setFilterExpression(''); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/dropzone/components/input-dropzone/input-dropzone.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/dropzone/components/input-dropzone/input-dropzone.element.ts index 2d3bd8012455..bb65f2579e7a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/dropzone/components/input-dropzone/input-dropzone.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/dropzone/components/input-dropzone/input-dropzone.element.ts @@ -93,11 +93,11 @@ export class UmbInputDropzoneElement extends UmbFormControlMixin { 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 1b8808a1b31a..4071b604dcd6 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 @@ -22,10 +22,10 @@ export class UmbPropertyEditorUIMediaTypePickerElement extends UmbLitElement imp } @state() - _min = 0; + private _min = 0; @state() - _max = Infinity; + private _max = Infinity; #onChange(event: CustomEvent & { target: UmbInputMediaTypeElement }) { this.value = event.target.value; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-type/media-type-property-type-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-type/media-type-property-type-item-ref.element.ts index 76bb1176a5b3..443cd0b777f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-type/media-type-property-type-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/property-type/media-type-property-type-item-ref.element.ts @@ -18,7 +18,7 @@ export class UmbMediaTypePropertyTypeItemRefElement extends UmbLitElement { standalone = false; @state() - _editPath = ''; + private _editPath = ''; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/audit-log/info-app/media-history-workspace-info-app.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/audit-log/info-app/media-history-workspace-info-app.element.ts index 8b55dd976a1b..a728e44c10ff 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/audit-log/info-app/media-history-workspace-info-app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/audit-log/info-app/media-history-workspace-info-app.element.ts @@ -13,10 +13,10 @@ import { UmbUserItemRepository } from '@umbraco-cms/backoffice/user'; @customElement('umb-media-history-workspace-info-app') export class UmbMediaHistoryWorkspaceInfoAppElement extends UmbLitElement { @state() - _currentPageNumber = 1; + private _currentPageNumber = 1; @state() - _totalPages = 1; + private _totalPages = 1; @state() private _items: Array = []; @@ -144,9 +144,9 @@ export class UmbMediaHistoryWorkspaceInfoAppElement extends UmbLitElement { .current=${this._currentPageNumber} .total=${this._totalPages} firstlabel=${this.localize.term('general_first')} - previouslabel=${this.localize.term('general_previous')} - nextlabel=${this.localize.term('general_next')} - lastlabel=${this.localize.term('general_last')} + previouslabel=${this.localize.term('general_previous')} + nextlabel=${this.localize.term('general_next')} + lastlabel=${this.localize.term('general_last')} @change=${this.#onPageChange}> ` : nothing} diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-focus-setter.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-focus-setter.element.ts index 7e18a63effd2..2ba70071d146 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-focus-setter.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper-focus-setter.element.ts @@ -33,7 +33,7 @@ export class UmbImageCropperFocusSetterElement extends UmbLitElement { private _isDraggingGridHandle = false; @state() - private coords = { x: 0, y: 0 }; + private _coords = { x: 0, y: 0 }; @property({ attribute: false }) set focalPoint(value) { @@ -133,8 +133,8 @@ export class UmbImageCropperFocusSetterElement extends UmbLitElement { if (!this.imageElement) return; // Init x and y coords from half of rendered image size, which is equavalient to focal point { left: 0.5, top: 0.5 }. - this.coords.x = this.imageElement?.clientWidth / 2; - this.coords.y = this.imageElement.clientHeight / 2; + this._coords.x = this.imageElement?.clientWidth / 2; + this._coords.y = this.imageElement.clientHeight / 2; } #handleGridDrag(event: PointerEvent) { @@ -162,8 +162,8 @@ export class UmbImageCropperFocusSetterElement extends UmbLitElement { // check if coordinates are not NaN (can happen when dragging outside of the grid) if (isNaN(x) || isNaN(y)) return; - this.coords.x = x; - this.coords.y = y; + this._coords.x = x; + this._coords.y = y; this.#setFocalPoint(x, y, width, height); }, @@ -209,26 +209,26 @@ export class UmbImageCropperFocusSetterElement extends UmbLitElement { if (event.key === 'ArrowLeft') { event.preventDefault(); - this.coords.x = clamp(this.coords.x - increment, 0, width); - this.#setFocalPoint(this.coords.x, this.coords.y, width, height); + this._coords.x = clamp(this._coords.x - increment, 0, width); + this.#setFocalPoint(this._coords.x, this._coords.y, width, height); } if (event.key === 'ArrowRight') { event.preventDefault(); - this.coords.x = clamp(this.coords.x + increment, 0, width); - this.#setFocalPoint(this.coords.x, this.coords.y, width, height); + this._coords.x = clamp(this._coords.x + increment, 0, width); + this.#setFocalPoint(this._coords.x, this._coords.y, width, height); } if (event.key === 'ArrowUp') { event.preventDefault(); - this.coords.y = clamp(this.coords.y - increment, 0, height); - this.#setFocalPoint(this.coords.x, this.coords.y, width, height); + this._coords.y = clamp(this._coords.y - increment, 0, height); + this.#setFocalPoint(this._coords.x, this._coords.y, width, height); } if (event.key === 'ArrowDown') { event.preventDefault(); - this.coords.y = clamp(this.coords.y + increment, 0, height); - this.#setFocalPoint(this.coords.x, this.coords.y, width, height); + this._coords.y = clamp(this._coords.y + increment, 0, height); + this.#setFocalPoint(this._coords.x, this._coords.y, width, height); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts index c3f454648785..a68e95e20a08 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts @@ -2,7 +2,7 @@ import type { UmbImageCropperCrop, UmbImageCropperFocalPoint } from './types.js' import { UmbImageCropChangeEvent } from './crop-change.event.js'; import { calculateExtrapolatedValue, clamp, inverseLerp, lerp } from '@umbraco-cms/backoffice/utils'; import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit'; -import { customElement, property, query, state, css, html } from '@umbraco-cms/backoffice/external/lit'; +import { customElement, property, query, css, html } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-image-cropper') @@ -19,15 +19,14 @@ export class UmbImageCropperElement extends UmbLitElement { }; @property({ type: Number }) get zoom() { - return this._zoom; + return this.#zoom; } set zoom(value) { // Calculate the delta value - the value the zoom has changed b - const delta = value - this._zoom; + const delta = value - this.#zoom; this.#updateImageScale(delta); } - - @state() _zoom = 0; + #zoom = 0; #VIEWPORT_PADDING = 50 as const; #MAX_SCALE_FACTOR = 4 as const; @@ -41,7 +40,7 @@ export class UmbImageCropperElement extends UmbLitElement { #mouseOffsetY = 0; get #getImageScale() { - return lerp(this.#minImageScale, this.#maxImageScale, this._zoom); + return lerp(this.#minImageScale, this.#maxImageScale, this.zoom); } override connectedCallback() { @@ -179,12 +178,12 @@ export class UmbImageCropperElement extends UmbLitElement { const currentScale = Math.max(currentScaleX, currentScaleY); // Calculate the zoom level based on the current scale // This finds the alpha value in the range of min and max scale. - this._zoom = inverseLerp(this.#minImageScale, this.#maxImageScale, currentScale); + this.zoom = inverseLerp(this.#minImageScale, this.#maxImageScale, currentScale); } #updateImageScale(amount: number, mouseX?: number, mouseY?: number) { this.#oldImageScale = this.#getImageScale; - this._zoom = clamp(this._zoom + amount, 0, 1); + this.zoom = clamp(this.zoom + amount, 0, 1); const newImageScale = this.#getImageScale; const mask = this.maskElement.getBoundingClientRect(); @@ -325,7 +324,7 @@ export class UmbImageCropperElement extends UmbLitElement {
    ` : nothing}`} `; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts index d69c9262a7d9..a492c79ac7c0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/property-editors/media-entity-picker/property-editor-ui-media-entity-picker.element.ts @@ -31,10 +31,10 @@ export class UmbPropertyEditorUIMediaEntityPickerElement extends UmbLitElement i readonly = false; @state() - _min: number = 0; + private _min: number = 0; @state() - _max: number = Infinity; + private _max: number = Infinity; #onChange(event: CustomEvent & { target: UmbInputMediaElement }) { this.value = event.target.value; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts index 172e15774b31..93e71be46fcc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-editor.element.ts @@ -10,14 +10,14 @@ import type { UmbRoute, UmbRouterSlotInitEvent } from '@umbraco-cms/backoffice/r export class UmbMediaWorkspaceEditorElement extends UmbLitElement { // // TODO: Refactor: when having a split view/variants context token, we can rename the split view/variants component to a generic and make this component generic as well. [NL] - private splitViewElement = new UmbMediaWorkspaceSplitViewElement(); + private _splitViewElement = new UmbMediaWorkspaceSplitViewElement(); #workspaceContext?: typeof UMB_MEDIA_WORKSPACE_CONTEXT.TYPE; #variants?: Array; #isForbidden = false; @state() - _routes?: Array; + private _routes?: Array; constructor() { super(); @@ -68,7 +68,7 @@ export class UmbMediaWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique is URL Safe... [NL] path: variantA.unique + '_&_' + variantB.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // Set split view/active info.. const variantSplit = info.match.fragments.consumed.split('_&_'); @@ -85,7 +85,7 @@ export class UmbMediaWorkspaceEditorElement extends UmbLitElement { routes.push({ // TODO: When implementing Segments, be aware if using the unique is URL Safe... [NL] path: variant.unique, - component: this.splitViewElement, + component: this._splitViewElement, setup: (_component, info) => { // cause we might come from a split-view, we need to reset index 1. this.#workspaceContext?.splitView.removeActiveVariant(1); diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-split-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-split-view.element.ts index 6c0d04026292..ba25bcaf1d2d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-split-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace-split-view.element.ts @@ -1,7 +1,7 @@ import { UMB_MEDIA_WORKSPACE_CONTEXT } from './media-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import type { ActiveVariant } from '@umbraco-cms/backoffice/workspace'; +import type { UmbActiveVariant } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-media-workspace-split-view') @@ -10,10 +10,10 @@ export class UmbMediaWorkspaceSplitViewElement extends UmbLitElement { private _workspaceContext?: typeof UMB_MEDIA_WORKSPACE_CONTEXT.TYPE; @state() - _variants?: Array; + private _variants?: Array; @state() - _icon?: string; + private _icon?: string; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/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 index 2ec6cce2a2a7..7c52689ce334 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-group/property-editor/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 @@ -34,10 +34,10 @@ export class UmbPropertyEditorUIMemberGroupPickerElement extends UmbLitElement i readonly = false; @state() - _min = 0; + private _min = 0; @state() - _max = Infinity; + private _max = Infinity; #onChange(event: CustomEvent & { target: UmbInputMemberGroupElement }) { this.value = event.target.value; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/property-type/member-type-property-type-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/property-type/member-type-property-type-item-ref.element.ts index e55489b82a60..c9a9b76e78c9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-type/property-type/member-type-property-type-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-type/property-type/member-type-property-type-item-ref.element.ts @@ -18,7 +18,7 @@ export class UmbMemberTypePropertyTypeItemRefElement extends UmbLitElement { standalone = false; @state() - _editPath = ''; + private _editPath = ''; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts index 1bd458c98e5a..0fce5fc05a94 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/member/member-workspace-split-view.element.ts @@ -2,7 +2,7 @@ import { UMB_MEMBER_ROOT_WORKSPACE_PATH } from '../../paths.js'; import { UMB_MEMBER_WORKSPACE_CONTEXT } from './member-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { css, html, nothing, customElement, state, repeat, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import type { ActiveVariant } from '@umbraco-cms/backoffice/workspace'; +import type { UmbActiveVariant } from '@umbraco-cms/backoffice/workspace'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-member-workspace-split-view') @@ -11,10 +11,10 @@ export class UmbMemberWorkspaceSplitViewElement extends UmbLitElement { private _workspaceContext?: typeof UMB_MEMBER_WORKSPACE_CONTEXT.TYPE; @state() - _variants?: Array; + private _variants?: Array; @state() - _icon?: string; + private _icon?: string; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts index 5b9116e45d00..b3a6e4a93224 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts @@ -174,10 +174,10 @@ export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement, private _modalRoute?: UmbModalRouteBuilder; @state() - _resolvedLinkNames: Array<{ unique: string; name: string }> = []; + private _resolvedLinkNames: Array<{ unique: string; name: string }> = []; @state() - _resolvedLinkUrls: Array<{ unique: string; url: string }> = []; + private _resolvedLinkUrls: Array<{ unique: string; url: string }> = []; #linkPickerModal; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/workspace/workspace-package.element.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/workspace/workspace-package.element.ts index b9bb4815761f..43af53825566 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/workspace/workspace-package.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package-repo/workspace/workspace-package.element.ts @@ -8,7 +8,7 @@ export class UmbWorkspacePackageElement extends UmbLitElement { entityId?: string; @state() - _package?: any; + private _package?: any; override connectedCallback(): void { super.connectedCallback(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/sources/package.server.data.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/sources/package.server.data.ts index 9458a605cdc3..e4af26be4832 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/sources/package.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/sources/package.server.data.ts @@ -8,25 +8,25 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; /** * Data source for packages from the server - + */ export class UmbPackageServerDataSource { - constructor(private readonly host: UmbControllerHost) {} + constructor(private readonly _host: UmbControllerHost) {} async deleteCreatedPackage(unique: string) { - return await tryExecute(this.host, PackageService.deletePackageCreatedById({ path: { id: unique } })); + return await tryExecute(this._host, PackageService.deletePackageCreatedById({ path: { id: unique } })); } getCreatedPackage(unique: string) { - return tryExecute(this.host, PackageService.getPackageCreatedById({ path: { id: unique } })); + return tryExecute(this._host, PackageService.getPackageCreatedById({ path: { id: unique } })); } getCreatedPackages({ skip, take }: { skip: number; take: number }) { - return tryExecute(this.host, PackageService.getPackageCreated({ query: { skip, take } })); + return tryExecute(this._host, PackageService.getPackageCreated({ query: { skip, take } })); } getCreatePackageDownload(unique: string) { - return tryExecute(this.host, PackageService.getPackageCreatedByIdDownload({ path: { id: unique } })); + return tryExecute(this._host, PackageService.getPackageCreatedByIdDownload({ path: { id: unique } })); } /** @@ -34,7 +34,7 @@ export class UmbPackageServerDataSource { * @memberof UmbPackageServerDataSource */ getRootItems() { - return tryExecute(this.host, ManifestService.getManifestManifest()); + return tryExecute(this._host, ManifestService.getManifestManifest()); } /** @@ -42,7 +42,7 @@ export class UmbPackageServerDataSource { * @memberof UmbPackageServerDataSource */ getPackageConfiguration() { - return tryExecute(this.host, PackageService.getPackageConfiguration()); + return tryExecute(this._host, PackageService.getPackageConfiguration()); } /** @@ -50,14 +50,14 @@ export class UmbPackageServerDataSource { * @memberof UmbPackageServerDataSource */ getPackageMigrations() { - return tryExecute(this.host, PackageService.getPackageMigrationStatus({ query: { skip: 0, take: 9999 } })); + return tryExecute(this._host, PackageService.getPackageMigrationStatus({ query: { skip: 0, take: 9999 } })); } async saveCreatedPackage(body: CreatePackageRequestModel) { - return await tryExecute(this.host, PackageService.postPackageCreated({ body })); + return await tryExecute(this._host, PackageService.postPackageCreated({ body })); } async updateCreatedPackage(id: string, body: UpdatePackageRequestModelWritable) { - return await tryExecute(this.host, PackageService.putPackageCreatedById({ path: { id }, body })); + return await tryExecute(this._host, PackageService.putPackageCreatedById({ path: { id }, body })); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/performance-profiling/dashboard-performance-profiling.element.ts b/src/Umbraco.Web.UI.Client/src/packages/performance-profiling/dashboard-performance-profiling.element.ts index b850464cb9cf..84cb99311371 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/performance-profiling/dashboard-performance-profiling.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/performance-profiling/dashboard-performance-profiling.element.ts @@ -45,7 +45,7 @@ export class UmbDashboardPerformanceProfilingElement extends UmbLitElement { } } - private renderProfilingStatus() { + #renderProfilingStatus() { return this._isDebugMode ? html` ${unsafeHTML(this.localize.term('profiling_performanceProfilingDescription'))} @@ -67,7 +67,9 @@ export class UmbDashboardPerformanceProfilingElement extends UmbLitElement { override render() { return html` - ${typeof this._profilingStatus === 'undefined' ? html`` : this.renderProfilingStatus()} + ${typeof this._profilingStatus === 'undefined' + ? html`` + : this.#renderProfilingStatus()} `; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.ts index 9ae2b22d530e..ce42a1c62831 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.ts @@ -43,7 +43,7 @@ export class UmbInputContentPickerSourceElement extends UUIFormControlMixin(UmbL dynamicRoot?: UmbContentPickerDynamicRoot; @state() - _options: Array
    diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-property.element.ts index a8f86836337c..49adf60673d2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-property.element.ts @@ -69,12 +69,15 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement { public ownerVariesBySegment?: boolean; @property({ type: Boolean, reflect: true, attribute: '_inherited' }) + // eslint-disable-next-line @typescript-eslint/naming-convention public _inherited?: boolean; @state() + // eslint-disable-next-line @typescript-eslint/naming-convention public _inheritedContentTypeId?: string; @state() + // eslint-disable-next-line @typescript-eslint/naming-convention public _inheritedContentTypeName?: string; @property({ type: String, reflect: false }) diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-tab.element.ts index 78a74aa86f79..051f6caffce6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-tab.element.ts @@ -122,16 +122,16 @@ export class UmbContentTypeDesignEditorTabElement extends UmbLitElement { } @state() - _groups: Array = []; + private _groups: Array = []; @state() - _hasProperties = false; + private _hasProperties = false; @state() - _sortModeActive?: boolean; + private _sortModeActive?: boolean; @state() - _editContentTypePath?: string; + private _editContentTypePath?: string; #groupStructureHelper = new UmbContentTypeContainerStructureHelper(this); diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/collection/workspace-has-content-collection/types.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/collection/workspace-has-content-collection/types.ts index 5497acc11346..90048ce9dfb6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/collection/workspace-has-content-collection/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/collection/workspace-has-content-collection/types.ts @@ -7,6 +7,7 @@ export type UmbWorkspaceHasContentCollectionConditionConfig = UmbConditionConfig /** * @deprecated Use `UmbWorkspaceHasContentCollectionConditionConfig` instead. This will be removed in Umbraco 17. */ +// eslint-disable-next-line @typescript-eslint/naming-convention export type WorkspaceHasCollectionConditionConfig = UmbWorkspaceHasContentCollectionConditionConfig; declare global { diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/global-components/content-workspace-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/global-components/content-workspace-property.element.ts index f742fa0738bb..f033663468bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/global-components/content-workspace-property.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/global-components/content-workspace-property.element.ts @@ -21,22 +21,22 @@ export class UmbContentWorkspacePropertyElement extends UmbLitElement { } @state() - _datasetVariantId?: UmbVariantId; + private _datasetVariantId?: UmbVariantId; @state() - _dataPath?: string; + private _dataPath?: string; @state() - _viewable?: boolean; + private _viewable?: boolean; @state() - _writeable?: boolean; + private _writeable?: boolean; @state() - _workspaceContext?: typeof UMB_CONTENT_WORKSPACE_CONTEXT.TYPE; + private _workspaceContext?: typeof UMB_CONTENT_WORKSPACE_CONTEXT.TYPE; @state() - _propertyType?: UmbPropertyTypeModel; + private _propertyType?: UmbPropertyTypeModel; @state() private _hasAccessToSensitiveData = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-properties.element.ts index 451be57c5a81..7398f0276419 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-properties.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-properties.element.ts @@ -22,10 +22,10 @@ export class UmbContentWorkspaceViewEditPropertiesElement extends UmbLitElement } @state() - _properties: Array = []; + private _properties: Array = []; @state() - _visibleProperties?: Array; + private _visibleProperties?: Array; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-tab.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-tab.element.ts index c9d011257d9d..fffc7743a0fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-tab.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/content/workspace/views/edit/content-editor-tab.element.ts @@ -28,10 +28,10 @@ export class UmbContentWorkspaceViewEditTabElement extends UmbLitElement { #groupStructureHelper = new UmbContentTypeContainerStructureHelper(this); @state() - _groups: Array = []; + private _groups: Array = []; @state() - _hasProperties = false; + private _hasProperties = false; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/content/property-type/workspace/property-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/content/property-type/workspace/property-type-workspace-editor.element.ts index 611ccc724117..517d7427f670 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/content/property-type/workspace/property-type-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/content/property-type/workspace/property-type-workspace-editor.element.ts @@ -7,10 +7,10 @@ export class UmbPropertyTypeWorkspaceEditorElement extends UmbLitElement { #workspaceContext?: typeof UMB_PROPERTY_TYPE_WORKSPACE_CONTEXT.TYPE; @state() - _isNew?: boolean; + private _isNew?: boolean; @state() - _name?: string; + private _name?: string; constructor() { super(); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/auth/auth-flow.ts b/src/Umbraco.Web.UI.Client/src/packages/core/auth/auth-flow.ts index ce875f7b56d1..8c10231db6ad 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/auth/auth-flow.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/auth/auth-flow.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ /* * Copyright 2017 Google Inc. * diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts index 9d518bd362de..b21375a67e67 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/auth/modals/umb-app-auth-modal.element.ts @@ -24,7 +24,7 @@ export class UmbAppAuthModalElement extends UmbModalBaseElement { + #onSubmit = async (providerOrManifest: string | ManifestAuthProvider, loginHint?: string) => { try { const authContext = await this.getContext(UMB_AUTH_CONTEXT); if (!authContext) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/create/collection-create-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/create/collection-create-action.element.ts index ff3117613dd9..58ed9e6f36ac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/create/collection-create-action.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/create/collection-create-action.element.ts @@ -20,7 +20,7 @@ export class UmbCollectionCreateActionButtonElement extends UmbLitElement { private _apiControllers: Array> = []; @state() - _hrefList: Array = []; + private _hrefList: Array = []; #createLabel = this.localize.term('general_create'); #entityContext?: typeof UMB_ENTITY_CONTEXT.TYPE; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts index 0fc06dc13ebf..c9e115dc9302 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -19,10 +19,10 @@ interface UmbCollectionViewLayout { @customElement('umb-collection-view-bundle') export class UmbCollectionViewBundleElement extends UmbLitElement { @state() - _views: Array = []; + private _views: Array = []; @state() - _currentView?: UmbCollectionViewLayout; + private _currentView?: UmbCollectionViewLayout; @state() private _collectionRootPathName?: string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/pagination/collection-pagination.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/pagination/collection-pagination.element.ts index 989b889406f2..a2a983b482c1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/pagination/collection-pagination.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/pagination/collection-pagination.element.ts @@ -7,10 +7,10 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-collection-pagination') export class UmbCollectionPaginationElement extends UmbLitElement { @state() - _totalPages = 1; + private _totalPages = 1; @state() - _currentPage = 1; + private _currentPage = 1; private _collectionContext?: UmbDefaultCollectionContext; @@ -56,9 +56,9 @@ export class UmbCollectionPaginationElement extends UmbLitElement { .current=${this._currentPage} .total=${this._totalPages} firstlabel=${this.localize.term('general_first')} - previouslabel=${this.localize.term('general_previous')} - nextlabel=${this.localize.term('general_next')} - lastlabel=${this.localize.term('general_last')} + previouslabel=${this.localize.term('general_previous')} + nextlabel=${this.localize.term('general_next')} + lastlabel=${this.localize.term('general_last')} @change=${this.#onChange}>`; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/conditions/types.ts index 6727375a9e8e..3908b6c95a84 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/conditions/types.ts @@ -3,12 +3,14 @@ import type { UMB_COLLECTION_ALIAS_CONDITION, UMB_COLLECTION_BULK_ACTION_PERMISS import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; /** @deprecated No longer used internally. This will be removed in Umbraco 17. [LK] */ +// eslint-disable-next-line @typescript-eslint/naming-convention export type CollectionBulkActionPermissionConditionConfig = UmbConditionConfigBase< typeof UMB_COLLECTION_BULK_ACTION_PERMISSION_CONDITION > & { match: (permissions: UmbCollectionBulkActionPermissions) => boolean; }; +// eslint-disable-next-line @typescript-eslint/naming-convention export type CollectionAliasConditionConfig = UmbConditionConfigBase & { /** * The collection that this extension should be available in diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/extensions/collection-view.extension.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/extensions/collection-view.extension.ts index 87927eb1bee5..c2b4cd654d99 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/extensions/collection-view.extension.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/extensions/collection-view.extension.ts @@ -31,7 +31,7 @@ export interface MetaCollectionView { /** * Condition for when this collection view should be available */ -export interface ConditionsCollectionView { +export interface UmbConditionsCollectionView { /** * Type of entity this collection view should be available for * @examples ["media"] @@ -39,6 +39,12 @@ export interface ConditionsCollectionView { entityType: string; } +/** + * @deprecated Use {@link UmbConditionsCollectionView} instead. This will be removed in Umbraco 18. + */ +// eslint-disable-next-line @typescript-eslint/no-empty-object-type, @typescript-eslint/naming-convention +export interface ConditionsCollectionView extends UmbConditionsCollectionView {} + declare global { interface UmbExtensionManifestMap { umbCollectionView: ManifestCollectionView; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/backoffice-modal-container/backoffice-modal-container.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/backoffice-modal-container/backoffice-modal-container.element.ts index 1295413273bf..59bd6f1bac1b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/backoffice-modal-container/backoffice-modal-container.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/backoffice-modal-container/backoffice-modal-container.element.ts @@ -11,7 +11,7 @@ export class UmbBackofficeModalContainerElement extends UmbLitElement { private _modalElementMap: Map = new Map(); @state() - _modals: Array = []; + private _modals: Array = []; @property({ type: Boolean, reflect: true, attribute: 'fill-background' }) fillBackground = false; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts index b78188b73b80..3a33449755e8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts @@ -1,6 +1,7 @@ import { customElement, css } from '@umbraco-cms/backoffice/external/lit'; import { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; +// eslint-disable-next-line @typescript-eslint/naming-convention export type InputDateType = 'date' | 'time' | 'datetime-local'; /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts index b2c1a7133599..9ed435e8980e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts @@ -28,7 +28,7 @@ export class UmbInputNumberRangeElement extends UmbFormControlMixin(UmbLitElemen @property({ type: Number }) public set minValue(value: number | undefined) { this._minValue = value; - this.updateValue(); + this.#updateValue(); } public get minValue() { return this._minValue; @@ -40,7 +40,7 @@ export class UmbInputNumberRangeElement extends UmbFormControlMixin(UmbLitElemen @property({ type: Number }) public set maxValue(value: number | undefined) { this._maxValue = value; - this.updateValue(); + this.#updateValue(); } public get maxValue() { return this._maxValue; @@ -63,7 +63,7 @@ export class UmbInputNumberRangeElement extends UmbFormControlMixin(UmbLitElemen @state() private _maxPlaceholder: string = ''; - private updateValue() { + #updateValue() { const newValue = this._minValue || this._maxValue ? (this._minValue ?? '') + ',' + (this._maxValue ?? '') : undefined; if (super.value !== newValue) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-toggle/input-toggle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-toggle/input-toggle.element.ts index 22960a90f27c..8137a605bca7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-toggle/input-toggle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-toggle/input-toggle.element.ts @@ -47,7 +47,7 @@ export class UmbInputToggleElement extends UmbFormControlMixin(UmbLitElement, '' readonly = false; @state() - _currentLabel?: string; + private _currentLabel?: string; protected override firstUpdated(): void { this.addFormControlElement(this.shadowRoot!.querySelector('uui-toggle')!); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts index ad36835d1dd7..babc2991709b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts @@ -54,8 +54,8 @@ export class UmbSplitPanelElement extends LitElement { /** Pixel value for the snap threshold. Determines how close the divider needs to be to a snap point to snap to it. */ readonly #SNAP_THRESHOLD = 25 as const; - @state() _hasStartPanel = false; - @state() _hasEndPanel = false; + @state() private _hasStartPanel = false; + @state() private _hasEndPanel = false; get #hasBothPanels() { return this._hasStartPanel && this._hasEndPanel; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/modal/entity-create-option-action-list-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/modal/entity-create-option-action-list-modal.element.ts index 3df6311c7797..e2918650afce 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/modal/entity-create-option-action-list-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/create/modal/entity-create-option-action-list-modal.element.ts @@ -28,7 +28,7 @@ export class UmbEntityCreateOptionActionListModalElement extends UmbModalBaseEle private _apiControllers: Array> = []; @state() - _hrefList: Array = []; + private _hrefList: Array = []; protected override updated(_changedProperties: PropertyValues): void { super.updated(_changedProperties); 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 c3ac0d406fa2..eba6470ca100 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 @@ -39,7 +39,7 @@ export class UmbEntityActionDefaultElement< } @state() - _href?: string; + private _href?: string; override async focus() { await this.updateComplete; 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 83e181f67e4d..17b15475c1a8 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 @@ -23,7 +23,7 @@ export class UmbEntityActionListElement extends UmbLitElement { } @state() - _filter?: (extension: ManifestEntityAction) => boolean; + private _filter?: (extension: ManifestEntityAction) => boolean; @property({ type: String }) public get unique(): string | null | undefined { @@ -37,10 +37,10 @@ export class UmbEntityActionListElement extends UmbLitElement { } @state() - _props: Partial> = {}; + private _props: Partial> = {}; @state() - _apiArgs?: UmbApiConstructorArgumentsMethodType< + private _apiArgs?: UmbApiConstructorArgumentsMethodType< ManifestEntityAction, [UmbEntityActionArgs] >; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts index 8da90bffc561..41e4bc9d47fe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts @@ -17,7 +17,7 @@ export class UmbDeleteEntityBulkAction< MetaKindType extends MetaEntityBulkActionDeleteKind = MetaEntityBulkActionDeleteKind, > extends UmbEntityBulkActionBase { #localize = new UmbLocalizationController(this); - _items: Array = []; + #items: Array = []; override async execute() { if (this.selection?.length === 0) { @@ -26,7 +26,7 @@ export class UmbDeleteEntityBulkAction< // TODO: Move item look up to a future bulk action context await this.#requestItems(); - await this._confirmDelete(this._items); + await this._confirmDelete(this.#items); await this.#requestBulkDelete(this.selection); } @@ -51,7 +51,7 @@ export class UmbDeleteEntityBulkAction< const { data } = await itemRepository.requestItems(this.selection); - this._items = data ?? []; + this.#items = data ?? []; } async #requestBulkDelete(uniques: Array) { @@ -105,7 +105,7 @@ export class UmbDeleteEntityBulkAction< eventContext.dispatchEvent(reloadStructure); } - const succeededItems = this._items.filter((item) => succeeded.includes(item.unique)); + const succeededItems = this.#items.filter((item) => succeeded.includes(item.unique)); succeededItems.forEach((item) => { const deletedEvent = new UmbEntityDeletedEvent({ diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/entity-item-ref/entity-item-ref.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/entity-item-ref/entity-item-ref.element.ts index 275fdf48fe22..17d1721051b2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/entity-item-ref/entity-item-ref.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/entity-item-ref/entity-item-ref.element.ts @@ -16,7 +16,7 @@ export class UmbEntityItemRefElement extends UmbLitElement { #item?: UmbEntityModel; @state() - _component?: any; // TODO: Add type + private _component?: any; // TODO: Add type @property({ type: Object, attribute: false }) public get item(): UmbEntityModel | undefined { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts index 2ecf1307afbe..454ca4bdaf10 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts @@ -44,6 +44,7 @@ export const manifest: ManifestCondition = { api: UmbSwitchCondition, }; +// eslint-disable-next-line @typescript-eslint/naming-convention export type SwitchConditionConfig = UmbConditionConfigBase<'Umb.Condition.Switch'> & { frequency: string; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index ee46b35085c2..5b08b30c8888 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -3,11 +3,6 @@ import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-a export type UmbCoreConditionConfigs = SwitchConditionConfig | UmbConditionConfigBase; -/** - * @deprecated instead use global UmbExtensionConditionConfig - */ -export type ConditionTypes = UmbCoreConditionConfigs; - type UnionOfProperties = T extends object ? T[keyof T] : never; declare global { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts index 8837c0ea38c8..a08b131ea3ec 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts @@ -7,15 +7,15 @@ import { UmbExtensionElementAndApiInitializer } from '@umbraco-cms/backoffice/ex export abstract class UmbExtensionElementAndApiSlotElementBase< ManifestType extends ManifestElementAndApi, > extends UmbLitElement { - _alias?: string; @property({ type: String, reflect: true }) get alias() { - return this._alias; + return this.#alias; } set alias(newVal) { - this._alias = newVal; + this.#alias = newVal; this.#observeManifest(); } + #alias?: string; @property({ type: Object, attribute: false }) set props(newVal: Record | undefined) { @@ -34,26 +34,26 @@ export abstract class UmbExtensionElementAndApiSlotElementBase< #extensionController?: UmbExtensionElementAndApiInitializer; @state() - _api: ManifestType['API_TYPE'] | undefined; + private _api: ManifestType['API_TYPE'] | undefined; @state() - _element: ManifestType['ELEMENT_TYPE'] | undefined; + private _element: ManifestType['ELEMENT_TYPE'] | undefined; abstract getExtensionType(): string; abstract getDefaultElementName(): string; #observeManifest() { - if (!this._alias) return; + if (!this.alias) return; this.#extensionController = new UmbExtensionElementAndApiInitializer( this, umbExtensionsRegistry, - this._alias, + this.alias, [this], this.#extensionChanged, this.getDefaultElementName(), ); - this.#extensionController.elementProps = this.#props; + this.#extensionController.elementProps = this.props; } #extensionChanged = (isPermitted: boolean, controller: UmbExtensionElementAndApiInitializer) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/menu/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/menu/conditions/types.ts index b2d40d3bdb8e..9647f1684782 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/menu/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/menu/conditions/types.ts @@ -1,5 +1,6 @@ import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; +// eslint-disable-next-line @typescript-eslint/naming-convention export type MenuAliasConditionConfig = UmbConditionConfigBase & { match: string; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/menu/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/menu/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts index 84d46fe2a3e7..adce5916467c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/menu/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/menu/section-sidebar-menu-with-entity-actions/section-sidebar-menu-with-entity-actions.element.ts @@ -20,10 +20,10 @@ umbExtensionsRegistry.register(manifestWithEntityActions); @customElement('umb-section-sidebar-menu-with-entity-actions') export class UmbSectionSidebarMenuWithEntityActionsElement extends UmbSectionSidebarMenuElement { @state() - _unique = null; + private _unique = null; @state() - _entityType?: string | null; + private _entityType?: string | null; #parentContext = new UmbParentEntityContext(this); From 58c144f90584d14c9a093cbaa30d1d075dc77f14 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:37:59 +0200 Subject: [PATCH 30/49] build(eslint): allows double leading underscore on public members --- src/Umbraco.Web.UI.Client/eslint.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index c7de7f247200..dbcf76e3dae6 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -117,14 +117,14 @@ export default [ match: false, }, format: ['camelCase', 'UPPER_CASE', 'PascalCase'], - leadingUnderscore: 'forbid', + leadingUnderscore: 'allowDouble', trailingUnderscore: 'forbid', }, // All #private members and variables should be camelCase without leading underscore // Example: #myPublicVariable, #myPublicMethod { selector: ['variableLike', 'memberLike'], - modifiers: ['private'], + modifiers: ['#private'], format: ['camelCase'], leadingUnderscore: 'forbid', trailingUnderscore: 'forbid', From 6e098a5a75ec059fbeccff3430e982035af34ac8 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:39:31 +0200 Subject: [PATCH 31/49] build(eslint): matches #private and public modifiers --- src/Umbraco.Web.UI.Client/eslint.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index dbcf76e3dae6..1f0a7f2fc1cd 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -125,8 +125,8 @@ export default [ { selector: ['variableLike', 'memberLike'], modifiers: ['#private'], - format: ['camelCase'], - leadingUnderscore: 'forbid', + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + leadingUnderscore: 'allowDouble', trailingUnderscore: 'forbid', }, // All protected members and variables should be camelCase with optional leading underscore (if needed to be pseudo-private) From ca32cdb4cfbb793bdd9c881969f074abf9f01e70 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:45:58 +0200 Subject: [PATCH 32/49] build(eslint): ignores language files --- src/Umbraco.Web.UI.Client/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js index 1f0a7f2fc1cd..123cbed40435 100644 --- a/src/Umbraco.Web.UI.Client/eslint.config.js +++ b/src/Umbraco.Web.UI.Client/eslint.config.js @@ -72,7 +72,7 @@ export default [ // Pattern-specific overrides { files: ['**/*.ts'], - ignores: ['.storybook', '**/*.stories.ts', '**/umbraco-package.ts'], + ignores: ['.storybook', '**/*.stories.ts', '**/umbraco-package.ts', 'src/assets/lang/*.ts'], languageOptions: { parserOptions: { project: true, From 1d4ca5f11cc96233c91bc8380463c9b4c0ef5d5c Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:46:11 +0200 Subject: [PATCH 33/49] chore(eslint): ignores umbraco package file --- .../src/json-schema/umbraco-package-schema.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/json-schema/umbraco-package-schema.ts b/src/Umbraco.Web.UI.Client/src/json-schema/umbraco-package-schema.ts index fae9b07e6599..a001c52d513a 100644 --- a/src/Umbraco.Web.UI.Client/src/json-schema/umbraco-package-schema.ts +++ b/src/Umbraco.Web.UI.Client/src/json-schema/umbraco-package-schema.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import '@umbraco-cms/backoffice/extension-registry'; /** From 6f77b26196bc4e10f824430611c2465d57dc0d92 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:48:08 +0200 Subject: [PATCH 34/49] chore(eslint): follow naming conventions --- .../error/installer-error.element.ts | 2 +- .../apps/upgrader/upgrader-view.element.ts | 4 +-- .../src/apps/upgrader/upgrader.element.ts | 32 +++++++++---------- .../base-extensions-initializer.controller.ts | 1 + .../extension-api/types/condition.types.ts | 2 ++ .../src/libs/extension-api/types/map.types.ts | 1 + .../src/libs/extension-api/types/utils.ts | 1 + .../localization.controller.ts | 4 +-- .../localization-api/localization.manager.ts | 1 + ...grid-area-type-workspace-editor.element.ts | 2 +- .../code-editor/models/code-editor.model.ts | 1 + .../document-configuration.context.ts | 4 +-- .../modal/media-type-import-modal.element.ts | 4 +-- 13 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/apps/installer/error/installer-error.element.ts b/src/Umbraco.Web.UI.Client/src/apps/installer/error/installer-error.element.ts index a7aad8e47003..968c4fda7087 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/installer/error/installer-error.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/installer/error/installer-error.element.ts @@ -8,7 +8,7 @@ import type { UmbProblemDetails } from '@umbraco-cms/backoffice/resources'; @customElement('umb-installer-error') export class UmbInstallerErrorElement extends UmbLitElement { @state() - _error?: UmbProblemDetails; + private _error?: UmbProblemDetails; private _installerContext?: UmbInstallerContext; diff --git a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader-view.element.ts b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader-view.element.ts index 1b1f78132dd2..21fc60d6db91 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader-view.element.ts @@ -52,7 +52,7 @@ export class UmbUpgraderViewElement extends LitElement {

    Simply click continue below to be guided through the rest of the upgrade.

    -
    +

    ` : this._renderLayout()} `; } - _handleSubmit = async (e: SubmitEvent) => { + #handleSubmit = async (e: SubmitEvent) => { e.preventDefault(); this.dispatchEvent(new CustomEvent('onAuthorizeUpgrade', { detail: e, bubbles: true })); }; diff --git a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts index 6b959d1f9d69..6d25f9528100 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts @@ -13,16 +13,16 @@ import './upgrader-view.element.js'; @customElement('umb-upgrader') export class UmbUpgraderElement extends UmbLitElement { @state() - private upgradeSettings?: UpgradeSettingsResponseModelReadable; + private _upgradeSettings?: UpgradeSettingsResponseModelReadable; @state() - private fetching = true; + private _fetching = true; @state() - private upgrading = false; + private _upgrading = false; @state() - private errorMessage = ''; + private _errorMessage = ''; constructor() { super(); @@ -32,46 +32,46 @@ export class UmbUpgraderElement extends UmbLitElement { override render() { return html` `; } private async _setup() { - this.fetching = true; + this._fetching = true; const { data, error } = await tryExecute(this, UpgradeService.getUpgradeSettings(), { disableNotifications: true }); if (data) { - this.upgradeSettings = data; + this._upgradeSettings = data; } else if (error) { - this.errorMessage = UmbApiError.isUmbApiError(error) + this._errorMessage = UmbApiError.isUmbApiError(error) ? (error.problemDetails.detail ?? 'Unknown error, please try again') : error.message; } - this.fetching = false; + this._fetching = false; } _handleSubmit = async (e: CustomEvent) => { e.stopPropagation(); - this.errorMessage = ''; - this.upgrading = true; + this._errorMessage = ''; + this._upgrading = true; const { error } = await tryExecute(this, UpgradeService.postUpgradeAuthorize()); if (error) { - this.errorMessage = UmbApiError.isUmbApiError(error) + this._errorMessage = UmbApiError.isUmbApiError(error) ? (error.problemDetails.detail ?? 'Unknown error, please try again') : (error.message ?? 'Unknown error, please try again'); } else { history.pushState(null, '', 'section/content'); } - this.upgrading = false; + this._upgrading = false; }; } diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts index 48bdd603526e..6a51e24d3f7e 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts @@ -5,6 +5,7 @@ import type { UmbBaseExtensionInitializer } from './base-extension-initializer.c import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +// eslint-disable-next-line @typescript-eslint/naming-convention export type PermittedControllerType = ControllerType & { manifest: Required>; }; diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/condition.types.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/condition.types.ts index 581cec28b517..1d1e594d635c 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/condition.types.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/condition.types.ts @@ -4,12 +4,14 @@ export interface UmbConditionConfigBase { alias: AliasType; } +// eslint-disable-next-line @typescript-eslint/naming-convention export type ConditionTypeMap = { [Condition in ConditionConfigs as Condition['alias']]: Condition; } & { [key: string]: UmbConditionConfigBase; }; +// eslint-disable-next-line @typescript-eslint/naming-convention export type SpecificConditionTypeOrUmbConditionConfigBase< ConditionConfigs extends UmbConditionConfigBase, T extends keyof ConditionTypeMap | string, diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/map.types.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/map.types.ts index 255621e28f05..ac09a9c46b80 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/map.types.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/map.types.ts @@ -6,6 +6,7 @@ type ManifestTypeMapGenerator = { [key: string]: ManifestBase; }; +// eslint-disable-next-line @typescript-eslint/naming-convention export type SpecificManifestTypeOrManifestBase< ManifestTypes extends ManifestBase, T extends string, diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/utils.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/utils.ts index bf6ad39b2583..67534655a4f0 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/types/utils.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/naming-convention */ import type { UmbApi } from '../models/index.js'; // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localization.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localization.controller.ts index 9ed63a986c3e..018ffe8921d2 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localization.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localization.controller.ts @@ -97,7 +97,7 @@ export class UmbLocalizationController; + static #documentConfiguration: Promise; constructor(host: UmbControllerHost) { super(host, UMB_DOCUMENT_CONFIGURATION_CONTEXT); @@ -25,7 +25,7 @@ export class UmbDocumentConfigurationContext extends UmbContextBase implements U * @returns A promise that resolves to the document configuration, or null if the configuration could not be fetched. */ getDocumentConfiguration(): Promise { - return (UmbDocumentConfigurationContext.#DocumentConfiguration ??= this.fetchDocumentConfiguration()); + return (UmbDocumentConfigurationContext.#documentConfiguration ??= this.fetchDocumentConfiguration()); } /** diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts index 2ebb3c35e779..50c521c4cd0a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/entity-actions/import/modal/media-type-import-modal.element.ts @@ -18,7 +18,7 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement< UmbMediaTypeImportModalData, UmbMediaTypeImportModalValue > { - #MediaTypeImportRepository = new UmbMediaTypeImportRepository(this); + #mediaTypeImportRepository = new UmbMediaTypeImportRepository(this); #temporaryUnique?: string; #fileReader; @@ -54,7 +54,7 @@ export class UmbMediaTypeImportModalLayout extends UmbModalBaseElement< async #onFileImport() { if (!this.#temporaryUnique) return; - const { error } = await this.#MediaTypeImportRepository.requestImport(this.#temporaryUnique); + const { error } = await this.#mediaTypeImportRepository.requestImport(this.#temporaryUnique); if (error) return; this._submitModal(); } From 87d8908fe3a71700e1a9af1207db3b94bc09412e Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:52:55 +0200 Subject: [PATCH 35/49] storybook lang --- src/Umbraco.Web.UI.Client/.storybook/preview.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/.storybook/preview.js b/src/Umbraco.Web.UI.Client/.storybook/preview.js index 4ed958e32cae..98c8ab65b5e8 100644 --- a/src/Umbraco.Web.UI.Client/.storybook/preview.js +++ b/src/Umbraco.Web.UI.Client/.storybook/preview.js @@ -140,10 +140,10 @@ class UmbStoryBookElement extends UmbLitElement { new UmbModalManagerContext(this); new UmbNotificationContext(this); - umbLocalizationRegistry.loadLanguage('en-us'); // register default language + umbLocalizationRegistry.loadLanguage('en'); // register default language this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (appLanguageContext) => { - appLanguageContext.setLanguage('en-us'); // set default language + appLanguageContext?.setLanguage('en'); // set default language }); } From 48140930157b83a6c6d843e93bb692bf82e81536 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:56:08 +0200 Subject: [PATCH 36/49] chore(eslint): follow naming conventions --- .../src/apps/upgrader/upgrader.element.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts index 6d25f9528100..fa1b105c484c 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts @@ -36,7 +36,7 @@ export class UmbUpgraderElement extends UmbLitElement { .upgrading=${this._upgrading} .settings=${this._upgradeSettings} .errorMessage=${this._errorMessage} - @onAuthorizeUpgrade=${this._handleSubmit}> + @onAuthorizeUpgrade=${this.#handleSubmit}> `; } @@ -56,7 +56,7 @@ export class UmbUpgraderElement extends UmbLitElement { this._fetching = false; } - _handleSubmit = async (e: CustomEvent) => { + #handleSubmit = async (e: CustomEvent) => { e.stopPropagation(); this._errorMessage = ''; this._upgrading = true; From 7786e34dca29e83ce781c4f08fc44427a6386639 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:00:13 +0200 Subject: [PATCH 37/49] chore(eslint): follow naming conventions --- .../utils/property-editor-test-utils.ts | 94 ++++++++++--------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/property-editors/utils/property-editor-test-utils.ts b/src/Umbraco.Web.UI.Client/src/packages/property-editors/utils/property-editor-test-utils.ts index 6798205d3f20..3c021856d0ea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/property-editors/utils/property-editor-test-utils.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/property-editors/utils/property-editor-test-utils.ts @@ -7,154 +7,158 @@ import { expect } from '@open-wc/testing'; /** * Type definitions for better domain modeling */ -export type PropertyEditorElement = { config?: unknown }; -export type ShadowDOMElement = { shadowRoot?: ShadowRoot | null }; -export type SingleSelectElement = { value: string } & ShadowDOMElement; -export type MultiSelectElement = { value: string[] } & ShadowDOMElement; +export type UmbPropertyEditorElement = { config?: unknown }; +export type UmbShadowDOMElement = { shadowRoot?: ShadowRoot | null }; +export type UmbSingleSelectElement = { value: string } & UmbShadowDOMElement; +export type UmbMultiSelectElement = { value: string[] } & UmbShadowDOMElement; -export interface ConfigItem { +export interface UmbConfigItem { name: string; value: string; } -export interface TestDataEntry { +export interface UmbTestDataEntry { value: T; expected: T; } -export type ConfigAlias = 'items' | 'multiple'; -export type CSSSelector = 'uui-select' | 'umb-input-checkbox-list' | 'umb-input-dropdown-list'; +export type UmbConfigAlias = 'items' | 'multiple'; +export type UmbCSSSelector = 'uui-select' | 'umb-input-checkbox-list' | 'umb-input-dropdown-list'; /** * Helper function to setup basic string array configuration - * @param {PropertyEditorElement} element - The property editor element to configure + * @param {UmbPropertyEditorElement} element - The property editor element to configure * @param {string[]} items - Array of string items for configuration */ -export function setupBasicStringConfig(element: PropertyEditorElement, items: string[] = ['Red', 'Green', 'Blue']) { +export function setupBasicStringConfig(element: UmbPropertyEditorElement, items: string[] = ['Red', 'Green', 'Blue']) { element.config = { - getValueByAlias: (alias: ConfigAlias) => { + getValueByAlias: (alias: UmbConfigAlias) => { if (alias === 'items') { return items; } return undefined; }, - } as { getValueByAlias: (alias: ConfigAlias) => unknown }; + } as { getValueByAlias: (alias: UmbConfigAlias) => unknown }; } /** * Helper function to setup object array configuration - * @param {PropertyEditorElement} element - The property editor element to configure - * @param {ConfigItem[]} items - Array of object items for configuration + * @param {UmbPropertyEditorElement} element - The property editor element to configure + * @param {UmbConfigItem[]} items - Array of object items for configuration */ export function setupObjectConfig( - element: PropertyEditorElement, - items: ConfigItem[] = [ + element: UmbPropertyEditorElement, + items: UmbConfigItem[] = [ { name: 'Red Color', value: 'red' }, { name: 'Green Color', value: 'green' }, { name: 'Blue Color', value: 'blue' }, ], ) { element.config = { - getValueByAlias: (alias: ConfigAlias) => { + getValueByAlias: (alias: UmbConfigAlias) => { if (alias === 'items') { return items; } return undefined; }, - } as { getValueByAlias: (alias: ConfigAlias) => unknown }; + } as { getValueByAlias: (alias: UmbConfigAlias) => unknown }; } /** * Helper function to setup empty configuration - * @param {PropertyEditorElement} element - The property editor element to configure + * @param {UmbPropertyEditorElement} element - The property editor element to configure */ -export function setupEmptyConfig(element: PropertyEditorElement) { +export function setupEmptyConfig(element: UmbPropertyEditorElement) { element.config = { getValueByAlias: () => undefined, - } as { getValueByAlias: (alias: ConfigAlias) => unknown }; + } as { getValueByAlias: (alias: UmbConfigAlias) => unknown }; } /** * Helper function to get select element from shadow DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {Element | null} The UUI select element or null */ -export function getSelectElement(element: ShadowDOMElement) { - return element.shadowRoot?.querySelector('uui-select' as CSSSelector); +export function getSelectElement(element: UmbShadowDOMElement) { + return element.shadowRoot?.querySelector('uui-select' as UmbCSSSelector); } /** * Helper function to get checkbox list element from shadow DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {Element | null} The checkbox list element or null */ -export function getCheckboxListElement(element: ShadowDOMElement) { - return element.shadowRoot?.querySelector('umb-input-checkbox-list' as CSSSelector); +export function getCheckboxListElement(element: UmbShadowDOMElement) { + return element.shadowRoot?.querySelector('umb-input-checkbox-list' as UmbCSSSelector); } /** * Helper function to get dropdown element from shadow DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {Element | null} The dropdown element or null */ -export function getDropdownElement(element: ShadowDOMElement) { - return element.shadowRoot?.querySelector('umb-input-dropdown-list' as CSSSelector); +export function getDropdownElement(element: UmbShadowDOMElement) { + return element.shadowRoot?.querySelector('umb-input-dropdown-list' as UmbCSSSelector); } /** * Helper function to get selected value from select DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {string} The selected value string */ -export function getSelectedValue(element: ShadowDOMElement): string { +export function getSelectedValue(element: UmbShadowDOMElement): string { const selectElement = getSelectElement(element) as { value?: string } | null; return selectElement?.value || ''; } /** * Helper function to get selection from checkbox list DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {string[]} Array of selected values */ -export function getCheckboxSelection(element: ShadowDOMElement): string[] { +export function getCheckboxSelection(element: UmbShadowDOMElement): string[] { const checkboxElement = getCheckboxListElement(element) as { selection?: string[] } | null; return checkboxElement?.selection || []; } /** * Helper function to get selection from dropdown DOM - * @param {ShadowDOMElement} element - The property editor element + * @param {UmbShadowDOMElement} element - The property editor element * @returns {string[]} Array of selected values */ -export function getDropdownSelection(element: ShadowDOMElement): string[] { +export function getDropdownSelection(element: UmbShadowDOMElement): string[] { const dropdownElement = getDropdownElement(element) as { value?: string; selection?: string[] } | null; // Prefer selection array if available, fallback to parsing value string if (dropdownElement?.selection) { return dropdownElement.selection; } // Fallback: parse comma-separated string (note: assumes values don't contain commas) - return dropdownElement?.value ? dropdownElement.value.split(', ').filter(v => v.trim().length > 0) : []; + return dropdownElement?.value ? dropdownElement.value.split(', ').filter((v) => v.trim().length > 0) : []; } /** * Helper function to verify both value and DOM state for single select - * @param {SingleSelectElement} element - The property editor element + * @param {UmbSingleSelectElement} element - The property editor element * @param {string} expectedValue - Expected element value * @param {string} expectedSelected - Expected selected value in DOM */ -export function verifySelectValueAndDOM(element: SingleSelectElement, expectedValue: string, expectedSelected: string) { +export function verifySelectValueAndDOM( + element: UmbSingleSelectElement, + expectedValue: string, + expectedSelected: string, +) { expect(element.value).to.equal(expectedValue); expect(getSelectedValue(element)).to.equal(expectedSelected); } /** * Helper function to verify both value and DOM state for multi-select - * @param {MultiSelectElement} element - The property editor element + * @param {UmbMultiSelectElement} element - The property editor element * @param {string[]} expectedValue - Expected element value array * @param {string[]} expectedSelection - Expected selection array in DOM */ export function verifyMultiSelectValueAndDOM( - element: MultiSelectElement, + element: UmbMultiSelectElement, expectedValue: string[], expectedSelection: string[], ) { @@ -164,12 +168,12 @@ export function verifyMultiSelectValueAndDOM( /** * Helper function to verify both value and DOM state for dropdown - * @param {MultiSelectElement} element - The property editor element + * @param {UmbMultiSelectElement} element - The property editor element * @param {string[]} expectedValue - Expected element value array * @param {string[]} expectedSelection - Expected selection array in DOM */ export function verifyDropdownValueAndDOM( - element: MultiSelectElement, + element: UmbMultiSelectElement, expectedValue: string[], expectedSelection: string[], ) { @@ -180,14 +184,14 @@ export function verifyDropdownValueAndDOM( /** * Common test data for multiple updates */ -export const SINGLE_SELECT_TEST_DATA: TestDataEntry[] = [ +export const SINGLE_SELECT_TEST_DATA: UmbTestDataEntry[] = [ { value: 'Red', expected: 'Red' }, { value: 'Green', expected: 'Green' }, { value: 'Blue', expected: 'Blue' }, { value: '', expected: '' }, ]; -export const MULTI_SELECT_TEST_DATA: TestDataEntry[] = [ +export const MULTI_SELECT_TEST_DATA: UmbTestDataEntry[] = [ { value: ['Red'], expected: ['Red'] }, { value: ['Red', 'Blue'], expected: ['Red', 'Blue'] }, { value: ['Green'], expected: ['Green'] }, From 0d4defdfcf32c30be256f23e7e5374a13ec8b53d Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:03:31 +0200 Subject: [PATCH 38/49] chore(eslint): make _manager a little more open --- .../src/packages/block/block/context/block-entries.context.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts index 50d8af1e36bc..d6d1ef44f41d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts @@ -17,8 +17,8 @@ export abstract class UmbBlockEntriesContext< BlockOriginData extends UmbBlockWorkspaceOriginData, > extends UmbContextBase { // - private _manager?: BlockManagerContextType; - private _retrieveManager; + protected _manager?: BlockManagerContextType; + protected _retrieveManager; protected _catalogueRouteBuilderState = new UmbBasicState(undefined); readonly catalogueRouteBuilder = this._catalogueRouteBuilderState.asObservable(); From 34cf1f48a7ee1466c96af87ff293aebbc6c5ae30 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:05:32 +0200 Subject: [PATCH 39/49] chore(eslint): some properties should be protected --- .../extension-element-and-api-slot-element-base.ts | 4 ++-- .../result-item/picker-search-result-item-element-base.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts index a08b131ea3ec..95f219131ab8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/extension-element-and-api-slot-element-base.ts @@ -34,10 +34,10 @@ export abstract class UmbExtensionElementAndApiSlotElementBase< #extensionController?: UmbExtensionElementAndApiInitializer; @state() - private _api: ManifestType['API_TYPE'] | undefined; + protected _api: ManifestType['API_TYPE'] | undefined; @state() - private _element: ManifestType['ELEMENT_TYPE'] | undefined; + protected _element: ManifestType['ELEMENT_TYPE'] | undefined; abstract getExtensionType(): string; abstract getDefaultElementName(): string; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts index 9a0e8a126800..93fccfe64e02 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/picker/search/result-item/picker-search-result-item-element-base.ts @@ -22,7 +22,7 @@ export abstract class UmbPickerSearchResultItemElementBase Date: Thu, 7 Aug 2025 16:24:03 +0200 Subject: [PATCH 40/49] Update src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../components/input-image-cropper/image-cropper.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts index a68e95e20a08..6bb8a6d2dcfa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts @@ -178,7 +178,7 @@ export class UmbImageCropperElement extends UmbLitElement { const currentScale = Math.max(currentScaleX, currentScaleY); // Calculate the zoom level based on the current scale // This finds the alpha value in the range of min and max scale. - this.zoom = inverseLerp(this.#minImageScale, this.#maxImageScale, currentScale); + this.#zoom = inverseLerp(this.#minImageScale, this.#maxImageScale, currentScale); } #updateImageScale(amount: number, mouseX?: number, mouseY?: number) { From a7b14c94c014f9e7fe427ef503515f6b7b63e5c5 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:24:09 +0200 Subject: [PATCH 41/49] Update src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../components/input-image-cropper/image-cropper.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts index 6bb8a6d2dcfa..e0223597e76d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts @@ -183,7 +183,7 @@ export class UmbImageCropperElement extends UmbLitElement { #updateImageScale(amount: number, mouseX?: number, mouseY?: number) { this.#oldImageScale = this.#getImageScale; - this.zoom = clamp(this.zoom + amount, 0, 1); + this.#zoom = clamp(this.zoom + amount, 0, 1); const newImageScale = this.#getImageScale; const mask = this.maskElement.getBoundingClientRect(); From d2dec761b5750719a171f957168277dcd2f0a2bd Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:25:22 +0200 Subject: [PATCH 42/49] Update src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../components/input-image-cropper/image-cropper.element.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts index e0223597e76d..1bce83938316 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/components/input-image-cropper/image-cropper.element.ts @@ -40,7 +40,7 @@ export class UmbImageCropperElement extends UmbLitElement { #mouseOffsetY = 0; get #getImageScale() { - return lerp(this.#minImageScale, this.#maxImageScale, this.zoom); + return lerp(this.#minImageScale, this.#maxImageScale, this.#zoom); } override connectedCallback() { From 07a1b4c5198e9b2b3c9e9be7776ec39aa8a6a163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 09:32:21 +0200 Subject: [PATCH 43/49] proxy type for UrlParametersRecord --- .../core/utils/path/url-pattern-to-string.function.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts index 8ff2829f6da1..781e57a91a43 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts @@ -1,4 +1,8 @@ export type UmbUrlParametersRecord = Record string } | null>; +/** + * @deprecated Use `UmbUrlParametersRecord` instead. Will be removed in v.18 + */ +export type UrlParametersRecord = UmbUrlParametersRecord; const PARAM_IDENTIFIER = /:([^/]+)/g; From 3ee209b312710a0d2235b29536f3167612447839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 09:42:42 +0200 Subject: [PATCH 44/49] _items deprecated property --- .../common/bulk-delete/bulk-delete.action.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts index 41e4bc9d47fe..a9e6fcf4b5f0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts @@ -18,6 +18,18 @@ export class UmbDeleteEntityBulkAction< > extends UmbEntityBulkActionBase { #localize = new UmbLocalizationController(this); #items: Array = []; + /** + * @deprecated this has been turned into a private property and cannot be used from v.18. Will be removed in v.18 + * */ + protected get _items() { + return this.#items; + } + /** + * @deprecated this has been turned into a private property and cannot be used from v.18. Will be removed in v.18 + * */ + protected set _items(value: Array) { + this.#items = value; + } override async execute() { if (this.selection?.length === 0) { From 5b0e8425faabf9bd0c43ba3bd58febbac55e907c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 09:44:01 +0200 Subject: [PATCH 45/49] bring back ConditionTypes type --- .../src/packages/core/extension-registry/conditions/types.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index 5b08b30c8888..9304cf893e92 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -3,6 +3,11 @@ import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-a export type UmbCoreConditionConfigs = SwitchConditionConfig | UmbConditionConfigBase; +/** + * @deprecated instead use global UmbExtensionConditionConfig, will be removed in v.17 + */ +export type ConditionTypes = UmbCoreConditionConfigs; + type UnionOfProperties = T extends object ? T[keyof T] : never; declare global { From 53208a308d0e071e7905379f517f690fd5c45430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 09:46:28 +0200 Subject: [PATCH 46/49] bring back _items for trash bulk action --- .../bulk-trash/bulk-trash.action.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts index 996de8b45523..01fee70f9812 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts @@ -19,6 +19,18 @@ export class UmbTrashEntityBulkAction< > extends UmbEntityBulkActionBase { #localize = new UmbLocalizationController(this); #items: Array = []; + /** + * @deprecated this has been turned into a private property and cannot be used from v.18. Will be removed in v.18 + * */ + protected get _items() { + return this.#items; + } + /** + * @deprecated this has been turned into a private property and cannot be used from v.18. Will be removed in v.18 + * */ + protected set _items(value: Array) { + this.#items = value; + } override async execute() { if (this.selection?.length === 0) { From 86eee33363ea568beecfaedbbcdd3ee22ec8ae7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 09:48:37 +0200 Subject: [PATCH 47/49] ignorer deprecated proxies --- .../src/packages/core/extension-registry/conditions/types.ts | 1 + .../packages/core/utils/path/url-pattern-to-string.function.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index 9304cf893e92..6a8ab30e6eab 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -6,6 +6,7 @@ export type UmbCoreConditionConfigs = SwitchConditionConfig | UmbConditionConfig /** * @deprecated instead use global UmbExtensionConditionConfig, will be removed in v.17 */ +// eslint-disable-next-line @typescript-eslint/naming-convention export type ConditionTypes = UmbCoreConditionConfigs; type UnionOfProperties = T extends object ? T[keyof T] : never; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts index 781e57a91a43..e7175e73082b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/path/url-pattern-to-string.function.ts @@ -2,6 +2,7 @@ export type UmbUrlParametersRecord = Record Date: Fri, 8 Aug 2025 10:05:41 +0200 Subject: [PATCH 48/49] keep settingsDataContentTypeKey for satefy --- .../src/packages/block/block/context/block-entry.context.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts index 18b55b91077c..31e4241e7a86 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts @@ -279,6 +279,12 @@ export abstract class UmbBlockEntryContext< private readonly _settingsDataContentTypeKey = this.#settings.asObservablePart((x) => x ? (x.contentTypeKey ?? undefined) : null, ); + /** + * @deprecated Use {@link _settingsDataContentTypeKey} instead. This will be removed in Umbraco 18. + */ + // eslint-disable-next-line @typescript-eslint/naming-convention @typescript-eslint/no-unused-vars + private readonly settingsDataContentTypeKey = this._settingsDataContentTypeKey; + #settingsValuesObservable?: Observable; public async settingsValues() { await this.#settingsStructurePromise; From 5d0742242c1b5351dd41c3e3f060e8d46cf35463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 8 Aug 2025 10:15:22 +0200 Subject: [PATCH 49/49] fix disable line --- .../src/packages/block/block/context/block-entry.context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts index 31e4241e7a86..8df8e0297385 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts @@ -282,7 +282,7 @@ export abstract class UmbBlockEntryContext< /** * @deprecated Use {@link _settingsDataContentTypeKey} instead. This will be removed in Umbraco 18. */ - // eslint-disable-next-line @typescript-eslint/naming-convention @typescript-eslint/no-unused-vars + // eslint-disable-next-line private readonly settingsDataContentTypeKey = this._settingsDataContentTypeKey; #settingsValuesObservable?: Observable;