Merge remote-tracking branch 'origin/main' into feature/global-search

This commit is contained in:
Jesper Møller Jensen
2023-02-23 16:47:50 +13:00
44 changed files with 177 additions and 126 deletions

View File

@@ -11,21 +11,15 @@ import { html } from 'lit-html';
import { initialize, mswDecorator } from 'msw-storybook-addon';
import { setCustomElements } from '@storybook/web-components';
import {
UMB_DATA_TYPE_STORE_CONTEXT_TOKEN,
UmbDataTypeStore,
} from '../src/backoffice/settings/data-types/repository/data-type.store.ts';
import {
UMB_DOCUMENT_TYPE_STORE_CONTEXT_TOKEN,
UmbDocumentTypeStore,
} from '../src/backoffice/documents/document-types/repository/document-type.store.ts';
import { UmbDataTypeStore } from '../src/backoffice/settings/data-types/repository/data-type.store.ts';
import { UmbDocumentTypeStore } from '../src/backoffice/documents/document-types/repository/document-type.store.ts';
import customElementManifests from '../custom-elements.json';
import { UmbIconStore } from '../libs/store/icon/icon.store';
import { onUnhandledRequest } from '../src/core/mocks/browser';
import { handlers } from '../src/core/mocks/browser-handlers';
import { LitElement } from 'lit';
import { UmbModalService } from '../src/core/modal';
import { UMB_MODAL_SERVICE_CONTEXT_TOKEN, UmbModalService } from '../src/core/modal';
// TODO: Fix storybook manifest registrations.
@@ -71,7 +65,10 @@ const documentTypeStoreProvider = (story) => html`
`;
const modalServiceProvider = (story) => html`
<umb-context-provider style="display: block; padding: 32px;" key="umbModalService" .value=${new UmbModalService()}>
<umb-context-provider
style="display: block; padding: 32px;"
key="${UMB_MODAL_SERVICE_CONTEXT_TOKEN}"
.value=${new UmbModalService()}>
${story()}
<umb-backoffice-modal-container></umb-backoffice-modal-container>
</umb-context-provider>
@@ -94,7 +91,7 @@ export const parameters = {
storySort: {
method: 'alphabetical',
includeNames: true,
order: ['Guides', ['Getting started'], '*']
order: ['Guides', ['Getting started'], '*'],
},
},
actions: { argTypesRegex: '^on.*' },

View File

@@ -0,0 +1,4 @@
import config from '../../utils/rollup.config.js';
export default {
...config,
};

View File

@@ -11,6 +11,7 @@ import type { ManifestPropertyAction } from './property-action.models';
import type { ManifestPropertyEditorUI, ManifestPropertyEditorModel } from './property-editor.models';
import type { ManifestSection } from './section.models';
import type { ManifestSectionView } from './section-view.models';
import type { ManifestSidebarMenu } from './sidebar-menu.models';
import type { ManifestSidebarMenuItem } from './sidebar-menu-item.models';
import type { ManifestTheme } from './theme.models';
import type { ManifestTree } from './tree.models';
@@ -36,6 +37,7 @@ export * from './property-action.models';
export * from './property-editor.models';
export * from './section-view.models';
export * from './section.models';
export * from './sidebar-menu.models';
export * from './sidebar-menu-item.models';
export * from './theme.models';
export * from './tree-item-action.models';
@@ -65,6 +67,7 @@ export type ManifestTypes =
| ManifestRepository
| ManifestSection
| ManifestSectionView
| ManifestSidebarMenu
| ManifestSidebarMenuItem
| ManifestTheme
| ManifestTree

View File

@@ -8,6 +8,6 @@ export interface ManifestSidebarMenuItem extends ManifestElement {
export interface MetaSidebarMenuItem {
label: string;
icon: string;
sections: Array<string>;
sidebarMenus: Array<string>;
entityType?: string;
}

View File

@@ -0,0 +1,11 @@
import type { ManifestElement } from './models';
export interface ManifestSidebarMenu extends ManifestElement {
type: 'sidebarMenu';
meta: MetaSidebarMenu;
}
export interface MetaSidebarMenu {
label: string;
sections: Array<string>;
}

View File

@@ -8,7 +8,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Document Blueprints',
icon: 'umb:blueprint',
sections: ['Umb.Section.Settings'],
sidebarMenus: ['Umb.SidebarMenu.Settings'],
entityType: 'document-blueprint-root',
},
};

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Document Types',
icon: 'umb:folder',
sections: ['Umb.Section.Settings'],
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -2,7 +2,7 @@ import { css, html, LitElement, nothing } from 'lit';
import { ifDefined } from 'lit-html/directives/if-defined.js';
import { customElement, property, state } from 'lit/decorators.js';
import type { UmbTableColumn, UmbTableItem } from '../../../../../../shared/components/table';
import { UmbExecutedEvent } from 'src/core/events';
import { UmbExecutedEvent } from '@umbraco-cms/events';
// TODO: this could be done more generic, but for now we just need it for the document table
@customElement('umb-document-table-actions-column-layout')

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Documents',
icon: 'umb:folder',
sections: ['Umb.Section.Content'],
sidebarMenus: ['Umb.SidebarMenu.Content'],
},
};

View File

@@ -1,4 +1,4 @@
import type { ManifestSection } from '@umbraco-cms/models';
import type { ManifestSection, ManifestSidebarMenu } from '@umbraco-cms/models';
const sectionAlias = 'Umb.Section.Content';
@@ -13,4 +13,15 @@ const section: ManifestSection = {
},
};
export const manifests = [section];
const sidebarMenu: ManifestSidebarMenu = {
type: 'sidebarMenu',
alias: 'Umb.SidebarMenu.Content',
name: 'Content Sidebar Menu',
weight: 100,
meta: {
label: 'Content',
sections: [sectionAlias],
},
};
export const manifests = [section, sidebarMenu];

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Media Types',
icon: 'umb:folder',
sections: ['Umb.Section.Settings'],
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Media',
icon: 'umb:folder',
sections: ['Umb.Section.Media'],
sidebarMenus: ['Umb.SidebarMenu.Media'],
},
};

View File

@@ -1,4 +1,4 @@
import type { ManifestDashboardCollection, ManifestSection } from '@umbraco-cms/models';
import type { ManifestDashboardCollection, ManifestSection, ManifestSidebarMenu } from '@umbraco-cms/models';
const sectionAlias = 'Umb.Section.Media';
@@ -29,4 +29,15 @@ const dashboards: Array<ManifestDashboardCollection> = [
},
];
export const manifests = [section, ...dashboards];
const sidebarMenu: ManifestSidebarMenu = {
type: 'sidebarMenu',
alias: 'Umb.SidebarMenu.Media',
name: 'Media Sidebar Menu',
weight: 100,
meta: {
label: 'Media',
sections: [sectionAlias],
},
};
export const manifests = [section, sidebarMenu, ...dashboards];

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Member Groups',
icon: 'umb:folder',
sections: ['Umb.Section.Members'],
sidebarMenus: ['Umb.SidebarMenu.Members'],
},
};

View File

@@ -9,7 +9,7 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Member Types',
icon: 'umb:folder',
sections: ['Umb.Section.Settings'],
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -9,8 +9,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Members',
icon: 'umb:folder',
sections: ['Umb.Section.Members'],
entityType: 'member',
sidebarMenus: ['Umb.SidebarMenu.Members'],
},
};

View File

@@ -1,4 +1,4 @@
import type { ManifestDashboard, ManifestSection } from '@umbraco-cms/models';
import type { ManifestDashboard, ManifestSection, ManifestSidebarMenu } from '@umbraco-cms/models';
const sectionAlias = 'Umb.Section.Members';
@@ -28,4 +28,15 @@ const dashboards: Array<ManifestDashboard> = [
},
];
export const manifests = [section, ...dashboards];
const sidebarMenu: ManifestSidebarMenu = {
type: 'sidebarMenu',
alias: 'Umb.SidebarMenu.Members',
name: 'Members Sidebar Menu',
weight: 100,
meta: {
label: 'Members',
sections: [sectionAlias],
},
};
export const manifests = [section, sidebarMenu, ...dashboards];

View File

@@ -9,8 +9,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Data Types',
icon: 'umb:folder',
sections: ['Umb.Section.Settings'],
entityType: 'data-type',
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -8,8 +8,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Extensions',
icon: 'umb:wand',
sections: ['Umb.Section.Settings'],
entityType: 'extension-root',
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -8,8 +8,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Languages',
icon: 'umb:globe',
sections: ['Umb.Section.Settings'],
entityType: 'language-root',
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -8,8 +8,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Log Viewer',
icon: 'umb:box-alt',
sections: ['Umb.Section.Settings'],
entityType: 'logviewer-root',
sidebarMenus: ['Umb.SidebarMenu.Settings'],
},
};

View File

@@ -1,4 +1,4 @@
import type { ManifestSection } from '@umbraco-cms/models';
import type { ManifestSection, ManifestSidebarMenu } from '@umbraco-cms/models';
const sectionAlias = 'Umb.Section.Settings';
@@ -13,4 +13,15 @@ const section: ManifestSection = {
},
};
export const manifests = [section];
const sidebarMenu: ManifestSidebarMenu = {
type: 'sidebarMenu',
alias: 'Umb.SidebarMenu.Settings',
name: 'Settings Sidebar Menu',
weight: 100,
meta: {
label: 'Settings',
sections: [sectionAlias],
},
};
export const manifests = [section, sidebarMenu];

View File

@@ -2,11 +2,11 @@ import { UUITextStyles } from '@umbraco-ui/uui-css';
import { css, html, nothing } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import { map } from 'rxjs';
import { UmbExecutedEvent } from '../../../core/events';
import { UmbCollectionContext, UMB_COLLECTION_CONTEXT_TOKEN } from './collection.context';
import type { ManifestEntityBulkAction, MediaDetails } from '@umbraco-cms/models';
import { UmbLitElement } from '@umbraco-cms/element';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api';
import { UmbExecutedEvent } from '@umbraco-cms/events';
import '../entity-bulk-actions/entity-bulk-action.element';

View File

@@ -1,43 +1,32 @@
import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import { html } from 'lit';
import { customElement, state } from 'lit/decorators.js';
import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section.context';
import { ManifestSidebarMenuItem } from '@umbraco-cms/extensions-registry';
import { css, html } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import { ManifestSidebarMenu, ManifestSidebarMenuItem } from '@umbraco-cms/extensions-registry';
import { UmbLitElement } from '@umbraco-cms/element';
import './sidebar-menu-item.element.ts';
@customElement('umb-section-sidebar-menu')
export class UmbSectionSidebarMenuElement extends UmbLitElement {
static styles = [UUITextStyles];
static styles = [
UUITextStyles,
css`
h3 {
padding: var(--uui-size-4) var(--uui-size-8);
}
`,
];
@state()
private _currentSectionAlias?: string;
private _sectionContext?: UmbSectionContext;
constructor() {
super();
this.consumeContext(UMB_SECTION_CONTEXT_TOKEN, (instance) => {
this._sectionContext = instance;
this._observeCurrentSection();
});
}
private _observeCurrentSection() {
if (!this._sectionContext) return;
this.observe(this._sectionContext.alias, (alias) => {
this._currentSectionAlias = alias;
});
}
@property()
manifest?: ManifestSidebarMenu;
render() {
return html` <umb-extension-slot
type="sidebarMenuItem"
.filter=${(items: ManifestSidebarMenuItem) => items.meta.sections.includes(this._currentSectionAlias || '')}
default-element="umb-sidebar-menu-item"></umb-extension-slot>`;
// TODO: link to dashboards when clicking on the menu item header
return html` <h3>${this.manifest?.meta.label}</h3>
<umb-extension-slot
type="sidebarMenuItem"
.filter=${(items: ManifestSidebarMenuItem) => items.meta.sidebarMenus.includes(this.manifest!.alias)}
default-element="umb-sidebar-menu-item"></umb-extension-slot>`;
}
}

View File

@@ -21,11 +21,7 @@ export class UmbSectionSidebarElement extends UmbLitElement {
font-weight: 500;
display: flex;
flex-direction: column;
z-index:10;
}
h3 {
padding: var(--uui-size-4) var(--uui-size-8);
z-index: 10;
}
`,
];
@@ -65,10 +61,6 @@ export class UmbSectionSidebarElement extends UmbLitElement {
return html`
<umb-section-sidebar-context-menu>
<uui-scroll-container>
<a href="${`section/${this._sectionPathname}`}">
<h3>${this._sectionLabel}</h3>
</a>
<slot></slot>
</uui-scroll-container>
</umb-section-sidebar-context-menu>

View File

@@ -5,13 +5,13 @@ import { map } from 'rxjs';
import { IRoutingInfo } from 'router-slot';
import type { UmbWorkspaceEntityElement } from '../workspace/workspace-entity-element.interface';
import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from './section.context';
import type { ManifestSectionView, ManifestWorkspace, ManifestSidebarMenuItem } from '@umbraco-cms/models';
import type { ManifestSectionView, ManifestWorkspace, ManifestSidebarMenu } from '@umbraco-cms/models';
import { umbExtensionsRegistry, createExtensionElement } from '@umbraco-cms/extensions-api';
import { UmbLitElement } from '@umbraco-cms/element';
import { UmbRouterSlotChangeEvent } from '@umbraco-cms/router';
import './section-sidebar-menu/section-sidebar-menu.element.ts';
import './section-views/section-views.element.ts';
import { UmbRouterSlotChangeEvent } from '@umbraco-cms/router';
@customElement('umb-section')
export class UmbSectionElement extends UmbLitElement {
@@ -31,12 +31,11 @@ export class UmbSectionElement extends UmbLitElement {
`,
];
// TODO: make this code reusable across sections
@state()
private _routes: Array<any> = [];
@state()
private _menuItems?: Array<ManifestSidebarMenuItem>;
private _menus?: Array<ManifestSidebarMenu>;
private _workspaces?: Array<ManifestWorkspace>;
@@ -62,7 +61,7 @@ export class UmbSectionElement extends UmbLitElement {
if (!this._sectionContext) return;
this.observe(this._sectionContext?.alias, (alias) => {
this._observeSidebarMenuItem(alias);
this._observeSidebarMenus(alias);
});
this.observe(umbExtensionsRegistry.extensionsOfType('workspace'), (workspaceExtensions) => {
@@ -71,25 +70,24 @@ export class UmbSectionElement extends UmbLitElement {
});
}
private _observeSidebarMenuItem(sectionAlias?: string) {
private _observeSidebarMenus(sectionAlias?: string) {
if (sectionAlias) {
this.observe(
umbExtensionsRegistry
?.extensionsOfType('sidebarMenuItem')
?.extensionsOfType('sidebarMenu')
.pipe(map((manifests) => manifests.filter((manifest) => manifest.meta.sections.includes(sectionAlias)))),
(manifests) => {
this._menuItems = manifests;
this._menus = manifests;
this._createMenuRoutes();
}
);
} else {
this._menuItems = undefined;
this._menus = undefined;
this._createMenuRoutes();
}
}
private _createMenuRoutes() {
// TODO: find a way to make this reuseable across:
const workspaceRoutes = this._workspaces?.map((workspace: ManifestWorkspace) => {
return [
@@ -140,35 +138,30 @@ export class UmbSectionElement extends UmbLitElement {
];
}
private _observeSection() {
if (!this._sectionContext) return;
this.observe(
this._sectionContext.alias, (alias) => {
this._sectionAlias = alias;
this._observeViews();
}
);
this.observe(this._sectionContext.alias, (alias) => {
this._sectionAlias = alias;
this._observeViews();
});
}
private _observeViews() {
this.observe(umbExtensionsRegistry?.extensionsOfType('sectionView'), (views) => {
const sectionViews = views.filter((view) => {
return this._sectionAlias ? view.meta.sections.includes(this._sectionAlias) : false
}).sort((a, b) => b.meta.weight - a.meta.weight);
if(sectionViews.length > 0) {
this._views = sectionViews;
this._createViewRoutes();
}
const sectionViews = views
.filter((view) => {
return this._sectionAlias ? view.meta.sections.includes(this._sectionAlias) : false;
})
.sort((a, b) => b.meta.weight - a.meta.weight);
if (sectionViews.length > 0) {
this._views = sectionViews;
this._createViewRoutes();
}
);
});
}
private _createViewRoutes() {
this._routes =
this._views?.map((view) => {
return {
@@ -190,21 +183,27 @@ export class UmbSectionElement extends UmbLitElement {
const view = this._views?.find((view) => 'view/' + view.meta.pathname === currentPath);
if (!view) return;
this._sectionContext?.setActiveView(view);
}
};
render() {
return html`
${this._menuItems && this._menuItems.length > 0
${this._menus && this._menus.length > 0
? html`
<umb-section-sidebar>
<umb-section-sidebar-menu></umb-section-sidebar-menu>
<umb-extension-slot
type="sidebarMenu"
.filter=${(items: ManifestSidebarMenu) => items.meta.sections.includes(this._sectionAlias || '')}
default-element="umb-section-sidebar-menu"></umb-extension-slot>
</umb-section-sidebar>
`
: nothing}
<umb-section-main>
${this._views && this._views.length > 0 ? html`<umb-section-views></umb-section-views>` : nothing}
${this._routes && this._routes.length > 0
? html`<umb-router-slot id="router-slot" .routes="${this._routes}" @change=${this._onRouteChange}></umb-router-slot>`
? html`<umb-router-slot
id="router-slot"
.routes="${this._routes}"
@change=${this._onRouteChange}></umb-router-slot>`
: nothing}
<slot></slot>
</umb-section-main>

View File

@@ -3,7 +3,7 @@ import { css, html } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import { ifDefined } from 'lit-html/directives/if-defined.js';
import { UmbLitElement } from '@umbraco-cms/element';
import { UmbExecutedEvent } from 'src/core/events';
import { UmbExecutedEvent } from '@umbraco-cms/events';
@customElement('umb-workspace-action-menu')
export class UmbWorkspaceActionMenuElement extends UmbLitElement {

View File

@@ -2,7 +2,7 @@ import { css, html } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import { UUITextStyles } from '@umbraco-ui/uui-css/lib';
import type { UUIButtonState } from '@umbraco-ui/uui';
import { UmbExecutedEvent } from '../../../../../core/events';
import { UmbExecutedEvent } from '@umbraco-cms/events';
import { UmbLitElement } from '@umbraco-cms/element';
import type { ManifestWorkspaceAction } from '@umbraco-cms/models';

View File

@@ -2,7 +2,7 @@ import { html, nothing } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import { ifDefined } from 'lit/directives/if-defined.js';
import { UUIMenuItemEvent } from '@umbraco-ui/uui';
import { UmbExecutedEvent } from '../../../core/events';
import { UmbExecutedEvent } from '@umbraco-cms/events';
import { UmbLitElement } from '@umbraco-cms/element';
import { ManifestEntityAction } from 'libs/extensions-registry/entity-action.models';

View File

@@ -1,7 +1,7 @@
import { html } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import { ifDefined } from 'lit-html/directives/if-defined.js';
import { UmbExecutedEvent } from '../../../core/events';
import { UmbExecutedEvent } from '@umbraco-cms/events';
import { UmbLitElement } from '@umbraco-cms/element';
import { ManifestEntityBulkAction } from '@umbraco-cms/extensions-registry';

View File

@@ -4,7 +4,7 @@ import { customElement, property, query } from 'lit/decorators.js';
import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins';
import { UUIInputEvent } from '@umbraco-ui/uui-input';
import { UUIInputElement } from '@umbraco-ui/uui';
import { UmbChangeEvent, UmbInputEvent, UmbDeleteEvent } from '../../../../../../core/events';
import { UmbChangeEvent, UmbInputEvent, UmbDeleteEvent } from '@umbraco-cms/events';
import { UmbModalService, UMB_MODAL_SERVICE_CONTEXT_TOKEN } from '../../../../../../core/modal';
import { UmbLitElement } from '@umbraco-cms/element';

View File

@@ -4,10 +4,9 @@ import { customElement, property, state } from 'lit/decorators.js';
import { repeat } from 'lit/directives/repeat.js';
import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins';
import UmbInputMultipleTextStringItemElement from '../input-multiple-text-string-item/input-multiple-text-string-item.element';
import { UmbInputEvent, UmbChangeEvent, UmbDeleteEvent } from '../../../../../../core/events';
import { UmbInputEvent, UmbChangeEvent, UmbDeleteEvent } from '@umbraco-cms/events';
import { UmbLitElement } from '@umbraco-cms/element';
export type MultipleTextStringValue = Array<MultipleTextStringValueItem>;
export interface MultipleTextStringValueItem {

View File

@@ -1,14 +1,13 @@
import { html } from 'lit';
import { customElement, property, state } from 'lit/decorators.js';
import { ifDefined } from 'lit-html/directives/if-defined.js';
import { UmbChangeEvent } from '@umbraco-cms/events';
import { UmbPropertyValueChangeEvent } from '../..';
import UmbInputMultipleTextStringElement, {
MultipleTextStringValue,
} from './input-multiple-text-string/input-multiple-text-string.element';
import { UmbChangeEvent } from 'src/core/events/change.event';
import { UmbLitElement } from '@umbraco-cms/element';
export type MultipleTextStringConfigData = Array<{
alias: 'minNumber' | 'maxNumber';
value: number;

View File

@@ -1,3 +1,4 @@
import { manifests as menuManifests } from './manifests';
import { manifests as templateManifests } from './templates/manifests';
import { umbExtensionsRegistry } from '@umbraco-cms/extensions-api';
import { ManifestTypes } from '@umbraco-cms/extensions-registry';
@@ -9,4 +10,4 @@ const registerExtensions = (manifests: Array<ManifestTypes>) => {
});
};
registerExtensions([...templateManifests]);
registerExtensions([...menuManifests, ...templateManifests]);

View File

@@ -0,0 +1,14 @@
import type { ManifestSidebarMenu } from '@umbraco-cms/models';
const sidebarMenu: ManifestSidebarMenu = {
type: 'sidebarMenu',
alias: 'Umb.SidebarMenu.Templating',
name: 'Settings Sidebar Menu',
weight: 100,
meta: {
label: 'Templating',
sections: ['Umb.Section.Settings'],
},
};
export const manifests = [sidebarMenu];

View File

@@ -9,8 +9,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Templates',
icon: 'umb:folder',
sections: ['Umb.Section.Settings'],
entityType: 'template',
sidebarMenus: ['Umb.SidebarMenu.Templating'],
},
};

View File

@@ -9,8 +9,8 @@ const sidebarMenuItem: ManifestSidebarMenuItem = {
meta: {
label: 'Dictionary',
icon: 'umb:book-alt',
sections: ['Umb.Section.Translation'],
entityType: 'dictionary-item'
entityType: 'dictionary-item',
sidebarMenus: ['Umb.SidebarMenu.Translation'],
},
};

View File

@@ -31,6 +31,7 @@
"@umbraco-cms/extensions-registry": ["libs/extensions-registry"],
"@umbraco-cms/notification": ["libs/notification"],
"@umbraco-cms/observable-api": ["libs/observable-api"],
"@umbraco-cms/events": ["libs/events"],
"@umbraco-cms/utils": ["libs/utils"],
"@umbraco-cms/router": ["libs/router"],
"@umbraco-cms/test-utils": ["libs/test-utils"],

View File

@@ -11,7 +11,7 @@ export default {
nodeResolve: true,
files: ['src/**/*.test.ts', 'libs/**/*.test.ts'],
mimeTypes: {
'./public/**/*': 'js'
'./public/**/*': 'js',
},
plugins: [
{
@@ -28,7 +28,7 @@ export default {
if (context.path.startsWith('/umbraco/management/api')) {
return '';
}
}
},
},
// Serve images from the public folder as JS modules
url({ include: ['public/**/*'] }),
@@ -48,21 +48,19 @@ export default {
'@umbraco-cms/extensions-registry': './libs/extensions-registry/index.ts',
'@umbraco-cms/notification': './libs/notification/index.ts',
'@umbraco-cms/observable-api': './libs/observable-api/index.ts',
'@umbraco-cms/events': './libs/events/index.ts',
'@umbraco-cms/store': './libs/store/index.ts',
'@umbraco-cms/utils': './libs/utils/index.ts',
'@umbraco-cms/test-utils': './libs/test-utils/index.ts',
'@umbraco-cms/resources': './libs/resources/index.ts',
"@umbraco-cms/repository": './libs/repository',
'@umbraco-cms/router': './libs/router/index.ts'
'@umbraco-cms/repository': './libs/repository',
'@umbraco-cms/router': './libs/router/index.ts',
},
},
},
}),
],
browsers: [
playwrightLauncher({ product: 'firefox' }),
playwrightLauncher({ product: 'webkit' }),
],
browsers: [playwrightLauncher({ product: 'firefox' }), playwrightLauncher({ product: 'webkit' })],
coverageConfig: {
reporters: ['lcovonly', 'text-summary'],
},