@umbraco-cms/backoffice 16.0.0-rc3 → 16.0.0-rc5

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 (142) hide show
  1. package/dist-cms/apps/backoffice/backoffice.context.js +5 -1
  2. package/dist-cms/apps/backoffice/components/backoffice-main.element.js +3 -1
  3. package/dist-cms/assets/lang/en-us.js +1 -1
  4. package/dist-cms/assets/lang/en-us.ts +1 -1
  5. package/dist-cms/css/uui-css.css +481 -100
  6. package/dist-cms/custom-elements.json +33 -17
  7. package/dist-cms/external/rxjs/index.d.ts +1 -1
  8. package/dist-cms/external/rxjs/index.js +3 -3
  9. package/dist-cms/external/uui/index.js +663 -393
  10. package/dist-cms/libs/context-api/consume/context-consumer.js +1 -2
  11. package/dist-cms/libs/controller-api/controller-host.mixin.js +2 -2
  12. package/dist-cms/libs/extension-api/controller/server-extension-registrator.controller.js +6 -2
  13. package/dist-cms/packages/block/block/context/block-entry.context.js +10 -3
  14. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.js +1 -0
  15. package/dist-cms/packages/block/block-list/components/block-list-entry/block-list-entry.element.js +2 -1
  16. package/dist-cms/packages/content/content/components/property-type-based-property/index.d.ts +2 -0
  17. package/dist-cms/packages/content/content/components/property-type-based-property/index.js +2 -0
  18. package/dist-cms/packages/content/content/components/property-type-based-property/property-type-based-property.context-token.d.ts +8 -0
  19. package/dist-cms/packages/content/content/components/property-type-based-property/property-type-based-property.context-token.js +7 -0
  20. package/dist-cms/packages/content/content/{content-property.context.d.ts → components/property-type-based-property/property-type-based-property.context.d.ts} +6 -1
  21. package/dist-cms/packages/content/content/components/property-type-based-property/property-type-based-property.context.js +19 -0
  22. package/dist-cms/packages/content/content/components/property-type-based-property/property-type-based-property.element.d.ts +1 -1
  23. package/dist-cms/packages/content/content/components/property-type-based-property/property-type-based-property.element.js +8 -7
  24. package/dist-cms/packages/content/content/global-components/content-workspace-property.element.d.ts +26 -0
  25. package/dist-cms/packages/content/content/global-components/content-workspace-property.element.js +104 -0
  26. package/dist-cms/packages/content/content/global-components/index.d.ts +1 -0
  27. package/dist-cms/packages/content/content/global-components/index.js +1 -0
  28. package/dist-cms/packages/content/content/index.d.ts +1 -2
  29. package/dist-cms/packages/content/content/index.js +1 -2
  30. package/dist-cms/packages/content/content/workspace/content-detail-workspace-base.js +2 -1
  31. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-properties.element.d.ts +1 -3
  32. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-properties.element.js +8 -48
  33. package/dist-cms/packages/content/content/workspace/views/edit/content-editor.element.js +1 -0
  34. package/dist-cms/packages/content/content-type/structure/content-type-property-structure-helper.class.d.ts +1 -0
  35. package/dist-cms/packages/content/content-type/structure/content-type-property-structure-helper.class.js +1 -0
  36. package/dist-cms/packages/content/content-type/structure/content-type-structure-manager.class.d.ts +1 -0
  37. package/dist-cms/packages/content/content-type/structure/content-type-structure-manager.class.js +3 -3
  38. package/dist-cms/packages/content/content-type/workspace/views/design/content-type-design-editor.element.js +11 -7
  39. package/dist-cms/packages/content/property-type/workspace/property-type-workspace.context.js +5 -1
  40. package/dist-cms/packages/core/collection/collection-view.manager.js +4 -4
  41. package/dist-cms/packages/core/collection/components/collection-filter-field.element.js +1 -1
  42. package/dist-cms/packages/core/components/input-number-range/input-number-range.element.d.ts +4 -1
  43. package/dist-cms/packages/core/components/input-number-range/input-number-range.element.js +27 -3
  44. package/dist-cms/packages/core/components/input-with-alias/input-with-alias.element.js +0 -2
  45. package/dist-cms/packages/core/localization/manifests.js +27 -27
  46. package/dist-cms/packages/core/localization/registry/localization.registry.d.ts +2 -1
  47. package/dist-cms/packages/core/localization/registry/localization.registry.js +97 -37
  48. package/dist-cms/packages/core/menu/menu-variant-tree-structure-workspace-context-base.js +2 -2
  49. package/dist-cms/packages/core/package.json +2 -2
  50. package/dist-cms/packages/core/property/components/property/property.element.js +1 -0
  51. package/dist-cms/packages/core/property-editor/extensions/property-editor-ui-element.interface.d.ts +2 -0
  52. package/dist-cms/packages/core/repository/detail/detail-repository-base.js +6 -7
  53. package/dist-cms/packages/core/repository/item/item-repository-base.d.ts +1 -1
  54. package/dist-cms/packages/core/repository/item/item-repository-base.js +25 -9
  55. package/dist-cms/packages/core/repository/item/item-repository.interface.d.ts +1 -1
  56. package/dist-cms/packages/core/router/route/router-slot.element.js +3 -1
  57. package/dist-cms/packages/core/router/router-slot/model.d.ts +1 -0
  58. package/dist-cms/packages/core/router/router-slot/router-slot.d.ts +1 -0
  59. package/dist-cms/packages/core/router/router-slot/router-slot.js +30 -0
  60. package/dist-cms/packages/core/tree/data/tree-repository-base.d.ts +5 -1
  61. package/dist-cms/packages/core/tree/data/tree-repository-base.js +27 -13
  62. package/dist-cms/packages/core/tree/tree-item/tree-item.element.js +1 -1
  63. package/dist-cms/packages/core/validation/controllers/validation.controller.js +1 -1
  64. package/dist-cms/packages/core/workspace/components/workspace-action/common/save/save.action.js +3 -1
  65. package/dist-cms/packages/core/workspace/components/workspace-breadcrumb/workspace-variant-menu-breadcrumb/workspace-variant-menu-breadcrumb.element.js +5 -2
  66. package/dist-cms/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.js +2 -2
  67. package/dist-cms/packages/core/workspace/contexts/tokens/submittable-tree-entity-workspace.context-token.js +1 -1
  68. package/dist-cms/packages/core/workspace/controllers/workspace-is-new-redirect.controller.d.ts +7 -0
  69. package/dist-cms/packages/core/workspace/controllers/workspace-is-new-redirect.controller.js +31 -10
  70. package/dist-cms/packages/core/workspace/controllers/workspace-route-manager.controller.js +5 -5
  71. package/dist-cms/packages/core/workspace/entity-detail/entity-detail-workspace-base.js +1 -1
  72. package/dist-cms/packages/core/workspace/submittable/submittable-workspace-context-base.d.ts +1 -0
  73. package/dist-cms/packages/core/workspace/submittable/submittable-workspace-context-base.js +10 -0
  74. package/dist-cms/packages/data-type/collection/repository/data-type-collection.repository.js +6 -1
  75. package/dist-cms/packages/data-type/repository/detail/data-type-detail.repository.js +6 -1
  76. package/dist-cms/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.js +5 -4
  77. package/dist-cms/packages/documents/documents/entity-actions/create-blueprint/modal/create-blueprint-modal.element.js +1 -1
  78. package/dist-cms/packages/documents/documents/publishing/workspace-context/document-publishing.workspace-context.js +12 -2
  79. package/dist-cms/packages/documents/documents/tree/document-tree.context.js +2 -2
  80. package/dist-cms/packages/documents/documents/types.d.ts +1 -0
  81. package/dist-cms/packages/documents/documents/url/index.d.ts +1 -0
  82. package/dist-cms/packages/documents/documents/url/index.js +1 -0
  83. package/dist-cms/packages/documents/documents/url/types.d.ts +1 -0
  84. package/dist-cms/packages/documents/documents/url/types.js +1 -0
  85. package/dist-cms/packages/documents/documents/user-permissions/document/conditions/document-user-permission.condition.js +3 -1
  86. package/dist-cms/packages/documents/documents/workspace/actions/save.action.js +4 -2
  87. package/dist-cms/packages/documents/documents/workspace/document-workspace-editor.element.js +13 -7
  88. package/dist-cms/packages/log-viewer/components/log-viewer-date-range-selector.element.d.ts +0 -2
  89. package/dist-cms/packages/log-viewer/components/log-viewer-date-range-selector.element.js +12 -24
  90. package/dist-cms/packages/log-viewer/repository/sources/log-viewer.server.data.js +9 -1
  91. package/dist-cms/packages/log-viewer/workspace/views/search/components/log-viewer-message.element.js +1 -1
  92. package/dist-cms/packages/media/media/dashboard/media-dashboard.element.js +1 -0
  93. package/dist-cms/packages/media/media/modals/media-picker/media-picker-modal.element.js +2 -2
  94. package/dist-cms/packages/media/media/tree/media-tree.context.js +2 -2
  95. package/dist-cms/packages/media/media/workspace/media-workspace-editor.element.js +1 -0
  96. package/dist-cms/packages/members/member/repository/member-repository-base.d.ts +8 -8
  97. package/dist-cms/packages/members/member/repository/member-repository-base.js +13 -12
  98. package/dist-cms/packages/members/member/workspace/member/member-workspace-editor.element.js +1 -0
  99. package/dist-cms/packages/packages/package-section/views/created/created-packages-section-view.element.js +1 -0
  100. package/dist-cms/packages/property-editors/dimensions/property-editor-ui-dimensions.element.js +16 -3
  101. package/dist-cms/packages/segment/package.json +8 -0
  102. package/dist-cms/packages/settings/package.json +8 -0
  103. package/dist-cms/packages/settings/vite.config.d.ts +2 -0
  104. package/dist-cms/packages/settings/vite.config.js +11 -0
  105. package/dist-cms/packages/templating/partial-views/entity-actions/rename/rename-partial-view.server.data-source.js +1 -1
  106. package/dist-cms/packages/templating/partial-views/repository/partial-view-detail.server.data-source.js +3 -3
  107. package/dist-cms/packages/templating/partial-views/tree/folder/repository/partial-view-folder.server.data-source.js +2 -2
  108. package/dist-cms/packages/templating/scripts/entity-actions/rename/rename-script.server.data-source.js +1 -1
  109. package/dist-cms/packages/templating/scripts/repository/script-detail.server.data-source.js +3 -3
  110. package/dist-cms/packages/templating/scripts/tree/folder/repository/script-folder.server.data-source.js +2 -2
  111. package/dist-cms/packages/templating/stylesheets/entity-actions/rename/rename-stylesheet.server.data-source.js +1 -1
  112. package/dist-cms/packages/templating/stylesheets/repository/stylesheet-detail.server.data-source.js +3 -3
  113. package/dist-cms/packages/templating/stylesheets/tree/folder/repository/stylesheet-folder.server.data-source.js +2 -2
  114. package/dist-cms/packages/tiptap/components/character-map/character-map-modal.element.js +0 -4
  115. package/dist-cms/packages/tiptap/components/input-tiptap/input-tiptap.element.js +1 -1
  116. package/dist-cms/packages/tiptap/components/input-tiptap/tiptap-toolbar.element.d.ts +6 -0
  117. package/dist-cms/packages/tiptap/components/input-tiptap/tiptap-toolbar.element.js +7 -1
  118. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-extensions-configuration.element.js +1 -1
  119. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-statusbar-configuration.element.js +0 -4
  120. package/dist-cms/packages/tiptap/property-editors/tiptap/components/property-editor-ui-tiptap-toolbar-configuration.element.js +1 -4
  121. package/dist-cms/packages/translation/package.json +8 -0
  122. package/dist-cms/packages/user/current-user/current-user.context.js +4 -1
  123. package/dist-cms/packages/user/current-user/repository/current-user.repository.d.ts +2 -2
  124. package/dist-cms/packages/user/current-user/repository/current-user.repository.js +8 -5
  125. package/dist-cms/packages/user/user/repository/user-repository-base.d.ts +7 -7
  126. package/dist-cms/packages/user/user/repository/user-repository-base.js +13 -12
  127. package/dist-cms/packages/user/user-group/collection/repository/user-group-collection.repository.js +4 -1
  128. package/dist-cms/packages/user/user-group/collection/user-group-collection.element.js +1 -1
  129. package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.repository.d.ts +4 -0
  130. package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.repository.js +7 -1
  131. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  132. package/dist-cms/umbraco-package.json +1 -1
  133. package/dist-cms/vscode-html-custom-data.json +16 -10
  134. package/examples/modal-routed/dashboard.element.ts +1 -0
  135. package/examples/modal-routed/modal/example-modal.element.ts +1 -0
  136. package/examples/validation-context/validation-context-dashboard.ts +12 -12
  137. package/package.json +8 -7
  138. package/dist-cms/packages/content/content/content-property.context-token.d.ts +0 -3
  139. package/dist-cms/packages/content/content/content-property.context-token.js +0 -2
  140. package/dist-cms/packages/content/content/content-property.context.js +0 -14
  141. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-property.element.d.ts +0 -21
  142. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-property.element.js +0 -63
@@ -48,8 +48,10 @@ let UmbDocumentWorkspaceEditorElement = class UmbDocumentWorkspaceEditorElement
48
48
  this.#workspaceContext?.splitView.setActiveVariant(index, culture, segment);
49
49
  }
50
50
  #generateRoutes() {
51
- if (!this.#variants || !this.#appCulture)
51
+ if (!this.#variants || !this.#appCulture) {
52
+ this._routes = [];
52
53
  return;
54
+ }
53
55
  // Generate split view routes for all available routes
54
56
  const routes = [];
55
57
  // Split view routes:
@@ -86,10 +88,14 @@ let UmbDocumentWorkspaceEditorElement = class UmbDocumentWorkspaceEditorElement
86
88
  // Using first single view as the default route for now (hence the math below):
87
89
  routes.push({
88
90
  path: '',
89
- resolve: () => {
91
+ pathMatch: 'full',
92
+ resolve: async () => {
93
+ if (!this.#workspaceContext) {
94
+ throw new Error('Workspace context is not available when resolving the default route.');
95
+ }
90
96
  const route = routes.find((route) => route.path === this.#appCulture);
91
97
  if (!route) {
92
- const firstVariantPath = routes.find((route) => route.path === this.#variants?.[0].unique)?.path;
98
+ const firstVariantPath = routes.find((route) => route.path === this.#variants?.[0]?.unique)?.path;
93
99
  if (firstVariantPath) {
94
100
  history.replaceState({}, '', `${this.#workspaceRoute}/${firstVariantPath}`);
95
101
  return;
@@ -102,11 +108,11 @@ let UmbDocumentWorkspaceEditorElement = class UmbDocumentWorkspaceEditorElement
102
108
  history.replaceState({}, '', `${this.#workspaceRoute}/${route?.path}`);
103
109
  },
104
110
  });
111
+ routes.push({
112
+ path: `**`,
113
+ component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement,
114
+ });
105
115
  }
106
- routes.push({
107
- path: `**`,
108
- component: async () => (await import('@umbraco-cms/backoffice/router')).UmbRouteNotFoundElement,
109
- });
110
116
  this._routes = routes;
111
117
  }
112
118
  render() {
@@ -3,10 +3,8 @@ export declare class UmbLogViewerDateRangeSelectorElement extends UmbLitElement
3
3
  #private;
4
4
  private _startDate;
5
5
  private _endDate;
6
- private _inputs;
7
6
  horizontal: boolean;
8
7
  constructor();
9
- disconnectedCallback(): void;
10
8
  render(): import("lit-html").TemplateResult<1>;
11
9
  static styles: import("lit").CSSResult[];
12
10
  }
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { UMB_APP_LOG_VIEWER_CONTEXT } from '../workspace/logviewer-workspace.context-token.js';
8
8
  import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
9
- import { css, html, customElement, property, queryAll, state } from '@umbraco-cms/backoffice/external/lit';
9
+ import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
10
10
  import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
11
11
  import { query as getQuery, path, toQueryString } from '@umbraco-cms/backoffice/router';
12
12
  let UmbLogViewerDateRangeSelectorElement = class UmbLogViewerDateRangeSelectorElement extends UmbLitElement {
@@ -16,16 +16,11 @@ let UmbLogViewerDateRangeSelectorElement = class UmbLogViewerDateRangeSelectorEl
16
16
  this._startDate = '';
17
17
  this._endDate = '';
18
18
  this.horizontal = false;
19
- this.addEventListener('input', this.#setDates);
20
19
  this.consumeContext(UMB_APP_LOG_VIEWER_CONTEXT, (instance) => {
21
20
  this.#logViewerContext = instance;
22
21
  this.#observeStuff();
23
22
  });
24
23
  }
25
- disconnectedCallback() {
26
- super.disconnectedCallback();
27
- this.removeEventListener('input', this.#setDates);
28
- }
29
24
  #observeStuff() {
30
25
  if (!this.#logViewerContext)
31
26
  return;
@@ -34,15 +29,15 @@ let UmbLogViewerDateRangeSelectorElement = class UmbLogViewerDateRangeSelectorEl
34
29
  this._endDate = dateRange.endDate;
35
30
  }, '_observeDateRange');
36
31
  }
37
- #setDates() {
38
- this._inputs.forEach((input) => {
39
- if (input.id === 'start-date') {
40
- this._startDate = input.value;
41
- }
42
- else if (input.id === 'end-date') {
43
- this._endDate = input.value;
44
- }
45
- });
32
+ #setStartDate(e) {
33
+ this._startDate = e.target.value;
34
+ this.#updateFiltered();
35
+ }
36
+ #setEndDate(e) {
37
+ this._endDate = e.target.value;
38
+ this.#updateFiltered();
39
+ }
40
+ #updateFiltered() {
46
41
  this.#logViewerContext?.setDateRange({ startDate: this._startDate, endDate: this._endDate });
47
42
  const query = getQuery();
48
43
  const qs = toQueryString({
@@ -57,9 +52,7 @@ let UmbLogViewerDateRangeSelectorElement = class UmbLogViewerDateRangeSelectorEl
57
52
  <div class="input-container">
58
53
  <uui-label for="start-date">From:</uui-label>
59
54
  <umb-input-date
60
- @click=${(e) => {
61
- e.target.showPicker();
62
- }}
55
+ @change=${this.#setStartDate}
63
56
  id="start-date"
64
57
  type="date"
65
58
  label="From"
@@ -69,9 +62,7 @@ let UmbLogViewerDateRangeSelectorElement = class UmbLogViewerDateRangeSelectorEl
69
62
  <div class="input-container">
70
63
  <uui-label for="end-date">To: </uui-label>
71
64
  <umb-input-date
72
- @click=${(e) => {
73
- e.target.showPicker();
74
- }}
65
+ @change=${this.#setEndDate}
75
66
  id="end-date"
76
67
  type="date"
77
68
  label="To"
@@ -107,9 +98,6 @@ __decorate([
107
98
  __decorate([
108
99
  state()
109
100
  ], UmbLogViewerDateRangeSelectorElement.prototype, "_endDate", void 0);
110
- __decorate([
111
- queryAll('input')
112
- ], UmbLogViewerDateRangeSelectorElement.prototype, "_inputs", void 0);
113
101
  __decorate([
114
102
  property({ type: Boolean, reflect: true })
115
103
  ], UmbLogViewerDateRangeSelectorElement.prototype, "horizontal", void 0);
@@ -111,7 +111,15 @@ export class UmbLogMessagesServerDataSource {
111
111
  */
112
112
  async getLogViewerLogs({ skip = 0, take = 100, orderDirection, filterExpression, logLevel, startDate, endDate, }) {
113
113
  return await tryExecute(this.#host, LogViewerService.getLogViewerLog({
114
- query: { skip, take, orderDirection, filterExpression, logLevel, startDate, endDate },
114
+ query: {
115
+ skip,
116
+ take,
117
+ orderDirection,
118
+ filterExpression,
119
+ logLevel: logLevel?.length ? logLevel : undefined,
120
+ startDate,
121
+ endDate,
122
+ },
115
123
  }));
116
124
  }
117
125
  /**
@@ -84,7 +84,7 @@ let UmbLogViewerMessageElement = class UmbLogViewerMessageElement extends UmbLit
84
84
  }
85
85
  query = {
86
86
  ...query,
87
- lq: encodeURIComponent(`${name}=${sanitizedValue}`),
87
+ lq: `${name}=${sanitizedValue}`,
88
88
  };
89
89
  const queryString = toQueryString(query);
90
90
  return queryString;
@@ -42,6 +42,7 @@ let UmbMediaDashboardElement = class UmbMediaDashboardElement extends UmbLitElem
42
42
  },
43
43
  {
44
44
  path: '',
45
+ pathMatch: 'full',
45
46
  redirectTo: 'collection',
46
47
  },
47
48
  {
@@ -11,7 +11,7 @@ import { UmbMediaSearchProvider } from '../../search/index.js';
11
11
  import { css, html, customElement, state, repeat, ifDefined, query, nothing, } from '@umbraco-cms/backoffice/external/lit';
12
12
  import { debounce, UmbPaginationManager } from '@umbraco-cms/backoffice/utils';
13
13
  import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
14
- import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
14
+ import { UMB_PROPERTY_TYPE_BASED_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
15
15
  import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type';
16
16
  import { UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/variant';
17
17
  import '@umbraco-cms/backoffice/imaging';
@@ -42,7 +42,7 @@ let UmbMediaPickerModalElement = class UmbMediaPickerModalElement extends UmbMod
42
42
  this.#debouncedSearch = debounce(() => {
43
43
  this.#searchMedia();
44
44
  }, 500);
45
- this.consumeContext(UMB_CONTENT_PROPERTY_CONTEXT, (context) => {
45
+ this.consumeContext(UMB_PROPERTY_TYPE_BASED_PROPERTY_CONTEXT, (context) => {
46
46
  this.observe(context?.dataType, (dataType) => {
47
47
  this.#dataType = dataType;
48
48
  });
@@ -1,9 +1,9 @@
1
- import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
1
+ import { UMB_PROPERTY_TYPE_BASED_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
2
2
  import { UmbDefaultTreeContext } from '@umbraco-cms/backoffice/tree';
3
3
  export class UmbMediaTreeContext extends UmbDefaultTreeContext {
4
4
  constructor(host) {
5
5
  super(host);
6
- this.consumeContext(UMB_CONTENT_PROPERTY_CONTEXT, (context) => {
6
+ this.consumeContext(UMB_PROPERTY_TYPE_BASED_PROPERTY_CONTEXT, (context) => {
7
7
  this.observe(context?.dataType, (value) => {
8
8
  this.updateAdditionalRequestArgs({ dataType: value });
9
9
  });
@@ -74,6 +74,7 @@ let UmbMediaWorkspaceEditorElement = class UmbMediaWorkspaceEditorElement extend
74
74
  // Using first single view as the default route for now (hence the math below):
75
75
  routes.push({
76
76
  path: '',
77
+ pathMatch: 'full',
77
78
  redirectTo: routes[variants.length * variants.length]?.path,
78
79
  });
79
80
  }
@@ -1,12 +1,12 @@
1
- import type { UmbMemberItemStore } from '../item/repository/member-item.store.js';
2
- import type { UmbMemberDetailStore } from './detail/member-detail.store.js';
3
- import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
4
- import type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification';
1
+ import { UMB_MEMBER_ITEM_STORE_CONTEXT } from '../item/repository/member-item.store.context-token.js';
2
+ import { UMB_MEMBER_DETAIL_STORE_CONTEXT } from './detail/member-detail.store.context-token.js';
3
+ import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
5
4
  import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
5
+ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
6
6
  export declare abstract class UmbMemberRepositoryBase extends UmbRepositoryBase {
7
- protected init: Promise<[UmbMemberDetailStore | undefined, UmbMemberItemStore | undefined, UmbNotificationContext | undefined]>;
8
- protected detailStore?: UmbMemberDetailStore;
9
- protected itemStore?: UmbMemberItemStore;
10
- protected notificationContext?: UmbNotificationContext;
7
+ protected init: Promise<[import("./detail/member-detail.store.js").UmbMemberDetailStore | undefined, import("../item/repository/member-item.store.js").UmbMemberItemStore | undefined, import("@umbraco-cms/backoffice/notification").UmbNotificationContext | undefined]>;
8
+ protected detailStore?: typeof UMB_MEMBER_DETAIL_STORE_CONTEXT.TYPE;
9
+ protected itemStore?: typeof UMB_MEMBER_ITEM_STORE_CONTEXT.TYPE;
10
+ protected notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE;
11
11
  constructor(host: UmbControllerHost);
12
12
  }
@@ -7,20 +7,21 @@ export class UmbMemberRepositoryBase extends UmbRepositoryBase {
7
7
  super(host);
8
8
  this.init = Promise.all([
9
9
  this.consumeContext(UMB_MEMBER_DETAIL_STORE_CONTEXT, (instance) => {
10
- if (instance) {
11
- this.detailStore = instance;
12
- }
13
- }).asPromise({ preventTimeout: true }),
10
+ this.detailStore = instance;
11
+ })
12
+ .asPromise({ preventTimeout: true })
13
+ // Ignore the error, we can assume that the flow was stopped (asPromise failed), but it does not mean that the consumption was not successful.
14
+ .catch(() => undefined),
14
15
  this.consumeContext(UMB_MEMBER_ITEM_STORE_CONTEXT, (instance) => {
15
- if (instance) {
16
- this.itemStore = instance;
17
- }
18
- }).asPromise({ preventTimeout: true }),
16
+ this.itemStore = instance;
17
+ })
18
+ .asPromise({ preventTimeout: true })
19
+ .catch(() => undefined),
19
20
  this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {
20
- if (instance) {
21
- this.notificationContext = instance;
22
- }
23
- }).asPromise({ preventTimeout: true }),
21
+ this.notificationContext = instance;
22
+ })
23
+ .asPromise({ preventTimeout: true })
24
+ .catch(() => undefined),
24
25
  ]);
25
26
  }
26
27
  }
@@ -75,6 +75,7 @@ let UmbMemberWorkspaceEditorElement = class UmbMemberWorkspaceEditorElement exte
75
75
  // Using first single view as the default route for now (hence the math below):
76
76
  routes.push({
77
77
  path: '',
78
+ pathMatch: 'full',
78
79
  redirectTo: routes[options.length * options.length]?.path,
79
80
  });
80
81
  }
@@ -44,6 +44,7 @@ let UmbCreatedPackagesSectionViewElement = class UmbCreatedPackagesSectionViewEl
44
44
  });
45
45
  routes.push({
46
46
  path: '',
47
+ pathMatch: 'full',
47
48
  redirectTo: 'overview',
48
49
  });
49
50
  routes.push({
@@ -4,8 +4,7 @@ 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 { UmbTextStyles } from '@umbraco-cms/backoffice/style';
8
- import { customElement, html, property } from '@umbraco-cms/backoffice/external/lit';
7
+ import { css, customElement, html, property } from '@umbraco-cms/backoffice/external/lit';
9
8
  import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
10
9
  import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
11
10
  /**
@@ -28,6 +27,9 @@ let UmbPropertyEditorUIDimensionsElement = class UmbPropertyEditorUIDimensionsEl
28
27
  return html `
29
28
  <uui-input
30
29
  type="number"
30
+ autocomplete="off"
31
+ min="0"
32
+ step="1"
31
33
  label=${this.localize.term('general_width')}
32
34
  placeholder=${this.localize.term('general_width')}
33
35
  @change=${this.#onChangeWidth}
@@ -36,6 +38,9 @@ let UmbPropertyEditorUIDimensionsElement = class UmbPropertyEditorUIDimensionsEl
36
38
  <span>&times;</span>
37
39
  <uui-input
38
40
  type="number"
41
+ autocomplete="off"
42
+ min="0"
43
+ step="1"
39
44
  label=${this.localize.term('general_height')}
40
45
  placeholder=${this.localize.term('general_height')}
41
46
  @change=${this.#onChangeHeight}
@@ -44,7 +49,15 @@ let UmbPropertyEditorUIDimensionsElement = class UmbPropertyEditorUIDimensionsEl
44
49
  <umb-localize key="general_pixels">pixels</umb-localize>
45
50
  `;
46
51
  }
47
- static { this.styles = [UmbTextStyles]; }
52
+ static { this.styles = [
53
+ css `
54
+ :host {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: var(--uui-size-space-1);
58
+ }
59
+ `,
60
+ ]; }
48
61
  };
49
62
  __decorate([
50
63
  property({ type: Object })
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@umbraco-backoffice/segment",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "vite build"
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@umbraco-backoffice/settings",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "vite build"
7
+ }
8
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { defineConfig } from 'vite';
2
+ import { rmSync } from 'fs';
3
+ import { getDefaultConfig } from '../../vite-config-base';
4
+ const dist = '../../../dist-cms/packages/settings';
5
+ // delete the unbundled dist folder
6
+ rmSync(dist, { recursive: true, force: true });
7
+ export default defineConfig({
8
+ ...getDefaultConfig({
9
+ dist,
10
+ }),
11
+ });
@@ -29,7 +29,7 @@ export class UmbRenamePartialViewServerDataSource {
29
29
  name: appendFileExtensionIfNeeded(name, '.cshtml'),
30
30
  };
31
31
  const { data, error } = await tryExecute(this.#host, PartialViewService.putPartialViewByPathRename({
32
- path: { path: encodeURIComponent(path) },
32
+ path: { path },
33
33
  body,
34
34
  }));
35
35
  if (data && typeof data === 'string') {
@@ -46,7 +46,7 @@ export class UmbPartialViewDetailServerDataSource {
46
46
  const path = this.#serverFilePathUniqueSerializer.toServerPath(unique);
47
47
  if (!path)
48
48
  throw new Error('Path is missing');
49
- const { data, error } = await tryExecute(this.#host, PartialViewService.getPartialViewByPath({ path: { path: encodeURIComponent(path) } }));
49
+ const { data, error } = await tryExecute(this.#host, PartialViewService.getPartialViewByPath({ path: { path } }));
50
50
  if (error || !data) {
51
51
  return { error };
52
52
  }
@@ -68,7 +68,7 @@ export class UmbPartialViewDetailServerDataSource {
68
68
  content: model.content,
69
69
  };
70
70
  const { error } = await tryExecute(this.#host, PartialViewService.putPartialViewByPath({
71
- path: { path: encodeURIComponent(path) },
71
+ path: { path },
72
72
  body,
73
73
  }));
74
74
  if (!error) {
@@ -83,7 +83,7 @@ export class UmbPartialViewDetailServerDataSource {
83
83
  if (!path)
84
84
  throw new Error('Path is missing');
85
85
  return tryExecute(this.#host, PartialViewService.deletePartialViewByPath({
86
- path: { path: encodeURIComponent(path) },
86
+ path: { path },
87
87
  }));
88
88
  }
89
89
  }
@@ -47,7 +47,7 @@ export class UmbPartialViewFolderServerDataSource {
47
47
  if (!path)
48
48
  throw new Error('Cannot read partial view folder without a path');
49
49
  const { data, error } = await tryExecute(this.#host, PartialViewService.getPartialViewFolderByPath({
50
- path: { path: encodeURIComponent(path) },
50
+ path: { path },
51
51
  }));
52
52
  if (data) {
53
53
  const mappedData = {
@@ -101,7 +101,7 @@ export class UmbPartialViewFolderServerDataSource {
101
101
  if (!path)
102
102
  throw new Error('Cannot delete partial view folder without a path');
103
103
  return tryExecute(this.#host, PartialViewService.deletePartialViewFolderByPath({
104
- path: { path: encodeURIComponent(path) },
104
+ path: { path },
105
105
  }));
106
106
  }
107
107
  async update() {
@@ -29,7 +29,7 @@ export class UmbRenameScriptServerDataSource {
29
29
  name: appendFileExtensionIfNeeded(name, '.js'),
30
30
  };
31
31
  const { data, error } = await tryExecute(this.#host, ScriptService.putScriptByPathRename({
32
- path: { path: encodeURIComponent(path) },
32
+ path: { path },
33
33
  body,
34
34
  }));
35
35
  if (data && typeof data === 'string') {
@@ -46,7 +46,7 @@ export class UmbScriptDetailServerDataSource {
46
46
  const path = this.#serverFilePathUniqueSerializer.toServerPath(unique);
47
47
  if (!path)
48
48
  throw new Error('Path is missing');
49
- const { data, error } = await tryExecute(this.#host, ScriptService.getScriptByPath({ path: { path: encodeURIComponent(path) } }));
49
+ const { data, error } = await tryExecute(this.#host, ScriptService.getScriptByPath({ path: { path } }));
50
50
  if (error || !data) {
51
51
  return { error };
52
52
  }
@@ -68,7 +68,7 @@ export class UmbScriptDetailServerDataSource {
68
68
  content: model.content,
69
69
  };
70
70
  const { error } = await tryExecute(this.#host, ScriptService.putScriptByPath({
71
- path: { path: encodeURIComponent(path) },
71
+ path: { path },
72
72
  body,
73
73
  }));
74
74
  if (!error) {
@@ -83,7 +83,7 @@ export class UmbScriptDetailServerDataSource {
83
83
  if (!path)
84
84
  throw new Error('Path is missing');
85
85
  return tryExecute(this.#host, ScriptService.deleteScriptByPath({
86
- path: { path: encodeURIComponent(path) },
86
+ path: { path },
87
87
  }));
88
88
  }
89
89
  }
@@ -47,7 +47,7 @@ export class UmbScriptFolderServerDataSource {
47
47
  if (!path)
48
48
  throw new Error('Cannot read script folder without a path');
49
49
  const { data, error } = await tryExecute(this.#host, ScriptService.getScriptFolderByPath({
50
- path: { path: encodeURIComponent(path) },
50
+ path: { path },
51
51
  }));
52
52
  if (data) {
53
53
  const mappedData = {
@@ -99,7 +99,7 @@ export class UmbScriptFolderServerDataSource {
99
99
  if (!path)
100
100
  throw new Error('Cannot delete script folder without a path');
101
101
  return tryExecute(this.#host, ScriptService.deleteScriptFolderByPath({
102
- path: { path: encodeURIComponent(path) },
102
+ path: { path },
103
103
  }));
104
104
  }
105
105
  async update() {
@@ -29,7 +29,7 @@ export class UmbRenameStylesheetServerDataSource {
29
29
  name: appendFileExtensionIfNeeded(name, '.css'),
30
30
  };
31
31
  const { data, error } = await tryExecute(this.#host, StylesheetService.putStylesheetByPathRename({
32
- path: { path: encodeURIComponent(path) },
32
+ path: { path },
33
33
  body,
34
34
  }));
35
35
  if (data && typeof data === 'string') {
@@ -46,7 +46,7 @@ export class UmbStylesheetDetailServerDataSource {
46
46
  const path = this.#serverFilePathUniqueSerializer.toServerPath(unique);
47
47
  if (!path)
48
48
  throw new Error('Path is missing');
49
- const { data, error } = await tryExecute(this.#host, StylesheetService.getStylesheetByPath({ path: { path: encodeURIComponent(path) } }));
49
+ const { data, error } = await tryExecute(this.#host, StylesheetService.getStylesheetByPath({ path: { path } }));
50
50
  if (error || !data) {
51
51
  return { error };
52
52
  }
@@ -68,7 +68,7 @@ export class UmbStylesheetDetailServerDataSource {
68
68
  content: model.content,
69
69
  };
70
70
  const { error } = await tryExecute(this.#host, StylesheetService.putStylesheetByPath({
71
- path: { path: encodeURIComponent(path) },
71
+ path: { path },
72
72
  body,
73
73
  }));
74
74
  if (!error) {
@@ -83,7 +83,7 @@ export class UmbStylesheetDetailServerDataSource {
83
83
  if (!path)
84
84
  throw new Error('Path is missing');
85
85
  return tryExecute(this.#host, StylesheetService.deleteStylesheetByPath({
86
- path: { path: encodeURIComponent(path) },
86
+ path: { path },
87
87
  }));
88
88
  }
89
89
  }
@@ -41,7 +41,7 @@ export class UmbStylesheetFolderServerDataSource {
41
41
  if (!path)
42
42
  throw new Error('Cannot read stylesheet folder without a path');
43
43
  const { data, error } = await tryExecute(this.#host, StylesheetService.getStylesheetFolderByPath({
44
- path: { path: encodeURIComponent(path) },
44
+ path: { path },
45
45
  }));
46
46
  if (data) {
47
47
  const mappedData = {
@@ -95,7 +95,7 @@ export class UmbStylesheetFolderServerDataSource {
95
95
  if (!path)
96
96
  throw new Error('Cannot delete stylesheet folder without a path');
97
97
  return tryExecute(this.#host, StylesheetService.deleteStylesheetFolderByPath({
98
- path: { path: encodeURIComponent(path) },
98
+ path: { path },
99
99
  }));
100
100
  }
101
101
  async update() {
@@ -418,10 +418,6 @@ let UmbCharacterMapModalElement = class UmbCharacterMapModalElement extends UmbM
418
418
  gap: var(--uui-size-space-4);
419
419
  }
420
420
 
421
- uui-input {
422
- align-items: baseline;
423
- }
424
-
425
421
  uui-scroll-container {
426
422
  height: 300px;
427
423
  width: calc(450px + var(--uui-size-layout-1));
@@ -222,7 +222,7 @@ let UmbInputTiptapElement = class UmbInputTiptapElement extends UmbFormControlMi
222
222
  height: 100%;
223
223
  width: 100%;
224
224
  outline: none;
225
- white-space: pre-wrap;
225
+ white-space: wrap;
226
226
  min-width: 0;
227
227
 
228
228
  p:first-of-type {
@@ -4,6 +4,12 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
4
4
  import type { Editor } from '@umbraco-cms/backoffice/external/tiptap';
5
5
  import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor';
6
6
  import '../cascading-menu-popover/cascading-menu-popover.element.js';
7
+ /**
8
+ * Provides a sticky toolbar for the {@link UmbInputTiptapElement}
9
+ * @element umb-tiptap-toolbar
10
+ * @cssprop --umb-tiptap-edge-border-color - Defines the edge border color
11
+ * @cssprop --umb-tiptap-top - Defines the top value for the sticky toolbar
12
+ */
7
13
  export declare class UmbTiptapToolbarElement extends UmbLitElement {
8
14
  #private;
9
15
  private _lookup?;
@@ -9,6 +9,12 @@ import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registr
9
9
  import { UmbExtensionsElementAndApiInitializer } from '@umbraco-cms/backoffice/extension-api';
10
10
  import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
11
11
  import '../cascading-menu-popover/cascading-menu-popover.element.js';
12
+ /**
13
+ * Provides a sticky toolbar for the {@link UmbInputTiptapElement}
14
+ * @element umb-tiptap-toolbar
15
+ * @cssprop --umb-tiptap-edge-border-color - Defines the edge border color
16
+ * @cssprop --umb-tiptap-top - Defines the top value for the sticky toolbar
17
+ */
12
18
  let UmbTiptapToolbarElement = class UmbTiptapToolbarElement extends UmbLitElement {
13
19
  constructor() {
14
20
  super(...arguments);
@@ -75,7 +81,7 @@ let UmbTiptapToolbarElement = class UmbTiptapToolbarElement extends UmbLitElemen
75
81
  flex-direction: column;
76
82
 
77
83
  position: sticky;
78
- top: -25px;
84
+ top: var(--umb-tiptap-top,-25px);
79
85
  left: 0;
80
86
  right: 0;
81
87
  padding: var(--uui-size-3);
@@ -130,7 +130,7 @@ let UmbPropertyEditorUiTiptapExtensionsConfigurationElement = class UmbPropertyE
130
130
  }
131
131
 
132
132
  .group {
133
- flex: 1;
133
+ width: calc((100% - 2rem) / 3);
134
134
 
135
135
  ul {
136
136
  list-style: none;
@@ -227,10 +227,6 @@ let UmbPropertyEditorUiTiptapStatusbarConfigurationElement = class UmbPropertyEd
227
227
  [slot='header-actions'] {
228
228
  margin-bottom: var(--uui-size-2);
229
229
 
230
- uui-input {
231
- align-items: baseline;
232
- }
233
-
234
230
  uui-icon {
235
231
  color: var(--uui-color-border);
236
232
  }