@umbraco-cms/backoffice 16.0.0-rc2 → 16.0.0-rc4

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 (281) 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/css/uui-css.css +438 -108
  4. package/dist-cms/custom-elements.json +100 -15
  5. package/dist-cms/external/uui/index.js +370 -336
  6. package/dist-cms/libs/context-api/consume/context-consumer.js +1 -2
  7. package/dist-cms/libs/controller-api/controller-host.mixin.js +2 -2
  8. package/dist-cms/packages/block/block/context/block-entry.context.js +10 -3
  9. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.d.ts +1 -1
  10. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit-properties.element.js +7 -7
  11. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit-property.element.js +1 -1
  12. package/dist-cms/packages/block/block/workspace/views/edit/block-workspace-view-edit.element.js +1 -0
  13. package/dist-cms/packages/block/block-list/components/block-list-entry/block-list-entry.element.js +2 -1
  14. package/dist-cms/packages/block/block-type/components/input-block-type/input-block-type.element.js +1 -2
  15. package/dist-cms/packages/clipboard/property/value-translator/copy/clipboard-copy-translator-value-resolver.js +6 -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/controller/merge-content-variant-data.controller.js +1 -0
  25. package/dist-cms/packages/content/content/global-components/content-workspace-property.element.d.ts +26 -0
  26. package/dist-cms/packages/content/content/global-components/content-workspace-property.element.js +104 -0
  27. package/dist-cms/packages/content/content/global-components/index.d.ts +1 -0
  28. package/dist-cms/packages/content/content/global-components/index.js +1 -0
  29. package/dist-cms/packages/content/content/index.d.ts +1 -2
  30. package/dist-cms/packages/content/content/index.js +1 -2
  31. package/dist-cms/packages/content/content/property-dataset-context/element-property-dataset.context.js +4 -1
  32. package/dist-cms/packages/content/content/workspace/content-detail-workspace-base.js +6 -1
  33. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-properties.element.d.ts +1 -3
  34. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-properties.element.js +8 -48
  35. package/dist-cms/packages/content/content/workspace/views/edit/content-editor.element.js +1 -0
  36. package/dist-cms/packages/content/content-type/structure/content-type-property-structure-helper.class.d.ts +1 -0
  37. package/dist-cms/packages/content/content-type/structure/content-type-property-structure-helper.class.js +1 -0
  38. package/dist-cms/packages/content/content-type/structure/content-type-structure-manager.class.d.ts +1 -0
  39. package/dist-cms/packages/content/content-type/structure/content-type-structure-manager.class.js +3 -3
  40. package/dist-cms/packages/content/content-type/workspace/views/design/content-type-design-editor.element.js +11 -7
  41. package/dist-cms/packages/content/property-type/workspace/property-type-workspace.context.js +5 -1
  42. package/dist-cms/packages/core/backend-api/types.gen.d.ts +2 -0
  43. package/dist-cms/packages/core/collection/collection-view.manager.js +4 -4
  44. package/dist-cms/packages/core/collection/default/collection-default.context.d.ts +1 -0
  45. package/dist-cms/packages/core/collection/default/collection-default.context.js +3 -0
  46. package/dist-cms/packages/core/components/entity-actions-bundle/entity-actions-bundle.element.js +4 -1
  47. package/dist-cms/packages/core/components/input-number-range/input-number-range.element.d.ts +4 -1
  48. package/dist-cms/packages/core/components/input-number-range/input-number-range.element.js +27 -3
  49. package/dist-cms/packages/core/components/input-with-alias/input-with-alias.element.js +0 -2
  50. package/dist-cms/packages/core/culture/manifests.d.ts +1 -1
  51. package/dist-cms/packages/core/entity-action/common/create/create.action.js +1 -0
  52. package/dist-cms/packages/core/entity-item/entity-item-ref/entity-item-ref.element.d.ts +9 -0
  53. package/dist-cms/packages/core/entity-item/entity-item-ref/entity-item-ref.element.js +80 -2
  54. package/dist-cms/packages/core/picker/search/picker-search-result.element.js +1 -2
  55. package/dist-cms/packages/core/property/manifests.d.ts +1 -1
  56. package/dist-cms/packages/core/property/property-dataset/property-dataset-base-context.js +7 -2
  57. package/dist-cms/packages/core/property/property-guard-manager/variant-property-guard.manager.d.ts +15 -2
  58. package/dist-cms/packages/core/property/property-guard-manager/variant-property-guard.manager.js +22 -15
  59. package/dist-cms/packages/core/property/property-value-cloner/property-value-clone.controller.js +2 -0
  60. package/dist-cms/packages/core/property/property-value-preset/property-value-preset-builder.controller.js +6 -1
  61. package/dist-cms/packages/core/repository/detail/detail-repository-base.js +6 -7
  62. package/dist-cms/packages/core/repository/item/item-repository-base.d.ts +1 -1
  63. package/dist-cms/packages/core/repository/item/item-repository-base.js +25 -9
  64. package/dist-cms/packages/core/repository/item/item-repository.interface.d.ts +1 -1
  65. package/dist-cms/packages/core/router/router-slot/model.d.ts +1 -0
  66. package/dist-cms/packages/core/router/router-slot/router-slot.d.ts +1 -0
  67. package/dist-cms/packages/core/router/router-slot/router-slot.js +30 -0
  68. package/dist-cms/packages/core/section/section-default.element.js +3 -0
  69. package/dist-cms/packages/core/temporary-file/config/config.repository.d.ts +1 -0
  70. package/dist-cms/packages/core/temporary-file/config/config.repository.js +7 -3
  71. package/dist-cms/packages/core/temporary-file/config/config.server.data-source.js +1 -1
  72. package/dist-cms/packages/core/temporary-file/manifests.d.ts +1 -1
  73. package/dist-cms/packages/core/temporary-file/temporary-file-manager.class.js +15 -4
  74. package/dist-cms/packages/core/themes/manifests.d.ts +1 -1
  75. package/dist-cms/packages/core/tree/data/tree-repository-base.d.ts +5 -1
  76. package/dist-cms/packages/core/tree/data/tree-repository-base.js +27 -13
  77. package/dist-cms/packages/core/tree/tree-item/tree-item.element.js +1 -1
  78. package/dist-cms/packages/core/utils/media/image-size.function.d.ts +5 -3
  79. package/dist-cms/packages/core/utils/media/image-size.function.js +9 -11
  80. package/dist-cms/packages/core/validation/controllers/bind-server-validation-to-form-control.controller.js +1 -1
  81. package/dist-cms/packages/core/validation/controllers/form-control-validator.controller.js +4 -4
  82. package/dist-cms/packages/core/validation/controllers/validation-path-translation/validation-property-path-translation.controller.js +1 -0
  83. package/dist-cms/packages/core/validation/controllers/validation.controller.js +5 -5
  84. package/dist-cms/packages/core/variant/constants.d.ts +1 -0
  85. package/dist-cms/packages/core/variant/constants.js +1 -0
  86. package/dist-cms/packages/core/variant/context/constants.d.ts +1 -0
  87. package/dist-cms/packages/core/variant/context/constants.js +1 -0
  88. package/dist-cms/packages/core/variant/context/index.d.ts +1 -0
  89. package/dist-cms/packages/core/variant/context/index.js +1 -0
  90. package/dist-cms/packages/core/variant/context/variant.context.d.ts +91 -0
  91. package/dist-cms/packages/core/variant/context/variant.context.js +141 -0
  92. package/dist-cms/packages/core/variant/context/variant.context.token.d.ts +3 -0
  93. package/dist-cms/packages/core/variant/context/variant.context.token.js +2 -0
  94. package/dist-cms/packages/core/variant/index.d.ts +2 -0
  95. package/dist-cms/packages/core/variant/index.js +2 -0
  96. package/dist-cms/packages/core/workspace/components/workspace-action/common/save/save.action.js +3 -1
  97. package/dist-cms/packages/core/workspace/components/workspace-split-view/workspace-split-view-variant-selector.element.js +2 -2
  98. package/dist-cms/packages/core/workspace/controllers/workspace-is-new-redirect.controller.d.ts +7 -0
  99. package/dist-cms/packages/core/workspace/controllers/workspace-is-new-redirect.controller.js +31 -10
  100. package/dist-cms/packages/core/workspace/controllers/workspace-route-manager.controller.js +5 -5
  101. package/dist-cms/packages/core/workspace/entity-detail/entity-detail-workspace-base.js +1 -1
  102. package/dist-cms/packages/core/workspace/info-app/global-components/workspace-info-app-layout.element.js +0 -4
  103. package/dist-cms/packages/core/workspace/submittable/submittable-workspace-context-base.d.ts +1 -0
  104. package/dist-cms/packages/core/workspace/submittable/submittable-workspace-context-base.js +10 -0
  105. package/dist-cms/packages/core/workspace/workspace-property-dataset/invariant-workspace-property-dataset-context.js +4 -1
  106. package/dist-cms/packages/data-type/collection/repository/data-type-collection.repository.js +6 -1
  107. package/dist-cms/packages/data-type/constants.d.ts +1 -0
  108. package/dist-cms/packages/data-type/constants.js +1 -0
  109. package/dist-cms/packages/data-type/repository/detail/data-type-detail.repository.js +6 -1
  110. package/dist-cms/packages/data-type/search/constants.d.ts +2 -0
  111. package/dist-cms/packages/data-type/search/constants.js +2 -0
  112. package/dist-cms/packages/data-type/search/global-search/constants.d.ts +1 -0
  113. package/dist-cms/packages/data-type/search/global-search/constants.js +1 -0
  114. package/dist-cms/packages/data-type/search/global-search/manifests.d.ts +1 -0
  115. package/dist-cms/packages/data-type/search/global-search/manifests.js +22 -0
  116. package/dist-cms/packages/data-type/search/manifests.js +2 -0
  117. package/dist-cms/packages/dictionary/search/constants.d.ts +1 -0
  118. package/dist-cms/packages/dictionary/search/constants.js +1 -0
  119. package/dist-cms/packages/dictionary/search/global-search/constants.d.ts +1 -0
  120. package/dist-cms/packages/dictionary/search/global-search/constants.js +1 -0
  121. package/dist-cms/packages/dictionary/search/global-search/manifests.d.ts +1 -0
  122. package/dist-cms/packages/dictionary/search/global-search/manifests.js +22 -0
  123. package/dist-cms/packages/dictionary/search/manifests.js +2 -0
  124. package/dist-cms/packages/documents/document-blueprints/workspace/document-blueprint-workspace-editor.element.js +5 -4
  125. package/dist-cms/packages/documents/document-types/search/constants.d.ts +1 -0
  126. package/dist-cms/packages/documents/document-types/search/constants.js +1 -0
  127. package/dist-cms/packages/documents/document-types/search/global-search/constants.d.ts +1 -0
  128. package/dist-cms/packages/documents/document-types/search/global-search/constants.js +1 -0
  129. package/dist-cms/packages/documents/document-types/search/global-search/manifests.d.ts +1 -0
  130. package/dist-cms/packages/documents/document-types/search/global-search/manifests.js +22 -0
  131. package/dist-cms/packages/documents/document-types/search/manifests.js +2 -0
  132. package/dist-cms/packages/documents/documents/collection/document-collection.context.d.ts +2 -0
  133. package/dist-cms/packages/documents/documents/collection/document-collection.context.js +23 -0
  134. package/dist-cms/packages/documents/documents/components/input-document/input-document.context.js +4 -0
  135. package/dist-cms/packages/documents/documents/item/document-item-data-resolver.d.ts +2 -2
  136. package/dist-cms/packages/documents/documents/item/document-item-data-resolver.js +55 -68
  137. package/dist-cms/packages/documents/documents/item/document-item-ref.element.d.ts +4 -0
  138. package/dist-cms/packages/documents/documents/item/document-item-ref.element.js +33 -2
  139. package/dist-cms/packages/documents/documents/picker/document-picker-search-result-item.element.d.ts +1 -0
  140. package/dist-cms/packages/documents/documents/picker/document-picker-search-result-item.element.js +14 -8
  141. package/dist-cms/packages/documents/documents/property-dataset-context/document-property-dataset.context.d.ts +0 -1
  142. package/dist-cms/packages/documents/documents/property-dataset-context/document-property-dataset.context.js +0 -42
  143. package/dist-cms/packages/documents/documents/publishing/workspace-context/document-publishing.workspace-context.js +12 -2
  144. package/dist-cms/packages/documents/documents/search/constants.d.ts +1 -0
  145. package/dist-cms/packages/documents/documents/search/constants.js +1 -0
  146. package/dist-cms/packages/documents/documents/search/document-search.server.data-source.js +3 -2
  147. package/dist-cms/packages/documents/documents/search/global-search/constants.d.ts +1 -0
  148. package/dist-cms/packages/documents/documents/search/global-search/constants.js +1 -0
  149. package/dist-cms/packages/documents/documents/search/global-search/document-global-search.d.ts +6 -0
  150. package/dist-cms/packages/documents/documents/search/global-search/document-global-search.js +15 -0
  151. package/dist-cms/packages/documents/documents/search/global-search/manifests.d.ts +1 -0
  152. package/dist-cms/packages/documents/documents/search/global-search/manifests.js +23 -0
  153. package/dist-cms/packages/documents/documents/search/manifests.js +2 -0
  154. package/dist-cms/packages/documents/documents/search/types.d.ts +1 -0
  155. package/dist-cms/packages/documents/documents/types.d.ts +1 -0
  156. package/dist-cms/packages/documents/documents/url/document-urls-data-resolver.d.ts +37 -0
  157. package/dist-cms/packages/documents/documents/url/document-urls-data-resolver.js +78 -0
  158. package/dist-cms/packages/documents/documents/url/index.d.ts +2 -0
  159. package/dist-cms/packages/documents/documents/url/index.js +2 -0
  160. package/dist-cms/packages/documents/documents/url/info-app/document-links-workspace-info-app.element.d.ts +0 -1
  161. package/dist-cms/packages/documents/documents/url/info-app/document-links-workspace-info-app.element.js +29 -24
  162. package/dist-cms/packages/documents/documents/url/repository/types.d.ts +1 -1
  163. package/dist-cms/packages/documents/documents/url/types.d.ts +1 -0
  164. package/dist-cms/packages/documents/documents/url/types.js +1 -0
  165. package/dist-cms/packages/documents/documents/user-permissions/document/conditions/document-user-permission.condition.js +3 -1
  166. package/dist-cms/packages/documents/documents/workspace/actions/save.action.js +4 -2
  167. package/dist-cms/packages/documents/documents/workspace/document-workspace-editor.element.js +13 -7
  168. package/dist-cms/packages/documents/documents/workspace/document-workspace.context.js +29 -0
  169. package/dist-cms/packages/language/global-contexts/app-language.context.js +14 -12
  170. package/dist-cms/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.js +3 -0
  171. package/dist-cms/packages/media/media/components/input-media/input-media.context.js +4 -0
  172. package/dist-cms/packages/media/media/constants.d.ts +1 -1
  173. package/dist-cms/packages/media/media/constants.js +1 -1
  174. package/dist-cms/packages/media/media/dashboard/media-dashboard.element.js +1 -0
  175. package/dist-cms/packages/media/media/modals/media-picker/media-picker-modal.element.js +8 -0
  176. package/dist-cms/packages/media/media/search/constants.d.ts +1 -0
  177. package/dist-cms/packages/media/media/search/constants.js +1 -0
  178. package/dist-cms/packages/media/media/search/global-search/constants.d.ts +1 -0
  179. package/dist-cms/packages/media/media/search/global-search/constants.js +1 -0
  180. package/dist-cms/packages/media/media/search/global-search/manifests.d.ts +1 -0
  181. package/dist-cms/packages/media/media/search/global-search/manifests.js +23 -0
  182. package/dist-cms/packages/media/media/search/global-search/media-global-search.d.ts +15 -0
  183. package/dist-cms/packages/media/media/search/global-search/media-global-search.js +15 -0
  184. package/dist-cms/packages/media/media/search/manifests.js +2 -0
  185. package/dist-cms/packages/media/media/search/media-search.server.data-source.js +3 -2
  186. package/dist-cms/packages/media/media/search/types.d.ts +1 -0
  187. package/dist-cms/packages/media/media/workspace/media-workspace-editor.element.js +1 -0
  188. package/dist-cms/packages/media/media-types/constants.d.ts +1 -0
  189. package/dist-cms/packages/media/media-types/constants.js +1 -0
  190. package/dist-cms/packages/media/media-types/search/constants.d.ts +2 -0
  191. package/dist-cms/packages/media/media-types/search/constants.js +2 -0
  192. package/dist-cms/packages/media/media-types/search/global-search/constants.d.ts +1 -0
  193. package/dist-cms/packages/media/media-types/search/global-search/constants.js +1 -0
  194. package/dist-cms/packages/media/media-types/search/global-search/manifests.d.ts +1 -0
  195. package/dist-cms/packages/media/media-types/search/global-search/manifests.js +22 -0
  196. package/dist-cms/packages/media/media-types/search/manifests.js +4 -1
  197. package/dist-cms/packages/members/member/repository/member-repository-base.d.ts +8 -8
  198. package/dist-cms/packages/members/member/repository/member-repository-base.js +13 -12
  199. package/dist-cms/packages/members/member/search/constants.d.ts +1 -0
  200. package/dist-cms/packages/members/member/search/constants.js +1 -0
  201. package/dist-cms/packages/members/member/search/global-search/constants.d.ts +1 -0
  202. package/dist-cms/packages/members/member/search/global-search/constants.js +1 -0
  203. package/dist-cms/packages/members/member/search/global-search/manifests.d.ts +1 -0
  204. package/dist-cms/packages/members/member/search/global-search/manifests.js +22 -0
  205. package/dist-cms/packages/members/member/search/manifests.js +2 -0
  206. package/dist-cms/packages/members/member/workspace/member/member-workspace-editor.element.js +1 -0
  207. package/dist-cms/packages/members/member-type/constants.d.ts +1 -0
  208. package/dist-cms/packages/members/member-type/constants.js +1 -0
  209. package/dist-cms/packages/members/member-type/search/constants.d.ts +2 -0
  210. package/dist-cms/packages/members/member-type/search/constants.js +2 -0
  211. package/dist-cms/packages/members/member-type/search/global-search/constants.d.ts +1 -0
  212. package/dist-cms/packages/members/member-type/search/global-search/constants.js +1 -0
  213. package/dist-cms/packages/members/member-type/search/global-search/manifests.d.ts +1 -0
  214. package/dist-cms/packages/members/member-type/search/global-search/manifests.js +22 -0
  215. package/dist-cms/packages/members/member-type/search/manifests.js +4 -1
  216. package/dist-cms/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.d.ts +4 -0
  217. package/dist-cms/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.js +48 -1
  218. package/dist-cms/packages/multi-url-picker/link-picker-modal/link-picker-modal.element.d.ts +2 -2
  219. package/dist-cms/packages/multi-url-picker/link-picker-modal/link-picker-modal.element.js +95 -34
  220. package/dist-cms/packages/packages/package-section/views/created/created-packages-section-view.element.js +1 -0
  221. package/dist-cms/packages/relations/relations/reference/workspace-info-app/entity-references-workspace-view-info.element.js +6 -1
  222. package/dist-cms/packages/search/global-search/global-search-base.d.ts +11 -0
  223. package/dist-cms/packages/search/global-search/global-search-base.js +49 -0
  224. package/dist-cms/packages/search/global-search/global-search.extension.d.ts +15 -0
  225. package/dist-cms/packages/search/global-search/global-search.extension.js +1 -0
  226. package/dist-cms/packages/search/global-search/index.d.ts +1 -0
  227. package/dist-cms/packages/search/global-search/index.js +1 -0
  228. package/dist-cms/packages/search/global-search/types.d.ts +4 -0
  229. package/dist-cms/packages/search/global-search/types.js +1 -0
  230. package/dist-cms/packages/search/index.d.ts +1 -0
  231. package/dist-cms/packages/search/index.js +1 -0
  232. package/dist-cms/packages/search/search-modal/search-modal.element.d.ts +4 -4
  233. package/dist-cms/packages/search/search-modal/search-modal.element.js +40 -29
  234. package/dist-cms/packages/search/types.d.ts +1 -0
  235. package/dist-cms/packages/segment/package.json +8 -0
  236. package/dist-cms/packages/settings/package.json +8 -0
  237. package/dist-cms/packages/settings/vite.config.d.ts +2 -0
  238. package/dist-cms/packages/settings/vite.config.js +11 -0
  239. package/dist-cms/packages/sysinfo/components/sysinfo.element.js +49 -9
  240. package/dist-cms/packages/sysinfo/repository/sysinfo.repository.d.ts +3 -0
  241. package/dist-cms/packages/sysinfo/repository/sysinfo.repository.js +8 -0
  242. package/dist-cms/packages/templating/templates/constants.d.ts +1 -0
  243. package/dist-cms/packages/templating/templates/constants.js +1 -0
  244. package/dist-cms/packages/templating/templates/search/constants.d.ts +2 -0
  245. package/dist-cms/packages/templating/templates/search/constants.js +2 -0
  246. package/dist-cms/packages/templating/templates/search/global-search/constants.d.ts +1 -0
  247. package/dist-cms/packages/templating/templates/search/global-search/constants.js +1 -0
  248. package/dist-cms/packages/templating/templates/search/global-search/manifests.d.ts +1 -0
  249. package/dist-cms/packages/templating/templates/search/global-search/manifests.js +22 -0
  250. package/dist-cms/packages/templating/templates/search/manifests.js +4 -1
  251. package/dist-cms/packages/tiptap/extensions/core/media-upload.tiptap-api.d.ts +6 -1
  252. package/dist-cms/packages/tiptap/extensions/core/media-upload.tiptap-api.js +16 -6
  253. package/dist-cms/packages/tiptap/extensions/toolbar/media-picker.tiptap-toolbar-api.d.ts +6 -1
  254. package/dist-cms/packages/tiptap/extensions/toolbar/media-picker.tiptap-toolbar-api.js +27 -6
  255. package/dist-cms/packages/translation/package.json +8 -0
  256. package/dist-cms/packages/user/current-user/action/current-user-app-button.element.d.ts +1 -1
  257. package/dist-cms/packages/user/current-user/action/current-user-app-button.element.js +4 -8
  258. package/dist-cms/packages/user/current-user/current-user-action.extension.d.ts +0 -11
  259. package/dist-cms/packages/user/current-user/current-user.context.js +4 -1
  260. package/dist-cms/packages/user/current-user/external-login/manifests.js +0 -1
  261. package/dist-cms/packages/user/current-user/mfa-login/manifests.js +0 -1
  262. package/dist-cms/packages/user/current-user/repository/current-user.repository.d.ts +2 -2
  263. package/dist-cms/packages/user/current-user/repository/current-user.repository.js +8 -5
  264. package/dist-cms/packages/user/user/repository/user-repository-base.d.ts +7 -7
  265. package/dist-cms/packages/user/user/repository/user-repository-base.js +13 -12
  266. package/dist-cms/packages/user/user-group/collection/repository/user-group-collection.repository.js +4 -1
  267. package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.repository.d.ts +4 -0
  268. package/dist-cms/packages/webhook/webhook-event/repository/webhook-event.repository.js +7 -1
  269. package/dist-cms/tsconfig.build.tsbuildinfo +1 -1
  270. package/dist-cms/umbraco-package-schema.json +147 -0
  271. package/dist-cms/umbraco-package.json +1 -1
  272. package/dist-cms/vscode-html-custom-data.json +61 -15
  273. package/examples/modal-routed/dashboard.element.ts +1 -0
  274. package/examples/modal-routed/modal/example-modal.element.ts +1 -0
  275. package/examples/validation-context/validation-context-dashboard.ts +12 -12
  276. package/package.json +7 -7
  277. package/dist-cms/packages/content/content/content-property.context-token.d.ts +0 -3
  278. package/dist-cms/packages/content/content/content-property.context-token.js +0 -2
  279. package/dist-cms/packages/content/content/content-property.context.js +0 -14
  280. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-property.element.d.ts +0 -21
  281. package/dist-cms/packages/content/content/workspace/views/edit/content-editor-property.element.js +0 -63
@@ -0,0 +1,78 @@
1
+ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
2
+ import { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';
3
+ import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property';
4
+ /**
5
+ * A controller for resolving data for document urls
6
+ * @exports
7
+ * @class UmbDocumentUrlsDataResolver
8
+ * @augments {UmbControllerBase}
9
+ */
10
+ export class UmbDocumentUrlsDataResolver extends UmbControllerBase {
11
+ #appCulture;
12
+ #propertyDataSetCulture;
13
+ #data;
14
+ #init;
15
+ #urls;
16
+ constructor(host) {
17
+ super(host);
18
+ this.#urls = new UmbArrayState([], (url) => url.url);
19
+ /**
20
+ * The urls for the current culture
21
+ * @returns {ObservableArray<UmbDocumentUrlModel>} The urls for the current culture
22
+ * @memberof UmbDocumentUrlsDataResolver
23
+ */
24
+ this.urls = this.#urls.asObservable();
25
+ // TODO: listen for UMB_VARIANT_CONTEXT when available
26
+ this.#init = Promise.all([
27
+ this.consumeContext(UMB_PROPERTY_DATASET_CONTEXT, (context) => {
28
+ this.#propertyDataSetCulture = context?.getVariantId();
29
+ this.#setCultureAwareValues();
30
+ }).asPromise(),
31
+ ]);
32
+ }
33
+ /**
34
+ * Get the current data
35
+ * @returns {Array<UmbDocumentUrlModel> | undefined} The current data
36
+ * @memberof UmbDocumentUrlsDataResolver
37
+ */
38
+ getData() {
39
+ return this.#data;
40
+ }
41
+ /**
42
+ * Set the current data
43
+ * @param {Array<UmbDocumentUrlModel> | undefined} data The current data
44
+ * @memberof UmbDocumentUrlsDataResolver
45
+ */
46
+ setData(data) {
47
+ this.#data = data;
48
+ if (!this.#data) {
49
+ this.#urls.setValue([]);
50
+ return;
51
+ }
52
+ this.#setCultureAwareValues();
53
+ }
54
+ /**
55
+ * Get the urls for the current culture
56
+ * @returns {(Promise<Array<UmbDocumentUrlModel> | []>)} The urls for the current culture
57
+ * @memberof UmbDocumentUrlsDataResolver
58
+ */
59
+ async getUrls() {
60
+ await this.#init;
61
+ return this.#urls.getValue();
62
+ }
63
+ #setCultureAwareValues() {
64
+ this.#setUrls();
65
+ }
66
+ #setUrls() {
67
+ const data = this.#getDataForCurrentCulture();
68
+ this.#urls.setValue(data ?? []);
69
+ }
70
+ #getCurrentCulture() {
71
+ return this.#propertyDataSetCulture?.culture || this.#appCulture;
72
+ }
73
+ #getDataForCurrentCulture() {
74
+ const culture = this.#getCurrentCulture();
75
+ // If there is no culture context (invariant data) we return all urls
76
+ return culture ? this.#data?.filter((x) => x.culture === culture) : this.#data;
77
+ }
78
+ }
@@ -1,2 +1,4 @@
1
1
  export { UmbDocumentUrlRepository, UMB_DOCUMENT_URL_REPOSITORY_ALIAS } from './repository/index.js';
2
+ export * from './repository/index.js';
2
3
  export * from './constants.js';
4
+ export * from './document-urls-data-resolver.js';
@@ -1,2 +1,4 @@
1
1
  export { UmbDocumentUrlRepository, UMB_DOCUMENT_URL_REPOSITORY_ALIAS } from './repository/index.js';
2
+ export * from './repository/index.js';
2
3
  export * from './constants.js';
4
+ export * from './document-urls-data-resolver.js';
@@ -6,7 +6,6 @@ export declare class UmbDocumentLinksWorkspaceInfoAppElement extends UmbLitEleme
6
6
  private _variantOptions?;
7
7
  private _loading;
8
8
  private _links;
9
- private _defaultCulture?;
10
9
  constructor();
11
10
  render(): import("lit-html").TemplateResult<1>;
12
11
  disconnectedCallback(): void;
@@ -6,19 +6,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { UmbDocumentUrlRepository } from '../repository/index.js';
8
8
  import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../../workspace/constants.js';
9
- import { css, customElement, html, nothing, repeat, state, when } from '@umbraco-cms/backoffice/external/lit';
9
+ import { UmbDocumentUrlsDataResolver } from '../document-urls-data-resolver.js';
10
+ import { css, customElement, html, ifDefined, nothing, repeat, state, when, } from '@umbraco-cms/backoffice/external/lit';
10
11
  import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
11
12
  import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/entity-action';
12
13
  import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
13
14
  import { observeMultiple } from '@umbraco-cms/backoffice/observable-api';
14
15
  import { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api';
15
16
  import { debounce } from '@umbraco-cms/backoffice/utils';
16
- import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
17
+ import { UMB_PROPERTY_DATASET_CONTEXT } from '@umbraco-cms/backoffice/property';
17
18
  let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInfoAppElement extends UmbLitElement {
18
19
  #documentUrlRepository;
19
20
  #urls;
20
21
  #documentWorkspaceContext;
21
22
  #eventContext;
23
+ #propertyDataSetVariantId;
24
+ #documentUrlsDataResolver;
22
25
  constructor() {
23
26
  super();
24
27
  this.#documentUrlRepository = new UmbDocumentUrlRepository(this);
@@ -26,6 +29,7 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
26
29
  this._loading = false;
27
30
  this._links = [];
28
31
  this.#urls = [];
32
+ this.#documentUrlsDataResolver = new UmbDocumentUrlsDataResolver(this);
29
33
  this.#debounceRequestUrls = debounce(() => this.#requestUrls(), 50);
30
34
  this.#onReloadRequest = (event) => {
31
35
  // TODO: Introduce "Published Event". We only need to update the url when the document is published.
@@ -61,19 +65,24 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
61
65
  this.#setLinks();
62
66
  });
63
67
  });
64
- this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (instance) => {
65
- this.observe(instance?.appDefaultLanguage, (value) => {
66
- this._defaultCulture = value?.unique;
67
- this.#setLinks();
68
- });
68
+ this.consumeContext(UMB_PROPERTY_DATASET_CONTEXT, (context) => {
69
+ this.#propertyDataSetVariantId = context?.getVariantId();
70
+ this.#setLinks();
71
+ });
72
+ this.observe(this.#documentUrlsDataResolver?.urls, (urls) => {
73
+ this.#urls = urls ?? [];
74
+ this.#setLinks();
69
75
  });
70
76
  }
71
77
  #setLinks() {
72
- const links = this.#urls.map((u) => {
73
- const culture = u.culture ?? this._defaultCulture ?? '';
74
- const url = u.url;
78
+ const links = this.#urls.map((url) => {
79
+ const culture = url.culture;
75
80
  const state = this._variantOptions?.find((variantOption) => variantOption.culture === culture)?.variant?.state;
76
- return { culture, url, state };
81
+ return {
82
+ culture,
83
+ url: url.url,
84
+ state,
85
+ };
77
86
  });
78
87
  this._links = links;
79
88
  }
@@ -92,12 +101,10 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
92
101
  if (!this._unique)
93
102
  return;
94
103
  this._loading = true;
95
- this.#urls = [];
104
+ this.#documentUrlsDataResolver?.setData([]);
96
105
  const { data } = await this.#documentUrlRepository.requestItems([this._unique]);
97
106
  if (data?.length) {
98
- const item = data[0];
99
- this.#urls = item.urls;
100
- this.#setLinks();
107
+ this.#documentUrlsDataResolver?.setData(data[0].urls);
101
108
  }
102
109
  this._loading = false;
103
110
  }
@@ -145,7 +152,7 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
145
152
  return this.#renderEmptyLink(link.culture, link.state);
146
153
  }
147
154
  return html `
148
- <a class="link-item" href=${this.#getTargetUrl(link.url)} target="_blank">
155
+ <a class="link-item" href=${ifDefined(this.#getTargetUrl(link.url))} target="_blank">
149
156
  <span>
150
157
  ${this.#renderLinkCulture(link.culture)}
151
158
  <span>${link.url}</span>
@@ -155,7 +162,9 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
155
162
  `;
156
163
  }
157
164
  #renderNoLinks() {
158
- return html ` ${this._variantOptions?.map((variantOption) => this.#renderEmptyLink(variantOption.culture, variantOption.variant?.state))}`;
165
+ return html ` ${this._variantOptions
166
+ ?.filter((variantOption) => variantOption.culture === this.#propertyDataSetVariantId?.culture)
167
+ .map((variantOption) => this.#renderEmptyLink(variantOption.culture, variantOption.variant?.state))}`;
159
168
  }
160
169
  #renderEmptyLink(culture, state) {
161
170
  return html `<div class="link-item">
@@ -170,6 +179,9 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
170
179
  return nothing;
171
180
  if (this._links.length === 1)
172
181
  return nothing;
182
+ const allLinksHaveSameCulture = this._links?.every((link) => link.culture === culture);
183
+ if (allLinksHaveSameCulture)
184
+ return nothing;
173
185
  return html `<span class="culture">${culture}</span>`;
174
186
  }
175
187
  disconnectedCallback() {
@@ -178,10 +190,6 @@ let UmbDocumentLinksWorkspaceInfoAppElement = class UmbDocumentLinksWorkspaceInf
178
190
  }
179
191
  static { this.styles = [
180
192
  css `
181
- uui-box {
182
- --uui-box-default-padding: 0;
183
- }
184
-
185
193
  #loader-container {
186
194
  display: flex;
187
195
  justify-content: center;
@@ -234,9 +242,6 @@ __decorate([
234
242
  __decorate([
235
243
  state()
236
244
  ], UmbDocumentLinksWorkspaceInfoAppElement.prototype, "_links", void 0);
237
- __decorate([
238
- state()
239
- ], UmbDocumentLinksWorkspaceInfoAppElement.prototype, "_defaultCulture", void 0);
240
245
  UmbDocumentLinksWorkspaceInfoAppElement = __decorate([
241
246
  customElement('umb-document-links-workspace-info-app')
242
247
  ], UmbDocumentLinksWorkspaceInfoAppElement);
@@ -3,6 +3,6 @@ export interface UmbDocumentUrlsModel {
3
3
  urls: Array<UmbDocumentUrlModel>;
4
4
  }
5
5
  export interface UmbDocumentUrlModel {
6
- culture?: string | null;
6
+ culture: string | null;
7
7
  url?: string;
8
8
  }
@@ -0,0 +1 @@
1
+ export type * from './repository/types.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -19,8 +19,10 @@ export class UmbDocumentUserPermissionCondition extends UmbConditionBase {
19
19
  }, 'umbUserPermissionConditionObserver');
20
20
  });
21
21
  this.consumeContext(UMB_ENTITY_CONTEXT, (context) => {
22
- if (!context)
22
+ if (!context) {
23
+ this.removeUmbControllerByAlias('umbUserPermissionEntityContextObserver');
23
24
  return;
25
+ }
24
26
  this.observe(observeMultiple([context.entityType, context.unique]), ([entityType, unique]) => {
25
27
  this.#entityType = entityType;
26
28
  this.#unique = unique;
@@ -7,9 +7,11 @@ export class UmbDocumentSaveWorkspaceAction extends UmbSaveWorkspaceAction {
7
7
  }
8
8
  async hasAdditionalOptions() {
9
9
  await this._retrieveWorkspaceContext;
10
- const variantOptions = await this.observe(this._workspaceContext.variantOptions).asPromise();
10
+ const variantOptions = await this.observe(this._workspaceContext.variantOptions)
11
+ .asPromise()
12
+ .catch(() => undefined);
11
13
  const cultureVariantOptions = variantOptions?.filter((option) => option.culture);
12
- return cultureVariantOptions?.length > 1;
14
+ return cultureVariantOptions ? cultureVariantOptions?.length > 1 : false;
13
15
  }
14
16
  _gotWorkspaceContext() {
15
17
  super._gotWorkspaceContext();
@@ -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() {
@@ -15,6 +15,7 @@ import { UmbIsTrashedEntityContext } from '@umbraco-cms/backoffice/recycle-bin';
15
15
  import { ensurePathEndsWithSlash, UmbDeprecation } from '@umbraco-cms/backoffice/utils';
16
16
  import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
17
17
  import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server';
18
+ import { observeMultiple } from '@umbraco-cms/backoffice/observable-api';
18
19
  export class UmbDocumentWorkspaceContext extends UmbContentDetailWorkspaceContextBase {
19
20
  #isTrashedContext;
20
21
  #publishingContext;
@@ -49,6 +50,7 @@ export class UmbDocumentWorkspaceContext extends UmbContentDetailWorkspaceContex
49
50
  this.consumeContext(UMB_DOCUMENT_CONFIGURATION_CONTEXT, async (context) => {
50
51
  const config = await context?.getDocumentConfiguration();
51
52
  const allowSegmentCreation = config?.allowNonExistingSegmentsCreation ?? false;
53
+ const allowEditInvariantFromNonDefault = config?.allowEditInvariantFromNonDefault ?? true;
52
54
  this._variantOptionsFilter = (variantOption) => {
53
55
  const isNotCreatedSegmentVariant = variantOption.segment && !variantOption.variant;
54
56
  // Do not allow creating a segment variant
@@ -57,6 +59,9 @@ export class UmbDocumentWorkspaceContext extends UmbContentDetailWorkspaceContex
57
59
  }
58
60
  return true;
59
61
  };
62
+ if (allowEditInvariantFromNonDefault === false) {
63
+ this.#preventEditInvariantFromNonDefault();
64
+ }
60
65
  });
61
66
  this.observe(this.contentTypeUnique, (unique) => {
62
67
  if (unique) {
@@ -318,5 +323,29 @@ export class UmbDocumentWorkspaceContext extends UmbContentDetailWorkspaceContex
318
323
  message,
319
324
  });
320
325
  }
326
+ #preventEditInvariantFromNonDefault() {
327
+ this.observe(observeMultiple([this.structure.contentTypeProperties, this.variantOptions]), ([properties, variantOptions]) => {
328
+ if (properties.length === 0)
329
+ return;
330
+ if (variantOptions.length === 0)
331
+ return;
332
+ variantOptions.forEach((variantOption) => {
333
+ // Do not add a rule for the default language. It is always permitted to edit.
334
+ if (variantOption.language.isDefault)
335
+ return;
336
+ const datasetVariantId = UmbVariantId.CreateFromPartial(variantOption);
337
+ const invariantVariantId = UmbVariantId.CreateInvariant();
338
+ const unique = `UMB_PREVENT_EDIT_INVARIANT_FROM_NON_DEFAULT_DATASET=${datasetVariantId.toString()}_PROPERTY_${invariantVariantId.toString()}`;
339
+ const rule = {
340
+ unique,
341
+ message: 'Shared properties can only be edited in the default language',
342
+ variantId: invariantVariantId,
343
+ datasetVariantId,
344
+ permitted: false,
345
+ };
346
+ this.propertyWriteGuard.addRule(rule);
347
+ });
348
+ });
349
+ }
321
350
  }
322
351
  export default UmbDocumentWorkspaceContext;
@@ -5,6 +5,7 @@ import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
5
5
  import { UmbReadOnlyStateManager } from '@umbraco-cms/backoffice/utils';
6
6
  import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
7
7
  import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
8
+ import { UmbVariantContext } from '@umbraco-cms/backoffice/variant';
8
9
  // TODO: Make a store for the App Languages.
9
10
  // TODO: Implement default language end-point, in progress at backend team, so we can avoid getting all languages.
10
11
  export class UmbAppLanguageContext extends UmbContextBase {
@@ -24,6 +25,7 @@ export class UmbAppLanguageContext extends UmbContextBase {
24
25
  #currentUserHasAccessToAllLanguages;
25
26
  #readOnlyStateIdentifier;
26
27
  #localStorageKey;
28
+ #variantContext;
27
29
  constructor(host) {
28
30
  super(host, UMB_APP_LANGUAGE_CONTEXT);
29
31
  this.#languagesPromise = new Promise((resolve) => {
@@ -45,6 +47,7 @@ export class UmbAppLanguageContext extends UmbContextBase {
45
47
  this.#currentUserHasAccessToAllLanguages = false;
46
48
  this.#readOnlyStateIdentifier = 'UMB_LANGUAGE_PERMISSION_';
47
49
  this.#localStorageKey = 'umb:appLanguage';
50
+ this.#variantContext = new UmbVariantContext(this);
48
51
  // TODO: We need to ensure this request is called every time the user logs in, but this should be done somewhere across the app and not here [JOV]
49
52
  this.consumeContext(UMB_AUTH_CONTEXT, (authContext) => {
50
53
  this.observe(authContext?.isAuthorized, (isAuthorized) => {
@@ -80,6 +83,9 @@ export class UmbAppLanguageContext extends UmbContextBase {
80
83
  }
81
84
  // set the new language
82
85
  this.#appLanguage.update(language);
86
+ // Update the variant context with the new language
87
+ this.#variantContext.setCulture(language.unique);
88
+ this.#variantContext.setAppCulture(language.unique);
83
89
  // store the new language in local storage
84
90
  localStorage.setItem(this.#localStorageKey, language?.unique);
85
91
  // set the new read-only state
@@ -98,22 +104,18 @@ export class UmbAppLanguageContext extends UmbContextBase {
98
104
  }
99
105
  }
100
106
  #initAppLanguage() {
101
- // get the selected language from local storage
102
- const uniqueFromLocalStorage = localStorage.getItem(this.#localStorageKey);
103
- if (uniqueFromLocalStorage) {
104
- const language = this.#findLanguage(uniqueFromLocalStorage);
105
- if (language) {
106
- this.setLanguage(language.unique);
107
- return;
108
- }
109
- }
110
- const defaultLanguage = this.#languages.getValue().find((x) => x.isDefault);
107
+ const defaultLanguageUnique = this.#languages.getValue().find((x) => x.isDefault)?.unique;
111
108
  // TODO: do we always have a default language?
112
109
  // do we always get the default language on the first request, or could it be on page 2?
113
110
  // in that case do we then need an endpoint to get the default language?
114
- if (!defaultLanguage?.unique)
111
+ if (!defaultLanguageUnique)
115
112
  return;
116
- this.setLanguage(defaultLanguage.unique);
113
+ this.#variantContext.setFallbackCulture(defaultLanguageUnique);
114
+ // get the selected language from local storage
115
+ const uniqueFromLocalStorage = localStorage.getItem(this.#localStorageKey);
116
+ const languageFromLocalStorage = this.#findLanguage(uniqueFromLocalStorage || '');
117
+ const languageUniqueToSet = languageFromLocalStorage ? languageFromLocalStorage.unique : defaultLanguageUnique;
118
+ this.setLanguage(languageUniqueToSet);
117
119
  }
118
120
  #findLanguage(unique) {
119
121
  return this.#languages.getValue().find((x) => x.unique === unique);
@@ -60,6 +60,9 @@ let UmbInputMarkdownElement = class UmbInputMarkdownElement extends UmbFormContr
60
60
  this.observe(umbExtensionsRegistry.byType('monacoMarkdownEditorAction'), (manifests) => {
61
61
  manifests.forEach(async (manifest) => {
62
62
  const api = await createExtensionApi(this, manifest, [this]);
63
+ if (api) {
64
+ api.manifest = manifest;
65
+ }
63
66
  const action = {
64
67
  id: manifest.alias ?? api.getUnique(),
65
68
  label: this.localize.string(manifest.meta?.label ?? api.getLabel()),
@@ -2,6 +2,7 @@ import { UMB_MEDIA_ITEM_REPOSITORY_ALIAS } from '../../constants.js';
2
2
  import { UMB_MEDIA_PICKER_MODAL } from '../../modals/index.js';
3
3
  import { UMB_MEDIA_SEARCH_PROVIDER_ALIAS } from '../../search/constants.js';
4
4
  import { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input';
5
+ import { UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/variant';
5
6
  export class UmbMediaPickerInputContext extends UmbPickerInputContext {
6
7
  constructor(host) {
7
8
  super(host, UMB_MEDIA_ITEM_REPOSITORY_ALIAS, UMB_MEDIA_PICKER_MODAL);
@@ -19,10 +20,13 @@ export class UmbMediaPickerInputContext extends UmbPickerInputContext {
19
20
  ...pickerData?.search,
20
21
  };
21
22
  }
23
+ const variantContext = await this.getContext(UMB_VARIANT_CONTEXT);
24
+ const culture = await variantContext?.getDisplayCulture();
22
25
  // pass allowedContentTypes to the search request args
23
26
  combinedPickerData.search.queryParams = {
24
27
  allowedContentTypes: args?.allowedContentTypes,
25
28
  includeTrashed: args?.includeTrashed,
29
+ culture,
26
30
  ...pickerData?.search?.queryParams,
27
31
  };
28
32
  await super.openPicker(combinedPickerData);
@@ -3,6 +3,7 @@ export * from './entity-actions/constants.js';
3
3
  export * from './entity-bulk-actions/constants.js';
4
4
  export * from './menu/constants.js';
5
5
  export * from './modals/constants.js';
6
+ export * from './paths.js';
6
7
  export * from './recycle-bin/constants.js';
7
8
  export * from './reference/constants.js';
8
9
  export * from './repository/constants.js';
@@ -10,6 +11,5 @@ export * from './search/constants.js';
10
11
  export * from './tree/constants.js';
11
12
  export * from './url/constants.js';
12
13
  export * from './workspace/constants.js';
13
- export * from './paths.js';
14
14
  export { UMB_MEDIA_VARIANT_CONTEXT } from './property-dataset-context/media-property-dataset-context.token.js';
15
15
  export { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE, UMB_MEDIA_PLACEHOLDER_ENTITY_TYPE, UMB_MEDIA_PROPERTY_VALUE_ENTITY_TYPE, } from './entity.js';
@@ -3,6 +3,7 @@ export * from './entity-actions/constants.js';
3
3
  export * from './entity-bulk-actions/constants.js';
4
4
  export * from './menu/constants.js';
5
5
  export * from './modals/constants.js';
6
+ export * from './paths.js';
6
7
  export * from './recycle-bin/constants.js';
7
8
  export * from './reference/constants.js';
8
9
  export * from './repository/constants.js';
@@ -10,6 +11,5 @@ export * from './search/constants.js';
10
11
  export * from './tree/constants.js';
11
12
  export * from './url/constants.js';
12
13
  export * from './workspace/constants.js';
13
- export * from './paths.js';
14
14
  export { UMB_MEDIA_VARIANT_CONTEXT } from './property-dataset-context/media-property-dataset-context.token.js';
15
15
  export { UMB_MEDIA_ENTITY_TYPE, UMB_MEDIA_ROOT_ENTITY_TYPE, UMB_MEDIA_PLACEHOLDER_ENTITY_TYPE, UMB_MEDIA_PROPERTY_VALUE_ENTITY_TYPE, } from './entity.js';
@@ -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
  {
@@ -13,6 +13,7 @@ import { debounce, UmbPaginationManager } from '@umbraco-cms/backoffice/utils';
13
13
  import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
14
14
  import { UMB_CONTENT_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/content';
15
15
  import { isUmbracoFolder } from '@umbraco-cms/backoffice/media-type';
16
+ import { UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/variant';
16
17
  import '@umbraco-cms/backoffice/imaging';
17
18
  const root = { name: 'Media', unique: null, entityType: UMB_MEDIA_ROOT_ENTITY_TYPE };
18
19
  // TODO: investigate how we can reuse the picker-search-field element, picker context etc.
@@ -22,6 +23,7 @@ let UmbMediaPickerModalElement = class UmbMediaPickerModalElement extends UmbMod
22
23
  #mediaSearchProvider;
23
24
  #dataType;
24
25
  #pagingMap;
26
+ #contextCulture;
25
27
  constructor() {
26
28
  super();
27
29
  this.#mediaTreeRepository = new UmbMediaTreeRepository(this);
@@ -45,6 +47,11 @@ let UmbMediaPickerModalElement = class UmbMediaPickerModalElement extends UmbMod
45
47
  this.#dataType = dataType;
46
48
  });
47
49
  });
50
+ this.consumeContext(UMB_VARIANT_CONTEXT, (context) => {
51
+ this.observe(context?.culture, (culture) => {
52
+ this.#contextCulture = culture;
53
+ });
54
+ });
48
55
  }
49
56
  async connectedCallback() {
50
57
  super.connectedCallback();
@@ -140,6 +147,7 @@ let UmbMediaPickerModalElement = class UmbMediaPickerModalElement extends UmbMod
140
147
  const { data } = await this.#mediaSearchProvider.search({
141
148
  query,
142
149
  searchFrom: this._searchFrom,
150
+ culture: this.#contextCulture,
143
151
  ...this.data?.search?.queryParams,
144
152
  });
145
153
  if (!data) {
@@ -1 +1,2 @@
1
+ export * from './global-search/constants.js';
1
2
  export declare const UMB_MEDIA_SEARCH_PROVIDER_ALIAS = "Umb.SearchProvider.Media";
@@ -1 +1,2 @@
1
+ export * from './global-search/constants.js';
1
2
  export const UMB_MEDIA_SEARCH_PROVIDER_ALIAS = 'Umb.SearchProvider.Media';
@@ -0,0 +1 @@
1
+ export declare const UMB_MEDIA_GLOBAL_SEARCH_ALIAS = "Umb.GlobalSearch.Media";
@@ -0,0 +1 @@
1
+ export const UMB_MEDIA_GLOBAL_SEARCH_ALIAS = 'Umb.GlobalSearch.Media';
@@ -0,0 +1 @@
1
+ export declare const manifests: Array<UmbExtensionManifest>;
@@ -0,0 +1,23 @@
1
+ import { UMB_MEDIA_SECTION_ALIAS } from '../../../media-section/constants.js';
2
+ import { UMB_MEDIA_SEARCH_PROVIDER_ALIAS } from '../constants.js';
3
+ import { UMB_MEDIA_GLOBAL_SEARCH_ALIAS } from './constants.js';
4
+ import { UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS } from '@umbraco-cms/backoffice/section';
5
+ export const manifests = [
6
+ {
7
+ name: 'Media Global Search',
8
+ alias: UMB_MEDIA_GLOBAL_SEARCH_ALIAS,
9
+ type: 'globalSearch',
10
+ weight: 700,
11
+ api: () => import('./media-global-search.js'),
12
+ meta: {
13
+ label: 'Media',
14
+ searchProviderAlias: UMB_MEDIA_SEARCH_PROVIDER_ALIAS,
15
+ },
16
+ conditions: [
17
+ {
18
+ alias: UMB_SECTION_USER_PERMISSION_CONDITION_ALIAS,
19
+ match: UMB_MEDIA_SECTION_ALIAS,
20
+ },
21
+ ],
22
+ },
23
+ ];
@@ -0,0 +1,15 @@
1
+ import type { UmbMediaSearchProvider } from '../media.search-provider.js';
2
+ import { UmbGlobalSearchBase, type UmbGlobalSearchApi, type UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
3
+ export declare class UmbMediaGlobalSearch extends UmbGlobalSearchBase<UmbMediaSearchProvider> implements UmbGlobalSearchApi {
4
+ search(args: UmbSearchRequestArgs): Promise<{
5
+ data: {
6
+ items: import("../types.js").UmbMediaSearchItemModel[];
7
+ total: number;
8
+ };
9
+ error?: undefined;
10
+ } | {
11
+ error: Error | import("@umbraco-cms/backoffice/resources").UmbError | import("@umbraco-cms/backoffice/resources").UmbApiError | import("@umbraco-cms/backoffice/resources").UmbCancelError | undefined;
12
+ data?: undefined;
13
+ }>;
14
+ }
15
+ export { UmbMediaGlobalSearch as api };
@@ -0,0 +1,15 @@
1
+ import { UmbGlobalSearchBase, } from '@umbraco-cms/backoffice/search';
2
+ import { UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/variant';
3
+ export class UmbMediaGlobalSearch extends UmbGlobalSearchBase {
4
+ async search(args) {
5
+ await this._init;
6
+ if (!this._searchProvider) {
7
+ throw new Error('Search provider is not available');
8
+ }
9
+ // TODO: change this to consume so we don't emit context events for every search change [MR]
10
+ const variantContext = await this.getContext(UMB_VARIANT_CONTEXT);
11
+ const displayCulture = await variantContext?.getDisplayCulture();
12
+ return await this._searchProvider.search({ culture: displayCulture, query: args.query });
13
+ }
14
+ }
15
+ export { UmbMediaGlobalSearch as api };
@@ -1,5 +1,6 @@
1
1
  import { UMB_MEDIA_ENTITY_TYPE } from '../entity.js';
2
2
  import { UMB_MEDIA_SEARCH_PROVIDER_ALIAS } from './constants.js';
3
+ import { manifests as globalSearchManifests } from './global-search/manifests.js';
3
4
  export const manifests = [
4
5
  {
5
6
  name: 'Media Search Provider',
@@ -18,4 +19,5 @@ export const manifests = [
18
19
  element: () => import('./media-search-result-item.element.js'),
19
20
  forEntityTypes: [UMB_MEDIA_ENTITY_TYPE],
20
21
  },
22
+ ...globalSearchManifests,
21
23
  ];