mcpField
U
umbraco-preview-app-provider

umbraco-preview-app-provider

github.com/umbraco開発27385 回インストール6 週間前に更新
リポジトリ

umbraco-preview-app-provider について

Umbraco のコンテンツプレビュー メニューにカスタムアプリを追加するためのスキルです。プロバイダーマニフェストと UI 要素を定義し、プレビュー関連機能を実装する手順を案内します。

主な機能

  1. 01プレビューメニューへのアプリ追加
  2. 02プレビューアプリのマニフェスト定義
  3. 03カスタム UI 要素の実装
  4. 04プレビューコンテキストへの配慮

活用シーン

  1. 01プレビューでのデバイスシミュレーション
  2. 02プレビューでのアクセシビリティ確認
  3. 03コンテンツプレビューでの SEO 分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-preview-app-provider

インストール後、Claude Code で/umbraco-preview-app-providerを入力して読み込まれたか確認します。

詳細

Umbraco プレビューアプリプロバイダー

これは何ですか?

プレビューアプリプロバイダーは、Umbraco のプレビューウィンドウメニューにカスタム項目を追加します。コンテンツエディターがコンテンツをプレビューすると、これらのアプリがプレビューメニューに表示され、デバイスシミュレーション、アクセシビリティチェック、SEO 分析、その他のプレビュー関連ツールなどの追加機能を利用できるようになります。

ドキュメント

実装する前に、常に最新のドキュメントを取得してください:

関連する Foundation スキル

  • Umbraco Element: UI コンポーネントを作成するための基底クラス

    • 参照スキル: umbraco-umbraco-element
  • Context API: プレビュー状態にアクセスする場合

    • 参照スキル: umbraco-context-api

ワークフロー

  1. ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
  2. 質問する - どのようなプレビュー機能が必要ですか?どのような UI ですか?
  3. ファイルを生成 - 最新のドキュメントに基づいてマニフェスト + 要素を作成します
  4. 説明 - 作成された内容とテスト方法を示します

最小限の例

マニフェスト (manifests.ts)
import type { ManifestPreviewAppProvider } from '@umbraco-cms/backoffice/extension-registry';

export const manifests: Array<ManifestPreviewAppProvider> = [
  {
    type: 'previewApp',
    alias: 'My.PreviewApp',
    name: 'My Preview App',
    element: () => import('./my-preview-app.element.js'),
  },
];
要素の実装 (my-preview-app.element.ts)
import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';

@customElement('my-preview-app')
export class MyPreviewAppElement extends UmbLitElement {
  @state()
  private _isActive = false;

  override render() {
    return html`
      <uui-box headline="My Preview Tool">
        <p>Custom preview functionality</p>

        <uui-button
          look=${this._isActive ? 'primary' : 'default'}
          @click=${this.#toggle}
        >
          ${this._isActive ? 'Disable' : 'Enable'}
        </uui-button>
      </uui-box>
    `;
  }

  #toggle() {
    this._isActive = !this._isActive;
    // Apply your preview functionality
    this.#applyPreviewMode(this._isActive);
  }

  #applyPreviewMode(active: boolean) {
    // Access the preview iframe or apply styles
    const previewFrame = document.querySelector('iframe.preview-frame');
    if (previewFrame && active) {
      // Apply custom preview mode
    }
  }
}

export default MyPreviewAppElement;
デバイスシミュレーターの例
import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';

@customElement('device-preview-app')
export class DevicePreviewAppElement extends UmbLitElement {
  @state()
  private _selectedDevice = 'desktop';

  private _devices = [
    { name: 'desktop', width: '100%', label: 'Desktop' },
    { name: 'tablet', width: '768px', label: 'Tablet' },
    { name: 'mobile', width: '375px', label: 'Mobile' },
  ];

  override render() {
    return html`
      <uui-box headline="Device Preview">
        ${this._devices.map(
          (device) => html`
            <uui-button
              look=${this._selectedDevice === device.name ? 'primary' : 'default'}
              @click=${() => this.#selectDevice(device)}
            >
              ${device.label}
            </uui-button>
          `
        )}
      </uui-box>
    `;
  }

  #selectDevice(device: { name: string; width: string }) {
    this._selectedDevice = device.name;
    // Dispatch event to resize preview
    this.dispatchEvent(
      new CustomEvent('preview-resize', {
        detail: { width: device.width },
        bubbles: true,
        composed: true,
      })
    );
  }
}

export default DevicePreviewAppElement;

インターフェースリファレンス

interface ManifestPreviewAppProvider extends ManifestElement {
  type: 'previewApp';
}

ベストプラクティス

  • メニューに表示されるため、UI はコンパクトに保つ
  • 明確な有効/無効状態を提供する
  • プレビューコンテキストと利用可能な iframe を考慮する
  • 素早く認識できる適切なアイコンを使用する

以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。

コメント