Author:
    Creation:2026-01-20Last update:2026-09-27

    HTML рд╕рд╛рдордЧреНрд░реА / Intlayer рдореЗрдВ HTML

    Intlayer HTML рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЕрдкрдиреЗ dictionaries рдХреЗ рднреАрддрд░ рд╕рдореГрджреНрдз, рд╕рдВрд░рдЪрд┐рдд рд╕рд╛рдордЧреНрд░реА рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ standard HTML рдЯреИрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    HTML рдХрдВрдЯреЗрдВрдЯ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛

    рдЖрдк html рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд╕реАрдзреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ HTML рдХрдВрдЯреЗрдВрдЯ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    HTML рдХрдВрдЯреЗрдВрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП html рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдЯреИрдЧ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдореИрдк рдХрд┐рдП рдЬрд╛рдПрдБ, рднрд▓реЗ рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдЕрдХреНрд╖рдо рд╣реЛред

    htmlDictionary.content.ts
    import { html, type Dictionary } from "intlayer";
    
    const htmlDictionary = {
    key: "app",
    contentAutoTransformation: true, // рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    content: {
      myHtmlContent:  html("<p>рд╣реИрд▓реЛ <strong>рд╡рд░реНрд▓реНрдб</strong></p>"),
    },
    } satisfies Dictionary;
    
    export default htmlDictionary;
    

    рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп HTML рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <p>, <div>, <strong> рдЖрджрд┐), рддреЛ Intlayer рдЗрд╕реЗ рд╕реНрд╡рддрдГ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛ред

    htmlDictionary.content.ts
    export default {
    key: "app",
    contentAutoTransformation: true, // рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    content: {
      myHtmlContent:  "<p>рд╣реИрд▓реЛ <strong>рд╡рд░реНрд▓реНрдб</strong></p>",
    },
    };
    

    HTML рд╕рд╛рдордЧреНрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ file() рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рддрдГ HTML рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред

    htmlDictionary.content.ts
    import { html, file, t } from "intlayer";
    
    export default {
    key: "app",
    content: {
      content: t({
        hi: html(file("./content.hi.html")),
        en: html(file("./content.en.html")),
        fr: html(file("./content.fr.html")),
      }),
    },
    };
    

    html() рдиреЛрдб

    html() рдлрд╝рдВрдХреНрд╢рди Intlayer v8 рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ HTML рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬрдмрдХрд┐ Intlayer рдЕрдХреНрд╕рд░ HTML рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕реНрд╡рддрдГ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, html() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВ:

    • рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд╛ (Type Safety): html() рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░реЙрдкреНрд╕ (props) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмреЗрд╣рддрд░ рдСрдЯреЛрдХрдВрдкреНрд▓реАрд╢рди рдФрд░ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
    • рд╕реНрдкрд╖реНрдЯ рдШреЛрд╖рдгрд╛: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╣рдореЗрд╢рд╛ HTML рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рдорд╛рдирдХ HTML рдЯреИрдЧ рди рд╣реЛрдВ рдЬреЛ рд╕реНрд╡рддрдГ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЛ рдЯреНрд░┌п╪▒ рдХрд░рддреЗ рд╣реИрдВред
    • рдХрд╕реНрдЯрдо рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд╛: рдЖрдк рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░реЙрдк рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП html() рдореЗрдВ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
    typescript
    import { html } from "intlayer";
    
    const myContent = html(
      "<MyCustomComponent title='рдирдорд╕реНрддреЗ'>рджреБрдирд┐рдпрд╛</MyCustomComponent>",
      {
        MyCustomComponent: {
          title: "string",
          children: "node",
        },
      }
    );
    

    HTML рдиреЛрдб рдкрд░ .use() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ html() рдлрд╝рдВрдХреНрд╢рди (рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ) рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдХреА рдЬрд╛рдПрдЧреАред

    HTML рд░реЗрдВрдбрд░рд┐рдВрдЧ

    рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ Intlayer рдХреЗ рдХрдВрдЯреЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓реА рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реЗрдВрдбрд░рд┐рдВрдЧ (useIntlayer рдХрд╛ рдЙрдкрдпреЛрдЧ)

    рдЬрдм рдЖрдк useIntlayer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрдЯреЗрдВрдЯ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ HTML рдиреЛрдбреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред

    HTML рдиреЛрдбреНрд╕ рдХреЛ рд╕реАрдзреЗ JSX рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдЯреИрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

    App.tsx
    import { useIntlayer } from "react-intlayer";
    
    const AppContent = () => {
    const { myHtmlContent } = useIntlayer("app");
    return <div>{myHtmlContent}</div>;
    };
    

    рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдпрд╛ рдЯреИрдЧ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .use() рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

    tsx
    {myHtmlContent.use({
    p: (props) => <p className="prose" {...props} />,
    CustomLink: ({ children }) => <a href="/details">{children}</a>,
    })}
    

    Vue рдореЗрдВ, HTML рдХрдВрдЯреЗрдВрдЯ рдмрд┐рд▓реНрдЯ-рдЗрди component рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    App.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    const { myHtmlContent } = useIntlayer("app");
    </script>
    
    <template>
    <component :is="myHtmlContent" />
    </template>
    

    рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .use() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

    vue
    <component :is="myHtmlContent.use({ h1: 'h2' })" />
    

    Svelte HTML рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП {@html} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

    svelte
    <script lang="ts">
    import { useIntlayer } from "svelte-intlayer";
    const content = useIntlayer("app");
    </script>
    
    {@html $content.myHtmlContent}
    

    Preact JSX рдореЗрдВ рд╕реАрдзреЗ HTML рдиреЛрдбреНрд╕ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

    App.tsx
    import { useIntlayer } from "preact-intlayer";
    
    const AppContent = () => {
    const { myHtmlContent } = useIntlayer("app");
    return <div>{myHtmlContent}</div>;
    };
    

    Solid JSX рдореЗрдВ рд╕реАрдзреЗ HTML рдиреЛрдбреНрд╕ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

    App.tsx
    import { useIntlayer } from "solid-intlayer";
    
    const AppContent = () => {
    const { myHtmlContent } = useIntlayer("app");
    return <div>{myHtmlContent}</div>;
    };
    

    Angular HTML рдХрдВрдЯреЗрдВрдЯ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [innerHTML] рдбрд╛рдпрд░реЗрдХреНрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

    app.component.ts
    import { Component } from "@angular/core";
    import { useIntlayer } from "angular-intlayer";
    
    @Component({
    selector: "app-root",
    template: `<div [innerHTML]="content().myHtmlContent"></div>`,
    })
    export class AppComponent {
    content = useIntlayer("app");
    }
    

    рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдпрд╛ рдЯреИрдЧ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .use() рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

    typescript
    content().myHtmlContent.use({
    p: { class: "prose" },
    CustomLink: { href: "/details" },
    })
    

    Remix 3 рдореЗрдВ, HTML рдиреЛрдбреНрд╕ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╣рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ Remix JSX рдХреЗ innerHTML рдкреНрд░реЙрдк рдХреЗ рд╕рд╛рде, рдпрд╛ html-template рджреГрд╢реНрдп рдореЗрдВ html.raw рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред

    src/views/home.tsx
    import { useIntlayer } from "remix-intlayer";
    
    export const HomePage = () => () => {
    const { myHtmlContent } = useIntlayer("app");
    
    return <div innerHTML={myHtmlContent.value} />;
    };
    
    src/views/home.ts
    import { html } from "remix/html-template";
    import { useIntlayer } from "remix-intlayer";
    
    export const renderHomePage = () => {
    const { myHtmlContent } = useIntlayer("app");
    
    return html.raw`<div>${myHtmlContent.value}</div>`;
    };
    
    Remix рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯреЗрдб рдорд╛рдиреЛрдВ рдХреЛ рдПрд╕реНрдХреЗрдк рдХрд░рддрд╛ рд╣реИред innerHTML рдФрд░ html.raw рджреЛ рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╣реИрдВ, рдЬреЛ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

    рдЯреИрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдпрд╛ рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .use() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдУрд╡рд░рд░рд╛рдЗрдб рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:

    tsx
    <div
    innerHTML={myHtmlContent.use({
      p: ({ children }) => `<p class="prose">${children}</p>`,
      CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
    })}
    />
    

    Astro рдореЗрдВ, HTML рдиреЛрдбреНрд╕ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╣рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ set:html рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ <script> рдореЗрдВ innerHTML рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред

    src/pages/index.astro
    ---
    import { useIntlayer } from "astro-intlayer";
    
    const { myHtmlContent } = useIntlayer("app");
    ---
    
    <div set:html={myHtmlContent.value} />
    
    src/components/Content.astro
    <div id="content"></div>
    
    <script>
    import { useIntlayer } from "astro-intlayer";
    
    const { myHtmlContent } = useIntlayer("app");
    
    document.querySelector("#content")!.innerHTML = myHtmlContent.value;
    </script>
    
    Astro рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ {рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ} рдХреЛ рдПрд╕реНрдХреЗрдк рдХрд░рддрд╛ рд╣реИред set:html рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╣реИ, рдЬреЛ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

    рдЯреИрдЧ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдпрд╛ рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .use() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдУрд╡рд░рд░рд╛рдЗрдб рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:

    astro
    <div
    set:html={myHtmlContent.use({
      p: ({ children }) => `<p class="prose">${children}</p>`,
      CustomLink: ({ children }) => `<a href="/details">${children}</a>`,
    })}
    />
    

    HTMLProvider рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

    рдЖрдк рдЕрдкрдиреЗ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП HTML rendering рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрди рдХрд╕реНрдЯрдо рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рднреА HTML рдХрдВрдЯреЗрдВрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

    AppProvider.tsx
    import { HTMLProvider } from "react-intlayer/html";
    
    export const AppProvider = ({ children }) => (
    <HTMLProvider
      components={{
        p: (props) => <p className="prose" {...props} />,
        CustomLink: ({ children }) => <a href="/details">{children}</a>,
      }}
    >
      {children}
    </HTMLProvider>
    );
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    AppProvider.tsx
    import { HTMLProvider } from "react-intlayer/html";
    
    export const AppProvider = ({ children }) => (
    <HTMLProvider
      renderHTML={async (html) => {
        const { renderHTML } = await import('react-intlayer/html');
        return renderHTML(html);
      }}
    >
      {children}
    </HTMLProvider>
    );
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
    main.ts
    import { createApp, h } from "vue";
    import { intlayer } from "vue-intlayer";
    import { intlayerHTML } from "vue-intlayer/html";
    import App from "./App.vue";
    
    const app = createApp(App);
    
    app.use(intlayer);
    app.use(intlayerHTML, {
    components: {
      p: (props, { slots }) => h("p", { class: "prose", ...props }, slots.default?.()),
      CustomLink: (props, { slots }) => h("a", { href: "/details", ...props }, slots.default?.()),
    },
    });
    
    app.mount("#app");
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    main.ts
    import { createApp, h } from "vue";
    import { intlayer } from "vue-intlayer";
    import { intlayerHTML } from "vue-intlayer/html";
    import App from "./App.vue";
    
    const app = createApp(App);
    
    app.use(intlayer);
    app.use(intlayerHTML, {
    renderHTML: async (html) => {
      const { renderHTML } = await import('vue-intlayer/html');
      return renderHTML(html);
    },
    });
    
    app.mount("#app");
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
    App.svelte
    <script lang="ts">
    import { HTMLProvider } from "svelte-intlayer/html";
    import MyCustomP from "./MyCustomP.svelte";
    </script>
    
    <HTMLProvider
    components={{
      p: MyCustomP,
    }}
    >
    <slot />
    </HTMLProvider>
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    App.svelte
    <script lang="ts">
    import { HTMLProvider } from "svelte-intlayer/html";
    </script>
    
    <HTMLProvider
    renderHTML={async (html) => {
      const { renderHTML } = await import('svelte-intlayer/html');
      return renderHTML(html);
    }}
    >
    <slot />
    </HTMLProvider>
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
    AppProvider.tsx
    import { HTMLProvider } from "preact-intlayer/html";
    
    export const AppProvider = ({ children }) => (
    <HTMLProvider
      components={{
        p: (props) => <p className="prose" {...props} />,
      }}
    >
      {children}
    </HTMLProvider>
    );
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    AppProvider.tsx
    import { HTMLProvider } from "preact-intlayer/html";
    
    export const AppProvider = ({ children }) => (
    <HTMLProvider
      renderHTML={async (html) => {
        const { renderHTML } = await import('preact-intlayer/html');
        return renderHTML(html);
      }}
    >
      {children}
    </HTMLProvider>
    );
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
    AppProvider.tsx
    import { HTMLProvider } from "solid-intlayer/html";
    
    export const AppProvider = (props) => (
    <HTMLProvider
      components={{
        p: (props) => <p className="prose" {...props} />,
      }}
    >
      {props.children}
    </HTMLProvider>
    );
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    AppProvider.tsx
    import { HTMLProvider } from "solid-intlayer/html";
    
    export const AppProvider = (props) => (
    <HTMLProvider
      renderHTML={async (html) => {
        const { renderHTML } = await import('solid-intlayer/html');
        return renderHTML(html);
      }}
    >
      {props.children}
    </HTMLProvider>
    );
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
    app.config.ts
    import { createIntlayerHTMLProvider } from "angular-intlayer/html";
    
    export const appConfig: ApplicationConfig = {
    providers: [
      createIntlayerHTMLProvider({
        components: {
          p: { class: "prose" },
          CustomLink: { href: "/details" },
        },
      }),
    ],
    };
    

    рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ HTML renderer рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    app.config.ts
    import { createIntlayerHTMLProvider } from "angular-intlayer/html";
    
    export const appConfig: ApplicationConfig = {
    providers: [
      createIntlayerHTMLProvider({
        renderHTML: async (html) => {
          const { renderHTML } = await import('angular-intlayer/html');
          return renderHTML(html);
        },
      }),
    ],
    };
    
    рдЕрдкрдиреЗ HTML renderer рдХреЛ dynamically import рдХрд░рдирд╛ рдЖрдкрдХреЗ application рдХреЗ bundle size рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред

    Remix рдореЗрдВ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ useHTMLRenderer() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░реЗрдВрдбрд░рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред useIntlayer рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП html рдиреЛрдбреНрд╕ рдпрдерд╛рд╡рдд рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдкреНрд░рддрд┐ рдиреЛрдб рдЙрдирдХреЗ рдЯреИрдЧ рдХреЛ .use() рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

    src/router.ts
    import { installIntlayerHTML } from "remix-intlayer/html";
    
    installIntlayerHTML({
    renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
    });
    
    рд░реЗрдВрдбрд░рд░ рдХреЛ рд▓реЗрдЬрд╝реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП installIntlayerHTMLDynamic(async () => тАж) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рд▓реЛрдбрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХреЙрд▓ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

    Astro рдореЗрдВ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рдбрд▓рд╡реЗрдпрд░ (рд╕рд░реНрд╡рд░) рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ <script> (рдмреНрд░рд╛рдЙрдЬрд╝рд░) рдореЗрдВ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ useHTMLRenderer() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░реЗрдВрдбрд░рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред useIntlayer рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП html рдиреЛрдбреНрд╕ рдпрдерд╛рд╡рдд рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдкреНрд░рддрд┐ рдиреЛрдб рдЙрдирдХреЗ рдЯреИрдЧ рдХреЛ .use() рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

    src/middleware.ts
    import { installIntlayerHTML } from "astro-intlayer/html";
    import { defineMiddleware } from "astro:middleware";
    
    // рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ; Intlayer рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реНрд╡рдпрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ
    // рдкрд╣рд▓реЗ рдПрдХреАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИред
    installIntlayerHTML({
    renderHTML: (html) => html.replaceAll("<p>", '<p class="prose">'),
    });
    
    export const onRequest = defineMiddleware((_context, next) => next());
    
    рд░реЗрдВрдбрд░рд░ рдХреЛ рд▓реЗрдЬрд╝реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП installIntlayerHTMLDynamic(async () => тАж) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рд▓реЛрдбрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХреЙрд▓ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

    рдореИрдиреБрдЕрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдЙрдиреНрдирдд рдЯреВрд▓реНрд╕

    рдпрджрд┐ рдЖрдкрдХреЛ raw HTML рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ component рдореИрдкрд┐рдВрдЧ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рд┐рдП, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

    <HTMLRenderer /> рдХрдореНрдкреЛрдиреЗрдВрдЯ

    рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реЗрдВрдбрд░ рдХрд░реЗрдВред

    tsx
    import { HTMLRenderer } from "react-intlayer/html";
    
    <HTMLRenderer components={{ p: MyCustomP }}>
    {"<p>Hello World</p>"}
    </HTMLRenderer>
    

    useHTMLRenderer() рд╣реБрдХ

    рдПрдХ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реБрдЖ renderer рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

    tsx
    import { useHTMLRenderer } from "react-intlayer/html";
    
    const renderHTML = useHTMLRenderer({
    components: { strong: (props) => <strong {...props} className="text-red-500" /> }
    });
    
    return renderHTML("<p>рд╣реИрд▓реЛ <strong>рд╡рд░реНрд▓реНрдб</strong></p>");
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    рдХрдореНрдкреЛрдиреЗрдиреНрдЯреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдпреВрдЯрд┐рд▓рд┐рдЯреАред

    tsx
    import { renderHTML } from "react-intlayer/html";
    
    const jsx = renderHTML("<p>рд╣реИрд▓реЛ</p>", { components: { p: 'div' } });
    

    <HTMLRenderer /> рдХрдореНрдкреЛрдиреЗрдиреНрдЯ

    vue
    <script setup>
    import { HTMLRenderer } from "vue-intlayer/html";
    </script>
    
    <template>
    <HTMLRenderer content="<p>Hello World</p>" />
    </template>
    

    <HTMLRenderer /> рдХрдореНрдкреЛрдиреЗрдиреНрдЯ

    svelte
    <script lang="ts">
    import { HTMLRenderer } from "svelte-intlayer/html";
    </script>
    
    <HTMLRenderer value="<p>Hello World</p>" />
    

    useHTMLRenderer() рд╣реБрдХ

    svelte
    <script lang="ts">
    import { useHTMLRenderer } from "svelte-intlayer/html";
    const render = useHTMLRenderer();
    </script>
    
    {@html render("<p>Hello World</p>")}
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    svelte
    <script lang="ts">
    import { renderHTML } from "svelte-intlayer/html";
    </script>
    
    {@html renderHTML("<p>Hello World</p>")}
    

    <HTMLRenderer /> рдХрдореНрдкреЛрдиреЗрдВрдЯ

    tsx
    import { HTMLRenderer } from "preact-intlayer/html";
    
    <HTMLRenderer>
    {"<p>Hello World</p>"}
    </HTMLRenderer>
    

    useHTMLRenderer() рд╣реБрдХ

    tsx
    import { useHTMLRenderer } from "preact-intlayer/html";
    
    const render = useHTMLRenderer();
    
    return <div>{render("<p>Hello World</p>")}</div>;
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    tsx
    import { renderHTML } from "preact-intlayer/html";
    
    return <div>{renderHTML("<p>Hello World</p>")}</div>;
    

    <HTMLRenderer /> рдХрдореНрдкреЛрдиреЗрдВрдЯ

    tsx
    import { HTMLRenderer } from "solid-intlayer/html";
    
    <HTMLRenderer>
    {"<p>Hello World</p>"}
    </HTMLRenderer>
    

    useHTMLRenderer() рд╣реБрдХ

    tsx
    import { useHTMLRenderer } from "solid-intlayer/html";
    
    const render = useHTMLRenderer();
    
    return <div>{render("<p>Hello World</p>")}</div>;
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    tsx
    import { renderHTML } from "solid-intlayer/html";
    
    return <div>{renderHTML("<p>Hello World</p>")}</div>;
    

    IntlayerHTMLService рд╕рд░реНрд╡рд┐рд╕

    рд╕рд░реНрд╡рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реЗрдВрдбрд░ рдХрд░реЗрдВред

    typescript
    import { IntlayerHTMLService } from "angular-intlayer/html";
    
    export class MyComponent {
    constructor(private markdownService: IntlayerHTMLService) {}
    
    renderHTML(html: string) {
      return this.markdownService.renderHTML(html);
    }
    }
    

    useHTMLRenderer() рд╣реБрдХ

    installIntlayerHTML() рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░реЗрдВрдбрд░рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

    tsx
    import { useHTMLRenderer } from "remix-intlayer/html";
    
    const renderHTML = useHTMLRenderer();
    
    return <div innerHTML={renderHTML("<p>Hello <strong>World</strong></p>")} />;
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреА рд╣реИред

    tsx
    import { renderHTML } from "remix-intlayer/html";
    
    const html = renderHTML("<p>Hello</p>");
    

    useHTMLRenderer() рд╣реБрдХ

    installIntlayerHTML() рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░реЗрдВрдбрд░рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

    astro
    ---
    import { useHTMLRenderer } from "astro-intlayer/html";
    
    const renderHTML = useHTMLRenderer();
    ---
    
    <div set:html={renderHTML("<p>Hello <strong>World</strong></p>")} />
    

    renderHTML() рдпреВрдЯрд┐рд▓рд┐рдЯреА

    рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреА рд╣реИред

    astro
    ---
    import { renderHTML } from "astro-intlayer/html";
    
    const html = renderHTML("<p>Hello</p>");
    ---
    
    <div set:html={html} />
    

    рд╡рд┐рдХрд▓реНрдк рд╕рдВрджрд░реНрдн

    рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ HTMLProvider, HTMLRenderer, useHTMLRenderer, рдФрд░ renderHTML рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    рд╡рд┐рдХрд▓реНрдкрдкреНрд░рдХрд╛рд░рдбрд┐рдлрд╝реЙрд▓реНрдЯрд╡рд┐рд╡рд░рдг
    componentsRecord<string, any>{}HTML рдЯреИрдЧреНрд╕ рдпрд╛ рдХрд╕реНрдЯрдо рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдирд╛рдореЛрдВ рдХреЛ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рд╕реЗ рдореИрдк рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯред
    renderHTMLFunctionnullрдбрд┐рдлрд╝реЙрд▓реНрдЯ HTML рдкрд╛рд░реНрд╕рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди (Vue, Svelte, Remix рдФрд░ Astro рдкреНрд░рджрд╛рддрд╛)ред
    рдиреЛрдЯ: React рдФрд░ Preact рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ HTML рдЯреИрдЧреНрд╕ рд╕реНрд╡рддрдГ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рддрднреА рдЖрдкрдХреЛ components prop рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдпрд╛ рдХрд╕реНрдЯрдо рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВред