Loading...
Loading...
Implement package views in Umbraco backoffice using official docs
npx skill4agent add umbraco/umbraco-cms-backoffice-skills umbraco-package-viewumbraco-umbraco-elementumbraco-modalsimport type { ManifestPackageView } from '@umbraco-cms/backoffice/packages';
export const manifests: Array<ManifestPackageView> = [
{
type: 'packageView',
alias: 'My.PackageView',
name: 'My Package View',
element: () => import('./my-package-view.element.js'),
meta: {
packageName: 'My Package',
},
},
];import { html, customElement } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
@customElement('my-package-view')
export class MyPackageViewElement extends UmbModalBaseElement {
override render() {
return html`
<umb-body-layout headline="My Package">
<uui-box>
<h2>Package Configuration</h2>
<p>Configure your package settings here.</p>
<uui-form>
<uui-form-layout-item>
<uui-label slot="label">Setting 1</uui-label>
<uui-input></uui-input>
</uui-form-layout-item>
</uui-form>
</uui-box>
<div slot="actions">
<uui-button @click=${this.#onClose} label="Close"></uui-button>
<uui-button look="primary" @click=${this.#onSave} label="Save"></uui-button>
</div>
</umb-body-layout>
`;
}
#onClose() {
this.modalContext?.reject();
}
#onSave() {
// Save logic here
this.modalContext?.submit();
}
}
export default MyPackageViewElement;const template = document.createElement('template');
template.innerHTML = `
<umb-body-layout>
<h1 slot="header">My Package</h1>
<uui-box>
<p>Package information and settings</p>
</uui-box>
<uui-action-bar slot="footer-info">
<uui-button look="primary" type="button">Close</uui-button>
</uui-action-bar>
</umb-body-layout>
`;
export default class MyPackageViewElement extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
this.shadowRoot.querySelector('uui-button').addEventListener('click', this.onClick.bind(this));
}
onClick() {
this.modalContext.close();
}
}
customElements.define('my-package-view', MyPackageViewElement);interface ManifestPackageView extends ManifestElement {
type: 'packageView';
meta: MetaPackageView;
}
interface MetaPackageView {
packageName: string; // Must match the package name in umbraco-package.json
}meta.packageNameumbraco-package.json{
"$schema": "../../umbraco-package-schema.json",
"name": "My Package",
"version": "1.0.0",
"extensions": [
{
"type": "packageView",
"alias": "My.PackageView",
"name": "My Package View",
"element": "/App_Plugins/MyPackage/my-package-view.js",
"meta": {
"packageName": "My Package"
}
}
]
}