@umbraco-cms/backoffice 15.1.0 → 15.1.2

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.
Files changed (165) hide show
  1. package/dist-cms/custom-elements.json +1 -30
  2. package/dist-cms/libs/localization-api/localization.controller.js +11 -6
  3. package/dist-cms/packages/block/block/context/block-entry.context.js +2 -2
  4. package/dist-cms/packages/block/block-grid/components/block-grid-entries/block-grid-entries.element.d.ts +1 -1
  5. package/dist-cms/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.d.ts +1 -0
  6. package/dist-cms/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.js +1 -0
  7. package/dist-cms/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.d.ts +1 -1
  8. package/dist-cms/packages/block/block-grid/property-editors/block-grid-editor/property-editor-ui-block-grid.element.js +25 -13
  9. package/dist-cms/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.js +25 -13
  10. package/dist-cms/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.js +3 -3
  11. package/dist-cms/packages/core/auth/auth-flow.js +1 -1
  12. package/dist-cms/packages/core/auth/auth.context.js +2 -1
  13. package/dist-cms/packages/core/auth/auth.context.token.d.ts +0 -2
  14. package/dist-cms/packages/core/auth/auth.context.token.js +0 -2
  15. package/dist-cms/packages/core/auth/components/auth-provider-default.element.d.ts +1 -1
  16. package/dist-cms/packages/core/auth/components/auth-provider-default.element.js +2 -2
  17. package/dist-cms/packages/core/auth/constants.d.ts +1 -0
  18. package/dist-cms/packages/core/auth/constants.js +1 -0
  19. package/dist-cms/packages/core/auth/index.d.ts +1 -1
  20. package/dist-cms/packages/core/auth/index.js +1 -0
  21. package/dist-cms/packages/core/auth/types.d.ts +1 -0
  22. package/dist-cms/packages/core/collection/action/create/types.d.ts +1 -1
  23. package/dist-cms/packages/core/collection/collection-view.manager.d.ts +1 -1
  24. package/dist-cms/packages/core/collection/collection.element.d.ts +1 -1
  25. package/dist-cms/packages/core/collection/default/collection-default.context.d.ts +1 -1
  26. package/dist-cms/packages/core/collection/types.d.ts +4 -3
  27. package/dist-cms/packages/core/components/input-color/input-color.element.d.ts +1 -1
  28. package/dist-cms/packages/core/components/input-date/input-date.element.d.ts +1 -1
  29. package/dist-cms/packages/core/components/input-dropdown/input-dropdown-list.element.d.ts +1 -1
  30. package/dist-cms/packages/core/components/input-eye-dropper/input-eye-dropper.element.d.ts +1 -1
  31. package/dist-cms/packages/core/components/input-number-range/input-number-range.element.d.ts +1 -1
  32. package/dist-cms/packages/core/components/input-radio-button-list/input-radio-button-list.element.d.ts +1 -1
  33. package/dist-cms/packages/core/components/input-slider/input-slider.element.d.ts +1 -1
  34. package/dist-cms/packages/core/components/input-toggle/input-toggle.element.d.ts +1 -1
  35. package/dist-cms/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.d.ts +1 -1
  36. package/dist-cms/packages/core/components/multiple-color-picker-input/multiple-color-picker-item-input.element.d.ts +1 -1
  37. package/dist-cms/packages/core/components/multiple-text-string-input/input-multiple-text-string-item.element.d.ts +1 -1
  38. package/dist-cms/packages/core/content/types.d.ts +1 -0
  39. package/dist-cms/packages/core/content-type/workspace/views/design/content-type-design-editor.element.js +2 -3
  40. package/dist-cms/packages/core/culture/components/input-culture-select/input-culture-select.element.d.ts +1 -1
  41. package/dist-cms/packages/core/culture/manifests.d.ts +1 -1
  42. package/dist-cms/packages/core/entity-action/common/create/types.d.ts +1 -2
  43. package/dist-cms/packages/core/entity-action/common/delete/types.d.ts +1 -2
  44. package/dist-cms/packages/core/entity-action/index.d.ts +0 -4
  45. package/dist-cms/packages/core/entity-action/types.d.ts +4 -0
  46. package/dist-cms/packages/core/entity-create-option-action/index.d.ts +0 -2
  47. package/dist-cms/packages/core/entity-create-option-action/types.d.ts +2 -0
  48. package/dist-cms/packages/core/extension-registry/extensions/external-login-provider-element.interface.d.ts +1 -1
  49. package/dist-cms/packages/core/extension-registry/index.d.ts +2 -2
  50. package/dist-cms/packages/core/icon-registry/index.d.ts +0 -1
  51. package/dist-cms/packages/core/icon-registry/types.d.ts +1 -0
  52. package/dist-cms/packages/core/localization/components/ui-culture-input/ui-culture-input.element.d.ts +1 -1
  53. package/dist-cms/packages/core/menu/components/menu-item/index.d.ts +0 -1
  54. package/dist-cms/packages/core/menu/components/menu-item/types.d.ts +1 -0
  55. package/dist-cms/packages/core/menu/components/types.d.ts +1 -0
  56. package/dist-cms/packages/core/menu/index.d.ts +0 -3
  57. package/dist-cms/packages/core/menu/types.d.ts +4 -0
  58. package/dist-cms/packages/core/modal/types.d.ts +1 -1
  59. package/dist-cms/packages/core/object-type/input-object-type.element.d.ts +1 -1
  60. package/dist-cms/packages/core/picker/search/index.d.ts +0 -1
  61. package/dist-cms/packages/core/picker/search/types.d.ts +1 -0
  62. package/dist-cms/packages/core/picker/types.d.ts +1 -0
  63. package/dist-cms/packages/core/property/manifests.d.ts +1 -1
  64. package/dist-cms/packages/core/property-editor/index.d.ts +1 -1
  65. package/dist-cms/packages/core/recycle-bin/entity-action/empty-recycle-bin/index.d.ts +0 -1
  66. package/dist-cms/packages/core/themes/manifests.d.ts +1 -1
  67. package/dist-cms/packages/core/tree/default/default-tree.context.d.ts +1 -1
  68. package/dist-cms/packages/core/tree/entity-actions/move/index.d.ts +1 -3
  69. package/dist-cms/packages/core/tree/entity-actions/move/index.js +1 -1
  70. package/dist-cms/packages/core/tree/entity-actions/move/types.d.ts +2 -0
  71. package/dist-cms/packages/core/tree/entity-actions/sort-children-of/index.d.ts +0 -3
  72. package/dist-cms/packages/core/tree/entity-actions/sort-children-of/types.d.ts +2 -0
  73. package/dist-cms/packages/core/tree/entity-actions/types.d.ts +4 -0
  74. package/dist-cms/packages/core/tree/folder/entity-action/create-folder/index.d.ts +0 -1
  75. package/dist-cms/packages/core/tree/folder/entity-action/delete-folder/index.d.ts +0 -1
  76. package/dist-cms/packages/core/tree/folder/entity-action/types.d.ts +3 -0
  77. package/dist-cms/packages/core/tree/folder/entity-action/update-folder/index.d.ts +0 -1
  78. package/dist-cms/packages/core/tree/folder/index.d.ts +0 -1
  79. package/dist-cms/packages/core/tree/folder/types.d.ts +1 -0
  80. package/dist-cms/packages/core/tree/index.d.ts +0 -2
  81. package/dist-cms/packages/core/tree/tree-item/tree-item-base/tree-item-context-base.d.ts +1 -1
  82. package/dist-cms/packages/core/tree/tree-item/tree-item.element.d.ts +1 -1
  83. package/dist-cms/packages/core/tree/tree-menu-item-default/index.d.ts +0 -1
  84. package/dist-cms/packages/core/tree/tree.element.d.ts +1 -1
  85. package/dist-cms/packages/core/tree/types.d.ts +4 -1
  86. package/dist-cms/packages/core/utils/index.d.ts +1 -0
  87. package/dist-cms/packages/core/utils/index.js +1 -0
  88. package/dist-cms/packages/core/utils/path/stored-path.function.d.ts +1 -0
  89. package/dist-cms/packages/core/utils/path/stored-path.function.js +1 -1
  90. package/dist-cms/packages/core/utils/sanitize/escape-html.function.d.ts +7 -0
  91. package/dist-cms/packages/core/utils/sanitize/escape-html.function.js +27 -0
  92. package/dist-cms/packages/core/workspace/controllers/workspace-is-new-redirect.controller.js +1 -1
  93. package/dist-cms/packages/core/workspace/index.d.ts +0 -3
  94. package/dist-cms/packages/core/workspace/kinds/types.d.ts +1 -0
  95. package/dist-cms/packages/core/workspace/types.d.ts +4 -0
  96. package/dist-cms/packages/data-type/components/data-type-flow-input/data-type-flow-input.element.d.ts +1 -1
  97. package/dist-cms/packages/data-type/components/data-type-input/data-type-input.element.d.ts +1 -1
  98. package/dist-cms/packages/dictionary/workspace/views/workspace-view-dictionary-editor.element.js +1 -5
  99. package/dist-cms/packages/documents/documents/entity-actions/public-access/repository/public-access.server.data.js +4 -2
  100. package/dist-cms/packages/documents/documents/user-permissions/input-document-granular-user-permission/input-document-granular-user-permission.element.d.ts +1 -1
  101. package/dist-cms/packages/documents/documents/workspace/document-workspace-editor.element.js +2 -2
  102. package/dist-cms/packages/language/components/input-language/input-language.element.d.ts +1 -1
  103. package/dist-cms/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.d.ts +1 -1
  104. package/dist-cms/packages/media/media/components/input-rich-media/input-rich-media.element.d.ts +1 -1
  105. package/dist-cms/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.d.ts +1 -1
  106. package/dist-cms/packages/packages/package/extensions/types.js +1 -0
  107. package/dist-cms/packages/packages/package/index.d.ts +1 -1
  108. package/dist-cms/packages/property-editors/checkbox-list/components/input-checkbox-list/input-checkbox-list.element.d.ts +1 -1
  109. package/dist-cms/packages/property-editors/collection/config/column/components/input-collection-content-type-property.element.d.ts +1 -1
  110. package/dist-cms/packages/property-editors/content-picker/config/source-content/input-content-picker-source.element.d.ts +1 -1
  111. package/dist-cms/packages/rte/components/rte-base.element.js +29 -30
  112. package/dist-cms/packages/search/extensions/types.js +1 -0
  113. package/dist-cms/packages/search/types.d.ts +3 -3
  114. package/dist-cms/packages/tags/components/tags-input/tags-input.element.d.ts +1 -1
  115. package/dist-cms/packages/templating/stylesheets/global-components/stylesheet-input/stylesheet-input.element.d.ts +1 -1
  116. package/dist-cms/packages/templating/stylesheets/global-components/stylesheet-rule-input/stylesheet-rule-input.element.d.ts +1 -1
  117. package/dist-cms/packages/templating/templates/global-components/input-template/input-template.element.d.ts +1 -1
  118. package/dist-cms/packages/templating/templates/global-components/template-card/template-card.element.d.ts +1 -1
  119. package/dist-cms/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.defaults.js +9 -16
  120. package/dist-cms/packages/tiny-mce/components/input-tiny-mce/input-tiny-mce.element.d.ts +1 -1
  121. package/dist-cms/packages/tiny-mce/index.d.ts +1 -1
  122. package/dist-cms/packages/tiny-mce/plugins/types.js +1 -0
  123. package/dist-cms/packages/ufm/index.d.ts +0 -2
  124. package/dist-cms/packages/ufm/types.d.ts +1 -0
  125. package/dist-cms/packages/user/current-user/conditions/types.d.ts +0 -1
  126. package/dist-cms/packages/user/user/components/user-input/user-input.element.d.ts +1 -1
  127. package/dist-cms/packages/user/user-group/components/input-user-group/user-group-input.element.d.ts +1 -1
  128. package/dist-cms/packages/user/user-permission/components/input-entity-user-permission/input-entity-user-permission.element.d.ts +1 -1
  129. package/dist-cms/packages/user/user-permission/index.d.ts +0 -2
  130. package/dist-cms/packages/user/user-permission/types.d.ts +2 -0
  131. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  132. package/dist-cms/umbraco-package-schema.json +368 -71
  133. package/dist-cms/umbraco-package.json +1 -1
  134. package/dist-cms/vscode-html-custom-data.json +3 -23
  135. package/examples/custom-modal/index.ts +9 -9
  136. package/examples/validation-context/index.ts +11 -13
  137. package/package.json +1 -1
  138. package/dist-cms/packages/core/entity-action/default/index.d.ts +0 -1
  139. package/dist-cms/packages/core/menu/components/menu-item/link/index.d.ts +0 -1
  140. package/dist-cms/packages/core/workspace/conditions/index.d.ts +0 -1
  141. /package/dist-cms/packages/core/collection/extensions/{index.d.ts → types.d.ts} +0 -0
  142. /package/dist-cms/packages/core/collection/extensions/{index.js → types.js} +0 -0
  143. /package/dist-cms/packages/core/extension-registry/extensions/{index.d.ts → types.d.ts} +0 -0
  144. /package/dist-cms/packages/core/{entity-action/default/index.js → extension-registry/extensions/types.js} +0 -0
  145. /package/dist-cms/packages/core/extension-registry/models/{index.d.ts → types.d.ts} +0 -0
  146. /package/dist-cms/packages/core/extension-registry/{extensions/index.js → models/types.js} +0 -0
  147. /package/dist-cms/packages/core/{extension-registry/models/index.js → menu/components/menu-item/types.js} +0 -0
  148. /package/dist-cms/packages/core/menu/components/{menu-item/link/index.js → types.js} +0 -0
  149. /package/dist-cms/packages/core/modal/extensions/{index.d.ts → types.d.ts} +0 -0
  150. /package/dist-cms/packages/core/modal/extensions/{index.js → types.js} +0 -0
  151. /package/dist-cms/packages/core/picker/search/result-item/{index.d.ts → types.d.ts} +0 -0
  152. /package/dist-cms/packages/core/picker/search/result-item/{index.js → types.js} +0 -0
  153. /package/dist-cms/packages/core/{property-editor/extensions/index.js → picker/search/types.js} +0 -0
  154. /package/dist-cms/packages/core/property-editor/extensions/{index.d.ts → types.d.ts} +0 -0
  155. /package/dist-cms/packages/core/{tree/extensions/index.js → property-editor/extensions/types.js} +0 -0
  156. /package/dist-cms/packages/core/{workspace/conditions/index.js → tree/entity-actions/types.js} +0 -0
  157. /package/dist-cms/packages/core/tree/extensions/{index.d.ts → types.d.ts} +0 -0
  158. /package/dist-cms/packages/core/{workspace/data-manager/index.js → tree/extensions/types.js} +0 -0
  159. /package/dist-cms/packages/{packages/package/extensions/index.js → core/tree/folder/entity-action/types.js} +0 -0
  160. /package/dist-cms/packages/core/workspace/data-manager/{index.d.ts → types.d.ts} +0 -0
  161. /package/dist-cms/packages/{search/extensions/index.js → core/workspace/data-manager/types.js} +0 -0
  162. /package/dist-cms/packages/{tiny-mce/plugins/index.js → core/workspace/kinds/types.js} +0 -0
  163. /package/dist-cms/packages/packages/package/extensions/{index.d.ts → types.d.ts} +0 -0
  164. /package/dist-cms/packages/search/extensions/{index.d.ts → types.d.ts} +0 -0
  165. /package/dist-cms/packages/tiny-mce/plugins/{index.d.ts → types.d.ts} +0 -0
@@ -912,8 +912,7 @@
912
912
  "name": "config"
913
913
  },
914
914
  {
915
- "name": "value",
916
- "type": "UmbBlockGridValueModel"
915
+ "name": "value"
917
916
  },
918
917
  {
919
918
  "name": "styles",
@@ -1736,20 +1735,6 @@
1736
1735
  {
1737
1736
  "name": "umb-auth-provider-default",
1738
1737
  "path": "./../src/packages/core/auth/components/auth-provider-default.element.ts",
1739
- "attributes": [
1740
- {
1741
- "name": "dir",
1742
- "description": "The direction of the element.",
1743
- "type": "\"\" | \"rtl\" | \"ltr\"",
1744
- "default": "\"\""
1745
- },
1746
- {
1747
- "name": "lang",
1748
- "description": "The language of the element.",
1749
- "type": "string",
1750
- "default": "\"\""
1751
- }
1752
- ],
1753
1738
  "properties": [
1754
1739
  {
1755
1740
  "name": "onSubmit",
@@ -1769,20 +1754,6 @@
1769
1754
  "name": "userLoginState",
1770
1755
  "description": "The current user login state.",
1771
1756
  "type": "UmbUserLoginState | undefined"
1772
- },
1773
- {
1774
- "name": "dir",
1775
- "attribute": "dir",
1776
- "description": "The direction of the element.",
1777
- "type": "\"\" | \"rtl\" | \"ltr\"",
1778
- "default": "\"\""
1779
- },
1780
- {
1781
- "name": "lang",
1782
- "attribute": "lang",
1783
- "description": "The language of the element.",
1784
- "type": "string",
1785
- "default": "\"\""
1786
1757
  }
1787
1758
  ]
1788
1759
  },
@@ -1,4 +1,5 @@
1
1
  import { umbLocalizationManager } from './localization.manager.js';
2
+ import { escapeHTML } from '../../packages/core/utils/index.js';
2
3
  const LocalizationControllerAlias = Symbol();
3
4
  /**
4
5
  * The UmbLocalizeController enables localization for your element.
@@ -83,29 +84,33 @@ export class UmbLocalizationController {
83
84
  this.#usedKeys.push(key);
84
85
  }
85
86
  const { primary, secondary } = this.getLocalizationData(this.lang());
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
88
  let term;
87
89
  // Look for a matching term using regionCode, code, then the fallback
88
- if (primary && primary[key]) {
90
+ if (primary?.[key]) {
89
91
  term = primary[key];
90
92
  }
91
- else if (secondary && secondary[key]) {
93
+ else if (secondary?.[key]) {
92
94
  term = secondary[key];
93
95
  }
94
- else if (umbLocalizationManager.fallback && umbLocalizationManager.fallback[key]) {
96
+ else if (umbLocalizationManager.fallback?.[key]) {
95
97
  term = umbLocalizationManager.fallback[key];
96
98
  }
97
99
  else {
98
100
  return String(key);
99
101
  }
102
+ // As translated texts can contain HTML, we will need to render with unsafeHTML.
103
+ // But arguments can come from user input, so they should be escaped.
104
+ const sanitizedArgs = args.map((a) => escapeHTML(a));
100
105
  if (typeof term === 'function') {
101
- return term(...args);
106
+ return term(...sanitizedArgs);
102
107
  }
103
108
  if (typeof term === 'string') {
104
- if (args.length > 0) {
109
+ if (sanitizedArgs.length) {
105
110
  // Replace placeholders of format "%index%" and "{index}" with provided values
106
111
  term = term.replace(/(%(\d+)%|\{(\d+)\})/g, (match, _p1, p2, p3) => {
107
112
  const index = p2 || p3;
108
- return String(args[index] || match);
113
+ return typeof sanitizedArgs[index] !== 'undefined' ? String(sanitizedArgs[index]) : match;
109
114
  });
110
115
  }
111
116
  }
@@ -443,10 +443,10 @@ export class UmbBlockEntryContext extends UmbContextBase {
443
443
  // Public methods:
444
444
  //activate
445
445
  edit() {
446
- window.location.href = this.#generateWorkspaceEditContentPath(this.#workspacePath.value, this.getContentKey());
446
+ window.history.pushState({}, '', this.#generateWorkspaceEditContentPath(this.#workspacePath.value, this.getContentKey()));
447
447
  }
448
448
  editSettings() {
449
- window.location.href = this.#generateWorkspaceEditSettingsPath(this.#workspacePath.value, this.getContentKey());
449
+ window.history.pushState({}, '', this.#generateWorkspaceEditSettingsPath(this.#workspacePath.value, this.getContentKey()));
450
450
  }
451
451
  async requestDelete() {
452
452
  const blockName = this.getName();
@@ -1,6 +1,6 @@
1
1
  import { UmbLitElement } from '../../../../core/lit-element/index.js';
2
2
  import '../block-grid-entry/index.js';
3
- declare const UmbBlockGridEntriesElement_base: import("../../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../../../core/validation/index.js").UmbFormControlMixinElement<FormDataEntryValue | FormData | undefined>> & typeof UmbLitElement;
3
+ declare const UmbBlockGridEntriesElement_base: import("../../../../../libs/extension-api/index.js").HTMLElementConstructor<import("../../../../core/validation/index.js").UmbFormControlMixinElement<FormData | FormDataEntryValue | undefined>> & typeof UmbLitElement;
4
4
  /**
5
5
  * @element umb-block-grid-entries
6
6
  */
@@ -1,6 +1,7 @@
1
1
  import { type UmbBlockGridTypeAreaType } from '../../index.js';
2
2
  import { UmbLitElement } from '../../../../core/lit-element/index.js';
3
3
  import type { UmbPropertyEditorUiElement, UmbPropertyEditorConfigCollection } from '../../../../core/property-editor/index.js';
4
+ import '../../components/block-grid-area-config-entry/index.js';
4
5
  export declare class UmbPropertyEditorUIBlockGridAreasConfigElement extends UmbLitElement implements UmbPropertyEditorUiElement {
5
6
  #private;
6
7
  set value(value: Array<UmbBlockGridTypeAreaType>);
@@ -12,6 +12,7 @@ import { html, customElement, property, state, repeat } from '../../../../../ext
12
12
  import { UMB_PROPERTY_DATASET_CONTEXT } from '../../../../core/property/index.js';
13
13
  import { UmbModalRouteRegistrationController } from '../../../../core/router/index.js';
14
14
  import { incrementString } from '../../../../core/utils/index.js';
15
+ import '../../components/block-grid-area-config-entry/index.js';
15
16
  let UmbPropertyEditorUIBlockGridAreasConfigElement = class UmbPropertyEditorUIBlockGridAreasConfigElement extends UmbLitElement {
16
17
  //
17
18
  #context;
@@ -13,7 +13,7 @@ export declare class UmbPropertyEditorUIBlockGridElement extends UmbPropertyEdit
13
13
  set config(config: UmbPropertyEditorConfigCollection | undefined);
14
14
  private _layoutColumns?;
15
15
  set value(value: UmbBlockGridValueModel | undefined);
16
- get value(): UmbBlockGridValueModel;
16
+ get value(): UmbBlockGridValueModel | undefined;
17
17
  constructor();
18
18
  protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
19
19
  render(): import("lit-html").TemplateResult<1>;
@@ -23,6 +23,7 @@ let UmbPropertyEditorUIBlockGridElement = class UmbPropertyEditorUIBlockGridElem
23
23
  #contentDataPathTranslator;
24
24
  #settingsDataPathTranslator;
25
25
  #managerContext;
26
+ #lastValue;
26
27
  set config(config) {
27
28
  if (!config)
28
29
  return;
@@ -37,6 +38,11 @@ let UmbPropertyEditorUIBlockGridElement = class UmbPropertyEditorUIBlockGridElem
37
38
  this.#managerContext.setEditorConfiguration(config);
38
39
  }
39
40
  set value(value) {
41
+ this.#lastValue = value;
42
+ if (!value) {
43
+ this._value = undefined;
44
+ return;
45
+ }
40
46
  const buildUpValue = value ? { ...value } : {};
41
47
  buildUpValue.layout ??= {};
42
48
  buildUpValue.contentData ??= [];
@@ -56,12 +62,8 @@ let UmbPropertyEditorUIBlockGridElement = class UmbPropertyEditorUIBlockGridElem
56
62
  this.#validationContext = new UmbValidationContext(this);
57
63
  this.#managerContext = new UmbBlockGridManagerContext(this);
58
64
  //
59
- this._value = {
60
- layout: {},
61
- contentData: [],
62
- settingsData: [],
63
- expose: [],
64
- };
65
+ this._value = undefined;
66
+ this.#lastValue = undefined;
65
67
  this.consumeContext(UMB_PROPERTY_CONTEXT, (context) => {
66
68
  this.observe(context.dataPath, (dataPath) => {
67
69
  // Translate paths for content/settings:
@@ -83,13 +85,23 @@ let UmbPropertyEditorUIBlockGridElement = class UmbPropertyEditorUIBlockGridElem
83
85
  this.#managerContext.settings,
84
86
  this.#managerContext.exposes,
85
87
  ]).pipe(debounceTime(20)), ([layouts, contents, settings, exposes]) => {
86
- this._value = {
87
- ...this._value,
88
- layout: { [UMB_BLOCK_GRID_PROPERTY_EDITOR_SCHEMA_ALIAS]: layouts },
89
- contentData: contents,
90
- settingsData: settings,
91
- expose: exposes,
92
- };
88
+ if (layouts.length === 0) {
89
+ this._value = undefined;
90
+ }
91
+ else {
92
+ this._value = {
93
+ ...this._value,
94
+ layout: { [UMB_BLOCK_GRID_PROPERTY_EDITOR_SCHEMA_ALIAS]: layouts },
95
+ contentData: contents,
96
+ settingsData: settings,
97
+ expose: exposes,
98
+ };
99
+ }
100
+ // If we don't have a value set from the outside or an internal value, we don't want to set the value.
101
+ // This is added to prevent the block grid from setting an empty value on startup.
102
+ if (this.#lastValue === undefined && this._value === undefined) {
103
+ return;
104
+ }
93
105
  propertyContext.setValue(this._value);
94
106
  }, 'motherObserver');
95
107
  this.observe(propertyContext?.alias, (alias) => {
@@ -33,7 +33,13 @@ let UmbPropertyEditorUIBlockListElement = class UmbPropertyEditorUIBlockListElem
33
33
  #validationContext;
34
34
  #contentDataPathTranslator;
35
35
  #settingsDataPathTranslator;
36
+ #lastValue;
36
37
  set value(value) {
38
+ this.#lastValue = value;
39
+ if (!value) {
40
+ this._value = undefined;
41
+ return;
42
+ }
37
43
  const buildUpValue = value ? { ...value } : {};
38
44
  buildUpValue.layout ??= {};
39
45
  buildUpValue.contentData ??= [];
@@ -103,12 +109,8 @@ let UmbPropertyEditorUIBlockListElement = class UmbPropertyEditorUIBlockListElem
103
109
  });
104
110
  this.#validationContext = new UmbValidationContext(this);
105
111
  //#catalogueModal: UmbModalRouteRegistrationController<typeof UMB_BLOCK_CATALOGUE_MODAL.DATA, undefined>;
106
- this._value = {
107
- layout: {},
108
- contentData: [],
109
- settingsData: [],
110
- expose: [],
111
- };
112
+ this._value = undefined;
113
+ this.#lastValue = undefined;
112
114
  this._createButtonLabel = this.localize.term('content_createEmpty');
113
115
  this.#readonly = false;
114
116
  this._layouts = [];
@@ -135,13 +137,23 @@ let UmbPropertyEditorUIBlockListElement = class UmbPropertyEditorUIBlockListElem
135
137
  this.#managerContext.settings,
136
138
  this.#managerContext.exposes,
137
139
  ]).pipe(debounceTime(20)), ([layouts, contents, settings, exposes]) => {
138
- this._value = {
139
- ...this._value,
140
- layout: { [UMB_BLOCK_LIST_PROPERTY_EDITOR_SCHEMA_ALIAS]: layouts },
141
- contentData: contents,
142
- settingsData: settings,
143
- expose: exposes,
144
- };
140
+ if (layouts.length === 0) {
141
+ this._value = undefined;
142
+ }
143
+ else {
144
+ this._value = {
145
+ ...this._value,
146
+ layout: { [UMB_BLOCK_LIST_PROPERTY_EDITOR_SCHEMA_ALIAS]: layouts },
147
+ contentData: contents,
148
+ settingsData: settings,
149
+ expose: exposes,
150
+ };
151
+ }
152
+ // If we don't have a value set from the outside or an internal value, we don't want to set the value.
153
+ // This is added to prevent the block list from setting an empty value on startup.
154
+ if (this.#lastValue === undefined && this._value === undefined) {
155
+ return;
156
+ }
145
157
  context.setValue(this._value);
146
158
  }, 'motherObserver');
147
159
  // If the current property is readonly all inner block content should also be readonly.
@@ -181,9 +181,9 @@ let UmbBlockRteEntryElement = class UmbBlockRteEntryElement extends UmbLitElemen
181
181
  ? html `<uui-button
182
182
  @click=${this.#expose}
183
183
  label=${this.localize.term('blockEditor_createThisFor', this._contentTypeName)}
184
- look="secondary"
185
- ><uui-icon name="icon-add"></uui-icon
186
- ></uui-button>`
184
+ look="secondary">
185
+ <uui-icon name="icon-add"></uui-icon>
186
+ </uui-button>`
187
187
  : nothing;
188
188
  }
189
189
  #renderEditSettingsAction() {
@@ -13,7 +13,7 @@
13
13
  * License for the specific language governing permissions and limitations under
14
14
  * the License.
15
15
  */
16
- import { UMB_STORAGE_TOKEN_RESPONSE_NAME } from './auth.context.token.js';
16
+ import { UMB_STORAGE_TOKEN_RESPONSE_NAME } from './constants.js';
17
17
  import { BaseTokenRequestHandler, BasicQueryStringUtils, FetchRequestor, LocalStorageBackend, RedirectRequestHandler, AuthorizationRequest, AuthorizationNotifier, AuthorizationServiceConfiguration, GRANT_TYPE_AUTHORIZATION_CODE, GRANT_TYPE_REFRESH_TOKEN, RevokeTokenRequest, TokenRequest, TokenResponse, } from '../../../external/openid/index.js';
18
18
  import { Subject } from '../../../external/rxjs/index.js';
19
19
  const requestor = new FetchRequestor();
@@ -1,5 +1,6 @@
1
1
  import { UmbAuthFlow } from './auth-flow.js';
2
- import { UMB_AUTH_CONTEXT, UMB_STORAGE_TOKEN_RESPONSE_NAME } from './auth.context.token.js';
2
+ import { UMB_AUTH_CONTEXT } from './auth.context.token.js';
3
+ import { UMB_STORAGE_TOKEN_RESPONSE_NAME } from './constants.js';
3
4
  import { OpenAPI } from '../../../external/backend-api/index.js';
4
5
  import { UmbContextBase } from '../../../libs/class-api/index.js';
5
6
  import { UmbBooleanState } from '../../../libs/observable-api/index.js';
@@ -1,5 +1,3 @@
1
1
  import type { UmbAuthContext } from './auth.context.js';
2
2
  import { UmbContextToken } from '../../../libs/context-api/index.js';
3
3
  export declare const UMB_AUTH_CONTEXT: UmbContextToken<UmbAuthContext, UmbAuthContext>;
4
- export declare const UMB_STORAGE_TOKEN_RESPONSE_NAME = "umb:userAuthTokenResponse";
5
- export declare const UMB_STORAGE_REDIRECT_URL = "umb:auth:redirect";
@@ -1,4 +1,2 @@
1
1
  import { UmbContextToken } from '../../../libs/context-api/index.js';
2
2
  export const UMB_AUTH_CONTEXT = new UmbContextToken('UmbAuthContext');
3
- export const UMB_STORAGE_TOKEN_RESPONSE_NAME = 'umb:userAuthTokenResponse';
4
- export const UMB_STORAGE_REDIRECT_URL = 'umb:auth:redirect';
@@ -1,6 +1,6 @@
1
1
  import type { UmbAuthProviderDefaultProps, UmbUserLoginState } from '../types.js';
2
- import { UmbLitElement } from '../../lit-element/lit-element.element.js';
3
2
  import type { ManifestAuthProvider } from '../auth-provider.extension.js';
3
+ import { UmbLitElement } from '../../lit-element/index.js';
4
4
  export declare class UmbAuthProviderDefaultElement extends UmbLitElement implements UmbAuthProviderDefaultProps {
5
5
  #private;
6
6
  userLoginState?: UmbUserLoginState | undefined;
@@ -4,9 +4,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { UmbLitElement } from '../../lit-element/lit-element.element.js';
8
- import { UmbTextStyles } from '../../style/index.js';
9
7
  import { css, customElement, html, nothing, property } from '../../../../external/lit/index.js';
8
+ import { UmbLitElement } from '../../lit-element/index.js';
9
+ import { UmbTextStyles } from '../../style/index.js';
10
10
  let UmbAuthProviderDefaultElement = class UmbAuthProviderDefaultElement extends UmbLitElement {
11
11
  connectedCallback() {
12
12
  super.connectedCallback();
@@ -0,0 +1 @@
1
+ export declare const UMB_STORAGE_TOKEN_RESPONSE_NAME = "umb:userAuthTokenResponse";
@@ -0,0 +1 @@
1
+ export const UMB_STORAGE_TOKEN_RESPONSE_NAME = 'umb:userAuthTokenResponse';
@@ -1,8 +1,8 @@
1
1
  import './components/index.js';
2
2
  export * from './auth.context.js';
3
3
  export * from './auth.context.token.js';
4
+ export * from './constants.js';
4
5
  export * from './modals/index.js';
5
6
  export type * from './models/openApiConfiguration.js';
6
7
  export * from './components/index.js';
7
- export type * from './auth-provider.extension.js';
8
8
  export type * from './types.js';
@@ -1,5 +1,6 @@
1
1
  import './components/index.js';
2
2
  export * from './auth.context.js';
3
3
  export * from './auth.context.token.js';
4
+ export * from './constants.js';
4
5
  export * from './modals/index.js';
5
6
  export * from './components/index.js';
@@ -1,4 +1,5 @@
1
1
  import type { ManifestAuthProvider } from './auth-provider.extension.js';
2
+ export type * from './auth-provider.extension.js';
2
3
  /**
3
4
  * User login state that can be used to determine the current state of the user.
4
5
  * @example 'loggedIn'
@@ -1,4 +1,4 @@
1
- import type { ManifestCollectionAction } from '../../extensions/index.js';
1
+ import type { ManifestCollectionAction } from '../../extensions/types.js';
2
2
  export interface ManifestCollectionActionCreateKind extends ManifestCollectionAction {
3
3
  type: 'collectionAction';
4
4
  kind: 'create';
@@ -1,4 +1,4 @@
1
- import type { ManifestCollectionView } from './extensions/index.js';
1
+ import type { ManifestCollectionView } from './extensions/types.js';
2
2
  import { UmbControllerBase } from '../../../libs/class-api/index.js';
3
3
  import type { UmbControllerHost } from '../../../libs/controller-api/index.js';
4
4
  import type { UmbRoute } from '../router/index.js';
@@ -1,5 +1,5 @@
1
1
  import type { UmbCollectionConfiguration } from './types.js';
2
- import type { ManifestCollection } from './extensions/index.js';
2
+ import type { ManifestCollection } from './extensions/types.js';
3
3
  import { UmbExtensionElementAndApiSlotElementBase } from '../extension-registry/index.js';
4
4
  import type { UmbApi } from '../../../libs/extension-api/index.js';
5
5
  declare const elementName = "umb-collection";
@@ -2,7 +2,7 @@ import { UmbCollectionViewManager } from '../collection-view.manager.js';
2
2
  import type { UmbCollectionColumnConfiguration, UmbCollectionConfiguration, UmbCollectionContext, UmbCollectionLayoutConfiguration } from '../types.js';
3
3
  import type { UmbCollectionFilterModel } from '../collection-filter-model.interface.js';
4
4
  import type { UmbCollectionRepository } from '../repository/collection-repository.interface.js';
5
- import type { ManifestCollection } from '../extensions/index.js';
5
+ import type { ManifestCollection } from '../extensions/types.js';
6
6
  import { UmbArrayState, UmbNumberState, UmbObjectState } from '../../../../libs/observable-api/index.js';
7
7
  import { UmbContextBase } from '../../../../libs/class-api/index.js';
8
8
  import { UmbSelectionManager, UmbPaginationManager } from '../../utils/index.js';
@@ -1,8 +1,10 @@
1
- import type { ManifestCollection } from './extensions/index.js';
1
+ import type { ManifestCollection } from './extensions/types.js';
2
2
  import type { Observable } from '../../../external/rxjs/index.js';
3
3
  import type { UmbPaginationManager } from '../utils/index.js';
4
- export type * from './extensions/index.js';
4
+ export type * from './action/create/types.js';
5
+ export type * from './extensions/types.js';
5
6
  export type * from './conditions/types.js';
7
+ export type * from './workspace-view/types.js';
6
8
  /** @deprecated No longer used internally. This will be removed in Umbraco 17. [LK] */
7
9
  export interface UmbCollectionBulkActionPermissions {
8
10
  allowBulkCopy: boolean;
@@ -44,4 +46,3 @@ export interface UmbCollectionContext {
44
46
  items: Observable<any[]>;
45
47
  totalItems: Observable<number>;
46
48
  }
47
- export type * from './extensions/index.js';
@@ -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 UmbInputColorElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
3
+ declare const UmbInputColorElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
4
4
  export declare class UmbInputColorElement extends UmbInputColorElement_base {
5
5
  #private;
6
6
  protected getFormElement(): undefined;
@@ -1,5 +1,5 @@
1
1
  import { UmbLitElement } from '../../lit-element/index.js';
2
- declare const UmbInputDateElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
2
+ declare const UmbInputDateElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
3
3
  /**
4
4
  * This element passes a datetime string to a regular HTML input element.
5
5
  * @remark Be aware that you cannot include a time demonination, i.e. "10:44:00" if you
@@ -1,5 +1,5 @@
1
1
  import { UmbLitElement } from '../../lit-element/index.js';
2
- declare const UmbInputDropdownListElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData | undefined>) & typeof UmbLitElement;
2
+ declare const UmbInputDropdownListElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue | undefined>) & typeof UmbLitElement;
3
3
  export declare class UmbInputDropdownListElement extends UmbInputDropdownListElement_base {
4
4
  #private;
5
5
  options?: Array<Option>;
@@ -1,5 +1,5 @@
1
1
  import { UmbLitElement } from '../../lit-element/index.js';
2
- declare const UmbInputEyeDropperElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
2
+ declare const UmbInputEyeDropperElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
3
3
  export declare class UmbInputEyeDropperElement extends UmbInputEyeDropperElement_base {
4
4
  #private;
5
5
  protected getFormElement(): undefined;
@@ -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<FormDataEntryValue | FormData | undefined>> & typeof UmbLitElement;
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;
@@ -4,7 +4,7 @@ type UmbRadioButtonItem = {
4
4
  label: string;
5
5
  value: string;
6
6
  };
7
- declare const UmbInputRadioButtonListElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
7
+ declare const UmbInputRadioButtonListElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
8
8
  export declare class UmbInputRadioButtonListElement extends UmbInputRadioButtonListElement_base {
9
9
  #private;
10
10
  set value(value: string);
@@ -1,5 +1,5 @@
1
1
  import { UmbLitElement } from '../../lit-element/index.js';
2
- declare const UmbInputSliderElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
2
+ declare const UmbInputSliderElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
3
3
  export declare class UmbInputSliderElement extends UmbInputSliderElement_base {
4
4
  #private;
5
5
  min: number;
@@ -1,5 +1,5 @@
1
1
  import { UmbLitElement } from '../../lit-element/index.js';
2
- declare const UmbInputToggleElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormDataEntryValue | FormData>) & typeof UmbLitElement;
2
+ declare const UmbInputToggleElement_base: (new (...args: any[]) => import("@umbraco-ui/uui-base").UUIFormControlMixinElement<FormData | FormDataEntryValue>) & typeof UmbLitElement;
3
3
  export declare class UmbInputToggleElement extends UmbInputToggleElement_base {
4
4
  #private;
5
5
  set checked(toggle: boolean);
@@ -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<FormDataEntryValue | FormData>) & typeof UmbLitElement;
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<FormDataEntryValue | FormData>) & typeof UmbLitElement;
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<FormDataEntryValue | FormData>) & typeof UmbLitElement;
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,6 @@
1
1
  import type { UmbPropertyValueData } from '../property/index.js';
2
2
  import type { UmbEntityVariantModel } from '../variant/index.js';
3
+ export type * from './collection/types.js';
3
4
  export interface UmbElementDetailModel {
4
5
  values: Array<UmbElementValueModel>;
5
6
  }
@@ -211,9 +211,8 @@ let UmbContentTypeDesignEditorElement = class UmbContentTypeDesignEditorElement
211
211
  if (!tabId)
212
212
  return;
213
213
  this.#workspaceContext?.structure.removeContainer(null, tabId);
214
- // TODO: We should only navigate away if it was the last tab and if it was the active one... [NL]
215
- if (this.#tabsStructureHelper?.isOwnerChildContainer(tabId)) {
216
- window.history.replaceState(null, '', this._routerPath + (this._routes[0]?.path ?? '/root'));
214
+ if (this._activeTabId === tabId) {
215
+ this._activeTabId = undefined;
217
216
  }
218
217
  }
219
218
  async #addTab() {
@@ -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<FormDataEntryValue | FormData>) & typeof UmbLitElement;
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
  /**