@umbraco-cms/backoffice 17.4.0-rc → 17.4.0-rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1 -1
- package/dist-cms/apps/app/app.element.js +120 -7
- package/dist-cms/apps/backoffice/backoffice.context.js +1 -9
- package/dist-cms/apps/backoffice/backoffice.element.d.ts +0 -2
- package/dist-cms/apps/backoffice/backoffice.element.js +0 -58
- package/dist-cms/apps/backoffice/components/backoffice-main.element.d.ts +2 -2
- package/dist-cms/apps/backoffice/components/backoffice-main.element.js +16 -3
- package/dist-cms/apps/installer/consent/installer-consent.element.js +5 -1
- package/dist-cms/external/uui/package.json +2 -2
- package/dist-cms/libs/extension-api/controller/base-extension-initializer.controller.d.ts +1 -1
- package/dist-cms/libs/extension-api/controller/base-extension-initializer.controller.js +61 -19
- package/dist-cms/libs/extension-api/controller/extension-api-initializer.controller.d.ts +1 -1
- package/dist-cms/libs/extension-api/controller/extension-api-initializer.controller.js +10 -3
- package/dist-cms/libs/extension-api/controller/extension-element-and-api-initializer.controller.d.ts +1 -1
- package/dist-cms/libs/extension-api/controller/extension-element-and-api-initializer.controller.js +12 -3
- package/dist-cms/libs/extension-api/controller/extension-element-initializer.controller.d.ts +1 -1
- package/dist-cms/libs/extension-api/controller/extension-element-initializer.controller.js +11 -3
- package/dist-cms/libs/extension-api/controller/extension-manifest-initializer.controller.d.ts +1 -1
- package/dist-cms/libs/extension-api/controller/extension-manifest-initializer.controller.js +1 -1
- package/dist-cms/libs/extension-api/initializers/extension-initializer-base.d.ts +2 -2
- package/dist-cms/libs/extension-api/initializers/extension-initializer-base.js +7 -3
- package/dist-cms/libs/extension-api/registry/extension.registry.js +22 -2
- package/dist-cms/libs/localization-api/localization.controller.d.ts +13 -0
- package/dist-cms/libs/localization-api/localization.controller.js +21 -0
- package/dist-cms/packages/block/block/conditions/block-workspace-is-readonly.condition.js +4 -2
- package/dist-cms/packages/block/block/context/block-entry.context.js +1 -4
- package/dist-cms/packages/block/block/workspace/block-element-manager.js +2 -2
- package/dist-cms/packages/block/block/workspace/block-workspace-editor.element.d.ts +1 -0
- package/dist-cms/packages/block/block/workspace/block-workspace-editor.element.js +31 -9
- package/dist-cms/packages/block/block/workspace/block-workspace-language-access.controller.d.ts +16 -0
- package/dist-cms/packages/block/block/workspace/block-workspace-language-access.controller.js +126 -0
- package/dist-cms/packages/block/block/workspace/block-workspace.context.js +23 -19
- package/dist-cms/packages/block/block/workspace/manifests.js +3 -0
- package/dist-cms/packages/block/block-custom-view/types.d.ts +1 -0
- package/dist-cms/packages/block/block-grid/components/block-grid-entries/block-grid-entries.element.d.ts +1 -1
- package/dist-cms/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.js +4 -5
- package/dist-cms/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.js +2 -5
- package/dist-cms/packages/block/block-list/components/block-list-entry/block-list-entry.element.js +11 -6
- package/dist-cms/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.js +4 -5
- package/dist-cms/packages/block/block-single/components/block-single-entry/block-single-entry.element.js +4 -5
- package/dist-cms/packages/code-editor/umbraco-package.d.ts +1 -0
- package/dist-cms/packages/code-editor/umbraco-package.js +1 -0
- package/dist-cms/packages/content/content/global-components/content-workspace-property.element.js +1 -1
- package/dist-cms/packages/content/content/rollback/modal/content-rollback-modal.element.js +2 -2
- package/dist-cms/packages/content/content-type/repository/structure/content-type-structure-server-data-source-base.d.ts +1 -1
- package/dist-cms/packages/core/auth/auth.context.d.ts +16 -7
- package/dist-cms/packages/core/auth/auth.context.js +91 -65
- package/dist-cms/packages/core/components/body-layout/body-layout.element.js +3 -1
- package/dist-cms/packages/core/components/input-number-range/input-number-range.element.d.ts +1 -1
- package/dist-cms/packages/core/components/input-toggle/input-toggle.element.d.ts +1 -1
- package/dist-cms/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.d.ts +1 -1
- package/dist-cms/packages/core/components/multiple-color-picker-input/multiple-color-picker-item-input.element.d.ts +1 -1
- package/dist-cms/packages/core/components/multiple-text-string-input/input-multiple-text-string-item.element.d.ts +1 -1
- package/dist-cms/packages/core/culture/components/input-culture-select/input-culture-select.element.d.ts +1 -1
- package/dist-cms/packages/core/culture/manifests.d.ts +1 -1
- package/dist-cms/packages/core/entity-action/common/delete/delete.action.js +2 -1
- package/dist-cms/packages/core/entity-item/item-data-api-get-request-controller/item-data-api-get-request.controller.d.ts +1 -1
- package/dist-cms/packages/core/extension/picker-data-source/extension.picker-data-source.d.ts +1 -1
- package/dist-cms/packages/core/extension-registry/conditions/condition-base.controller.js +3 -2
- package/dist-cms/packages/core/extension-registry/conditions/delay.condition.js +5 -1
- package/dist-cms/packages/core/extension-registry/conditions/switch.condition.d.ts +0 -2
- package/dist-cms/packages/core/extension-registry/conditions/switch.condition.js +13 -7
- package/dist-cms/packages/core/hint/context/hint.context-token.d.ts +1 -1
- package/dist-cms/packages/core/http-client/index.d.ts +32 -0
- package/dist-cms/packages/core/http-client/index.js +1 -0
- package/dist-cms/packages/core/modal/common/confirm/confirm-modal.element.js +2 -4
- package/dist-cms/packages/core/modal/common/info/info-modal.element.js +2 -4
- package/dist-cms/packages/core/object-type/input-object-type.element.d.ts +1 -1
- package/dist-cms/packages/core/object-type/object-type.repository.d.ts +1 -1
- package/dist-cms/packages/core/property/manifests.d.ts +1 -1
- package/dist-cms/packages/core/property/property-guard-manager/property-guard.manager.d.ts +1 -1
- package/dist-cms/packages/core/property/property-guard-manager/property-guard.manager.js +6 -3
- package/dist-cms/packages/core/property/property-guard-manager/variant-property-guard.manager.d.ts +1 -1
- package/dist-cms/packages/core/property/property-guard-manager/variant-property-guard.manager.js +7 -3
- package/dist-cms/packages/core/property-editor-data-source/input/input-property-editor-data-source.element.d.ts +1 -1
- package/dist-cms/packages/core/recycle-bin/conditions/is-trashed/entity-is-trashed.condition.js +2 -1
- package/dist-cms/packages/core/recycle-bin/entity-action/trash/trash.action.js +2 -1
- package/dist-cms/packages/core/recycle-bin/recycle-bin-repository-base.d.ts +1 -1
- package/dist-cms/packages/core/repository/data-mapper/mapping/data-mapping-resolver.js +1 -0
- package/dist-cms/packages/core/repository/detail/detail-repository-base.d.ts +2 -2
- package/dist-cms/packages/core/repository/item/item-repository-base.d.ts +1 -1
- package/dist-cms/packages/core/repository/item/item-server-data-source-base.d.ts +1 -1
- package/dist-cms/packages/core/server-file-system/rename/rename-server-file-repository-base.d.ts +1 -1
- package/dist-cms/packages/core/temporary-file/manifests.d.ts +1 -1
- package/dist-cms/packages/core/themes/manifests.d.ts +1 -1
- package/dist-cms/packages/core/tree/data/tree-repository-base.d.ts +2 -2
- package/dist-cms/packages/core/tree/data/tree-server-data-source-base.d.ts +3 -3
- package/dist-cms/packages/core/utils/guard-manager/guard.manager.base.d.ts +4 -2
- package/dist-cms/packages/core/utils/guard-manager/guard.manager.base.js +10 -5
- package/dist-cms/packages/core/utils/guard-manager/readonly-guard.manager.js +9 -5
- package/dist-cms/packages/core/utils/guard-manager/readonly-variant-guard.manager.d.ts +12 -2
- package/dist-cms/packages/core/utils/guard-manager/readonly-variant-guard.manager.js +26 -11
- package/dist-cms/packages/core/variant/variant-id.class.d.ts +4 -0
- package/dist-cms/packages/core/variant/variant-id.class.js +5 -1
- package/dist-cms/packages/core/view/context/view.controller.d.ts +1 -1
- package/dist-cms/packages/core/workspace/components/workspace-action/common/submit/submit.action.d.ts +2 -2
- package/dist-cms/packages/core/workspace/components/workspace-action/common/submit/submit.action.js +8 -2
- package/dist-cms/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.js +7 -10
- package/dist-cms/packages/core/workspace/namable/name-write-guard.manager.js +5 -2
- package/dist-cms/packages/core/workspace/workspace.element.d.ts +0 -2
- package/dist-cms/packages/core/workspace/workspace.element.js +1 -4
- package/dist-cms/packages/data-type/collection/repository/data-type-collection.repository.d.ts +1 -1
- package/dist-cms/packages/data-type/collection/repository/data-type-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/data-type/components/data-type-flow-input/data-type-flow-input.element.d.ts +1 -1
- package/dist-cms/packages/data-type/components/data-type-input/data-type-input.element.d.ts +1 -1
- package/dist-cms/packages/data-type/entity-actions/conditions/manifests.d.ts +1 -1
- package/dist-cms/packages/data-type/entity-actions/duplicate/repository/data-type-duplicate.repository.d.ts +1 -1
- package/dist-cms/packages/data-type/entity-actions/move-to/repository/data-type-move.repository.d.ts +1 -1
- package/dist-cms/packages/data-type/repository/detail/server-data-source/data-type-detail.server.data-source.d.ts +4 -4
- package/dist-cms/packages/data-type/repository/item/data-type-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/data-type/search/data-type-search.repository.d.ts +1 -1
- package/dist-cms/packages/data-type/search/data-type-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/data-type/search/data-type.search-provider.d.ts +1 -1
- package/dist-cms/packages/data-type/tree/folder/repository/data-type-folder.server.data-source.d.ts +3 -3
- package/dist-cms/packages/data-type/tree/server-data-source/data-type-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/dictionary/collection/repository/dictionary-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/dictionary/entity-action/move-to/repository/dictionary-move.repository.d.ts +1 -1
- package/dist-cms/packages/dictionary/repository/detail/dictionary-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/dictionary/repository/export/dictionary-export.repository.d.ts +1 -1
- package/dist-cms/packages/dictionary/repository/export/dictionary-export.server.data-source.d.ts +1 -1
- package/dist-cms/packages/dictionary/repository/import/dictionary-import.repository.d.ts +1 -1
- package/dist-cms/packages/dictionary/repository/item/dictionary-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/dictionary/search/dictionary-search.repository.d.ts +1 -1
- package/dist-cms/packages/dictionary/search/dictionary-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/dictionary/search/dictionary.search-provider.d.ts +1 -1
- package/dist-cms/packages/documents/document-blueprints/audit-log/repository/document-blueprint-audit-log.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-blueprints/audit-log/repository/document-blueprint-audit-log.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-blueprints/entity-actions/move-to/repository/document-blueprint-move.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-blueprints/repository/item/document-blueprint-item.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-blueprints/repository/item/document-blueprint-item.server.data-source.d.ts +2 -2
- package/dist-cms/packages/documents/document-blueprints/tree/folder/repository/document-blueprint-folder.server.data-source.d.ts +3 -3
- package/dist-cms/packages/documents/document-blueprints/tree/server-data-source/document-blueprint-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/entity-actions/duplicate/repository/document-type-duplicate.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/entity-actions/export/repository/document-type-export.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/entity-actions/export/repository/document-type-export.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/entity-actions/import/repository/document-type-import.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/entity-actions/move-to/repository/document-type-move.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/property-type/manifests.js +2 -1
- package/dist-cms/packages/documents/document-types/repository/composition/document-type-composition.repository.d.ts +2 -2
- package/dist-cms/packages/documents/document-types/repository/composition/document-type-composition.server.data-source.d.ts +2 -2
- package/dist-cms/packages/documents/document-types/repository/detail/server-data-source/document-type-detail.server.data-source.d.ts +4 -4
- package/dist-cms/packages/documents/document-types/repository/item/document-type-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/repository/template/document-type-template.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/search/document-type-search.repository.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/search/document-type-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/search/document-type.search-provider.d.ts +1 -1
- package/dist-cms/packages/documents/document-types/tree/folder/repository/document-type-folder.server.data-source.d.ts +3 -3
- package/dist-cms/packages/documents/document-types/tree/server-data-source/document-type.tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/audit-log/repository/document-audit-log.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/audit-log/repository/document-audit-log.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/collection/repository/document-collection.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/collection/repository/document-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/create-blueprint/repository/document-create-blueprint.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/duplicate/repository/document-duplicate.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/move-to/repository/document-move.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/entity-actions/notifications/repository/document-notifications.repository.d.ts +2 -2
- package/dist-cms/packages/documents/documents/item/repository/document-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/publishing/repository/document-publishing.repository.d.ts +1 -1
- package/dist-cms/packages/documents/documents/publishing/repository/document-publishing.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/recycle-bin/repository/document-recycle-bin.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/reference/repository/manifests.js +2 -1
- package/dist-cms/packages/documents/documents/repository/detail/document-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/documents/documents/rollback/modal/rollback-modal.element.js +2 -2
- package/dist-cms/packages/documents/documents/search/document-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/tree/server-data-source/document-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/url/repository/document-url.server.data-source.d.ts +1 -1
- package/dist-cms/packages/documents/documents/user-permissions/document/input-document-granular-user-permission/input-document-granular-user-permission.element.d.ts +1 -1
- package/dist-cms/packages/documents/documents/user-permissions/document-property-value/conditions/document-property-value-user-permission.condition.js +2 -0
- package/dist-cms/packages/documents/documents/user-permissions/document-property-value/data/manifests.js +4 -2
- package/dist-cms/packages/documents/documents/user-permissions/document-property-value/input-document-property-value-user-permission/input-document-property-value-user-permission.element.d.ts +1 -1
- package/dist-cms/packages/documents/documents/user-permissions/document-property-value/workspace-context/document-block-property-value-user-permission.workspace-context.js +3 -5
- package/dist-cms/packages/documents/documents/workspace/actions/save.action.js +2 -0
- package/dist-cms/packages/documents/documents/workspace/document-workspace.context.js +6 -1
- package/dist-cms/packages/documents/umbraco-package.d.ts +1 -6
- package/dist-cms/packages/documents/umbraco-package.js +2 -8
- package/dist-cms/packages/embedded-media/repository/oembed.repository.d.ts +1 -1
- package/dist-cms/packages/language/collection/repository/language-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/language/components/input-language/input-language.element.d.ts +1 -1
- package/dist-cms/packages/language/repository/detail/language-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/language/repository/item/language-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/imaging/imaging.server.data.d.ts +1 -1
- package/dist-cms/packages/media/media/audit-log/repository/media-audit-log.repository.d.ts +1 -1
- package/dist-cms/packages/media/media/audit-log/repository/media-audit-log.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/collection/repository/media-collection.repository.d.ts +1 -1
- package/dist-cms/packages/media/media/collection/repository/media-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/entity-actions/move-to/repository/media-move.repository.d.ts +1 -1
- package/dist-cms/packages/media/media/recycle-bin/repository/media-recycle-bin.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/reference/repository/manifests.js +2 -1
- package/dist-cms/packages/media/media/repository/detail/media-detail.repository.d.ts +3 -3
- package/dist-cms/packages/media/media/repository/detail/media-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/media/media/repository/item/media-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/search/global-search/media-global-search.d.ts +1 -1
- package/dist-cms/packages/media/media/search/media-search.repository.d.ts +1 -1
- package/dist-cms/packages/media/media/search/media-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/search/media.search-provider.d.ts +1 -1
- package/dist-cms/packages/media/media/tree/server-data-source/media-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media/url/repository/media-url.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media-types/entity-actions/duplicate/repository/media-type-duplicate.repository.d.ts +1 -1
- package/dist-cms/packages/media/media-types/entity-actions/export/repository/media-type-export.repository.d.ts +2 -2
- package/dist-cms/packages/media/media-types/entity-actions/export/repository/media-type-export.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media-types/entity-actions/import/repository/media-type-import.repository.d.ts +1 -1
- package/dist-cms/packages/media/media-types/entity-actions/move-to/repository/media-type-move.repository.d.ts +1 -1
- package/dist-cms/packages/media/media-types/property-type/manifests.js +2 -1
- package/dist-cms/packages/media/media-types/repository/composition/media-type-composition.repository.d.ts +2 -2
- package/dist-cms/packages/media/media-types/repository/composition/media-type-composition.server.data-source.d.ts +2 -2
- package/dist-cms/packages/media/media-types/repository/detail/media-type-detail.server.data-source.d.ts +4 -4
- package/dist-cms/packages/media/media-types/repository/item/media-type-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media-types/repository/structure/media-type-structure.repository.d.ts +1 -1
- package/dist-cms/packages/media/media-types/repository/structure/media-type-structure.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media-types/search/media-type-search.repository.d.ts +1 -1
- package/dist-cms/packages/media/media-types/search/media-type-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/media/media-types/search/media-type.search-provider.d.ts +1 -1
- package/dist-cms/packages/media/media-types/tree/folder/repository/media-type-folder.server.data-source.d.ts +3 -3
- package/dist-cms/packages/media/media-types/tree/server-data-source/media-type.tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member/collection/repository/member-collection.repository.d.ts +1 -1
- package/dist-cms/packages/members/member/collection/repository/member-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member/item/repository/member-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member/reference/repository/manifests.js +2 -1
- package/dist-cms/packages/members/member/repository/detail/member-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/members/member/search/member-search.repository.d.ts +1 -1
- package/dist-cms/packages/members/member/search/member-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member/search/member.search-provider.d.ts +1 -1
- package/dist-cms/packages/members/member-group/collection/repository/member-group-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member-group/repository/detail/member-group-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/members/member-group/repository/item/member-group-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member-public-access/repository/public-access.repository.d.ts +4 -4
- package/dist-cms/packages/members/member-type/entity-actions/duplicate/repository/member-type-duplicate.repository.d.ts +1 -1
- package/dist-cms/packages/members/member-type/entity-actions/export/repository/member-type-export.repository.d.ts +2 -2
- package/dist-cms/packages/members/member-type/entity-actions/export/repository/member-type-export.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member-type/entity-actions/import/repository/member-type-import.repository.d.ts +1 -1
- package/dist-cms/packages/members/member-type/entity-actions/move-to/repository/member-type-move.repository.d.ts +1 -1
- package/dist-cms/packages/members/member-type/property-type/manifests.js +2 -1
- package/dist-cms/packages/members/member-type/repository/composition/member-type-composition.repository.d.ts +2 -2
- package/dist-cms/packages/members/member-type/repository/composition/member-type-composition.server.data-source.d.ts +2 -2
- package/dist-cms/packages/members/member-type/repository/detail/member-type-detail.server.data-source.d.ts +4 -4
- package/dist-cms/packages/members/member-type/repository/item/member-type-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member-type/search/member-type-search.repository.d.ts +1 -1
- package/dist-cms/packages/members/member-type/search/member-type-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/members/member-type/search/member-type.search-provider.d.ts +1 -1
- package/dist-cms/packages/members/member-type/tree/folder/repository/member-type-folder.server.data-source.d.ts +3 -3
- package/dist-cms/packages/members/member-type/tree/server-data-source/member-type-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/packages/package/repository/sources/package.server.data.d.ts +1 -1
- package/dist-cms/packages/packages/package-section/views/installed/installed-packages-section-view.element.js +2 -2
- package/dist-cms/packages/property-editors/collection/config/column/components/input-collection-content-type-property.element.d.ts +1 -1
- package/dist-cms/packages/property-editors/color-picker/property-editor-ui-color-picker.element.js +14 -0
- package/dist-cms/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.d.ts +1 -1
- package/dist-cms/packages/property-editors/text-box/property-editor-ui-text-box.element.js +2 -2
- package/dist-cms/packages/property-editors/textarea/property-editor-ui-textarea.element.js +2 -2
- package/dist-cms/packages/relations/relation-types/collection/repository/relation-type-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/relations/relation-types/repository/detail/relation-type-detail.repository.d.ts +1 -1
- package/dist-cms/packages/relations/relation-types/repository/detail/relation-type-detail.server.data-source.d.ts +1 -1
- package/dist-cms/packages/relations/relations/collection/repository/relation-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/relations/relations/entity-actions/bulk-delete/modal/bulk-delete-with-relation-modal.element.js +7 -3
- package/dist-cms/packages/relations/relations/entity-actions/bulk-trash/modal/bulk-trash-with-relation-modal.element.js +8 -6
- package/dist-cms/packages/relations/relations/entity-actions/delete/modal/delete-with-relation-modal.element.js +2 -3
- package/dist-cms/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.js +8 -8
- package/dist-cms/packages/rte/components/rte-base.element.d.ts +2 -1
- package/dist-cms/packages/rte/components/rte-base.element.js +19 -6
- package/dist-cms/packages/segment/collection/repository/segment-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/static-file/repository/item/static-file-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/tags/components/tags-input/tags-input.element.d.ts +1 -1
- package/dist-cms/packages/tags/repository/tag.repository.d.ts +2 -2
- package/dist-cms/packages/telemetry/dashboard-telemetry.element.js +5 -1
- package/dist-cms/packages/templating/partial-views/entity-actions/rename/rename-partial-view.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/partial-views/repository/item/partial-view-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/partial-views/repository/partial-view-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/templating/partial-views/tree/folder/repository/partial-view-folder.server.data-source.d.ts +2 -2
- package/dist-cms/packages/templating/scripts/entity-actions/rename/rename-script.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/scripts/repository/item/script-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/scripts/repository/script-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/templating/scripts/tree/folder/repository/script-folder.server.data-source.d.ts +2 -2
- package/dist-cms/packages/templating/stylesheets/entity-actions/rename/rename-stylesheet.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/stylesheets/global-components/stylesheet-input/stylesheet-input.element.d.ts +1 -1
- package/dist-cms/packages/templating/stylesheets/repository/item/stylesheet-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/stylesheets/repository/stylesheet-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/templating/stylesheets/tree/folder/repository/stylesheet-folder.server.data-source.d.ts +2 -2
- package/dist-cms/packages/templating/templates/global-components/input-template/input-template.element.d.ts +1 -1
- package/dist-cms/packages/templating/templates/global-components/template-card/template-card.element.d.ts +1 -1
- package/dist-cms/packages/templating/templates/repository/detail/template-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/templating/templates/repository/item/template-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/templates/search/template-search.repository.d.ts +1 -1
- package/dist-cms/packages/templating/templates/search/template-search.server.data-source.d.ts +1 -1
- package/dist-cms/packages/templating/templates/search/template.search-provider.d.ts +1 -1
- package/dist-cms/packages/templating/templates/tree/server-data-source/template-tree.server.data-source.d.ts +1 -1
- package/dist-cms/packages/ufm/umbraco-package.d.ts +1 -0
- package/dist-cms/packages/ufm/umbraco-package.js +1 -0
- package/dist-cms/packages/user/current-user/current-user.context.d.ts +3 -1
- package/dist-cms/packages/user/current-user/current-user.context.js +11 -17
- package/dist-cms/packages/user/current-user/repository/current-user.repository.d.ts +6 -6
- package/dist-cms/packages/user/current-user/repository/current-user.server.data-source.d.ts +4 -4
- package/dist-cms/packages/user/user/client-credential/repository/data-source/user-client-credential.server.data-source.d.ts +2 -2
- package/dist-cms/packages/user/user/collection/repository/user-collection.repository.d.ts +1 -1
- package/dist-cms/packages/user/user/collection/repository/user-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user/invite/repository/invite-user-server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user/invite/repository/invite-user.repository.d.ts +2 -2
- package/dist-cms/packages/user/user/repository/avatar/user-avatar.repository.d.ts +2 -2
- package/dist-cms/packages/user/user/repository/change-password/change-user-password.repository.d.ts +1 -1
- package/dist-cms/packages/user/user/repository/detail/user-detail.server.data-source.d.ts +4 -4
- package/dist-cms/packages/user/user/repository/disable/disable-user.repository.d.ts +1 -1
- package/dist-cms/packages/user/user/repository/enable/enable-user.repository.d.ts +1 -1
- package/dist-cms/packages/user/user/repository/item/user-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user/repository/unlock/unlock-user.repository.d.ts +1 -1
- package/dist-cms/packages/user/user/repository/user.repository.d.ts +3 -3
- package/dist-cms/packages/user/user/workspace/user/user-workspace.context.d.ts +1 -1
- package/dist-cms/packages/user/user-group/collection/repository/user-group-collection.repository.d.ts +1 -1
- package/dist-cms/packages/user/user-group/collection/repository/user-group-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user-group/components/input-user-group/user-group-input.element.d.ts +1 -1
- package/dist-cms/packages/user/user-group/repository/detail/user-group-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/user/user-group/repository/item/user-group-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user-group/repository/users/user-group-users.repository.d.ts +1 -1
- package/dist-cms/packages/user/user-group/repository/users/user-group-users.server.data-source.d.ts +1 -1
- package/dist-cms/packages/user/user-permission/components/input-entity-user-permission/input-entity-user-permission.element.d.ts +1 -1
- package/dist-cms/packages/webhook/webhook/collection/repository/webhook-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/webhook/webhook/repository/detail/webhook-detail.server.data-source.d.ts +3 -3
- package/dist-cms/packages/webhook/webhook/repository/item/webhook-item.server.data-source.d.ts +1 -1
- package/dist-cms/packages/webhook/webhook-delivery/collection/repository/webhook-delivery-collection.server.data-source.d.ts +1 -1
- package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.repository.d.ts +1 -1
- package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.server.data-source.d.ts +1 -1
- package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/umbraco-package-schema.json +405 -405
- package/vscode-html-custom-data.json +3 -3
package/dist-cms/packages/block/block-list/components/block-list-entry/block-list-entry.element.js
CHANGED
|
@@ -158,7 +158,10 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
158
158
|
this._workspaceEditSettingsPath = path;
|
|
159
159
|
this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
|
|
160
160
|
}, null);
|
|
161
|
-
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) =>
|
|
161
|
+
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) => {
|
|
162
|
+
this._isReadOnly = isReadOnly;
|
|
163
|
+
this.#updateBlockViewProps({ readonly: isReadOnly });
|
|
164
|
+
}, 'umbReadOnlyObserver');
|
|
162
165
|
}
|
|
163
166
|
async #observeData() {
|
|
164
167
|
this.observe(await this.#context.contentValues(), (content) => {
|
|
@@ -229,6 +232,7 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
229
232
|
.icon=${this._icon}
|
|
230
233
|
.index=${this._blockViewProps.index}
|
|
231
234
|
.unpublished=${!this._exposed}
|
|
235
|
+
.readOnly=${this._isReadOnly}
|
|
232
236
|
.config=${this._blockViewProps.config}
|
|
233
237
|
.content=${this._blockViewProps.content}
|
|
234
238
|
.settings=${this._blockViewProps.settings}
|
|
@@ -242,6 +246,7 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
242
246
|
.icon=${this._icon}
|
|
243
247
|
.index=${this._blockViewProps.index}
|
|
244
248
|
.unpublished=${!this._exposed}
|
|
249
|
+
.readOnly=${this._isReadOnly}
|
|
245
250
|
.config=${this._blockViewProps.config}
|
|
246
251
|
.content=${this._blockViewProps.content}
|
|
247
252
|
.settings=${this._blockViewProps.settings}
|
|
@@ -288,8 +293,6 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
288
293
|
`;
|
|
289
294
|
}
|
|
290
295
|
#renderEditContentAction() {
|
|
291
|
-
if (this._isReadOnly)
|
|
292
|
-
return nothing;
|
|
293
296
|
return this._showContentEdit && this._workspaceEditContentPath
|
|
294
297
|
? html `<uui-button
|
|
295
298
|
label="edit"
|
|
@@ -312,8 +315,6 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
312
315
|
: nothing;
|
|
313
316
|
}
|
|
314
317
|
#renderEditSettingsAction() {
|
|
315
|
-
if (this._isReadOnly)
|
|
316
|
-
return nothing;
|
|
317
318
|
return html `
|
|
318
319
|
${this._hasSettings && this._workspaceEditSettingsPath
|
|
319
320
|
? html `<uui-button
|
|
@@ -333,7 +334,11 @@ let UmbBlockListEntryElement = class UmbBlockListEntryElement extends UmbLitElem
|
|
|
333
334
|
#renderDeleteAction() {
|
|
334
335
|
if (this._isReadOnly)
|
|
335
336
|
return nothing;
|
|
336
|
-
return html ` <uui-button
|
|
337
|
+
return html ` <uui-button
|
|
338
|
+
label="delete"
|
|
339
|
+
look="secondary"
|
|
340
|
+
@click=${() => this.#context.requestDelete()}
|
|
341
|
+
title=${this.localize.term('general_delete')}>
|
|
337
342
|
<uui-icon name="icon-remove"></uui-icon>
|
|
338
343
|
</uui-button>`;
|
|
339
344
|
}
|
package/dist-cms/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.js
CHANGED
|
@@ -140,7 +140,10 @@ let UmbBlockRteEntryElement = class UmbBlockRteEntryElement extends UmbLitElemen
|
|
|
140
140
|
this._workspaceEditSettingsPath = path;
|
|
141
141
|
this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
|
|
142
142
|
}, null);
|
|
143
|
-
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) =>
|
|
143
|
+
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) => {
|
|
144
|
+
this._isReadOnly = isReadOnly;
|
|
145
|
+
this.#updateBlockViewProps({ readonly: isReadOnly });
|
|
146
|
+
}, 'umbReadOnlyObserver');
|
|
144
147
|
}
|
|
145
148
|
async #observeData() {
|
|
146
149
|
this.observe(await this.#context.contentValues(), (content) => {
|
|
@@ -231,8 +234,6 @@ let UmbBlockRteEntryElement = class UmbBlockRteEntryElement extends UmbLitElemen
|
|
|
231
234
|
.config=${this._blockViewProps.config}></umb-ref-rte-block>`;
|
|
232
235
|
}
|
|
233
236
|
#renderEditAction() {
|
|
234
|
-
if (this._isReadOnly)
|
|
235
|
-
return nothing;
|
|
236
237
|
return this._showContentEdit && this._workspaceEditContentPath
|
|
237
238
|
? html `<uui-button
|
|
238
239
|
label="edit"
|
|
@@ -254,8 +255,6 @@ let UmbBlockRteEntryElement = class UmbBlockRteEntryElement extends UmbLitElemen
|
|
|
254
255
|
: nothing;
|
|
255
256
|
}
|
|
256
257
|
#renderEditSettingsAction() {
|
|
257
|
-
if (this._isReadOnly)
|
|
258
|
-
return nothing;
|
|
259
258
|
return html `
|
|
260
259
|
${this._hasSettings && this._workspaceEditSettingsPath
|
|
261
260
|
? html `<uui-button
|
|
@@ -160,7 +160,10 @@ let UmbBlockSingleEntryElement = class UmbBlockSingleEntryElement extends UmbLit
|
|
|
160
160
|
this._workspaceEditSettingsPath = path;
|
|
161
161
|
this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
|
|
162
162
|
}, null);
|
|
163
|
-
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) =>
|
|
163
|
+
this.observe(this.#context.readOnlyGuard.permitted, (isReadOnly) => {
|
|
164
|
+
this._isReadOnly = isReadOnly;
|
|
165
|
+
this.#updateBlockViewProps({ readonly: isReadOnly });
|
|
166
|
+
}, 'umbReadOnlyObserver');
|
|
164
167
|
}
|
|
165
168
|
async #observeData() {
|
|
166
169
|
this.observe(await this.#context.contentValues(), (content) => {
|
|
@@ -280,8 +283,6 @@ let UmbBlockSingleEntryElement = class UmbBlockSingleEntryElement extends UmbLit
|
|
|
280
283
|
: nothing;
|
|
281
284
|
}
|
|
282
285
|
#renderEditContentAction() {
|
|
283
|
-
if (this._isReadOnly)
|
|
284
|
-
return nothing;
|
|
285
286
|
return this._showContentEdit && this._workspaceEditContentPath
|
|
286
287
|
? html `<uui-button
|
|
287
288
|
label="edit"
|
|
@@ -303,8 +304,6 @@ let UmbBlockSingleEntryElement = class UmbBlockSingleEntryElement extends UmbLit
|
|
|
303
304
|
: nothing;
|
|
304
305
|
}
|
|
305
306
|
#renderEditSettingsAction() {
|
|
306
|
-
if (this._isReadOnly)
|
|
307
|
-
return nothing;
|
|
308
307
|
return html `
|
|
309
308
|
${this._hasSettings && this._workspaceEditSettingsPath
|
|
310
309
|
? html `<uui-button
|
package/dist-cms/packages/content/content/global-components/content-workspace-property.element.js
CHANGED
|
@@ -29,7 +29,7 @@ let UmbContentWorkspacePropertyElement = class UmbContentWorkspacePropertyElemen
|
|
|
29
29
|
});
|
|
30
30
|
// The Content Workspace Context is used to retrieve the property type we like to observe.
|
|
31
31
|
// This gives us the configuration from the property type as part of the data type.
|
|
32
|
-
this.consumeContext(UMB_CONTENT_WORKSPACE_CONTEXT,
|
|
32
|
+
this.consumeContext(UMB_CONTENT_WORKSPACE_CONTEXT, (workspaceContext) => {
|
|
33
33
|
this._workspaceContext = workspaceContext;
|
|
34
34
|
this.#observePropertyType();
|
|
35
35
|
});
|
|
@@ -5,7 +5,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { diffWords } from '../../../../core/utils/index.js';
|
|
8
|
-
import { css, customElement, html, nothing, repeat, state
|
|
8
|
+
import { css, customElement, html, nothing, repeat, state } from '../../../../../external/lit/index.js';
|
|
9
9
|
import { UmbModalBaseElement } from '../../../../core/modal/index.js';
|
|
10
10
|
import { UmbTextStyles } from '../../../../core/style/index.js';
|
|
11
11
|
import { UmbUserItemRepository } from '../../../../user/user/index.js';
|
|
@@ -299,7 +299,7 @@ let UmbContentRollbackModalElement = class UmbContentRollbackModalElement extend
|
|
|
299
299
|
label=${this.localize.term('rollback_showDiff')}
|
|
300
300
|
@change=${this.#onToggleDiff}
|
|
301
301
|
.checked=${this._showDiff}></uui-toggle>
|
|
302
|
-
${this._showDiff ? html `<p>${
|
|
302
|
+
${this._showDiff ? html `<p>${this.localize.htmlString('#rollback_diffHelp')}</p>` : nothing}
|
|
303
303
|
<uui-table>
|
|
304
304
|
<uui-table-column style="width: 0"></uui-table-column>
|
|
305
305
|
<uui-table-column></uui-table-column>
|
|
@@ -35,7 +35,7 @@ export declare abstract class UmbContentTypeStructureServerDataSourceBase<Server
|
|
|
35
35
|
};
|
|
36
36
|
error?: undefined;
|
|
37
37
|
} | {
|
|
38
|
-
error: ((Error | import("../../../../core/resources/index.js").
|
|
38
|
+
error: ((Error | import("../../../../core/resources/index.js").UmbError | import("../../../../core/resources/index.js").UmbCancelError | import("../../../../core/resources/index.js").UmbApiError) & (import("../../../../core/resources/index.js").UmbCancelError | import("../../../../core/resources/index.js").UmbApiError)) | undefined;
|
|
39
39
|
data?: undefined;
|
|
40
40
|
}>;
|
|
41
41
|
}
|
|
@@ -5,7 +5,7 @@ import type { UmbControllerHost } from '../../../libs/controller-api/index.js';
|
|
|
5
5
|
import { UmbContextBase } from '../../../libs/class-api/index.js';
|
|
6
6
|
import type { Observable } from '../../../external/rxjs/index.js';
|
|
7
7
|
import type { UmbBackofficeExtensionRegistry } from '../extension-registry/index.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { UmbApiClient } from '../http-client/index.js';
|
|
9
9
|
export interface UmbAuthSession {
|
|
10
10
|
/** When the access token expires (issuedAt + expiresIn). Used to decide when to refresh. */
|
|
11
11
|
accessTokenExpiresAt: number;
|
|
@@ -81,7 +81,6 @@ export declare class UmbAuthContext extends UmbContextBase {
|
|
|
81
81
|
* const token = await authContext.getLatestToken();
|
|
82
82
|
* const result = await fetch('https://my-api.com', { headers: { Authorization: `Bearer ${token}` } });
|
|
83
83
|
* ```
|
|
84
|
-
* @deprecated Use {@link configureClient} for `@hey-api/openapi-ts` clients or {@link getOpenApiConfiguration} for manual fetch calls. With cookie-based auth this always returns `'[redacted]'`. Scheduled for removal in Umbraco 19.
|
|
85
84
|
* @see {@link configureClient} for automatic token handling with `@hey-api/openapi-ts` clients.
|
|
86
85
|
* @see {@link getOpenApiConfiguration} for manual fetch calls with cookie-based auth.
|
|
87
86
|
* @memberof UmbAuthContext
|
|
@@ -159,18 +158,28 @@ export declare class UmbAuthContext extends UmbContextBase {
|
|
|
159
158
|
*/
|
|
160
159
|
getOpenApiConfiguration(): UmbOpenApiConfiguration;
|
|
161
160
|
/**
|
|
162
|
-
* Configures a `@hey-api/openapi-ts` client for authenticated API calls.
|
|
163
|
-
*
|
|
164
|
-
*
|
|
161
|
+
* Configures a `@hey-api/openapi-ts` generated client for authenticated API calls.
|
|
162
|
+
*
|
|
163
|
+
* Sets `baseUrl`, `credentials`, and the `auth` callback (cookie-based with
|
|
164
|
+
* automatic token refresh via {@link getLatestToken}), and binds the default
|
|
165
|
+
* response interceptors (401 retry, problem-details error notifications, etc.)
|
|
166
|
+
* to the client.
|
|
167
|
+
*
|
|
168
|
+
* The same auth context owns a single {@link UmbApiInterceptorController} for
|
|
169
|
+
* the lifetime of the host (`<umb-app>`), so it's safe to call this method for
|
|
170
|
+
* multiple clients (the core's {@link umbHttpClient} *and* an extension's own
|
|
171
|
+
* generated client) without registering duplicate auth-signaler contexts.
|
|
172
|
+
*
|
|
165
173
|
* @example
|
|
166
174
|
* ```js
|
|
167
175
|
* const authContext = await this.getContext(UMB_AUTH_CONTEXT);
|
|
168
176
|
* authContext.configureClient(myClient);
|
|
169
177
|
* // Now myClient automatically includes auth headers and interceptors
|
|
170
178
|
* ```
|
|
171
|
-
* @param client A `@hey-api/openapi-ts` client instance
|
|
179
|
+
* @param client A `@hey-api/openapi-ts` client instance — either {@link umbHttpClient}
|
|
180
|
+
* or one regenerated by an extension package against its own OpenAPI document.
|
|
172
181
|
*/
|
|
173
|
-
configureClient(client:
|
|
182
|
+
configureClient(client: UmbApiClient): void;
|
|
174
183
|
/**
|
|
175
184
|
* Sets the auth context as initialized, which means that the auth context is ready to be used.
|
|
176
185
|
* @remark This is used to let the app context know that the core module is ready, which means that the core auth providers are available.
|
|
@@ -40,6 +40,11 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
40
40
|
#authorizationSignal;
|
|
41
41
|
// Track clients that have been configured to prevent duplicate interceptor binding
|
|
42
42
|
#configuredClients;
|
|
43
|
+
// Lazily initialised on the first configureClient() call. Owns the singleton
|
|
44
|
+
// UmbAuthSignalerContext provided on the host (`<umb-app>`), so we MUST share
|
|
45
|
+
// one instance across every client we configure — instantiating a new controller
|
|
46
|
+
// per call would re-provide the signaler and stack listeners.
|
|
47
|
+
#interceptorController;
|
|
43
48
|
// Endpoint URLs
|
|
44
49
|
#linkEndpoint;
|
|
45
50
|
#linkKeyEndpoint;
|
|
@@ -123,20 +128,26 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
123
128
|
this.#channel.onmessage = (evt) => {
|
|
124
129
|
switch (evt.data?.type) {
|
|
125
130
|
case 'authorized': {
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
const expiresAt = evt.data.issuedAt + evt.data.expiresIn * TOKEN_EXPIRY_MULTIPLIER;
|
|
129
|
-
this.#session.setValue({ accessTokenExpiresAt, expiresAt });
|
|
130
|
-
this.#isAuthorized.setValue(true);
|
|
131
|
+
// Apply locally — do NOT call #updateSession which would re-broadcast.
|
|
132
|
+
this.#setSessionLocally(evt.data.expiresIn, evt.data.issuedAt);
|
|
131
133
|
this.#authorizationSignal.next();
|
|
132
134
|
break;
|
|
133
135
|
}
|
|
134
136
|
case 'sessionUpdate':
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
// Peer broadcast already-computed timestamps, so set the session
|
|
138
|
+
// directly. We still go through the `#inSessionUpdateCallback` guard
|
|
139
|
+
// so observers triggered re-entrantly skip a redundant /token call.
|
|
140
|
+
this.#inSessionUpdateCallback = true;
|
|
141
|
+
try {
|
|
142
|
+
this.#session.setValue({
|
|
143
|
+
accessTokenExpiresAt: evt.data.accessTokenExpiresAt,
|
|
144
|
+
expiresAt: evt.data.expiresAt,
|
|
145
|
+
});
|
|
146
|
+
this.#isAuthorized.setValue(true);
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
this.#inSessionUpdateCallback = false;
|
|
150
|
+
}
|
|
140
151
|
break;
|
|
141
152
|
case 'sessionCleared':
|
|
142
153
|
this.#session.setValue(undefined);
|
|
@@ -174,6 +185,9 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
174
185
|
});
|
|
175
186
|
}
|
|
176
187
|
destroy() {
|
|
188
|
+
// Tear down any in-flight popup auth flow so its window-level message listener
|
|
189
|
+
// and the closed-poll interval don't leak past this context's lifetime.
|
|
190
|
+
this.#popupCleanup?.();
|
|
177
191
|
super.destroy();
|
|
178
192
|
this.#channel.close();
|
|
179
193
|
}
|
|
@@ -222,30 +236,32 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
222
236
|
};
|
|
223
237
|
window.addEventListener('message', pkceHandler);
|
|
224
238
|
// Wait for the popup to complete via BroadcastChannel.
|
|
225
|
-
//
|
|
239
|
+
// The Promise resolves once cleanup runs — whether triggered by an `authorized`
|
|
240
|
+
// broadcast, the popup being closed/cancelled, a new auth flow superseding this
|
|
241
|
+
// one, or the auth context being destroyed. resolve() is parked inside cleanup
|
|
242
|
+
// so every termination path is observable to the awaiter.
|
|
226
243
|
return new Promise((resolve) => {
|
|
227
244
|
const cleanup = () => {
|
|
228
245
|
clearInterval(closedPoll);
|
|
229
246
|
this.#channel.removeEventListener('message', handler);
|
|
230
247
|
window.removeEventListener('message', pkceHandler);
|
|
231
248
|
this.#popupCleanup = undefined;
|
|
249
|
+
resolve();
|
|
232
250
|
};
|
|
233
251
|
this.#popupCleanup = cleanup;
|
|
234
252
|
const handler = (evt) => {
|
|
235
253
|
if (evt.data?.type === 'authorized') {
|
|
236
|
-
cleanup();
|
|
237
254
|
this.#client.clearPkceState();
|
|
238
255
|
this.#authWindowProxy?.close();
|
|
239
|
-
|
|
256
|
+
cleanup();
|
|
240
257
|
}
|
|
241
258
|
};
|
|
242
259
|
this.#channel.addEventListener('message', handler);
|
|
243
260
|
// Poll for popup closed (user cancelled or closed the window)
|
|
244
261
|
const closedPoll = setInterval(() => {
|
|
245
262
|
if (this.#authWindowProxy?.closed) {
|
|
246
|
-
cleanup();
|
|
247
263
|
this.#client.clearPkceState();
|
|
248
|
-
|
|
264
|
+
cleanup();
|
|
249
265
|
}
|
|
250
266
|
}, 500);
|
|
251
267
|
});
|
|
@@ -262,28 +278,30 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
262
278
|
if (!code) {
|
|
263
279
|
return null;
|
|
264
280
|
}
|
|
265
|
-
// Try to get PKCE state
|
|
281
|
+
// Try to get PKCE state. Check sessionStorage first — it's synchronous and covers
|
|
282
|
+
// the redirect flow (where the same tab navigated to the IDP and back). Only fall
|
|
283
|
+
// back to asking window.opener if sessionStorage didn't have a matching entry.
|
|
284
|
+
// The previous order hung for the full opener-postMessage timeout whenever
|
|
285
|
+
// `oauth_complete` happened to load with a non-OAuth window.opener (which is set
|
|
286
|
+
// for ANY window.open target, not only OAuth popups).
|
|
266
287
|
let codeVerifier;
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const pkceData = sessionStorage.getItem('umb:pkce');
|
|
274
|
-
if (pkceData) {
|
|
275
|
-
try {
|
|
276
|
-
const parsed = JSON.parse(pkceData);
|
|
277
|
-
if (parsed.state === state) {
|
|
278
|
-
codeVerifier = parsed.codeVerifier;
|
|
279
|
-
sessionStorage.removeItem('umb:pkce');
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
// Ignore parse errors
|
|
288
|
+
const pkceData = sessionStorage.getItem('umb:pkce');
|
|
289
|
+
if (pkceData) {
|
|
290
|
+
try {
|
|
291
|
+
const parsed = JSON.parse(pkceData);
|
|
292
|
+
if (parsed.state === state) {
|
|
293
|
+
codeVerifier = parsed.codeVerifier;
|
|
284
294
|
sessionStorage.removeItem('umb:pkce');
|
|
285
295
|
}
|
|
286
296
|
}
|
|
297
|
+
catch {
|
|
298
|
+
// Ignore parse errors
|
|
299
|
+
sessionStorage.removeItem('umb:pkce');
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (!codeVerifier && window.opener) {
|
|
303
|
+
// Popup flow: request code_verifier from parent via postMessage.
|
|
304
|
+
codeVerifier = await this.#requestCodeVerifierFromOpener(state);
|
|
287
305
|
}
|
|
288
306
|
if (!codeVerifier) {
|
|
289
307
|
console.error('[UmbAuthContext] No code_verifier available for authorization code exchange');
|
|
@@ -355,18 +373,12 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
355
373
|
* const token = await authContext.getLatestToken();
|
|
356
374
|
* const result = await fetch('https://my-api.com', { headers: { Authorization: `Bearer ${token}` } });
|
|
357
375
|
* ```
|
|
358
|
-
* @deprecated Use {@link configureClient} for `@hey-api/openapi-ts` clients or {@link getOpenApiConfiguration} for manual fetch calls. With cookie-based auth this always returns `'[redacted]'`. Scheduled for removal in Umbraco 19.
|
|
359
376
|
* @see {@link configureClient} for automatic token handling with `@hey-api/openapi-ts` clients.
|
|
360
377
|
* @see {@link getOpenApiConfiguration} for manual fetch calls with cookie-based auth.
|
|
361
378
|
* @memberof UmbAuthContext
|
|
362
379
|
* @returns The latest token from the Management API
|
|
363
380
|
*/
|
|
364
381
|
async getLatestToken() {
|
|
365
|
-
new UmbDeprecation({
|
|
366
|
-
deprecated: 'getLatestToken',
|
|
367
|
-
solution: 'Use configureClient for @hey-api/openapi-ts clients or getOpenApiConfiguration for manual fetch calls. With cookie-based auth this always returns "[redacted]".',
|
|
368
|
-
removeInVersion: '19.0.0',
|
|
369
|
-
}).warn();
|
|
370
382
|
await this.#ensureTokenReady();
|
|
371
383
|
return '[redacted]';
|
|
372
384
|
}
|
|
@@ -455,14 +467,11 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
455
467
|
}
|
|
456
468
|
if (!navigator.locks)
|
|
457
469
|
return;
|
|
458
|
-
|
|
459
|
-
if
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
// No-op: we only need to wait for the ongoing refresh to finish.
|
|
464
|
-
});
|
|
465
|
-
}
|
|
470
|
+
// Always queue behind the refresh lock with a no-op callback. If the lock is
|
|
471
|
+
// free we acquire it immediately and resolve; if a peer tab holds it we wait
|
|
472
|
+
// behind that holder. This avoids a race window where querying the lock state
|
|
473
|
+
// could return "free" microseconds before another tab acquires it.
|
|
474
|
+
await navigator.locks.request('umb:token-refresh', () => Promise.resolve());
|
|
466
475
|
}
|
|
467
476
|
/**
|
|
468
477
|
* Clears the in-memory session state.
|
|
@@ -540,20 +549,30 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
540
549
|
return {
|
|
541
550
|
base: this.#serverUrl,
|
|
542
551
|
credentials: 'include',
|
|
543
|
-
token:
|
|
552
|
+
token: this.getLatestToken.bind(this),
|
|
544
553
|
};
|
|
545
554
|
}
|
|
546
555
|
/**
|
|
547
|
-
* Configures a `@hey-api/openapi-ts` client for authenticated API calls.
|
|
548
|
-
*
|
|
549
|
-
*
|
|
556
|
+
* Configures a `@hey-api/openapi-ts` generated client for authenticated API calls.
|
|
557
|
+
*
|
|
558
|
+
* Sets `baseUrl`, `credentials`, and the `auth` callback (cookie-based with
|
|
559
|
+
* automatic token refresh via {@link getLatestToken}), and binds the default
|
|
560
|
+
* response interceptors (401 retry, problem-details error notifications, etc.)
|
|
561
|
+
* to the client.
|
|
562
|
+
*
|
|
563
|
+
* The same auth context owns a single {@link UmbApiInterceptorController} for
|
|
564
|
+
* the lifetime of the host (`<umb-app>`), so it's safe to call this method for
|
|
565
|
+
* multiple clients (the core's {@link umbHttpClient} *and* an extension's own
|
|
566
|
+
* generated client) without registering duplicate auth-signaler contexts.
|
|
567
|
+
*
|
|
550
568
|
* @example
|
|
551
569
|
* ```js
|
|
552
570
|
* const authContext = await this.getContext(UMB_AUTH_CONTEXT);
|
|
553
571
|
* authContext.configureClient(myClient);
|
|
554
572
|
* // Now myClient automatically includes auth headers and interceptors
|
|
555
573
|
* ```
|
|
556
|
-
* @param client A `@hey-api/openapi-ts` client instance
|
|
574
|
+
* @param client A `@hey-api/openapi-ts` client instance — either {@link umbHttpClient}
|
|
575
|
+
* or one regenerated by an extension package against its own OpenAPI document.
|
|
557
576
|
*/
|
|
558
577
|
configureClient(client) {
|
|
559
578
|
if (this.#configuredClients.has(client))
|
|
@@ -562,15 +581,16 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
562
581
|
client.setConfig({
|
|
563
582
|
baseUrl: this.#serverUrl,
|
|
564
583
|
credentials: 'include',
|
|
565
|
-
auth:
|
|
566
|
-
await this.#ensureTokenReady();
|
|
567
|
-
return '[redacted]';
|
|
568
|
-
},
|
|
584
|
+
auth: this.getLatestToken.bind(this),
|
|
569
585
|
});
|
|
570
|
-
//
|
|
571
|
-
//
|
|
572
|
-
//
|
|
573
|
-
new UmbApiInterceptorController(this._host)
|
|
586
|
+
// Lazy single instance — see #interceptorController field comment. Controller
|
|
587
|
+
// self-registers on the host element via UmbControllerBase, so its lifecycle is
|
|
588
|
+
// managed by the host. `_host` must be a proper UmbControllerHost.
|
|
589
|
+
this.#interceptorController ??= new UmbApiInterceptorController(this._host);
|
|
590
|
+
// Each generated client is structurally identical but TypeScript treats them as
|
|
591
|
+
// distinct generic instantiations. Cast at the boundary; the controller's own
|
|
592
|
+
// signature stays strictly typed against `umbHttpClient`.
|
|
593
|
+
this.#interceptorController.bindDefaultInterceptors(client);
|
|
574
594
|
}
|
|
575
595
|
/**
|
|
576
596
|
* Sets the auth context as initialized, which means that the auth context is ready to be used.
|
|
@@ -631,13 +651,16 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
631
651
|
const request = new Request(this.#unlinkEndpoint, {
|
|
632
652
|
method: 'POST',
|
|
633
653
|
credentials: 'include',
|
|
634
|
-
headers: { 'Content-Type': 'application/json', Authorization:
|
|
654
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${await this.getLatestToken()}` },
|
|
635
655
|
body: JSON.stringify({ loginProvider, providerKey }),
|
|
636
656
|
});
|
|
637
657
|
const result = await fetch(request);
|
|
638
658
|
if (!result.ok) {
|
|
639
|
-
|
|
640
|
-
|
|
659
|
+
// Wrap the parsed body in a real Error so consumers using `instanceof Error`
|
|
660
|
+
// or expecting a stack trace get sane behaviour. The original problem-details
|
|
661
|
+
// payload is exposed on `.cause` for callers that want the structured fields.
|
|
662
|
+
const detail = await result.json().catch(() => undefined);
|
|
663
|
+
throw new Error(`Failed to unlink login (${result.status} ${result.statusText})`, { cause: detail });
|
|
641
664
|
}
|
|
642
665
|
await this.signOut();
|
|
643
666
|
return true;
|
|
@@ -708,10 +731,13 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
708
731
|
resolve(undefined);
|
|
709
732
|
return;
|
|
710
733
|
}
|
|
734
|
+
// Short timeout: a real OAuth popup parent responds within milliseconds. Any
|
|
735
|
+
// longer is just a hang for the unrelated-opener case (e.g. an arbitrary
|
|
736
|
+
// `window.open(...)` target that incidentally landed on `oauth_complete`).
|
|
711
737
|
const timeout = setTimeout(() => {
|
|
712
738
|
window.removeEventListener('message', handler);
|
|
713
739
|
resolve(undefined);
|
|
714
|
-
},
|
|
740
|
+
}, 1500);
|
|
715
741
|
const handler = (evt) => {
|
|
716
742
|
if (evt.origin !== window.location.origin)
|
|
717
743
|
return;
|
|
@@ -730,7 +756,7 @@ export class UmbAuthContext extends UmbContextBase {
|
|
|
730
756
|
const request = await fetch(`${this.#linkKeyEndpoint}?provider=${provider}`, {
|
|
731
757
|
credentials: 'include',
|
|
732
758
|
headers: {
|
|
733
|
-
Authorization:
|
|
759
|
+
Authorization: `Bearer ${await this.getLatestToken()}`,
|
|
734
760
|
'Content-Type': 'application/json',
|
|
735
761
|
},
|
|
736
762
|
});
|
|
@@ -68,7 +68,9 @@ let UmbBodyLayoutElement = class UmbBodyLayoutElement extends LitElement {
|
|
|
68
68
|
this._navigationSlotHasChildren
|
|
69
69
|
? ''
|
|
70
70
|
: 'none'}">
|
|
71
|
-
${this.headline
|
|
71
|
+
${this.headline
|
|
72
|
+
? html `<h3 id="headline" title=${this.headline} data-mark="layout-headline">${this.headline}</h3>`
|
|
73
|
+
: nothing}
|
|
72
74
|
|
|
73
75
|
<slot
|
|
74
76
|
id="header-slot"
|
package/dist-cms/packages/core/components/input-number-range/input-number-range.element.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../lit-element/index.js';
|
|
2
2
|
import type { UmbNumberRangeValueType } from '../../models/index.js';
|
|
3
|
-
declare const UmbInputNumberRangeElement_base: import("../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../validation/index.js").UmbFormControlMixinElement<
|
|
3
|
+
declare const UmbInputNumberRangeElement_base: import("../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../validation/index.js").UmbFormControlMixinElement<FormData | FormDataEntryValue | undefined>> & typeof UmbLitElement;
|
|
4
4
|
export declare class UmbInputNumberRangeElement extends UmbInputNumberRangeElement_base {
|
|
5
5
|
#private;
|
|
6
6
|
minLabel: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../lit-element/index.js';
|
|
2
|
-
declare const UmbInputToggleElement_base: import("../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../validation/index.js").UmbFormControlMixinElement<
|
|
2
|
+
declare const UmbInputToggleElement_base: import("../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../validation/index.js").UmbFormControlMixinElement<FormData | FormDataEntryValue>> & typeof UmbLitElement;
|
|
3
3
|
export declare class UmbInputToggleElement extends UmbInputToggleElement_base {
|
|
4
4
|
#private;
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../lit-element/index.js';
|
|
2
2
|
import type { UmbSwatchDetails } from '../../models/index.js';
|
|
3
|
-
declare const UmbMultipleColorPickerInputElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<
|
|
3
|
+
declare const UmbMultipleColorPickerInputElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
|
|
4
4
|
/**
|
|
5
5
|
* @element umb-multiple-color-picker-input
|
|
6
6
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../lit-element/index.js';
|
|
2
2
|
import type { UUIColorPickerElement, UUIInputElement } from '../../../../external/uui/index.js';
|
|
3
|
-
declare const UmbMultipleColorPickerItemInputElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<
|
|
3
|
+
declare const UmbMultipleColorPickerItemInputElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
|
|
4
4
|
/**
|
|
5
5
|
* @element umb-multiple-color-picker-item-input
|
|
6
6
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../lit-element/index.js';
|
|
2
2
|
import type { UUIInputElement } from '../../../../external/uui/index.js';
|
|
3
|
-
declare const UmbInputMultipleTextStringItemElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<
|
|
3
|
+
declare const UmbInputMultipleTextStringItemElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
|
|
4
4
|
/**
|
|
5
5
|
* @element umb-input-multiple-text-string-item
|
|
6
6
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UmbLitElement } from '../../../lit-element/index.js';
|
|
2
|
-
declare const UmbInputCultureSelectElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<
|
|
2
|
+
declare const UmbInputCultureSelectElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
|
|
3
3
|
export declare class UmbInputCultureSelectElement extends UmbInputCultureSelectElement_base {
|
|
4
4
|
#private;
|
|
5
5
|
/**
|