@takazudo/zfb 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/dist/config.d.ts +15 -6
- package/dist/config.js.map +1 -1
- package/dist/runtime.d.ts +7 -4
- package/dist/runtime.js +166 -28
- package/dist/runtime.js.map +1 -1
- package/dist/zudo-react/dom-bindings.js +1 -1
- package/dist/zudo-react/dom-bindings.js.map +1 -1
- package/dist/zudo-react/hydrate.js +18 -15
- package/dist/zudo-react/hydrate.js.map +1 -1
- package/dist/zudo-react/jsx-types.d.ts +30 -17
- package/dist/zudo-react/jsx-types.js.map +1 -1
- package/dist/zudo-react/render-html.js +15 -17
- package/dist/zudo-react/render-html.js.map +1 -1
- package/dist/zudo-react/structure.d.ts +2 -0
- package/dist/zudo-react/structure.js +14 -0
- package/dist/zudo-react/structure.js.map +1 -1
- package/dist/zudo-react/vocabulary.d.ts +12 -0
- package/dist/zudo-react/vocabulary.js +96 -0
- package/dist/zudo-react/vocabulary.js.map +1 -0
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-types.js","sourceRoot":"","sources":["../../src/zudo-react/jsx-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Child, Component, Key } from \"./description.js\";\nimport type { Listener, Ref } from \"./index.js\";\nimport type { ReadonlySignal, Signal } from \"./reactive-types.js\";\n\ntype Value<T> = T | ReadonlySignal<T> | undefined;\ntype ScalarAttribute = Value<string | number | boolean | null>;\ntype DimensionAttribute = Value<string | number | null>;\ntype StringAttribute = Value<string | null>;\ntype BooleanAttribute = Value<boolean | null>;\ntype CssProperty =\n | `--${string}`\n | `${string}-${string}`\n | \"color\"\n | \"display\"\n | \"opacity\"\n | \"width\"\n | \"height\"\n | \"margin\"\n | \"padding\"\n | \"border\"\n | \"background\"\n | \"position\"\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"overflow\"\n | \"transform\"\n | \"transition\"\n | \"animation\"\n | \"font\"\n | \"flex\"\n | \"grid\"\n | \"gap\";\ntype CssStyle = Readonly<Partial<Record<CssProperty, string | number | null | undefined>>>;\ntype EventProps = {\n [name: `on:${string}`]: Listener | undefined;\n};\ntype DataAria = {\n [name: `data-${string}`]: ScalarAttribute;\n} & {\n [name: `aria-${string}`]: ScalarAttribute;\n};\n\ninterface ReservedProps<T extends Element = Element> {\n children?: Child | undefined;\n key?: Key | undefined;\n ref?: Ref<T> | undefined;\n rawHtml?: Value<string | null>;\n}\n\ninterface CommonAttributes<T extends Element = Element> extends ReservedProps<T> {\n id?: StringAttribute;\n class?: StringAttribute;\n title?: StringAttribute;\n lang?: StringAttribute;\n dir?: StringAttribute;\n slot?: StringAttribute;\n role?: StringAttribute;\n style?: Value<string | CssStyle | null>;\n hidden?: BooleanAttribute;\n inert?: BooleanAttribute;\n contenteditable?: StringAttribute;\n draggable?: StringAttribute;\n spellcheck?: StringAttribute;\n tabindex?: Value<number | null>;\n accesskey?: StringAttribute;\n translate?: StringAttribute;\n onclick?: string | undefined;\n onload?: string | undefined;\n onerror?: string | undefined;\n}\n\ninterface HtmlAttributes<T extends Element = HTMLElement> extends CommonAttributes<T> {\n href?: StringAttribute;\n target?: StringAttribute;\n rel?: StringAttribute;\n download?: StringAttribute;\n src?: StringAttribute;\n alt?: StringAttribute;\n width?: Value<string | number | null>;\n height?: Value<string | number | null>;\n type?: StringAttribute;\n name?: StringAttribute;\n value?: ScalarAttribute;\n placeholder?: StringAttribute;\n for?: StringAttribute;\n charset?: StringAttribute;\n datetime?: StringAttribute;\n readonly?: BooleanAttribute;\n autofocus?: BooleanAttribute;\n required?: BooleanAttribute;\n disabled?: BooleanAttribute;\n checked?: BooleanAttribute;\n selected?: BooleanAttribute;\n multiple?: BooleanAttribute;\n open?: BooleanAttribute;\n controls?: BooleanAttribute;\n muted?: BooleanAttribute;\n loop?: BooleanAttribute;\n autoplay?: BooleanAttribute;\n novalidate?: BooleanAttribute;\n formnovalidate?: BooleanAttribute;\n maxlength?: Value<number | null>;\n minlength?: Value<number | null>;\n min?: StringAttribute;\n max?: StringAttribute;\n step?: StringAttribute;\n pattern?: StringAttribute;\n autocomplete?: StringAttribute;\n accept?: StringAttribute;\n \"accept-charset\"?: StringAttribute;\n \"http-equiv\"?: StringAttribute;\n content?: StringAttribute;\n media?: StringAttribute;\n method?: StringAttribute;\n action?: StringAttribute;\n enctype?: StringAttribute;\n rows?: Value<number | null>;\n cols?: Value<number | null>;\n colspan?: Value<number | null>;\n rowspan?: Value<number | null>;\n scope?: StringAttribute;\n cite?: StringAttribute;\n poster?: StringAttribute;\n loading?: StringAttribute;\n decoding?: StringAttribute;\n sizes?: StringAttribute;\n srcset?: StringAttribute;\n crossorigin?: StringAttribute;\n referrerpolicy?: StringAttribute;\n sandbox?: StringAttribute;\n allow?: StringAttribute;\n allowfullscreen?: BooleanAttribute;\n}\n\ntype HtmlProps<T extends Element = HTMLElement> = HtmlAttributes<T> & DataAria & EventProps;\ntype InputBase = Omit<HtmlProps<HTMLInputElement>, \"type\"> & {\n defaultValue?: string | undefined;\n defaultChecked?: boolean | undefined;\n};\ntype InputProps =\n | (InputBase & {\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\" | \"password\" | undefined;\n modelValue?: Signal<string> | undefined;\n modelChecked?: never;\n })\n | (InputBase & {\n type: \"checkbox\";\n modelChecked?: Signal<boolean> | undefined;\n modelValue?: never;\n })\n | (InputBase & {\n type: \"radio\";\n name: string;\n value: string;\n modelValue?: Signal<string | null> | undefined;\n modelChecked?: never;\n })\n | (InputBase & {\n type: string;\n modelValue?: never;\n modelChecked?: never;\n });\ntype TextareaProps = HtmlProps<HTMLTextAreaElement> & {\n modelValue?: Signal<string> | undefined;\n defaultValue?: string | undefined;\n};\ntype SelectProps = HtmlProps<HTMLSelectElement> & {\n modelValue?: Signal<string> | undefined;\n defaultValue?: string | undefined;\n};\n\ninterface SvgAttributes extends CommonAttributes<SVGElement> {\n width?: DimensionAttribute;\n height?: DimensionAttribute;\n viewBox?: StringAttribute;\n preserveAspectRatio?: StringAttribute;\n gradientUnits?: StringAttribute;\n gradientTransform?: StringAttribute;\n markerWidth?: ScalarAttribute;\n markerHeight?: ScalarAttribute;\n refX?: ScalarAttribute;\n refY?: ScalarAttribute;\n \"xlink:href\"?: StringAttribute;\n \"xml:lang\"?: StringAttribute;\n \"stroke-width\"?: ScalarAttribute;\n \"fill-rule\"?: StringAttribute;\n \"clip-rule\"?: StringAttribute;\n \"stroke-linecap\"?: StringAttribute;\n \"stroke-linejoin\"?: StringAttribute;\n \"stop-color\"?: StringAttribute;\n \"stop-opacity\"?: ScalarAttribute;\n fill?: StringAttribute;\n stroke?: StringAttribute;\n d?: StringAttribute;\n x?: ScalarAttribute;\n y?: ScalarAttribute;\n x1?: ScalarAttribute;\n x2?: ScalarAttribute;\n y1?: ScalarAttribute;\n y2?: ScalarAttribute;\n cx?: ScalarAttribute;\n cy?: ScalarAttribute;\n r?: ScalarAttribute;\n rx?: ScalarAttribute;\n ry?: ScalarAttribute;\n points?: StringAttribute;\n transform?: StringAttribute;\n opacity?: ScalarAttribute;\n offset?: ScalarAttribute;\n id?: StringAttribute;\n}\n\ntype SvgProps = SvgAttributes & DataAria & EventProps;\ntype CustomProps = ReservedProps &\n EventProps & {\n [attribute: string]: StringAttribute | Child | Ref<Element> | Listener | undefined;\n };\n\ntype HtmlTag =\n | \"html\"\n | \"head\"\n | \"body\"\n | \"title\"\n | \"base\"\n | \"link\"\n | \"meta\"\n | \"style\"\n | \"script\"\n | \"div\"\n | \"span\"\n | \"p\"\n | \"a\"\n | \"br\"\n | \"hr\"\n | \"main\"\n | \"header\"\n | \"footer\"\n | \"nav\"\n | \"section\"\n | \"article\"\n | \"aside\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"ul\"\n | \"ol\"\n | \"li\"\n | \"dl\"\n | \"dt\"\n | \"dd\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"strong\"\n | \"em\"\n | \"b\"\n | \"i\"\n | \"small\"\n | \"mark\"\n | \"time\"\n | \"figure\"\n | \"figcaption\"\n | \"img\"\n | \"picture\"\n | \"source\"\n | \"video\"\n | \"audio\"\n | \"track\"\n | \"canvas\"\n | \"form\"\n | \"label\"\n | \"input\"\n | \"button\"\n | \"textarea\"\n | \"select\"\n | \"option\"\n | \"optgroup\"\n | \"fieldset\"\n | \"legend\"\n | \"output\"\n | \"progress\"\n | \"meter\"\n | \"datalist\"\n | \"table\"\n | \"caption\"\n | \"thead\"\n | \"tbody\"\n | \"tfoot\"\n | \"tr\"\n | \"th\"\n | \"td\"\n | \"col\"\n | \"colgroup\"\n | \"details\"\n | \"summary\"\n | \"dialog\"\n | \"template\"\n | \"slot\"\n | \"iframe\"\n | \"noscript\"\n | \"address\"\n | \"abbr\"\n | \"bdi\"\n | \"bdo\"\n | \"cite\"\n | \"data\"\n | \"del\"\n | \"dfn\"\n | \"ins\"\n | \"kbd\"\n | \"map\"\n | \"area\"\n | \"object\"\n | \"param\"\n | \"q\"\n | \"rp\"\n | \"rt\"\n | \"ruby\"\n | \"s\"\n | \"samp\"\n | \"sub\"\n | \"sup\"\n | \"u\"\n | \"var\"\n | \"wbr\"\n | \"embed\";\n\ntype SvgTag =\n | \"svg\"\n | \"g\"\n | \"path\"\n | \"circle\"\n | \"ellipse\"\n | \"rect\"\n | \"line\"\n | \"polyline\"\n | \"polygon\"\n | \"text\"\n | \"tspan\"\n | \"defs\"\n | \"symbol\"\n | \"use\"\n | \"clipPath\"\n | \"mask\"\n | \"linearGradient\"\n | \"radialGradient\"\n | \"stop\"\n | \"desc\"\n | \"foreignObject\";\n\nexport namespace JSX {\n export type Element = Child;\n export type ElementType =\n | string\n | Component<any>\n | typeof import(\"../island.js\").Island\n | typeof import(\"./description.js\").Fragment;\n export type IntrinsicElements = {\n [K in HtmlTag]: K extends \"input\"\n ? InputProps\n : K extends \"textarea\"\n ? TextareaProps\n : K extends \"select\"\n ? SelectProps\n : HtmlProps;\n } & { [K in SvgTag]: SvgProps } & {\n [K in `${string}-${string}`]: CustomProps;\n };\n export interface IntrinsicAttributes {\n key?: Key | undefined;\n }\n export interface ElementChildrenAttribute {\n children: unknown;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"jsx-types.js","sourceRoot":"","sources":["../../src/zudo-react/jsx-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Child, Component, Key } from \"./description.js\";\nimport type { Listener, Ref } from \"./index.js\";\nimport type { ReadonlySignal, Signal } from \"./reactive-types.js\";\n\ntype Value<T> = T | ReadonlySignal<T> | undefined;\ntype ScalarAttribute = Value<string | number | boolean | null>;\ntype DimensionAttribute = Value<string | number | null>;\ntype StringAttribute = Value<string | null>;\ntype BooleanAttribute = Value<boolean | null>;\ntype CssProperty =\n | `--${string}`\n | `${string}-${string}`\n | \"color\"\n | \"display\"\n | \"opacity\"\n | \"width\"\n | \"height\"\n | \"margin\"\n | \"padding\"\n | \"border\"\n | \"background\"\n | \"position\"\n | \"top\"\n | \"right\"\n | \"bottom\"\n | \"left\"\n | \"overflow\"\n | \"transform\"\n | \"transition\"\n | \"animation\"\n | \"font\"\n | \"flex\"\n | \"grid\"\n | \"gap\";\ntype CssStyle = Readonly<Partial<Record<CssProperty, string | number | null | undefined>>>;\n// The custom-name index must also accept every mapped listener under strict function variance.\ntype AnyListener = Listener<any>;\ntype EventProps<TEl extends Element, TMap extends Record<keyof TMap, Event>> = {\n [K in keyof TMap & string as `on:${K}` | `on:${K}:capture`]?: Listener<\n TMap[K] & { currentTarget: TEl }\n >;\n} & {\n [name: `on:${string}`]: AnyListener | undefined;\n};\ntype DataAria = {\n [name: `data-${string}`]: ScalarAttribute;\n} & {\n [name: `aria-${string}`]: ScalarAttribute;\n};\n\ninterface ReservedProps<T extends Element = Element> {\n children?: Child | undefined;\n key?: Key | undefined;\n ref?: Ref<T> | undefined;\n rawHtml?: Value<string | null>;\n}\n\ninterface CommonAttributes<T extends Element = Element> extends ReservedProps<T> {\n id?: StringAttribute;\n class?: StringAttribute;\n title?: StringAttribute;\n lang?: StringAttribute;\n dir?: StringAttribute;\n slot?: StringAttribute;\n role?: StringAttribute;\n style?: Value<string | CssStyle | null>;\n hidden?: BooleanAttribute;\n inert?: BooleanAttribute;\n contenteditable?: StringAttribute;\n draggable?: StringAttribute;\n spellcheck?: StringAttribute;\n tabindex?: Value<number | null>;\n accesskey?: StringAttribute;\n translate?: StringAttribute;\n onclick?: string | undefined;\n onload?: string | undefined;\n onerror?: string | undefined;\n}\n\ninterface HtmlAttributes<T extends Element = HTMLElement> extends CommonAttributes<T> {\n href?: StringAttribute;\n target?: StringAttribute;\n rel?: StringAttribute;\n download?: StringAttribute;\n src?: StringAttribute;\n alt?: StringAttribute;\n width?: Value<string | number | null>;\n height?: Value<string | number | null>;\n type?: StringAttribute;\n name?: StringAttribute;\n value?: string | number | null | undefined;\n placeholder?: StringAttribute;\n for?: StringAttribute;\n charset?: StringAttribute;\n datetime?: StringAttribute;\n readonly?: BooleanAttribute;\n autofocus?: BooleanAttribute;\n required?: BooleanAttribute;\n disabled?: BooleanAttribute;\n checked?: boolean | null | undefined;\n selected?: BooleanAttribute;\n multiple?: BooleanAttribute;\n reversed?: BooleanAttribute;\n open?: BooleanAttribute;\n controls?: BooleanAttribute;\n muted?: BooleanAttribute;\n loop?: BooleanAttribute;\n autoplay?: BooleanAttribute;\n novalidate?: BooleanAttribute;\n formnovalidate?: BooleanAttribute;\n maxlength?: Value<number | null>;\n minlength?: Value<number | null>;\n min?: StringAttribute;\n max?: StringAttribute;\n step?: StringAttribute;\n start?: Value<string | number | null>;\n pattern?: StringAttribute;\n autocomplete?: StringAttribute;\n accept?: StringAttribute;\n \"accept-charset\"?: StringAttribute;\n \"http-equiv\"?: StringAttribute;\n content?: StringAttribute;\n media?: StringAttribute;\n method?: StringAttribute;\n action?: StringAttribute;\n enctype?: StringAttribute;\n rows?: Value<number | null>;\n cols?: Value<number | null>;\n colspan?: Value<number | null>;\n rowspan?: Value<number | null>;\n scope?: StringAttribute;\n cite?: StringAttribute;\n poster?: StringAttribute;\n loading?: StringAttribute;\n decoding?: StringAttribute;\n sizes?: StringAttribute;\n srcset?: StringAttribute;\n crossorigin?: StringAttribute;\n referrerpolicy?: StringAttribute;\n sandbox?: StringAttribute;\n allow?: StringAttribute;\n allowfullscreen?: BooleanAttribute;\n}\n\ntype HtmlProps<\n TRef extends Element = HTMLElement,\n TEvent extends HTMLElement = HTMLElement,\n> = HtmlAttributes<TRef> & DataAria & EventProps<TEvent, HTMLElementEventMap>;\ntype RawTextProps<TEvent extends HTMLElement = HTMLElement> = Omit<\n HtmlAttributes<HTMLElement>,\n \"children\" | \"rawHtml\"\n> &\n DataAria &\n EventProps<TEvent, HTMLElementEventMap> & {\n children?: never;\n rawHtml?: string | undefined;\n };\ntype InputBase = Omit<HtmlAttributes<HTMLInputElement>, \"type\"> &\n DataAria &\n EventProps<HTMLInputElement, HTMLElementEventMap> & {\n defaultValue?: string | undefined;\n defaultChecked?: boolean | undefined;\n };\ntype InputProps = InputBase &\n (\n | {\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"tel\" | \"password\" | undefined;\n modelValue?: Signal<string> | undefined;\n modelChecked?: never;\n }\n | {\n type: \"checkbox\";\n modelChecked?: Signal<boolean> | undefined;\n modelValue?: never;\n }\n | {\n type: \"radio\";\n name: string;\n value: string;\n modelValue?: Signal<string | null> | undefined;\n modelChecked?: never;\n }\n | {\n type: string;\n modelValue?: never;\n modelChecked?: never;\n }\n );\ntype TextareaProps = HtmlProps<HTMLTextAreaElement, HTMLTextAreaElement> & {\n modelValue?: Signal<string> | undefined;\n defaultValue?: string | undefined;\n};\ntype SelectProps = HtmlProps<HTMLSelectElement, HTMLSelectElement> & {\n modelValue?: Signal<string> | undefined;\n defaultValue?: string | undefined;\n};\n\ninterface SvgAttributes extends CommonAttributes<SVGElement> {\n width?: DimensionAttribute;\n height?: DimensionAttribute;\n viewBox?: StringAttribute;\n preserveAspectRatio?: StringAttribute;\n gradientUnits?: StringAttribute;\n gradientTransform?: StringAttribute;\n markerWidth?: ScalarAttribute;\n markerHeight?: ScalarAttribute;\n refX?: ScalarAttribute;\n refY?: ScalarAttribute;\n \"xlink:href\"?: StringAttribute;\n \"xml:lang\"?: StringAttribute;\n \"stroke-width\"?: ScalarAttribute;\n \"fill-rule\"?: StringAttribute;\n \"clip-rule\"?: StringAttribute;\n \"stroke-linecap\"?: StringAttribute;\n \"stroke-linejoin\"?: StringAttribute;\n \"stop-color\"?: StringAttribute;\n \"stop-opacity\"?: ScalarAttribute;\n fill?: StringAttribute;\n stroke?: StringAttribute;\n d?: StringAttribute;\n x?: ScalarAttribute;\n y?: ScalarAttribute;\n x1?: ScalarAttribute;\n x2?: ScalarAttribute;\n y1?: ScalarAttribute;\n y2?: ScalarAttribute;\n cx?: ScalarAttribute;\n cy?: ScalarAttribute;\n r?: ScalarAttribute;\n rx?: ScalarAttribute;\n ry?: ScalarAttribute;\n points?: StringAttribute;\n transform?: StringAttribute;\n opacity?: ScalarAttribute;\n offset?: ScalarAttribute;\n id?: StringAttribute;\n}\n\ntype SvgProps<TEvent extends SVGElement = SVGElement> = SvgAttributes &\n DataAria &\n EventProps<TEvent, SVGElementEventMap>;\ntype CustomProps = ReservedProps &\n EventProps<HTMLElement, GlobalEventHandlersEventMap> & {\n value?: string | null | undefined;\n checked?: null | undefined;\n [attribute: string]: StringAttribute | Child | Ref<Element> | AnyListener | undefined;\n };\n\ntype HtmlTag =\n | \"html\"\n | \"head\"\n | \"body\"\n | \"title\"\n | \"base\"\n | \"link\"\n | \"meta\"\n | \"style\"\n | \"script\"\n | \"div\"\n | \"span\"\n | \"p\"\n | \"a\"\n | \"br\"\n | \"hr\"\n | \"main\"\n | \"header\"\n | \"footer\"\n | \"nav\"\n | \"section\"\n | \"article\"\n | \"aside\"\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"ul\"\n | \"ol\"\n | \"li\"\n | \"dl\"\n | \"dt\"\n | \"dd\"\n | \"blockquote\"\n | \"pre\"\n | \"code\"\n | \"strong\"\n | \"em\"\n | \"b\"\n | \"i\"\n | \"small\"\n | \"mark\"\n | \"time\"\n | \"figure\"\n | \"figcaption\"\n | \"img\"\n | \"picture\"\n | \"source\"\n | \"video\"\n | \"audio\"\n | \"track\"\n | \"canvas\"\n | \"form\"\n | \"label\"\n | \"input\"\n | \"button\"\n | \"textarea\"\n | \"select\"\n | \"option\"\n | \"optgroup\"\n | \"fieldset\"\n | \"legend\"\n | \"output\"\n | \"progress\"\n | \"meter\"\n | \"datalist\"\n | \"table\"\n | \"caption\"\n | \"thead\"\n | \"tbody\"\n | \"tfoot\"\n | \"tr\"\n | \"th\"\n | \"td\"\n | \"col\"\n | \"colgroup\"\n | \"details\"\n | \"summary\"\n | \"dialog\"\n | \"template\"\n | \"slot\"\n | \"iframe\"\n | \"noscript\"\n | \"address\"\n | \"abbr\"\n | \"bdi\"\n | \"bdo\"\n | \"cite\"\n | \"data\"\n | \"del\"\n | \"dfn\"\n | \"ins\"\n | \"kbd\"\n | \"map\"\n | \"area\"\n | \"object\"\n | \"param\"\n | \"q\"\n | \"rp\"\n | \"rt\"\n | \"ruby\"\n | \"s\"\n | \"samp\"\n | \"sub\"\n | \"sup\"\n | \"u\"\n | \"var\"\n | \"wbr\"\n | \"embed\";\n\ntype SvgTag =\n | \"svg\"\n | \"g\"\n | \"path\"\n | \"circle\"\n | \"ellipse\"\n | \"rect\"\n | \"line\"\n | \"polyline\"\n | \"polygon\"\n | \"text\"\n | \"tspan\"\n | \"defs\"\n | \"symbol\"\n | \"use\"\n | \"clipPath\"\n | \"mask\"\n | \"linearGradient\"\n | \"radialGradient\"\n | \"stop\"\n | \"desc\"\n | \"foreignObject\";\n\nexport namespace JSX {\n export type Element = Child;\n export type ElementType =\n | string\n | Component<any>\n | typeof import(\"../island.js\").Island\n | typeof import(\"./description.js\").Fragment;\n export type IntrinsicElements = {\n [K in HtmlTag]: K extends \"input\"\n ? InputProps\n : K extends \"textarea\"\n ? TextareaProps\n : K extends \"select\"\n ? SelectProps\n : K extends \"script\" | \"style\"\n ? RawTextProps<\n K extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[K] : HTMLElement\n >\n : HtmlProps<\n HTMLElement,\n K extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[K] : HTMLElement\n >;\n } & {\n [K in SvgTag]: SvgProps<\n K extends keyof SVGElementTagNameMap ? SVGElementTagNameMap[K] : SVGElement\n >;\n } & {\n [K in `${string}-${string}`]: CustomProps;\n };\n export interface IntrinsicAttributes {\n key?: Key | undefined;\n }\n export interface ElementChildrenAttribute {\n children: unknown;\n }\n}\n"]}
|
|
@@ -4,18 +4,10 @@ import { readSnapshot } from "./reactive.js";
|
|
|
4
4
|
import { createScope, withScope } from "./scope.js";
|
|
5
5
|
import { serializeProps } from "./props-transport.js";
|
|
6
6
|
import { islandRootType } from "./island-root-type.js";
|
|
7
|
-
import {
|
|
7
|
+
import { isShowType, isForType, showProps, forProps, keyed, keyPayload, view, } from "./structure.js";
|
|
8
|
+
import { booleanAttrs, commonAttrs, dialectSuggestion, formProps, htmlAttrs, htmlTags, isDialectProp, reactiveModelSuggestion, svgAttrs, svgTags, voidTags, } from "./vocabulary.js";
|
|
8
9
|
const words = (value) => new Set(value.split(" "));
|
|
9
|
-
const voidTags = words("area base br col embed hr img input link meta param source track wbr");
|
|
10
|
-
const booleanAttrs = words("hidden inert readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate allowfullscreen");
|
|
11
|
-
const commonAttrs = words("id class title lang dir slot role style hidden inert contenteditable draggable spellcheck tabindex accesskey translate onclick onload onerror");
|
|
12
|
-
const htmlAttrs = words("href target rel download src alt width height type name value placeholder for charset datetime readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate maxlength minlength min max step pattern autocomplete accept accept-charset http-equiv content media method action enctype rows cols colspan rowspan scope cite poster loading decoding sizes srcset crossorigin referrerpolicy sandbox allow allowfullscreen");
|
|
13
|
-
const svgAttrs = words("width height viewBox preserveAspectRatio gradientUnits gradientTransform markerWidth markerHeight refX refY xlink:href xml:lang stroke-width fill-rule clip-rule stroke-linecap stroke-linejoin stop-color stop-opacity fill stroke d x y x1 x2 y1 y2 cx cy r rx ry points transform opacity offset");
|
|
14
|
-
const svgTags = words("svg g path circle ellipse rect line polyline polygon text tspan defs symbol use clipPath mask linearGradient radialGradient stop title desc foreignObject");
|
|
15
|
-
const htmlTags = words("html head body title base link meta style script div span p a br hr main header footer nav section article aside h1 h2 h3 h4 h5 h6 ul ol li dl dt dd blockquote pre code strong em b i small mark time figure figcaption img picture source video audio track canvas form label input button textarea select option optgroup fieldset legend output progress meter datalist table caption thead tbody tfoot tr th td col colgroup details summary dialog template slot iframe noscript address abbr bdi bdo cite data del dfn ins kbd map area object param q rp rt ruby s samp sub sup u var wbr embed xmp noembed noframes plaintext");
|
|
16
|
-
const dialect = words("className htmlFor charSet dateTime tabIndex readOnly strokeWidth dangerouslySetInnerHTML");
|
|
17
10
|
const reserved = words("key ref children rawHtml");
|
|
18
|
-
const forms = words("modelValue modelChecked defaultValue defaultChecked");
|
|
19
11
|
const sensitive = words("noscript xmp iframe noembed noframes plaintext");
|
|
20
12
|
const tableChildren = {
|
|
21
13
|
table: words("caption colgroup thead tbody tfoot"),
|
|
@@ -94,10 +86,12 @@ function attributes(tag, props, context, namespace, custom) {
|
|
|
94
86
|
for (const [name, original] of Object.entries(props)) {
|
|
95
87
|
if (reserved.has(name))
|
|
96
88
|
continue;
|
|
97
|
-
if (
|
|
89
|
+
if (formProps.has(name))
|
|
98
90
|
continue;
|
|
99
|
-
if (
|
|
100
|
-
|
|
91
|
+
if (isDialectProp(name, namespace, custom)) {
|
|
92
|
+
const suggestion = dialectSuggestion(name, namespace, custom);
|
|
93
|
+
fail("ZR_PROP_DIALECT", context, `${tag}.${name}${suggestion ? ` (use \`${suggestion}\` instead of \`${name}\`)` : ""}`);
|
|
94
|
+
}
|
|
101
95
|
if (name.startsWith("on:")) {
|
|
102
96
|
if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))
|
|
103
97
|
fail("ZR_LISTENER", context, `${tag}.${name}`);
|
|
@@ -118,8 +112,10 @@ function attributes(tag, props, context, namespace, custom) {
|
|
|
118
112
|
!/^on[a-z]+$/.test(name))
|
|
119
113
|
fail("ZR_ATTRIBUTE", context, `${tag}.${name}`);
|
|
120
114
|
const value = read(original);
|
|
121
|
-
if ((name === "value" || name === "checked") && reactive(original))
|
|
122
|
-
|
|
115
|
+
if ((name === "value" || name === "checked") && reactive(original)) {
|
|
116
|
+
const suggestion = reactiveModelSuggestion(tag, name, String(read(props.type) ?? "text"), custom);
|
|
117
|
+
fail("ZR_MODEL_UNSUPPORTED", context, `${tag}.${name} requires ${suggestion ?? "a static value"}`);
|
|
118
|
+
}
|
|
123
119
|
if (value == null)
|
|
124
120
|
continue;
|
|
125
121
|
if (/^on[a-z]/.test(name) && typeof value === "function")
|
|
@@ -363,6 +359,8 @@ function element(description, context, namespace, parent) {
|
|
|
363
359
|
}
|
|
364
360
|
else
|
|
365
361
|
content = children(props.children, context, childNamespace, tag);
|
|
362
|
+
if (tag === "pre" && raw === undefined && (content.startsWith("\n") || content.startsWith("\r")))
|
|
363
|
+
content = `\n${content}`;
|
|
366
364
|
context.formId = previousFormId;
|
|
367
365
|
return `<${tag}${attrs}>${voidTags.has(tag) ? "" : `${content}</${tag}>`}`;
|
|
368
366
|
}
|
|
@@ -383,7 +381,7 @@ function render(value, context, namespace, parent) {
|
|
|
383
381
|
return island(value, context, namespace, parent);
|
|
384
382
|
if (value.type === Fragment)
|
|
385
383
|
return region(context, "f", () => children(value.props.children, context, namespace, parent));
|
|
386
|
-
if (value.type
|
|
384
|
+
if (isShowType(value.type)) {
|
|
387
385
|
if (parent in tableChildren ||
|
|
388
386
|
["select", "optgroup", "option", "title", "textarea", "script", "style"].includes(parent))
|
|
389
387
|
fail("ZR_PARSER_CONTEXT", context, parent);
|
|
@@ -410,7 +408,7 @@ function render(value, context, namespace, parent) {
|
|
|
410
408
|
}
|
|
411
409
|
});
|
|
412
410
|
}
|
|
413
|
-
if (value.type
|
|
411
|
+
if (isForType(value.type)) {
|
|
414
412
|
if (parent in tableChildren ||
|
|
415
413
|
["select", "optgroup", "option", "title", "textarea", "script", "style"].includes(parent))
|
|
416
414
|
fail("ZR_PARSER_CONTEXT", context, parent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-html.js","sourceRoot":"","sources":["../../src/zudo-react/render-html.ts"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, isDescription, type Child, type Description } from \"./description.js\";\nimport { escapeAttribute, escapeText } from \"./escape.js\";\nimport type { IslandIdentity } from \"./index.js\";\nimport { readSnapshot } from \"./reactive.js\";\nimport type { ReadonlySignal } from \"./reactive-types.js\";\nimport { createScope, withScope, type RuntimeScope } from \"./scope.js\";\nimport { serializeProps } from \"./props-transport.js\";\nimport { islandRootType } from \"./island-root-type.js\";\nimport type { IslandOptions, RenderOptions } from \"./server.js\";\nimport { Show, For, showProps, forProps, keyed, keyPayload, view } from \"./structure.js\";\n\nconst words = (value: string) => new Set(value.split(\" \"));\nconst voidTags = words(\"area base br col embed hr img input link meta param source track wbr\");\nconst booleanAttrs = words(\n \"hidden inert readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate allowfullscreen\",\n);\nconst commonAttrs = words(\n \"id class title lang dir slot role style hidden inert contenteditable draggable spellcheck tabindex accesskey translate onclick onload onerror\",\n);\nconst htmlAttrs = words(\n \"href target rel download src alt width height type name value placeholder for charset datetime readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate maxlength minlength min max step pattern autocomplete accept accept-charset http-equiv content media method action enctype rows cols colspan rowspan scope cite poster loading decoding sizes srcset crossorigin referrerpolicy sandbox allow allowfullscreen\",\n);\nconst svgAttrs = words(\n \"width height viewBox preserveAspectRatio gradientUnits gradientTransform markerWidth markerHeight refX refY xlink:href xml:lang stroke-width fill-rule clip-rule stroke-linecap stroke-linejoin stop-color stop-opacity fill stroke d x y x1 x2 y1 y2 cx cy r rx ry points transform opacity offset\",\n);\nconst svgTags = words(\n \"svg g path circle ellipse rect line polyline polygon text tspan defs symbol use clipPath mask linearGradient radialGradient stop title desc foreignObject\",\n);\nconst htmlTags = words(\n \"html head body title base link meta style script div span p a br hr main header footer nav section article aside h1 h2 h3 h4 h5 h6 ul ol li dl dt dd blockquote pre code strong em b i small mark time figure figcaption img picture source video audio track canvas form label input button textarea select option optgroup fieldset legend output progress meter datalist table caption thead tbody tfoot tr th td col colgroup details summary dialog template slot iframe noscript address abbr bdi bdo cite data del dfn ins kbd map area object param q rp rt ruby s samp sub sup u var wbr embed xmp noembed noframes plaintext\",\n);\nconst dialect = words(\n \"className htmlFor charSet dateTime tabIndex readOnly strokeWidth dangerouslySetInnerHTML\",\n);\nconst reserved = words(\"key ref children rawHtml\");\nconst forms = words(\"modelValue modelChecked defaultValue defaultChecked\");\nconst sensitive = words(\"noscript xmp iframe noembed noframes plaintext\");\nconst tableChildren: Record<string, Set<string>> = {\n table: words(\"caption colgroup thead tbody tfoot\"),\n thead: words(\"tr\"),\n tbody: words(\"tr\"),\n tfoot: words(\"tr\"),\n tr: words(\"td th\"),\n colgroup: words(\"col\"),\n};\ntype Namespace = \"html\" | \"svg\";\ninterface Context {\n identity: IslandIdentity | undefined;\n boundary: boolean;\n next: number;\n scope: RuntimeScope;\n path: string;\n selectValue?: string | undefined;\n selectSeen?: Set<string> | undefined;\n selectMatches?: number | undefined;\n radioGroups: Map<\n unknown,\n { name: string; form: string; value: string | null; options: Set<string> }\n >;\n radioNames: Map<string, unknown>;\n formId: string;\n nextFormId: number;\n}\nfunction fail(code: string, context: Context, detail: string): never {\n throw new TypeError(\n `${code}: ${detail} at ${context.path} in ${context.identity?.component ?? \"static render\"}`,\n );\n}\nfunction reactive(value: unknown): value is ReadonlySignal<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$$zudoReactive\" in value &&\n value.$$zudoReactive === \"zudo-react.reactive.v1\"\n );\n}\nfunction read(value: unknown): unknown {\n return reactive(value) ? readSnapshot(value) : value;\n}\nfunction region(context: Context, kind: string, content: () => string): string {\n if (!context.identity) return content();\n const id = context.next++;\n return `<!--zr:1:${id}:${kind}-->${content()}<!--/zr:1:${id}-->`;\n}\nfunction at<T>(context: Context, part: string, fn: () => T): T {\n const old = context.path;\n context.path += part;\n try {\n return fn();\n } finally {\n context.path = old;\n }\n}\nfunction children(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => render(item, context, namespace, parent)),\n )\n .join(\"\");\n return render(value, context, namespace, parent);\n}\nfunction renderText(value: unknown, context: Context): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value)))\n return escapeText(String(value));\n fail(\"ZR_CHILD\", context, `invalid scalar ${typeof value}`);\n}\nfunction style(value: unknown, context: Context): string {\n if (typeof value === \"string\") return value;\n if (\n value === null ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n )\n fail(\"ZR_STYLE\", context, \"style must be a string or flat object\");\n let result = \"\";\n for (const [name, entry] of Object.entries(value)) {\n if (!/^(--[a-zA-Z0-9_-]+|[a-z][a-z0-9-]*)$/.test(name) || /[A-Z]/.test(name))\n fail(\"ZR_STYLE\", context, `invalid property ${name}`);\n if (entry == null) continue;\n if (typeof entry !== \"string\" && !(typeof entry === \"number\" && Number.isFinite(entry)))\n fail(\"ZR_STYLE\", context, `invalid value for ${name}`);\n result += `${name}:${entry};`;\n }\n return result;\n}\nfunction attributes(\n tag: string,\n props: Readonly<Record<string, unknown>>,\n context: Context,\n namespace: Namespace,\n custom: boolean,\n): string {\n let output = \"\";\n for (const [name, original] of Object.entries(props)) {\n if (reserved.has(name)) continue;\n if (forms.has(name)) continue;\n if (dialect.has(name) || /^on[A-Z]/.test(name))\n fail(\"ZR_PROP_DIALECT\", context, `${tag}.${name}`);\n if (name.startsWith(\"on:\")) {\n if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))\n fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n if (typeof original !== \"function\") fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n const inline = `on${name.slice(3).replace(/:capture$/, \"\")}`;\n if (inline in props) fail(\"ZR_LISTENER_CONFLICT\", context, `${tag}.${inline}`);\n continue;\n }\n if (!/^[A-Za-z_:][A-Za-z0-9_:.-]*$/.test(name)) fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n if (\n !custom &&\n !commonAttrs.has(name) &&\n !(namespace === \"svg\" ? svgAttrs.has(name) : htmlAttrs.has(name)) &&\n !/^data-[\\w.-]+$/.test(name) &&\n !/^aria-[\\w.-]+$/.test(name) &&\n !/^on[a-z]+$/.test(name)\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n const value = read(original);\n if ((name === \"value\" || name === \"checked\") && reactive(original))\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}.${name} requires modelValue/modelChecked`);\n if (value == null) continue;\n if (/^on[a-z]/.test(name) && typeof value === \"function\")\n fail(\"ZR_PROP_DIALECT\", context, `${tag}.${name} must use on:${name.slice(2)}`);\n if (custom && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (name === \"style\") output += ` style=\"${escapeAttribute(style(value, context))}\"`;\n else if (booleanAttrs.has(name)) {\n if (typeof value !== \"boolean\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a boolean`);\n if (value) output += ` ${name}`;\n } else {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n !(typeof value === \"number\" && Number.isFinite(value))\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a scalar`);\n if (typeof value === \"boolean\" && !name.startsWith(\"aria-\") && !name.startsWith(\"data-\"))\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (/^on[a-z]/.test(name) && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n output += ` ${name}=\"${escapeAttribute(String(value))}\"`;\n }\n }\n return output;\n}\nfunction restricted(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => restricted(item, context, namespace, parent)),\n )\n .join(\"\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (parent in tableChildren && String(value).trim())\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} text`);\n return renderText(value, context);\n }\n if (parent === \"title\" || parent === \"option\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires static text`);\n if (!isDescription(value) || typeof value.type !== \"string\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires intrinsic children`);\n return element(value, context, namespace, parent);\n}\nfunction element(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n const tag = description.type as string;\n const custom = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/.test(tag);\n const elementNamespace = tag === \"svg\" || namespace === \"svg\" ? \"svg\" : \"html\";\n const childNamespace = tag === \"foreignObject\" ? \"html\" : elementNamespace;\n if (elementNamespace === \"svg\" ? !svgTags.has(tag) : !custom && !htmlTags.has(tag))\n fail(\"ZR_TAG\", context, tag);\n if (context.identity && (tag === \"template\" || sensitive.has(tag)))\n fail(\"ZR_PARSER_CONTEXT\", context, tag);\n if (parent in tableChildren && !tableChildren[parent]?.has(tag))\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n if (\n (parent === \"select\" && tag !== \"option\" && tag !== \"optgroup\") ||\n (parent === \"optgroup\" && tag !== \"option\")\n )\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n const previousFormId = context.formId;\n if (tag === \"form\")\n context.formId =\n typeof description.props.id === \"string\"\n ? `id:${description.props.id}`\n : `form:${context.nextFormId++}`;\n const source = description.props;\n const props: Record<string, unknown> = { ...source };\n const hasValue = source.modelValue !== undefined;\n const hasChecked = source.modelChecked !== undefined;\n if (\n (hasValue && hasChecked) ||\n (source.defaultValue !== undefined && source.value !== undefined) ||\n (source.defaultChecked !== undefined && source.checked !== undefined) ||\n (hasValue &&\n (source.defaultValue !== undefined ||\n (source.type !== \"radio\" && source.value !== undefined))) ||\n (hasChecked && (source.defaultChecked !== undefined || source.checked !== undefined))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n if (hasValue || hasChecked) {\n for (const name of [\"type\", \"multiple\", \"name\", \"form\"])\n if (reactive(source[name])) fail(\"ZR_MODEL_UNSUPPORTED\", context, `reactive ${name} shape`);\n const model = hasValue ? source.modelValue : source.modelChecked;\n let prototype = model;\n let writable = false;\n while (prototype && typeof prototype === \"object\") {\n const property = Object.getOwnPropertyDescriptor(prototype, \"value\");\n if (property) {\n writable = typeof property.set === \"function\";\n break;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n if (\n !reactive(model) ||\n !writable ||\n !(\"$$zudoWritable\" in model) ||\n model.$$zudoWritable !== \"zudo-react.writable.v1\"\n )\n fail(\"ZR_MODEL_READONLY\", context, tag);\n }\n if ((hasValue || hasChecked) && source.contenteditable !== undefined)\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[contenteditable]`);\n const inputType = String(source.type ?? \"text\");\n if (\n hasValue &&\n !(\n tag === \"textarea\" ||\n tag === \"select\" ||\n (tag === \"input\" &&\n [\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\", \"radio\"].includes(inputType))\n )\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (hasChecked && !(tag === \"input\" && inputType === \"checkbox\"))\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n !(tag === \"textarea\" || tag === \"select\" || tag === \"input\")\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n tag === \"input\" &&\n ![\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\"].includes(inputType)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (\n source.defaultChecked !== undefined &&\n !(tag === \"input\" && [\"checkbox\", \"radio\"].includes(inputType))\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (tag === \"input\") {\n if (source.defaultValue !== undefined || (hasValue && inputType !== \"radio\"))\n props.value = read(source.modelValue ?? source.defaultValue);\n if (source.defaultChecked !== undefined || hasChecked)\n props.checked = read(source.modelChecked ?? source.defaultChecked);\n if (hasValue && inputType === \"radio\") {\n if (typeof source.name !== \"string\" || !source.name || typeof source.value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"radio requires static name and value\");\n const selected = read(source.modelValue);\n if (selected !== null && typeof selected !== \"string\")\n fail(\"ZR_MODEL_VALUE\", context, \"radio requires string or null\");\n const form = typeof source.form === \"string\" ? `id:${source.form}` : context.formId;\n const key = `${source.name}\\u0000${form}`;\n const owner = context.radioNames.get(key);\n if (owner && owner !== source.modelValue)\n fail(\"ZR_MODEL_CONFLICT\", context, \"same-name radios use different models\");\n context.radioNames.set(key, source.modelValue);\n const group = context.radioGroups.get(source.modelValue);\n if (\n group &&\n (group.name !== source.name || group.form !== form || group.options.has(source.value))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, \"radio membership or duplicate value\");\n if (group) group.options.add(source.value);\n else\n context.radioGroups.set(source.modelValue, {\n name: source.name,\n form,\n value: selected,\n options: new Set([source.value]),\n });\n props.checked = selected === source.value;\n }\n }\n if (tag === \"option\" && context.selectValue !== undefined) {\n const value = source.value;\n if (typeof value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select option requires static value\");\n if (context.selectSeen!.has(value))\n fail(\"ZR_MODEL_CONFLICT\", context, \"duplicate option value\");\n context.selectSeen!.add(value);\n if (source.selected !== undefined)\n fail(\"ZR_MODEL_CONFLICT\", context, \"select-level value with option selected\");\n props.selected = value === context.selectValue;\n if (props.selected) context.selectMatches = (context.selectMatches ?? 0) + 1;\n }\n if (context.boundary && (\"data-zfb-island\" in props || \"data-zfb-island-skip-ssr\" in props))\n fail(\"ZR_NESTED_ISLAND\", context, tag);\n if (\n tag === \"select\" &&\n read(props.multiple) === true &&\n (context.identity || hasValue || source.defaultValue !== undefined)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select[multiple]\");\n const attrs = attributes(tag, props, context, elementNamespace, custom);\n const raw = props.rawHtml;\n const hasChildren = Object.hasOwn(props, \"children\");\n if (raw !== undefined && hasChildren)\n fail(\"ZR_RAW_HTML\", context, `${tag} has children and rawHtml`);\n if (voidTags.has(tag) && (hasChildren || raw !== undefined))\n fail(\"ZR_VOID_CHILDREN\", context, tag);\n if (\n raw !== undefined &&\n (elementNamespace === \"svg\" ||\n tag === \"textarea\" ||\n tag === \"title\" ||\n tag === \"select\" ||\n tag === \"option\")\n )\n fail(\"ZR_RAW_HTML\", context, tag);\n if (tag === \"textarea\" && hasChildren && (hasValue || source.defaultValue !== undefined))\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n let content = \"\";\n if (raw !== undefined) {\n if ((tag === \"script\" || tag === \"style\") && reactive(raw))\n fail(\"ZR_RAW_HTML\", context, `${tag} requires static rawHtml`);\n const payload = read(raw);\n if (typeof payload !== \"string\") fail(\"ZR_RAW_HTML\", context, `${tag} requires string rawHtml`);\n if (/<!--\\/?zr:1:|data-zfb-island(?:-skip-ssr)?\\s*=/.test(payload))\n fail(\"ZR_RAW_HTML\", context, \"reserved boundary in rawHtml\");\n if (\n (tag === \"script\" && /<\\/script/i.test(payload)) ||\n (tag === \"style\" && /<\\/style/i.test(payload))\n )\n fail(\"ZR_RAW_HTML\", context, `closing ${tag} in rawHtml`);\n content = tag === \"script\" || tag === \"style\" ? payload : region(context, \"h\", () => payload);\n } else if (tag === \"textarea\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"textarea requires string\");\n content = `${value.startsWith(\"\\n\") ? \"\\n\" : \"\"}${escapeText(value)}`;\n } else if (tag === \"script\" || tag === \"style\") {\n if (hasChildren) fail(\"ZR_RAW_HTML\", context, `${tag} requires rawHtml`);\n } else if (\n tag === \"title\" ||\n tag === \"option\" ||\n tag === \"optgroup\" ||\n tag === \"select\" ||\n tag in tableChildren\n ) {\n if (tag === \"select\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"select requires string\");\n const oldValue = context.selectValue;\n const oldSeen = context.selectSeen;\n const oldMatches = context.selectMatches;\n context.selectValue = value;\n context.selectSeen = new Set();\n context.selectMatches = 0;\n try {\n content = restricted(props.children, context, childNamespace, tag);\n if (context.selectMatches !== 1)\n fail(\"ZR_MODEL_VALUE\", context, `select has no option ${value}`);\n } finally {\n context.selectValue = oldValue;\n context.selectSeen = oldSeen;\n context.selectMatches = oldMatches;\n }\n } else content = restricted(props.children, context, childNamespace, tag);\n } else content = children(props.children, context, childNamespace, tag);\n context.formId = previousFormId;\n return `<${tag}${attrs}>${voidTags.has(tag) ? \"\" : `${content}</${tag}>`}`;\n}\nfunction render(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return region(context, \"f\", () => children(value, context, namespace, parent));\n if (reactive(value)) return region(context, \"t\", () => renderText(read(value), context));\n if (typeof value === \"string\" || typeof value === \"number\") return renderText(value, context);\n if (typeof value === \"object\" && value !== null && \"then\" in value)\n fail(\"ZR_ASYNC_COMPONENT\", context, \"promise child\");\n if (!isDescription(value)) fail(\"ZR_CHILD\", context, typeof value);\n if ((value.type as symbol | typeof value.type) === islandRootType)\n return island(value, context, namespace, parent);\n if (value.type === Fragment)\n return region(context, \"f\", () => children(value.props.children, context, namespace, parent));\n if (value.type === Show) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = showProps(value);\n if (\n !reactive(props.when) ||\n typeof props.children !== \"function\" ||\n (props.fallback !== undefined && typeof props.fallback !== \"function\")\n )\n fail(\"ZR_CHILD\", context, \"Show requires signal and factories\");\n const selected = read(props.when);\n if (typeof selected !== \"boolean\") fail(\"ZR_CHILD\", context, \"Show.when requires boolean\");\n return region(context, `s:${selected ? 1 : 0}`, () => {\n const factory = selected ? props.children : props.fallback;\n if (!factory) return \"\";\n const scope = context.scope.child(\"Show\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return withScope(scope, () => render(factory(), context, namespace, parent));\n } finally {\n context.scope = previous;\n }\n });\n }\n if (value.type === For) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = forProps<unknown>(value);\n if (\n !reactive(props.each) ||\n typeof props.by !== \"function\" ||\n typeof props.children !== \"function\"\n )\n fail(\"ZR_CHILD\", context, \"For requires signal, key and factory\");\n const items = read(props.each);\n if (!Array.isArray(items)) fail(\"ZR_CHILD\", context, \"For.each requires array\");\n const keys = keyed(items, props.by, context.path);\n return region(context, \"l\", () =>\n items\n .map((item, index) => {\n const scope = context.scope.child(\"For\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return region(context, `i:${keyPayload(keys[index]!)}`, () =>\n withScope(scope, () =>\n render(\n props.children(view(item).value, view(index).value),\n context,\n namespace,\n parent,\n ),\n ),\n );\n } finally {\n context.scope = previous;\n }\n })\n .join(\"\"),\n );\n }\n if (typeof value.type === \"string\") return element(value, context, namespace, parent);\n const component = value.type;\n const scope = context.scope.child(component.name || \"Anonymous\");\n const prior = context.scope;\n context.scope = scope;\n try {\n return region(context, \"c\", () => {\n const output = withScope(scope, () => component(value.props));\n if (output && typeof output === \"object\" && \"then\" in output)\n fail(\"ZR_ASYNC_COMPONENT\", context, component.name);\n return render(output, context, namespace, parent);\n });\n } finally {\n context.scope = prior;\n }\n}\nfunction empty(value: unknown): boolean {\n return (\n value == null || typeof value === \"boolean\" || (Array.isArray(value) && value.every(empty))\n );\n}\nfunction island(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (context.boundary) fail(\"ZR_NESTED_ISLAND\", context, \"nested island\");\n if (namespace !== \"html\" || parent === \"p\" || parent in tableChildren || parent === \"select\")\n fail(\"ZR_PARSER_CONTEXT\", context, \"island wrapper\");\n const child = description.props.child;\n const options = description.props.options as IslandOptions;\n if (!isDescription(child) || typeof child.type !== \"function\")\n fail(\"ZR_ISLAND_CHILD\", context, \"one function component required\");\n if (!options?.identity?.component || !options.identity.build)\n fail(\"ZR_ISLAND_IDENTITY\", context, \"component/build required\");\n const component =\n (child.type as typeof child.type & { displayName?: string }).displayName ?? child.type.name;\n if (component !== options.identity.component)\n fail(\"ZR_ISLAND_IDENTITY\", context, `expected ${options.identity.component}, got ${component}`);\n if (Object.hasOwn(child.props, \"children\") && !empty(child.props.children))\n fail(\"ZR_ISLAND_CHILD\", context, \"nonempty children\");\n const props = { ...child.props };\n delete props.children;\n let payload: string;\n try {\n payload = serializeProps(props);\n } catch (error) {\n throw new TypeError(\n `ZR_ISLAND_PROPS ${component}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n const when = options.when ?? \"load\";\n if (\n ![\"load\", \"idle\", \"visible\", \"media\"].includes(when) ||\n (when === \"media\" && !options.media?.trim()) ||\n (when !== \"media\" && options.media !== undefined)\n )\n fail(\"ZR_ISLAND_WHEN\", context, when);\n const marker = options.skipSsr ? \"data-zfb-island-skip-ssr\" : \"data-zfb-island\";\n const attrs = ` ${marker}=\"${escapeAttribute(options.identity.component)}\" data-when=\"${when}\"${when === \"media\" ? ` data-media=\"${escapeAttribute(options.media!)}\"` : \"\"} data-zfb-transport=\"json/1\" data-zfb-protocol=\"zudo-react/1\" data-zfb-build=\"${escapeAttribute(options.identity.build)}\" data-props=\"${escapeAttribute(payload)}\"`;\n const local: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.skipSsr ? undefined : options.identity,\n boundary: true,\n next: 0,\n scope: context.scope,\n path: context.path,\n };\n const content = options.skipSsr\n ? children(options.fallback, local, namespace, \"div\")\n : render({ ...child, props }, local, \"html\", \"div\");\n validateRadioGroups(local);\n return `<div${attrs}>${content}</div>`;\n}\nfunction validateRadioGroups(context: Context): void {\n for (const group of context.radioGroups.values())\n if (group.value !== null && !group.options.has(group.value))\n fail(\"ZR_MODEL_VALUE\", context, `radio has no option ${group.value}`);\n}\nexport function renderHtml(node: Child, options: RenderOptions): string {\n const root = createScope({ component: options.island?.component ?? \"<root>\" });\n const context: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.island,\n boundary: options.island !== undefined,\n next: 0,\n scope: root,\n path: \"root\",\n };\n try {\n const html = render(node, context, \"html\", \"\");\n validateRadioGroups(context);\n return html;\n } finally {\n root.dispose();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render-html.js","sourceRoot":"","sources":["../../src/zudo-react/render-html.ts"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, isDescription, type Child, type Description } from \"./description.js\";\nimport { escapeAttribute, escapeText } from \"./escape.js\";\nimport type { IslandIdentity } from \"./index.js\";\nimport { readSnapshot } from \"./reactive.js\";\nimport type { ReadonlySignal } from \"./reactive-types.js\";\nimport { createScope, withScope, type RuntimeScope } from \"./scope.js\";\nimport { serializeProps } from \"./props-transport.js\";\nimport { islandRootType } from \"./island-root-type.js\";\nimport type { IslandOptions, RenderOptions } from \"./server.js\";\nimport {\n isShowType,\n isForType,\n showProps,\n forProps,\n keyed,\n keyPayload,\n view,\n} from \"./structure.js\";\nimport {\n booleanAttrs,\n commonAttrs,\n dialectSuggestion,\n formProps,\n htmlAttrs,\n htmlTags,\n isDialectProp,\n reactiveModelSuggestion,\n svgAttrs,\n svgTags,\n type Namespace,\n voidTags,\n} from \"./vocabulary.js\";\n\nconst words = (value: string) => new Set(value.split(\" \"));\nconst reserved = words(\"key ref children rawHtml\");\nconst sensitive = words(\"noscript xmp iframe noembed noframes plaintext\");\nconst tableChildren: Record<string, Set<string>> = {\n table: words(\"caption colgroup thead tbody tfoot\"),\n thead: words(\"tr\"),\n tbody: words(\"tr\"),\n tfoot: words(\"tr\"),\n tr: words(\"td th\"),\n colgroup: words(\"col\"),\n};\ninterface Context {\n identity: IslandIdentity | undefined;\n boundary: boolean;\n next: number;\n scope: RuntimeScope;\n path: string;\n selectValue?: string | undefined;\n selectSeen?: Set<string> | undefined;\n selectMatches?: number | undefined;\n radioGroups: Map<\n unknown,\n { name: string; form: string; value: string | null; options: Set<string> }\n >;\n radioNames: Map<string, unknown>;\n formId: string;\n nextFormId: number;\n}\nfunction fail(code: string, context: Context, detail: string): never {\n throw new TypeError(\n `${code}: ${detail} at ${context.path} in ${context.identity?.component ?? \"static render\"}`,\n );\n}\nfunction reactive(value: unknown): value is ReadonlySignal<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$$zudoReactive\" in value &&\n value.$$zudoReactive === \"zudo-react.reactive.v1\"\n );\n}\nfunction read(value: unknown): unknown {\n return reactive(value) ? readSnapshot(value) : value;\n}\nfunction region(context: Context, kind: string, content: () => string): string {\n if (!context.identity) return content();\n const id = context.next++;\n return `<!--zr:1:${id}:${kind}-->${content()}<!--/zr:1:${id}-->`;\n}\nfunction at<T>(context: Context, part: string, fn: () => T): T {\n const old = context.path;\n context.path += part;\n try {\n return fn();\n } finally {\n context.path = old;\n }\n}\nfunction children(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => render(item, context, namespace, parent)),\n )\n .join(\"\");\n return render(value, context, namespace, parent);\n}\nfunction renderText(value: unknown, context: Context): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value)))\n return escapeText(String(value));\n fail(\"ZR_CHILD\", context, `invalid scalar ${typeof value}`);\n}\nfunction style(value: unknown, context: Context): string {\n if (typeof value === \"string\") return value;\n if (\n value === null ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n )\n fail(\"ZR_STYLE\", context, \"style must be a string or flat object\");\n let result = \"\";\n for (const [name, entry] of Object.entries(value)) {\n if (!/^(--[a-zA-Z0-9_-]+|[a-z][a-z0-9-]*)$/.test(name) || /[A-Z]/.test(name))\n fail(\"ZR_STYLE\", context, `invalid property ${name}`);\n if (entry == null) continue;\n if (typeof entry !== \"string\" && !(typeof entry === \"number\" && Number.isFinite(entry)))\n fail(\"ZR_STYLE\", context, `invalid value for ${name}`);\n result += `${name}:${entry};`;\n }\n return result;\n}\nfunction attributes(\n tag: string,\n props: Readonly<Record<string, unknown>>,\n context: Context,\n namespace: Namespace,\n custom: boolean,\n): string {\n let output = \"\";\n for (const [name, original] of Object.entries(props)) {\n if (reserved.has(name)) continue;\n if (formProps.has(name)) continue;\n if (isDialectProp(name, namespace, custom)) {\n const suggestion = dialectSuggestion(name, namespace, custom);\n fail(\n \"ZR_PROP_DIALECT\",\n context,\n `${tag}.${name}${suggestion ? ` (use \\`${suggestion}\\` instead of \\`${name}\\`)` : \"\"}`,\n );\n }\n if (name.startsWith(\"on:\")) {\n if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))\n fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n if (typeof original !== \"function\") fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n const inline = `on${name.slice(3).replace(/:capture$/, \"\")}`;\n if (inline in props) fail(\"ZR_LISTENER_CONFLICT\", context, `${tag}.${inline}`);\n continue;\n }\n if (!/^[A-Za-z_:][A-Za-z0-9_:.-]*$/.test(name)) fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n if (\n !custom &&\n !commonAttrs.has(name) &&\n !(namespace === \"svg\" ? svgAttrs.has(name) : htmlAttrs.has(name)) &&\n !/^data-[\\w.-]+$/.test(name) &&\n !/^aria-[\\w.-]+$/.test(name) &&\n !/^on[a-z]+$/.test(name)\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n const value = read(original);\n if ((name === \"value\" || name === \"checked\") && reactive(original)) {\n const suggestion = reactiveModelSuggestion(\n tag,\n name,\n String(read(props.type) ?? \"text\"),\n custom,\n );\n fail(\n \"ZR_MODEL_UNSUPPORTED\",\n context,\n `${tag}.${name} requires ${suggestion ?? \"a static value\"}`,\n );\n }\n if (value == null) continue;\n if (/^on[a-z]/.test(name) && typeof value === \"function\")\n fail(\"ZR_PROP_DIALECT\", context, `${tag}.${name} must use on:${name.slice(2)}`);\n if (custom && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (name === \"style\") output += ` style=\"${escapeAttribute(style(value, context))}\"`;\n else if (booleanAttrs.has(name)) {\n if (typeof value !== \"boolean\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a boolean`);\n if (value) output += ` ${name}`;\n } else {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n !(typeof value === \"number\" && Number.isFinite(value))\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a scalar`);\n if (typeof value === \"boolean\" && !name.startsWith(\"aria-\") && !name.startsWith(\"data-\"))\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (/^on[a-z]/.test(name) && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n output += ` ${name}=\"${escapeAttribute(String(value))}\"`;\n }\n }\n return output;\n}\nfunction restricted(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => restricted(item, context, namespace, parent)),\n )\n .join(\"\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (parent in tableChildren && String(value).trim())\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} text`);\n return renderText(value, context);\n }\n if (parent === \"title\" || parent === \"option\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires static text`);\n if (!isDescription(value) || typeof value.type !== \"string\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires intrinsic children`);\n return element(value, context, namespace, parent);\n}\nfunction element(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n const tag = description.type as string;\n const custom = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/.test(tag);\n const elementNamespace = tag === \"svg\" || namespace === \"svg\" ? \"svg\" : \"html\";\n const childNamespace = tag === \"foreignObject\" ? \"html\" : elementNamespace;\n if (elementNamespace === \"svg\" ? !svgTags.has(tag) : !custom && !htmlTags.has(tag))\n fail(\"ZR_TAG\", context, tag);\n if (context.identity && (tag === \"template\" || sensitive.has(tag)))\n fail(\"ZR_PARSER_CONTEXT\", context, tag);\n if (parent in tableChildren && !tableChildren[parent]?.has(tag))\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n if (\n (parent === \"select\" && tag !== \"option\" && tag !== \"optgroup\") ||\n (parent === \"optgroup\" && tag !== \"option\")\n )\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n const previousFormId = context.formId;\n if (tag === \"form\")\n context.formId =\n typeof description.props.id === \"string\"\n ? `id:${description.props.id}`\n : `form:${context.nextFormId++}`;\n const source = description.props;\n const props: Record<string, unknown> = { ...source };\n const hasValue = source.modelValue !== undefined;\n const hasChecked = source.modelChecked !== undefined;\n if (\n (hasValue && hasChecked) ||\n (source.defaultValue !== undefined && source.value !== undefined) ||\n (source.defaultChecked !== undefined && source.checked !== undefined) ||\n (hasValue &&\n (source.defaultValue !== undefined ||\n (source.type !== \"radio\" && source.value !== undefined))) ||\n (hasChecked && (source.defaultChecked !== undefined || source.checked !== undefined))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n if (hasValue || hasChecked) {\n for (const name of [\"type\", \"multiple\", \"name\", \"form\"])\n if (reactive(source[name])) fail(\"ZR_MODEL_UNSUPPORTED\", context, `reactive ${name} shape`);\n const model = hasValue ? source.modelValue : source.modelChecked;\n let prototype = model;\n let writable = false;\n while (prototype && typeof prototype === \"object\") {\n const property = Object.getOwnPropertyDescriptor(prototype, \"value\");\n if (property) {\n writable = typeof property.set === \"function\";\n break;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n if (\n !reactive(model) ||\n !writable ||\n !(\"$$zudoWritable\" in model) ||\n model.$$zudoWritable !== \"zudo-react.writable.v1\"\n )\n fail(\"ZR_MODEL_READONLY\", context, tag);\n }\n if ((hasValue || hasChecked) && source.contenteditable !== undefined)\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[contenteditable]`);\n const inputType = String(source.type ?? \"text\");\n if (\n hasValue &&\n !(\n tag === \"textarea\" ||\n tag === \"select\" ||\n (tag === \"input\" &&\n [\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\", \"radio\"].includes(inputType))\n )\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (hasChecked && !(tag === \"input\" && inputType === \"checkbox\"))\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n !(tag === \"textarea\" || tag === \"select\" || tag === \"input\")\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n tag === \"input\" &&\n ![\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\"].includes(inputType)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (\n source.defaultChecked !== undefined &&\n !(tag === \"input\" && [\"checkbox\", \"radio\"].includes(inputType))\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (tag === \"input\") {\n if (source.defaultValue !== undefined || (hasValue && inputType !== \"radio\"))\n props.value = read(source.modelValue ?? source.defaultValue);\n if (source.defaultChecked !== undefined || hasChecked)\n props.checked = read(source.modelChecked ?? source.defaultChecked);\n if (hasValue && inputType === \"radio\") {\n if (typeof source.name !== \"string\" || !source.name || typeof source.value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"radio requires static name and value\");\n const selected = read(source.modelValue);\n if (selected !== null && typeof selected !== \"string\")\n fail(\"ZR_MODEL_VALUE\", context, \"radio requires string or null\");\n const form = typeof source.form === \"string\" ? `id:${source.form}` : context.formId;\n const key = `${source.name}\\u0000${form}`;\n const owner = context.radioNames.get(key);\n if (owner && owner !== source.modelValue)\n fail(\"ZR_MODEL_CONFLICT\", context, \"same-name radios use different models\");\n context.radioNames.set(key, source.modelValue);\n const group = context.radioGroups.get(source.modelValue);\n if (\n group &&\n (group.name !== source.name || group.form !== form || group.options.has(source.value))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, \"radio membership or duplicate value\");\n if (group) group.options.add(source.value);\n else\n context.radioGroups.set(source.modelValue, {\n name: source.name,\n form,\n value: selected,\n options: new Set([source.value]),\n });\n props.checked = selected === source.value;\n }\n }\n if (tag === \"option\" && context.selectValue !== undefined) {\n const value = source.value;\n if (typeof value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select option requires static value\");\n if (context.selectSeen!.has(value))\n fail(\"ZR_MODEL_CONFLICT\", context, \"duplicate option value\");\n context.selectSeen!.add(value);\n if (source.selected !== undefined)\n fail(\"ZR_MODEL_CONFLICT\", context, \"select-level value with option selected\");\n props.selected = value === context.selectValue;\n if (props.selected) context.selectMatches = (context.selectMatches ?? 0) + 1;\n }\n if (context.boundary && (\"data-zfb-island\" in props || \"data-zfb-island-skip-ssr\" in props))\n fail(\"ZR_NESTED_ISLAND\", context, tag);\n if (\n tag === \"select\" &&\n read(props.multiple) === true &&\n (context.identity || hasValue || source.defaultValue !== undefined)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select[multiple]\");\n const attrs = attributes(tag, props, context, elementNamespace, custom);\n const raw = props.rawHtml;\n const hasChildren = Object.hasOwn(props, \"children\");\n if (raw !== undefined && hasChildren)\n fail(\"ZR_RAW_HTML\", context, `${tag} has children and rawHtml`);\n if (voidTags.has(tag) && (hasChildren || raw !== undefined))\n fail(\"ZR_VOID_CHILDREN\", context, tag);\n if (\n raw !== undefined &&\n (elementNamespace === \"svg\" ||\n tag === \"textarea\" ||\n tag === \"title\" ||\n tag === \"select\" ||\n tag === \"option\")\n )\n fail(\"ZR_RAW_HTML\", context, tag);\n if (tag === \"textarea\" && hasChildren && (hasValue || source.defaultValue !== undefined))\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n let content = \"\";\n if (raw !== undefined) {\n if ((tag === \"script\" || tag === \"style\") && reactive(raw))\n fail(\"ZR_RAW_HTML\", context, `${tag} requires static rawHtml`);\n const payload = read(raw);\n if (typeof payload !== \"string\") fail(\"ZR_RAW_HTML\", context, `${tag} requires string rawHtml`);\n if (/<!--\\/?zr:1:|data-zfb-island(?:-skip-ssr)?\\s*=/.test(payload))\n fail(\"ZR_RAW_HTML\", context, \"reserved boundary in rawHtml\");\n if (\n (tag === \"script\" && /<\\/script/i.test(payload)) ||\n (tag === \"style\" && /<\\/style/i.test(payload))\n )\n fail(\"ZR_RAW_HTML\", context, `closing ${tag} in rawHtml`);\n content = tag === \"script\" || tag === \"style\" ? payload : region(context, \"h\", () => payload);\n } else if (tag === \"textarea\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"textarea requires string\");\n content = `${value.startsWith(\"\\n\") ? \"\\n\" : \"\"}${escapeText(value)}`;\n } else if (tag === \"script\" || tag === \"style\") {\n if (hasChildren) fail(\"ZR_RAW_HTML\", context, `${tag} requires rawHtml`);\n } else if (\n tag === \"title\" ||\n tag === \"option\" ||\n tag === \"optgroup\" ||\n tag === \"select\" ||\n tag in tableChildren\n ) {\n if (tag === \"select\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"select requires string\");\n const oldValue = context.selectValue;\n const oldSeen = context.selectSeen;\n const oldMatches = context.selectMatches;\n context.selectValue = value;\n context.selectSeen = new Set();\n context.selectMatches = 0;\n try {\n content = restricted(props.children, context, childNamespace, tag);\n if (context.selectMatches !== 1)\n fail(\"ZR_MODEL_VALUE\", context, `select has no option ${value}`);\n } finally {\n context.selectValue = oldValue;\n context.selectSeen = oldSeen;\n context.selectMatches = oldMatches;\n }\n } else content = restricted(props.children, context, childNamespace, tag);\n } else content = children(props.children, context, childNamespace, tag);\n if (tag === \"pre\" && raw === undefined && (content.startsWith(\"\\n\") || content.startsWith(\"\\r\")))\n content = `\\n${content}`;\n context.formId = previousFormId;\n return `<${tag}${attrs}>${voidTags.has(tag) ? \"\" : `${content}</${tag}>`}`;\n}\nfunction render(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return region(context, \"f\", () => children(value, context, namespace, parent));\n if (reactive(value)) return region(context, \"t\", () => renderText(read(value), context));\n if (typeof value === \"string\" || typeof value === \"number\") return renderText(value, context);\n if (typeof value === \"object\" && value !== null && \"then\" in value)\n fail(\"ZR_ASYNC_COMPONENT\", context, \"promise child\");\n if (!isDescription(value)) fail(\"ZR_CHILD\", context, typeof value);\n if ((value.type as symbol | typeof value.type) === islandRootType)\n return island(value, context, namespace, parent);\n if (value.type === Fragment)\n return region(context, \"f\", () => children(value.props.children, context, namespace, parent));\n if (isShowType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = showProps(value);\n if (\n !reactive(props.when) ||\n typeof props.children !== \"function\" ||\n (props.fallback !== undefined && typeof props.fallback !== \"function\")\n )\n fail(\"ZR_CHILD\", context, \"Show requires signal and factories\");\n const selected = read(props.when);\n if (typeof selected !== \"boolean\") fail(\"ZR_CHILD\", context, \"Show.when requires boolean\");\n return region(context, `s:${selected ? 1 : 0}`, () => {\n const factory = selected ? props.children : props.fallback;\n if (!factory) return \"\";\n const scope = context.scope.child(\"Show\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return withScope(scope, () => render(factory(), context, namespace, parent));\n } finally {\n context.scope = previous;\n }\n });\n }\n if (isForType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = forProps<unknown>(value);\n if (\n !reactive(props.each) ||\n typeof props.by !== \"function\" ||\n typeof props.children !== \"function\"\n )\n fail(\"ZR_CHILD\", context, \"For requires signal, key and factory\");\n const items = read(props.each);\n if (!Array.isArray(items)) fail(\"ZR_CHILD\", context, \"For.each requires array\");\n const keys = keyed(items, props.by, context.path);\n return region(context, \"l\", () =>\n items\n .map((item, index) => {\n const scope = context.scope.child(\"For\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return region(context, `i:${keyPayload(keys[index]!)}`, () =>\n withScope(scope, () =>\n render(\n props.children(view(item).value, view(index).value),\n context,\n namespace,\n parent,\n ),\n ),\n );\n } finally {\n context.scope = previous;\n }\n })\n .join(\"\"),\n );\n }\n if (typeof value.type === \"string\") return element(value, context, namespace, parent);\n const component = value.type;\n const scope = context.scope.child(component.name || \"Anonymous\");\n const prior = context.scope;\n context.scope = scope;\n try {\n return region(context, \"c\", () => {\n const output = withScope(scope, () => component(value.props));\n if (output && typeof output === \"object\" && \"then\" in output)\n fail(\"ZR_ASYNC_COMPONENT\", context, component.name);\n return render(output, context, namespace, parent);\n });\n } finally {\n context.scope = prior;\n }\n}\nfunction empty(value: unknown): boolean {\n return (\n value == null || typeof value === \"boolean\" || (Array.isArray(value) && value.every(empty))\n );\n}\nfunction island(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (context.boundary) fail(\"ZR_NESTED_ISLAND\", context, \"nested island\");\n if (namespace !== \"html\" || parent === \"p\" || parent in tableChildren || parent === \"select\")\n fail(\"ZR_PARSER_CONTEXT\", context, \"island wrapper\");\n const child = description.props.child;\n const options = description.props.options as IslandOptions;\n if (!isDescription(child) || typeof child.type !== \"function\")\n fail(\"ZR_ISLAND_CHILD\", context, \"one function component required\");\n if (!options?.identity?.component || !options.identity.build)\n fail(\"ZR_ISLAND_IDENTITY\", context, \"component/build required\");\n const component =\n (child.type as typeof child.type & { displayName?: string }).displayName ?? child.type.name;\n if (component !== options.identity.component)\n fail(\"ZR_ISLAND_IDENTITY\", context, `expected ${options.identity.component}, got ${component}`);\n if (Object.hasOwn(child.props, \"children\") && !empty(child.props.children))\n fail(\"ZR_ISLAND_CHILD\", context, \"nonempty children\");\n const props = { ...child.props };\n delete props.children;\n let payload: string;\n try {\n payload = serializeProps(props);\n } catch (error) {\n throw new TypeError(\n `ZR_ISLAND_PROPS ${component}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n const when = options.when ?? \"load\";\n if (\n ![\"load\", \"idle\", \"visible\", \"media\"].includes(when) ||\n (when === \"media\" && !options.media?.trim()) ||\n (when !== \"media\" && options.media !== undefined)\n )\n fail(\"ZR_ISLAND_WHEN\", context, when);\n const marker = options.skipSsr ? \"data-zfb-island-skip-ssr\" : \"data-zfb-island\";\n const attrs = ` ${marker}=\"${escapeAttribute(options.identity.component)}\" data-when=\"${when}\"${when === \"media\" ? ` data-media=\"${escapeAttribute(options.media!)}\"` : \"\"} data-zfb-transport=\"json/1\" data-zfb-protocol=\"zudo-react/1\" data-zfb-build=\"${escapeAttribute(options.identity.build)}\" data-props=\"${escapeAttribute(payload)}\"`;\n const local: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.skipSsr ? undefined : options.identity,\n boundary: true,\n next: 0,\n scope: context.scope,\n path: context.path,\n };\n const content = options.skipSsr\n ? children(options.fallback, local, namespace, \"div\")\n : render({ ...child, props }, local, \"html\", \"div\");\n validateRadioGroups(local);\n return `<div${attrs}>${content}</div>`;\n}\nfunction validateRadioGroups(context: Context): void {\n for (const group of context.radioGroups.values())\n if (group.value !== null && !group.options.has(group.value))\n fail(\"ZR_MODEL_VALUE\", context, `radio has no option ${group.value}`);\n}\nexport function renderHtml(node: Child, options: RenderOptions): string {\n const root = createScope({ component: options.island?.component ?? \"<root>\" });\n const context: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.island,\n boundary: options.island !== undefined,\n next: 0,\n scope: root,\n path: \"root\",\n };\n try {\n const html = render(node, context, \"html\", \"\");\n validateRadioGroups(context);\n return html;\n } finally {\n root.dispose();\n }\n}\n"]}
|
|
@@ -3,6 +3,8 @@ import type { ReadonlySignal } from "./reactive-types.js";
|
|
|
3
3
|
import type { ShowProps, ForProps } from "./index.js";
|
|
4
4
|
export declare function Show(props: ShowProps): Description;
|
|
5
5
|
export declare function For<T>(props: ForProps<T>): Description;
|
|
6
|
+
export declare function isShowType(type: unknown): type is typeof Show;
|
|
7
|
+
export declare function isForType(type: unknown): type is typeof For;
|
|
6
8
|
export declare function showProps(description: Description): ShowProps;
|
|
7
9
|
export declare function forProps<T>(description: Description): ForProps<T>;
|
|
8
10
|
export declare function keyed<T>(items: readonly T[], by: (item: T) => Key, path: string): Key[];
|
|
@@ -6,6 +6,20 @@ export function Show(props) {
|
|
|
6
6
|
export function For(props) {
|
|
7
7
|
return createDescription(For, props);
|
|
8
8
|
}
|
|
9
|
+
// The renderer and an island component can resolve separate copies of this
|
|
10
|
+
// module when a package manager preserves dependency symlinks. Recognize the
|
|
11
|
+
// component by a shared marker so rendering does not recursively call Show/For
|
|
12
|
+
// as ordinary function components.
|
|
13
|
+
const showMarker = Symbol.for("@takazudo/zfb/zudo-react/Show");
|
|
14
|
+
const forMarker = Symbol.for("@takazudo/zfb/zudo-react/For");
|
|
15
|
+
Object.defineProperty(Show, showMarker, { value: true });
|
|
16
|
+
Object.defineProperty(For, forMarker, { value: true });
|
|
17
|
+
export function isShowType(type) {
|
|
18
|
+
return typeof type === "function" && showMarker in type;
|
|
19
|
+
}
|
|
20
|
+
export function isForType(type) {
|
|
21
|
+
return typeof type === "function" && forMarker in type;
|
|
22
|
+
}
|
|
9
23
|
export function showProps(description) {
|
|
10
24
|
return description.props;
|
|
11
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/zudo-react/structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0C,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIjD,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAA2C,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,KAAkB;IACvC,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAA2C,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAwB;IAChD,OAAO,WAAW,CAAC,KAA6B,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,WAAwB;IAClD,OAAO,WAAW,CAAC,KAA+B,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,KAAK,CAAI,KAAmB,EAAE,EAAoB,EAAE,IAAY;IAC9E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAO,CAAC;IAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/E,MAAM,IAAI,SAAS,CAAC,uBAAuB,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACzE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACnC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACf,CAAC;AAED,MAAM,UAAU,IAAI,CAAI,OAAU;IAChC,MAAM,MAAM,GAAc,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;AACzF,CAAC","sourcesContent":["import { createDescription, type Child, type Description, type Key } from \"./description.js\";\nimport { computed, signal } from \"./reactive.js\";\nimport type { ReadonlySignal, Signal } from \"./reactive-types.js\";\nimport type { ShowProps, ForProps } from \"./index.js\";\n\nexport function Show(props: ShowProps): Description {\n return createDescription(Show, props as unknown as Record<string, unknown>);\n}\n\nexport function For<T>(props: ForProps<T>): Description {\n return createDescription(For, props as unknown as Record<string, unknown>);\n}\n\nexport function showProps(description: Description): ShowProps {\n return description.props as unknown as ShowProps;\n}\n\nexport function forProps<T>(description: Description): ForProps<T> {\n return description.props as unknown as ForProps<T>;\n}\n\nexport function keyed<T>(items: readonly T[], by: (item: T) => Key, path: string): Key[] {\n const seen = new Set<Key>();\n return items.map((item) => {\n const key = by(item);\n if (typeof key !== \"string\" && !(typeof key === \"number\" && Number.isFinite(key)))\n throw new TypeError(`ZR_KEY_TYPE: For at ${path}, key ${String(key)}`);\n if (seen.has(key)) throw new TypeError(`ZR_DUPLICATE_KEY: For at ${path}, key ${String(key)}`);\n seen.add(key);\n return key;\n });\n}\n\nexport function keyPayload(key: Key): string {\n const bytes = new TextEncoder().encode(String(key));\n return `${typeof key === \"number\" ? \"n\" : \"s\"}${Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\")}`;\n}\n\nexport function view<T>(initial: T): { readonly value: ReadonlySignal<T>; write(next: T): void } {\n const source: Signal<T> = signal(initial);\n return { value: computed(() => source.value), write: (next) => (source.value = next) };\n}\n\nexport type Factory = () => Child;\n"]}
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/zudo-react/structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { createDescription, type Child, type Description, type Key } from \"./description.js\";\nimport { computed, signal } from \"./reactive.js\";\nimport type { ReadonlySignal, Signal } from \"./reactive-types.js\";\nimport type { ShowProps, ForProps } from \"./index.js\";\n\nexport function Show(props: ShowProps): Description {\n return createDescription(Show, props as unknown as Record<string, unknown>);\n}\n\nexport function For<T>(props: ForProps<T>): Description {\n return createDescription(For, props as unknown as Record<string, unknown>);\n}\n\n// The renderer and an island component can resolve separate copies of this\n// module when a package manager preserves dependency symlinks. Recognize the\n// component by a shared marker so rendering does not recursively call Show/For\n// as ordinary function components.\nconst showMarker = Symbol.for(\"@takazudo/zfb/zudo-react/Show\");\nconst forMarker = Symbol.for(\"@takazudo/zfb/zudo-react/For\");\nObject.defineProperty(Show, showMarker, { value: true });\nObject.defineProperty(For, forMarker, { value: true });\n\nexport function isShowType(type: unknown): type is typeof Show {\n return typeof type === \"function\" && showMarker in type;\n}\n\nexport function isForType(type: unknown): type is typeof For {\n return typeof type === \"function\" && forMarker in type;\n}\n\nexport function showProps(description: Description): ShowProps {\n return description.props as unknown as ShowProps;\n}\n\nexport function forProps<T>(description: Description): ForProps<T> {\n return description.props as unknown as ForProps<T>;\n}\n\nexport function keyed<T>(items: readonly T[], by: (item: T) => Key, path: string): Key[] {\n const seen = new Set<Key>();\n return items.map((item) => {\n const key = by(item);\n if (typeof key !== \"string\" && !(typeof key === \"number\" && Number.isFinite(key)))\n throw new TypeError(`ZR_KEY_TYPE: For at ${path}, key ${String(key)}`);\n if (seen.has(key)) throw new TypeError(`ZR_DUPLICATE_KEY: For at ${path}, key ${String(key)}`);\n seen.add(key);\n return key;\n });\n}\n\nexport function keyPayload(key: Key): string {\n const bytes = new TextEncoder().encode(String(key));\n return `${typeof key === \"number\" ? \"n\" : \"s\"}${Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\")}`;\n}\n\nexport function view<T>(initial: T): { readonly value: ReadonlySignal<T>; write(next: T): void } {\n const source: Signal<T> = signal(initial);\n return { value: computed(() => source.value), write: (next) => (source.value = next) };\n}\n\nexport type Factory = () => Child;\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const voidTags: Set<string>;
|
|
2
|
+
export declare const booleanAttrs: Set<string>;
|
|
3
|
+
export declare const commonAttrs: Set<string>;
|
|
4
|
+
export declare const htmlAttrs: Set<string>;
|
|
5
|
+
export declare const svgAttrs: Set<string>;
|
|
6
|
+
export declare const svgTags: Set<string>;
|
|
7
|
+
export declare const htmlTags: Set<string>;
|
|
8
|
+
export type Namespace = "html" | "svg";
|
|
9
|
+
export declare function isDialectProp(name: string, namespace: Namespace, custom: boolean): boolean;
|
|
10
|
+
export declare function dialectSuggestion(name: string, namespace: Namespace, custom: boolean): string | undefined;
|
|
11
|
+
export declare function reactiveModelSuggestion(tag: string, name: string, inputType: string, custom: boolean): "modelValue" | "modelChecked" | undefined;
|
|
12
|
+
export declare const formProps: Set<string>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const words = (value) => new Set(value.split(" "));
|
|
2
|
+
export const voidTags = words("area base br col embed hr img input link meta param source track wbr");
|
|
3
|
+
export const booleanAttrs = words("hidden inert readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate allowfullscreen reversed");
|
|
4
|
+
export const commonAttrs = words("id class title lang dir slot role style hidden inert contenteditable draggable spellcheck tabindex accesskey translate onclick onload onerror");
|
|
5
|
+
export const htmlAttrs = words("href target rel download src alt width height type name value placeholder for charset datetime readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate maxlength minlength min max step pattern autocomplete accept accept-charset http-equiv content media method action enctype rows cols colspan rowspan scope cite poster loading decoding sizes srcset crossorigin referrerpolicy sandbox allow allowfullscreen start reversed");
|
|
6
|
+
export const svgAttrs = words("width height viewBox preserveAspectRatio gradientUnits gradientTransform markerWidth markerHeight refX refY xlink:href xml:lang stroke-width fill-rule clip-rule stroke-linecap stroke-linejoin stop-color stop-opacity fill stroke d x y x1 x2 y1 y2 cx cy r rx ry points transform opacity offset");
|
|
7
|
+
export const svgTags = words("svg g path circle ellipse rect line polyline polygon text tspan defs symbol use clipPath mask linearGradient radialGradient stop title desc foreignObject");
|
|
8
|
+
export const htmlTags = words("html head body title base link meta style script div span p a br hr main header footer nav section article aside h1 h2 h3 h4 h5 h6 ul ol li dl dt dd blockquote pre code strong em b i small mark time figure figcaption img picture source video audio track canvas form label input button textarea select option optgroup fieldset legend output progress meter datalist table caption thead tbody tfoot tr th td col colgroup details summary dialog template slot iframe noscript address abbr bdi bdo cite data del dfn ins kbd map area object param q rp rt ruby s samp sub sup u var wbr embed xmp noembed noframes plaintext");
|
|
9
|
+
const propAliases = {
|
|
10
|
+
className: { spelling: "class" },
|
|
11
|
+
htmlFor: { spelling: "for" },
|
|
12
|
+
charSet: { spelling: "charset" },
|
|
13
|
+
dateTime: { spelling: "datetime" },
|
|
14
|
+
tabIndex: { spelling: "tabindex" },
|
|
15
|
+
readOnly: { spelling: "readonly" },
|
|
16
|
+
autoComplete: { spelling: "autocomplete" },
|
|
17
|
+
autoFocus: { spelling: "autofocus" },
|
|
18
|
+
maxLength: { spelling: "maxlength" },
|
|
19
|
+
minLength: { spelling: "minlength" },
|
|
20
|
+
crossOrigin: { spelling: "crossorigin" },
|
|
21
|
+
srcSet: { spelling: "srcset" },
|
|
22
|
+
acceptCharset: { spelling: "accept-charset" },
|
|
23
|
+
httpEquiv: { spelling: "http-equiv" },
|
|
24
|
+
encType: { spelling: "enctype" },
|
|
25
|
+
noValidate: { spelling: "novalidate" },
|
|
26
|
+
formNoValidate: { spelling: "formnovalidate" },
|
|
27
|
+
colSpan: { spelling: "colspan" },
|
|
28
|
+
rowSpan: { spelling: "rowspan" },
|
|
29
|
+
referrerPolicy: { spelling: "referrerpolicy" },
|
|
30
|
+
allowFullScreen: { spelling: "allowfullscreen" },
|
|
31
|
+
autoPlay: { spelling: "autoplay" },
|
|
32
|
+
contentEditable: { spelling: "contenteditable" },
|
|
33
|
+
spellCheck: { spelling: "spellcheck" },
|
|
34
|
+
accessKey: { spelling: "accesskey" },
|
|
35
|
+
dangerouslySetInnerHTML: { spelling: "rawHtml" },
|
|
36
|
+
strokeWidth: { spelling: "stroke-width", namespace: "svg" },
|
|
37
|
+
fillRule: { spelling: "fill-rule", namespace: "svg" },
|
|
38
|
+
clipRule: { spelling: "clip-rule", namespace: "svg" },
|
|
39
|
+
strokeLinecap: { spelling: "stroke-linecap", namespace: "svg" },
|
|
40
|
+
strokeLinejoin: { spelling: "stroke-linejoin", namespace: "svg" },
|
|
41
|
+
stopColor: { spelling: "stop-color", namespace: "svg" },
|
|
42
|
+
stopOpacity: { spelling: "stop-opacity", namespace: "svg" },
|
|
43
|
+
xlinkHref: { spelling: "xlink:href", namespace: "svg" },
|
|
44
|
+
xmlLang: { spelling: "xml:lang", namespace: "svg" },
|
|
45
|
+
};
|
|
46
|
+
const legacyDialect = words("className htmlFor charSet dateTime tabIndex readOnly strokeWidth dangerouslySetInnerHTML");
|
|
47
|
+
function allowedAliasTarget(spelling, namespace) {
|
|
48
|
+
if (spelling === "rawHtml")
|
|
49
|
+
return namespace === "html";
|
|
50
|
+
return (commonAttrs.has(spelling) ||
|
|
51
|
+
(namespace === "svg" ? svgAttrs.has(spelling) : htmlAttrs.has(spelling)));
|
|
52
|
+
}
|
|
53
|
+
function eventSuggestion(name) {
|
|
54
|
+
const event = name.slice(2);
|
|
55
|
+
return `on:${event === "DoubleClick" ? "dblclick" : event.toLowerCase()}`;
|
|
56
|
+
}
|
|
57
|
+
export function isDialectProp(name, namespace, custom) {
|
|
58
|
+
if (/^on[A-Z]/.test(name) || legacyDialect.has(name))
|
|
59
|
+
return true;
|
|
60
|
+
if (custom)
|
|
61
|
+
return false;
|
|
62
|
+
const alias = propAliases[name];
|
|
63
|
+
return (alias !== undefined &&
|
|
64
|
+
(!alias.namespace || alias.namespace === namespace) &&
|
|
65
|
+
allowedAliasTarget(alias.spelling, namespace));
|
|
66
|
+
}
|
|
67
|
+
export function dialectSuggestion(name, namespace, custom) {
|
|
68
|
+
if (/^on[A-Z]/.test(name))
|
|
69
|
+
return eventSuggestion(name);
|
|
70
|
+
if (custom && !legacyDialect.has(name))
|
|
71
|
+
return undefined;
|
|
72
|
+
const alias = propAliases[name];
|
|
73
|
+
if (!alias || (alias.namespace && alias.namespace !== namespace))
|
|
74
|
+
return undefined;
|
|
75
|
+
return allowedAliasTarget(alias.spelling, namespace) ? alias.spelling : undefined;
|
|
76
|
+
}
|
|
77
|
+
export function reactiveModelSuggestion(tag, name, inputType, custom) {
|
|
78
|
+
if (custom)
|
|
79
|
+
return undefined;
|
|
80
|
+
if (name === "checked" && tag === "input") {
|
|
81
|
+
if (inputType === "radio")
|
|
82
|
+
return "modelValue";
|
|
83
|
+
if (inputType === "checkbox")
|
|
84
|
+
return "modelChecked";
|
|
85
|
+
}
|
|
86
|
+
if (name === "value") {
|
|
87
|
+
if (tag === "textarea" || tag === "select")
|
|
88
|
+
return "modelValue";
|
|
89
|
+
if (tag === "input" &&
|
|
90
|
+
["text", "search", "email", "url", "tel", "password"].includes(inputType))
|
|
91
|
+
return "modelValue";
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
export const formProps = words("modelValue modelChecked defaultValue defaultChecked");
|
|
96
|
+
//# sourceMappingURL=vocabulary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../../src/zudo-react/vocabulary.ts"],"names":[],"mappings":"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","sourcesContent":["const words = (value: string) => new Set(value.split(\" \"));\n\nexport const voidTags = words(\n \"area base br col embed hr img input link meta param source track wbr\",\n);\nexport const booleanAttrs = words(\n \"hidden inert readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate allowfullscreen reversed\",\n);\nexport const commonAttrs = words(\n \"id class title lang dir slot role style hidden inert contenteditable draggable spellcheck tabindex accesskey translate onclick onload onerror\",\n);\nexport const htmlAttrs = words(\n \"href target rel download src alt width height type name value placeholder for charset datetime readonly autofocus required disabled checked selected multiple open controls muted loop autoplay novalidate formnovalidate maxlength minlength min max step pattern autocomplete accept accept-charset http-equiv content media method action enctype rows cols colspan rowspan scope cite poster loading decoding sizes srcset crossorigin referrerpolicy sandbox allow allowfullscreen start reversed\",\n);\nexport const svgAttrs = words(\n \"width height viewBox preserveAspectRatio gradientUnits gradientTransform markerWidth markerHeight refX refY xlink:href xml:lang stroke-width fill-rule clip-rule stroke-linecap stroke-linejoin stop-color stop-opacity fill stroke d x y x1 x2 y1 y2 cx cy r rx ry points transform opacity offset\",\n);\nexport const svgTags = words(\n \"svg g path circle ellipse rect line polyline polygon text tspan defs symbol use clipPath mask linearGradient radialGradient stop title desc foreignObject\",\n);\nexport const htmlTags = words(\n \"html head body title base link meta style script div span p a br hr main header footer nav section article aside h1 h2 h3 h4 h5 h6 ul ol li dl dt dd blockquote pre code strong em b i small mark time figure figcaption img picture source video audio track canvas form label input button textarea select option optgroup fieldset legend output progress meter datalist table caption thead tbody tfoot tr th td col colgroup details summary dialog template slot iframe noscript address abbr bdi bdo cite data del dfn ins kbd map area object param q rp rt ruby s samp sub sup u var wbr embed xmp noembed noframes plaintext\",\n);\nexport type Namespace = \"html\" | \"svg\";\n\ntype PropAlias = {\n readonly spelling: string;\n readonly namespace?: Namespace;\n};\n\nconst propAliases: Readonly<Record<string, PropAlias>> = {\n className: { spelling: \"class\" },\n htmlFor: { spelling: \"for\" },\n charSet: { spelling: \"charset\" },\n dateTime: { spelling: \"datetime\" },\n tabIndex: { spelling: \"tabindex\" },\n readOnly: { spelling: \"readonly\" },\n autoComplete: { spelling: \"autocomplete\" },\n autoFocus: { spelling: \"autofocus\" },\n maxLength: { spelling: \"maxlength\" },\n minLength: { spelling: \"minlength\" },\n crossOrigin: { spelling: \"crossorigin\" },\n srcSet: { spelling: \"srcset\" },\n acceptCharset: { spelling: \"accept-charset\" },\n httpEquiv: { spelling: \"http-equiv\" },\n encType: { spelling: \"enctype\" },\n noValidate: { spelling: \"novalidate\" },\n formNoValidate: { spelling: \"formnovalidate\" },\n colSpan: { spelling: \"colspan\" },\n rowSpan: { spelling: \"rowspan\" },\n referrerPolicy: { spelling: \"referrerpolicy\" },\n allowFullScreen: { spelling: \"allowfullscreen\" },\n autoPlay: { spelling: \"autoplay\" },\n contentEditable: { spelling: \"contenteditable\" },\n spellCheck: { spelling: \"spellcheck\" },\n accessKey: { spelling: \"accesskey\" },\n dangerouslySetInnerHTML: { spelling: \"rawHtml\" },\n strokeWidth: { spelling: \"stroke-width\", namespace: \"svg\" },\n fillRule: { spelling: \"fill-rule\", namespace: \"svg\" },\n clipRule: { spelling: \"clip-rule\", namespace: \"svg\" },\n strokeLinecap: { spelling: \"stroke-linecap\", namespace: \"svg\" },\n strokeLinejoin: { spelling: \"stroke-linejoin\", namespace: \"svg\" },\n stopColor: { spelling: \"stop-color\", namespace: \"svg\" },\n stopOpacity: { spelling: \"stop-opacity\", namespace: \"svg\" },\n xlinkHref: { spelling: \"xlink:href\", namespace: \"svg\" },\n xmlLang: { spelling: \"xml:lang\", namespace: \"svg\" },\n};\n\nconst legacyDialect = words(\n \"className htmlFor charSet dateTime tabIndex readOnly strokeWidth dangerouslySetInnerHTML\",\n);\n\nfunction allowedAliasTarget(spelling: string, namespace: Namespace): boolean {\n if (spelling === \"rawHtml\") return namespace === \"html\";\n return (\n commonAttrs.has(spelling) ||\n (namespace === \"svg\" ? svgAttrs.has(spelling) : htmlAttrs.has(spelling))\n );\n}\n\nfunction eventSuggestion(name: string): string {\n const event = name.slice(2);\n return `on:${event === \"DoubleClick\" ? \"dblclick\" : event.toLowerCase()}`;\n}\n\nexport function isDialectProp(name: string, namespace: Namespace, custom: boolean): boolean {\n if (/^on[A-Z]/.test(name) || legacyDialect.has(name)) return true;\n if (custom) return false;\n const alias = propAliases[name];\n return (\n alias !== undefined &&\n (!alias.namespace || alias.namespace === namespace) &&\n allowedAliasTarget(alias.spelling, namespace)\n );\n}\n\nexport function dialectSuggestion(\n name: string,\n namespace: Namespace,\n custom: boolean,\n): string | undefined {\n if (/^on[A-Z]/.test(name)) return eventSuggestion(name);\n if (custom && !legacyDialect.has(name)) return undefined;\n const alias = propAliases[name];\n if (!alias || (alias.namespace && alias.namespace !== namespace)) return undefined;\n return allowedAliasTarget(alias.spelling, namespace) ? alias.spelling : undefined;\n}\n\nexport function reactiveModelSuggestion(\n tag: string,\n name: string,\n inputType: string,\n custom: boolean,\n): \"modelValue\" | \"modelChecked\" | undefined {\n if (custom) return undefined;\n if (name === \"checked\" && tag === \"input\") {\n if (inputType === \"radio\") return \"modelValue\";\n if (inputType === \"checkbox\") return \"modelChecked\";\n }\n if (name === \"value\") {\n if (tag === \"textarea\" || tag === \"select\") return \"modelValue\";\n if (\n tag === \"input\" &&\n [\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\"].includes(inputType)\n )\n return \"modelValue\";\n }\n return undefined;\n}\nexport const formProps = words(\"modelValue modelChecked defaultValue defaultChecked\");\n"]}
|