umbraco-ufm-component

安装量: 57
排名: #12940

安装

npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-ufm-component

Umbraco UFM Component What is it? UFM (Umbraco Flavored Markdown) Components extend Umbraco's markdown rendering with custom syntax. They allow you to create custom markers that transform into HTML when rendered. This is useful for creating dynamic content like localized strings, property values, or custom UI elements within markdown text. UFM components use special syntax markers (like

for localization or

for values) that get processed into HTML.
Documentation
Always fetch the latest docs before implementing:
Foundation
:
https://docs.umbraco.com/umbraco-cms/customizing/foundation
Extension Registry
:
https://docs.umbraco.com/umbraco-cms/customizing/extending-overview/extension-registry
UFM
:
https://docs.umbraco.com/umbraco-cms/reference/umbraco-flavored-markdown
Reference Example
The Umbraco source includes a working example:
Location
:
/Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/ufm-custom-component/
This example demonstrates a custom UFM component with marker syntax. Study this for production patterns.
Related Foundation Skills
Localization
When creating localized UFM components
Reference skill:
umbraco-localization
Context API
When accessing data for UFM rendering Reference skill: umbraco-context-api Workflow Fetch docs - Use WebFetch on the URLs above Ask questions - What marker? What output? Dynamic data? Generate files - Create manifest + component based on latest docs Explain - Show what was created and how to test Minimal Examples Manifest (manifests.ts) import type { ManifestUfmComponent } from '@umbraco-cms/backoffice/ufm' ; export const manifests : Array < ManifestUfmComponent

= [ { type : 'ufmComponent' , alias : 'My.UfmComponent.Custom' , name : 'Custom UFM Component' , api : ( ) => import ( './my-ufm-component.js' ) , meta : { alias : 'myCustom' , // Usage: {myCustom:value} marker : '%' , // Optional: Short marker like {%value} } , } , ] ; Component Implementation (my-ufm-component.ts) import { UmbUfmComponentBase } from '@umbraco-cms/backoffice/ufm' ; import type { UfmToken } from '@umbraco-cms/backoffice/ufm' ; export class MyUfmComponent extends UmbUfmComponentBase { render ( token : UfmToken ) : string | undefined { // token.text contains the text after the marker // e.g., {%hello} would have token.text = 'hello' return <span class="my-custom"> ${ token . text } </span> ; } } export { MyUfmComponent as api } ; Component with Custom Element (my-ufm-component.ts) import { html , customElement , property } from '@umbraco-cms/backoffice/external/lit' ; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element' ; import { UmbUfmComponentBase } from '@umbraco-cms/backoffice/ufm' ; import type { UfmToken } from '@umbraco-cms/backoffice/ufm' ; // The UFM component that renders to custom element export class MyUfmComponent extends UmbUfmComponentBase { render ( token : UfmToken ) : string | undefined { // Output a custom element with the token text as attribute return <my-ufm-element text=" ${ token . text } "></my-ufm-element> ; } } // The custom element that gets rendered @ customElement ( 'my-ufm-element' ) export class MyUfmElement extends UmbLitElement { @ property ( ) text ? : string ; override render ( ) { return html <strong> ${ this . text } </strong> ; } } export { MyUfmComponent as api } ; Highlight Component Example import { UmbUfmComponentBase } from '@umbraco-cms/backoffice/ufm' ; import type { UfmToken } from '@umbraco-cms/backoffice/ufm' ; // Usage: {!important text here} or {highlight:important text here} export class HighlightUfmComponent extends UmbUfmComponentBase { render ( token : UfmToken ) : string | undefined { return <mark style="background: yellow; padding: 2px 4px;"> ${ token . text } </mark> ; } } export { HighlightUfmComponent as api } ; Icon Component Example import { UmbUfmComponentBase } from '@umbraco-cms/backoffice/ufm' ; import type { UfmToken } from '@umbraco-cms/backoffice/ufm' ; // Usage: {@icon-document} renders an Umbraco icon export class IconUfmComponent extends UmbUfmComponentBase { render ( token : UfmToken ) : string | undefined { return <uui-icon name=" ${ token . text } "></uui-icon> ; } } export { IconUfmComponent as api } ; Interface Reference interface ManifestUfmComponent extends ManifestApi < UmbUfmComponentApi

{ type : 'ufmComponent' ; meta : MetaUfmComponent ; } interface MetaUfmComponent { alias : string ; // Long form: {alias:text} marker ? : string ; // Short form: {marker text} } interface UmbUfmComponentApi extends UmbApi { render ( token : UfmToken ) : string | undefined ; } interface UfmToken { text : string ; // The text content after the marker } Built-in UFM Components {#key} or {umbLocalize:key} - Localization {=property} or {umbValue:property} - Property values {umbContentName:id} - Content names {umbLink:url} - Styled links Usage in Markdown UFM components are used in label descriptions and markdown text: { "type" : "propertyEditorUi" , "meta" : { "label" : "{#myLabel}" , "description" : "Status: {%active} - {!Important note}" } } Best Practices Choose memorable, short markers Return safe HTML (escape user input) Keep rendering lightweight Consider accessibility in output That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.

返回排行榜