creo 0.2.4 → 0.2.5
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/dist/index.d.ts +1 -1
- package/dist/index.js +121 -6
- package/dist/index.js.map +4 -4
- package/dist/public/primitives/primitives.d.ts +49 -4
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { Store, store, isStore } from "./public/store";
|
|
|
7
7
|
export { $primitive } from "./public/primitive";
|
|
8
8
|
export type { PrimitiveProps, EventHandlerProps } from "./public/primitive";
|
|
9
9
|
export { html, text, div, span, section, article, aside, nav, header, footer, main, address, hgroup, search, p, h1, h2, h3, h4, h5, h6, pre, code, em, strong, small, br, hr, a, blockquote, label, abbr, b, bdi, bdo, cite, data, dfn, i, kbd, mark, q, rp, rt, ruby, s, samp, sub, sup, time, u, varEl, wbr, del, ins, ul, ol, li, dl, dt, dd, table, thead, tbody, tfoot, tr, th, td, caption, colgroup, col, form, button, input, textarea, select, option, fieldset, legend, datalist, optgroup, output, progress, meter, img, video, audio, canvas, source, track, map, area, picture, iframe, embed, object, portal, svg, details, summary, dialog, menu, figure, figcaption, script, noscript, template, slot, } from "./public/primitives/primitives";
|
|
10
|
-
export type { BaseEventData, PointerEventData, KeyEventData, InputEventData, FocusEventData, ContainerEvents, FormEvents, HtmlAttrs, } from "./public/primitives/primitives";
|
|
10
|
+
export type { BaseEventData, PointerEventData, KeyEventData, InputEventData, FocusEventData, MediaEventData, ScrollEventData, LoadEventData, ErrorEventData, ToggleEventData, ContainerEvents, FormEvents, MediaEvents, DisclosureEvents, HtmlAttrs, } from "./public/primitives/primitives";
|
|
11
11
|
export type { IRender } from "./render/render_interface";
|
|
12
12
|
export { HtmlRender } from "./render/html_render";
|
|
13
13
|
export { JsonRender } from "./render/json_render";
|
package/dist/index.js
CHANGED
|
@@ -777,7 +777,30 @@ var DOM_EVENT = {
|
|
|
777
777
|
KeyDown: "keydown",
|
|
778
778
|
KeyUp: "keyup",
|
|
779
779
|
Focus: "focus",
|
|
780
|
-
Blur: "blur"
|
|
780
|
+
Blur: "blur",
|
|
781
|
+
MouseEnter: "mouseenter",
|
|
782
|
+
MouseLeave: "mouseleave",
|
|
783
|
+
PointerEnter: "pointerenter",
|
|
784
|
+
PointerLeave: "pointerleave",
|
|
785
|
+
Scroll: "scroll",
|
|
786
|
+
Load: "load",
|
|
787
|
+
Error: "error",
|
|
788
|
+
Toggle: "toggle",
|
|
789
|
+
VolumeChange: "volumechange",
|
|
790
|
+
Play: "play",
|
|
791
|
+
Pause: "pause",
|
|
792
|
+
Ended: "ended",
|
|
793
|
+
TimeUpdate: "timeupdate",
|
|
794
|
+
LoadedMetadata: "loadedmetadata",
|
|
795
|
+
LoadedData: "loadeddata",
|
|
796
|
+
CanPlay: "canplay",
|
|
797
|
+
CanPlayThrough: "canplaythrough",
|
|
798
|
+
DurationChange: "durationchange",
|
|
799
|
+
RateChange: "ratechange",
|
|
800
|
+
Seeking: "seeking",
|
|
801
|
+
Seeked: "seeked",
|
|
802
|
+
Stalled: "stalled",
|
|
803
|
+
Waiting: "waiting"
|
|
781
804
|
};
|
|
782
805
|
var $EV = Symbol.for("creo.ev");
|
|
783
806
|
var containerState = new WeakMap;
|
|
@@ -788,6 +811,7 @@ function getState(container) {
|
|
|
788
811
|
counts: new Map,
|
|
789
812
|
handler(e) {
|
|
790
813
|
const domEvent = e.type;
|
|
814
|
+
const noWalk = NO_WALK_EVENTS.has(domEvent);
|
|
791
815
|
let dom = e.target;
|
|
792
816
|
while (dom && dom !== container) {
|
|
793
817
|
const evObj = dom[$EV];
|
|
@@ -799,6 +823,8 @@ function getState(container) {
|
|
|
799
823
|
return;
|
|
800
824
|
}
|
|
801
825
|
}
|
|
826
|
+
if (noWalk)
|
|
827
|
+
return;
|
|
802
828
|
dom = dom.parentElement;
|
|
803
829
|
}
|
|
804
830
|
}
|
|
@@ -807,12 +833,52 @@ function getState(container) {
|
|
|
807
833
|
}
|
|
808
834
|
return state;
|
|
809
835
|
}
|
|
810
|
-
var CAPTURE_EVENTS = new Set([
|
|
836
|
+
var CAPTURE_EVENTS = new Set([
|
|
837
|
+
"focus",
|
|
838
|
+
"blur",
|
|
839
|
+
"mouseenter",
|
|
840
|
+
"mouseleave",
|
|
841
|
+
"pointerenter",
|
|
842
|
+
"pointerleave",
|
|
843
|
+
"scroll",
|
|
844
|
+
"load",
|
|
845
|
+
"error",
|
|
846
|
+
"toggle",
|
|
847
|
+
"volumechange",
|
|
848
|
+
"play",
|
|
849
|
+
"pause",
|
|
850
|
+
"ended",
|
|
851
|
+
"timeupdate",
|
|
852
|
+
"loadedmetadata",
|
|
853
|
+
"loadeddata",
|
|
854
|
+
"canplay",
|
|
855
|
+
"canplaythrough",
|
|
856
|
+
"durationchange",
|
|
857
|
+
"ratechange",
|
|
858
|
+
"seeking",
|
|
859
|
+
"seeked",
|
|
860
|
+
"stalled",
|
|
861
|
+
"waiting"
|
|
862
|
+
]);
|
|
863
|
+
var NO_WALK_EVENTS = new Set([
|
|
864
|
+
"mouseenter",
|
|
865
|
+
"mouseleave",
|
|
866
|
+
"pointerenter",
|
|
867
|
+
"pointerleave"
|
|
868
|
+
]);
|
|
869
|
+
var PASSIVE_EVENTS = new Set(["scroll"]);
|
|
870
|
+
function listenerOptions(domEvent) {
|
|
871
|
+
const capture = CAPTURE_EVENTS.has(domEvent);
|
|
872
|
+
if (PASSIVE_EVENTS.has(domEvent)) {
|
|
873
|
+
return { capture, passive: true };
|
|
874
|
+
}
|
|
875
|
+
return capture;
|
|
876
|
+
}
|
|
811
877
|
function ensureDelegated(container, domEvent) {
|
|
812
878
|
const state = getState(container);
|
|
813
879
|
const count = state.counts.get(domEvent) ?? 0;
|
|
814
880
|
if (count === 0) {
|
|
815
|
-
container.addEventListener(domEvent, state.handler,
|
|
881
|
+
container.addEventListener(domEvent, state.handler, listenerOptions(domEvent));
|
|
816
882
|
}
|
|
817
883
|
state.counts.set(domEvent, count + 1);
|
|
818
884
|
}
|
|
@@ -821,19 +887,68 @@ function removeDelegated(container, domEvent) {
|
|
|
821
887
|
const count = state.counts.get(domEvent) ?? 0;
|
|
822
888
|
if (count <= 1) {
|
|
823
889
|
state.counts.delete(domEvent);
|
|
824
|
-
container.removeEventListener(domEvent, state.handler,
|
|
890
|
+
container.removeEventListener(domEvent, state.handler, listenerOptions(domEvent));
|
|
825
891
|
} else {
|
|
826
892
|
state.counts.set(domEvent, count - 1);
|
|
827
893
|
}
|
|
828
894
|
}
|
|
895
|
+
var POINTER_EVENTS = new Set([
|
|
896
|
+
"click",
|
|
897
|
+
"dblclick",
|
|
898
|
+
"pointerdown",
|
|
899
|
+
"pointerup",
|
|
900
|
+
"pointermove",
|
|
901
|
+
"mouseenter",
|
|
902
|
+
"mouseleave",
|
|
903
|
+
"pointerenter",
|
|
904
|
+
"pointerleave"
|
|
905
|
+
]);
|
|
906
|
+
var MEDIA_EVENTS = new Set([
|
|
907
|
+
"volumechange",
|
|
908
|
+
"play",
|
|
909
|
+
"pause",
|
|
910
|
+
"ended",
|
|
911
|
+
"timeupdate",
|
|
912
|
+
"loadedmetadata",
|
|
913
|
+
"loadeddata",
|
|
914
|
+
"canplay",
|
|
915
|
+
"canplaythrough",
|
|
916
|
+
"durationchange",
|
|
917
|
+
"ratechange",
|
|
918
|
+
"seeking",
|
|
919
|
+
"seeked",
|
|
920
|
+
"stalled",
|
|
921
|
+
"waiting"
|
|
922
|
+
]);
|
|
829
923
|
function mapEventData(domEvent, e) {
|
|
830
924
|
let data2;
|
|
831
|
-
if (domEvent
|
|
925
|
+
if (POINTER_EVENTS.has(domEvent)) {
|
|
832
926
|
const pe = e;
|
|
833
927
|
data2 = { x: pe.clientX, y: pe.clientY };
|
|
834
928
|
} else if (domEvent === "input" || domEvent === "change") {
|
|
835
929
|
const target = e.target;
|
|
836
930
|
data2 = { value: target.value, checked: !!target.checked };
|
|
931
|
+
} else if (MEDIA_EVENTS.has(domEvent)) {
|
|
932
|
+
const target = e.target;
|
|
933
|
+
data2 = {
|
|
934
|
+
muted: !!target.muted,
|
|
935
|
+
paused: !!target.paused,
|
|
936
|
+
volume: target.volume,
|
|
937
|
+
currentTime: target.currentTime,
|
|
938
|
+
duration: Number.isFinite(target.duration) ? target.duration : 0
|
|
939
|
+
};
|
|
940
|
+
} else if (domEvent === "scroll") {
|
|
941
|
+
const target = e.target;
|
|
942
|
+
data2 = {
|
|
943
|
+
scrollTop: target.scrollTop ?? 0,
|
|
944
|
+
scrollLeft: target.scrollLeft ?? 0
|
|
945
|
+
};
|
|
946
|
+
} else if (domEvent === "error") {
|
|
947
|
+
const ev = e;
|
|
948
|
+
data2 = { message: ev.message ?? "" };
|
|
949
|
+
} else if (domEvent === "toggle") {
|
|
950
|
+
const target = e.target;
|
|
951
|
+
data2 = { open: !!target.open };
|
|
837
952
|
} else if (domEvent === "keydown" || domEvent === "keyup") {
|
|
838
953
|
const ke = e;
|
|
839
954
|
data2 = { key: ke.key, code: ke.code };
|
|
@@ -1399,4 +1514,4 @@ export {
|
|
|
1399
1514
|
$primitive
|
|
1400
1515
|
};
|
|
1401
1516
|
|
|
1402
|
-
//# debugId=
|
|
1517
|
+
//# debugId=AEF6273D02CC4DF064756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -6,20 +6,20 @@
|
|
|
6
6
|
"import type { Key } from \"@/functional/key\";\nimport type { Slot, ViewBody } from \"./view\";\n\n/**\n * Maps event type { click: (e: X) => void } to\n * handler props { onClick?: (e: X) => void }.\n */\nexport type EventHandlerProps<Events> = {\n [K in keyof Events as `on${Capitalize<string & K>}`]?: Events[K];\n};\n\n/**\n * Props passed when calling a primitive in the render stream.\n * Attrs + on* event handler props + optional key.\n */\nexport type PrimitiveProps<Attrs, Events> = Attrs &\n EventHandlerProps<Events> & { key?: Key };\n\nexport const $primitive = Symbol(\"primitive\");\n\nexport function primitiveViewFn<Props>({\n slot,\n}: {\n slot: Slot;\n}): ViewBody<Props, void> {\n return {\n render() {\n slot();\n },\n };\n}\n",
|
|
7
7
|
"import type { Maybe } from \"@/functional/maybe\";\nimport type { Engine } from \"@/internal/engine\";\n\n/**\n * Orchestrator is the high-level class, that handles the oveall operations for the UI engine\n * 1. When View is rendered or updated, orchestrator is responsible of bringing the renderer, virtual dom and engine together\n * 2. Keeps track on current views / stores in the app\n * 3. Keeps track on which views need to be updated, which onces are in updating process\n * 4. Sets the current orchestrator scope (e.g. if the app has several Creo renderers)\n */\nclass Orchestrator {\n #currentEngine: Maybe<Engine>;\n\n setCurrentEngine(engine: Maybe<Engine>) {\n this.#currentEngine = engine;\n }\n\n public currentEngine(): Maybe<Engine> {\n return this.#currentEngine;\n }\n}\n\nexport const orchestrator = new Orchestrator();\n",
|
|
8
8
|
"import type { Key } from \"@/functional/key\";\nimport type { Maybe } from \"@/functional/maybe\";\nimport { orchestrator } from \"@/internal/orchestrator\";\nimport type { Use } from \"./state\";\nimport type { $primitive } from \"./primitive\";\nimport type { Wildcard } from \"@/internal/wildcard\";\n\nexport type ViewBody<Props, Api> = Api extends void\n ? {\n render: () => void;\n onMount?: () => void;\n shouldUpdate?: (nextProps: Props) => boolean;\n onUpdateBefore?: () => void;\n onUpdateAfter?: () => void;\n }\n : {\n render: () => void;\n onMount?: () => void;\n shouldUpdate?: (nextProps: Props) => boolean;\n onUpdateBefore?: () => void;\n onUpdateAfter?: () => void;\n api: Api;\n };\n\n/** Slot callback — passed by the caller at the call site. */\nexport type Slot = () => void;\n\n/** What callers may pass as a slot: a callback or a plain string (rendered as text). */\nexport type SlotContent = Slot | string;\n\nexport type ViewFn<Props, Api> = {\n (ctx: { props: () => Props; use: Use; slot: Slot }): ViewBody<Props, Api>;\n [$primitive]?: string;\n};\n\n/** Resolves to the caller-facing props type. Allows `void` when Props is void or all-optional. */\ntype ViewProps<Props> = Props extends void\n ? { key?: Key } | void\n : {} extends Props\n ? (Props & { key?: Key }) | void\n : Props & { key?: Key };\n\nexport function view<Props = void, Api = void>(\n body: ViewFn<Props, Api>,\n): (props: ViewProps<Props>, slot?: SlotContent) => void {\n return (props: ViewProps<Props>, slot?: SlotContent) => {\n orchestrator\n .currentEngine()!\n .view(\n body as ViewFn<Wildcard, Wildcard>,\n props,\n slot,\n maybeGetUserKey(props),\n );\n };\n}\n\nexport type PublicView<Props, Api> = ReturnType<typeof view<Props, Api>>;\n\nfunction maybeGetUserKey<P>(params: P): Maybe<Key> {\n if (\n params != null &&\n typeof params === \"object\" &&\n \"key\" in params &&\n params.key != null &&\n (typeof params.key === \"string\" || typeof params.key === \"number\")\n ) {\n return params.key;\n }\n}\n",
|
|
9
|
-
"import type { Wildcard } from \"@/internal/wildcard\";\nimport { $primitive, type EventHandlerProps } from \"../primitive\";\nimport {\n view,\n type PublicView,\n type Slot,\n type ViewBody,\n type ViewFn,\n} from \"../view\";\nimport { orchestrator } from \"@/internal/orchestrator\";\n\n// ---------------------------------------------------------------------------\n// Engine-agnostic event data types\n// ---------------------------------------------------------------------------\n\nexport type BaseEventData = {\n stopPropagation: () => void;\n preventDefault: () => void;\n};\n\nexport type PointerEventData = BaseEventData & {\n x: number;\n y: number;\n};\n\nexport type KeyEventData = BaseEventData & {\n key: string;\n code: string;\n};\n\nexport type InputEventData = BaseEventData & {\n value: string;\n checked: boolean;\n};\n\nexport type FocusEventData = BaseEventData;\n\n// ---------------------------------------------------------------------------\n// Event maps\n// ---------------------------------------------------------------------------\n\nexport type ContainerEvents = {\n click: (e: PointerEventData) => void;\n dblclick: (e: PointerEventData) => void;\n pointerDown: (e: PointerEventData) => void;\n pointerUp: (e: PointerEventData) => void;\n pointerMove: (e: PointerEventData) => void;\n keyDown: (e: KeyEventData) => void;\n keyUp: (e: KeyEventData) => void;\n focus: (e: FocusEventData) => void;\n blur: (e: FocusEventData) => void;\n};\n\nexport type FormEvents = ContainerEvents & {\n input: (e: InputEventData) => void;\n change: (e: InputEventData) => void;\n keyDown: (e: KeyEventData) => void;\n keyUp: (e: KeyEventData) => void;\n};\n\n// ---------------------------------------------------------------------------\n// Common HTML attributes\n// ---------------------------------------------------------------------------\n\nexport type HtmlAttrs = {\n class?: string;\n id?: string;\n style?: string;\n title?: string;\n tabindex?: number;\n hidden?: boolean;\n role?: string;\n draggable?: boolean;\n [attr: string]: unknown;\n};\n\nexport function html<\n Attrs extends HtmlAttrs = HtmlAttrs,\n Events = ContainerEvents,\n>(tag: string): PublicView<Attrs & EventHandlerProps<Events>, void> {\n const fn: ViewFn<Attrs & EventHandlerProps<Events>, void> = <Props>({\n slot,\n }: {\n slot: Slot;\n }): ViewBody<Props, void> => ({\n render() {\n slot();\n },\n });\n fn[$primitive] = tag;\n return view(fn);\n}\n\n// ---------------------------------------------------------------------------\n// Text node — typed as (content: string | number) => void\n// ---------------------------------------------------------------------------\n\nexport const textViewFn: ViewFn<string | number, void> = Object.assign(\n (() => ({ render() {} })) as ViewFn<string | number, void>,\n { [$primitive]: \"text\" as string },\n);\n\nexport function text(content: string | number): void {\n orchestrator.currentEngine()!.view(textViewFn, content, null, null);\n}\n\n// ---------------------------------------------------------------------------\n// Layout / structural\n// ---------------------------------------------------------------------------\n\nexport const div = html(\"div\");\nexport const span = html(\"span\");\nexport const section = html(\"section\");\nexport const article = html(\"article\");\nexport const aside = html(\"aside\");\nexport const nav = html(\"nav\");\nexport const header = html(\"header\");\nexport const footer = html(\"footer\");\nexport const main = html(\"main\");\n\n// ---------------------------------------------------------------------------\n// Text / inline\n// ---------------------------------------------------------------------------\n\nexport const p = html(\"p\");\nexport const h1 = html(\"h1\");\nexport const h2 = html(\"h2\");\nexport const h3 = html(\"h3\");\nexport const h4 = html(\"h4\");\nexport const h5 = html(\"h5\");\nexport const h6 = html(\"h6\");\nexport const pre = html(\"pre\");\nexport const code = html(\"code\");\nexport const em = html(\"em\");\nexport const strong = html(\"strong\");\nexport const small = html(\"small\");\nexport const br = html(\"br\");\nexport const hr = html(\"hr\");\nexport const a = html<\n HtmlAttrs & { href?: string; target?: string },\n ContainerEvents\n>(\"a\");\nexport const blockquote = html(\"blockquote\");\nexport const label = html<HtmlAttrs & { for?: string }, ContainerEvents>(\n \"label\",\n);\n\n// ---------------------------------------------------------------------------\n// Lists\n// ---------------------------------------------------------------------------\n\nexport const ul = html(\"ul\");\nexport const ol = html(\"ol\");\nexport const li = html(\"li\");\n\n// ---------------------------------------------------------------------------\n// Table\n// ---------------------------------------------------------------------------\n\nexport const table = html(\"table\");\nexport const thead = html(\"thead\");\nexport const tbody = html(\"tbody\");\nexport const tfoot = html(\"tfoot\");\nexport const tr = html(\"tr\");\nexport const th = html<\n HtmlAttrs & { colspan?: number; rowspan?: number; scope?: string },\n ContainerEvents\n>(\"th\");\nexport const td = html<\n HtmlAttrs & { colspan?: number; rowspan?: number },\n ContainerEvents\n>(\"td\");\n\n// ---------------------------------------------------------------------------\n// Form\n// ---------------------------------------------------------------------------\n\nexport const form = html<\n HtmlAttrs & { action?: string; method?: string },\n ContainerEvents\n>(\"form\");\n\nexport const button = html<\n HtmlAttrs & { disabled?: boolean; type?: string },\n ContainerEvents\n>(\"button\");\n\nexport const input = html<\n HtmlAttrs & {\n type?: string;\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n checked?: boolean;\n readOnly?: boolean;\n name?: string;\n min?: string;\n max?: string;\n step?: string;\n pattern?: string;\n required?: boolean;\n autofocus?: boolean;\n },\n FormEvents\n>(\"input\");\n\nexport const textarea = html<\n HtmlAttrs & {\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n rows?: number;\n cols?: number;\n name?: string;\n required?: boolean;\n },\n FormEvents\n>(\"textarea\");\n\nexport const select = html<\n HtmlAttrs & {\n value?: string;\n disabled?: boolean;\n name?: string;\n multiple?: boolean;\n required?: boolean;\n },\n FormEvents\n>(\"select\");\n\nexport const option = html<\n HtmlAttrs & { value?: string; selected?: boolean; disabled?: boolean },\n ContainerEvents\n>(\"option\");\n\nexport const fieldset = html<\n HtmlAttrs & { disabled?: boolean },\n ContainerEvents\n>(\"fieldset\");\nexport const legend = html(\"legend\");\n\n// ---------------------------------------------------------------------------\n// Media\n// ---------------------------------------------------------------------------\n\nexport const img = html<\n HtmlAttrs & { src: string; alt?: string; width?: number; height?: number },\n ContainerEvents\n>(\"img\");\n\nexport const video = html<\n HtmlAttrs & {\n src?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n width?: number;\n height?: number;\n },\n ContainerEvents\n>(\"video\");\n\nexport const audio = html<\n HtmlAttrs & {\n src?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n },\n ContainerEvents\n>(\"audio\");\n\nexport const canvas = html<\n HtmlAttrs & { width?: number; height?: number },\n ContainerEvents\n>(\"canvas\");\n\nexport const source = html<\n HtmlAttrs & { src?: string; type?: string },\n ContainerEvents\n>(\"source\");\n\n// ---------------------------------------------------------------------------\n// Interactive\n// ---------------------------------------------------------------------------\n\nexport const details = html<HtmlAttrs & { open?: boolean }, ContainerEvents>(\n \"details\",\n);\nexport const summary = html(\"summary\");\nexport const dialog = html<HtmlAttrs & { open?: boolean }, ContainerEvents>(\n \"dialog\",\n);\nexport const menu = html(\"menu\");\n\n// ---------------------------------------------------------------------------\n// Embedded content\n// ---------------------------------------------------------------------------\n\nexport const iframe = html<\n HtmlAttrs & {\n src?: string;\n width?: number;\n height?: number;\n sandbox?: string;\n allow?: string;\n loading?: string;\n referrerpolicy?: string;\n },\n ContainerEvents\n>(\"iframe\");\nexport const embed = html<\n HtmlAttrs & { src?: string; type?: string; width?: number; height?: number },\n ContainerEvents\n>(\"embed\");\nexport const object = html<\n HtmlAttrs & {\n data?: string;\n type?: string;\n width?: number;\n height?: number;\n name?: string;\n },\n ContainerEvents\n>(\"object\");\nexport const picture = html(\"picture\");\nexport const portal = html<HtmlAttrs & { src?: string }, ContainerEvents>(\n \"portal\",\n);\n\n// ---------------------------------------------------------------------------\n// SVG (container only — inner SVG elements use html() ad-hoc)\n// ---------------------------------------------------------------------------\n\nexport const svg = html<\n HtmlAttrs & {\n viewBox?: string;\n xmlns?: string;\n width?: number | string;\n height?: number | string;\n fill?: string;\n },\n ContainerEvents\n>(\"svg\");\n\n// ---------------------------------------------------------------------------\n// Scripting / metadata (rarely used in render, but complete for parity)\n// ---------------------------------------------------------------------------\n\nexport const script = html<\n HtmlAttrs & { src?: string; type?: string; async?: boolean; defer?: boolean },\n ContainerEvents\n>(\"script\");\nexport const noscript = html(\"noscript\");\nexport const template = html(\"template\");\nexport const slot = html<HtmlAttrs & { name?: string }, ContainerEvents>(\n \"slot\",\n);\n\n// ---------------------------------------------------------------------------\n// Sectioning\n// ---------------------------------------------------------------------------\n\nexport const address = html(\"address\");\nexport const hgroup = html(\"hgroup\");\nexport const search = html(\"search\");\n\n// ---------------------------------------------------------------------------\n// Text semantics\n// ---------------------------------------------------------------------------\n\nexport const abbr = html(\"abbr\");\nexport const b = html(\"b\");\nexport const bdi = html(\"bdi\");\nexport const bdo = html<HtmlAttrs & { dir?: string }, ContainerEvents>(\"bdo\");\nexport const cite = html(\"cite\");\nexport const data = html<HtmlAttrs & { value?: string }, ContainerEvents>(\n \"data\",\n);\nexport const dfn = html(\"dfn\");\nexport const i = html(\"i\");\nexport const kbd = html(\"kbd\");\nexport const mark = html(\"mark\");\nexport const q = html<HtmlAttrs & { cite?: string }, ContainerEvents>(\"q\");\nexport const rp = html(\"rp\");\nexport const rt = html(\"rt\");\nexport const ruby = html(\"ruby\");\nexport const s = html(\"s\");\nexport const samp = html(\"samp\");\nexport const sub = html(\"sub\");\nexport const sup = html(\"sup\");\nexport const time = html<HtmlAttrs & { datetime?: string }, ContainerEvents>(\n \"time\",\n);\nexport const u = html(\"u\");\nexport const varEl = html(\"var\");\nexport const wbr = html(\"wbr\");\n\n// ---------------------------------------------------------------------------\n// Demarcating edits\n// ---------------------------------------------------------------------------\n\nexport const del = html<\n HtmlAttrs & { cite?: string; datetime?: string },\n ContainerEvents\n>(\"del\");\nexport const ins = html<\n HtmlAttrs & { cite?: string; datetime?: string },\n ContainerEvents\n>(\"ins\");\n\n// ---------------------------------------------------------------------------\n// Table (additional)\n// ---------------------------------------------------------------------------\n\nexport const caption = html(\"caption\");\nexport const colgroup = html<HtmlAttrs & { span?: number }, ContainerEvents>(\n \"colgroup\",\n);\nexport const col = html<HtmlAttrs & { span?: number }, ContainerEvents>(\"col\");\n\n// ---------------------------------------------------------------------------\n// Form (additional)\n// ---------------------------------------------------------------------------\n\nexport const datalist = html(\"datalist\");\nexport const optgroup = html<\n HtmlAttrs & { label?: string; disabled?: boolean },\n ContainerEvents\n>(\"optgroup\");\nexport const output = html<\n HtmlAttrs & { for?: string; name?: string },\n ContainerEvents\n>(\"output\");\nexport const progress = html<\n HtmlAttrs & { value?: number; max?: number },\n ContainerEvents\n>(\"progress\");\nexport const meter = html<\n HtmlAttrs & {\n value?: number;\n min?: number;\n max?: number;\n low?: number;\n high?: number;\n optimum?: number;\n },\n ContainerEvents\n>(\"meter\");\n\n// ---------------------------------------------------------------------------\n// Figure\n// ---------------------------------------------------------------------------\n\nexport const figure = html(\"figure\");\nexport const figcaption = html(\"figcaption\");\n\n// ---------------------------------------------------------------------------\n// Line break opportunity / content\n// ---------------------------------------------------------------------------\n\nexport const dd = html(\"dd\");\nexport const dl = html(\"dl\");\nexport const dt = html(\"dt\");\n\n// ---------------------------------------------------------------------------\n// Media (additional)\n// ---------------------------------------------------------------------------\n\nexport const track = html<\n HtmlAttrs & {\n src?: string;\n kind?: string;\n srclang?: string;\n label?: string;\n default?: boolean;\n },\n ContainerEvents\n>(\"track\");\nexport const map = html<HtmlAttrs & { name?: string }, ContainerEvents>(\"map\");\nexport const area = html<\n HtmlAttrs & {\n alt?: string;\n coords?: string;\n href?: string;\n shape?: string;\n target?: string;\n },\n ContainerEvents\n>(\"area\");\n",
|
|
9
|
+
"import type { Wildcard } from \"@/internal/wildcard\";\nimport { $primitive, type EventHandlerProps } from \"../primitive\";\nimport {\n view,\n type PublicView,\n type Slot,\n type ViewBody,\n type ViewFn,\n} from \"../view\";\nimport { orchestrator } from \"@/internal/orchestrator\";\n\n// ---------------------------------------------------------------------------\n// Engine-agnostic event data types\n// ---------------------------------------------------------------------------\n\nexport type BaseEventData = {\n stopPropagation: () => void;\n preventDefault: () => void;\n};\n\nexport type PointerEventData = BaseEventData & {\n x: number;\n y: number;\n};\n\nexport type KeyEventData = BaseEventData & {\n key: string;\n code: string;\n};\n\nexport type InputEventData = BaseEventData & {\n value: string;\n checked: boolean;\n};\n\nexport type FocusEventData = BaseEventData;\n\nexport type ScrollEventData = BaseEventData & {\n scrollTop: number;\n scrollLeft: number;\n};\n\nexport type LoadEventData = BaseEventData;\n\nexport type ErrorEventData = BaseEventData & {\n message: string;\n};\n\nexport type ToggleEventData = BaseEventData & {\n open: boolean;\n};\n\nexport type MediaEventData = BaseEventData & {\n muted: boolean;\n paused: boolean;\n volume: number;\n currentTime: number;\n duration: number;\n};\n\n// ---------------------------------------------------------------------------\n// Event maps\n// ---------------------------------------------------------------------------\n\nexport type ContainerEvents = {\n click: (e: PointerEventData) => void;\n dblclick: (e: PointerEventData) => void;\n pointerDown: (e: PointerEventData) => void;\n pointerUp: (e: PointerEventData) => void;\n pointerMove: (e: PointerEventData) => void;\n // Hover (capture-phase, per-target, not double-fired up the tree).\n mouseEnter: (e: PointerEventData) => void;\n mouseLeave: (e: PointerEventData) => void;\n pointerEnter: (e: PointerEventData) => void;\n pointerLeave: (e: PointerEventData) => void;\n keyDown: (e: KeyEventData) => void;\n keyUp: (e: KeyEventData) => void;\n focus: (e: FocusEventData) => void;\n blur: (e: FocusEventData) => void;\n // Scroll fires passively at high frequency; preventDefault is a no-op.\n scroll: (e: ScrollEventData) => void;\n load: (e: LoadEventData) => void;\n error: (e: ErrorEventData) => void;\n};\n\nexport type FormEvents = ContainerEvents & {\n input: (e: InputEventData) => void;\n change: (e: InputEventData) => void;\n keyDown: (e: KeyEventData) => void;\n keyUp: (e: KeyEventData) => void;\n};\n\nexport type MediaEvents = ContainerEvents & {\n volumeChange: (e: MediaEventData) => void;\n play: (e: MediaEventData) => void;\n pause: (e: MediaEventData) => void;\n ended: (e: MediaEventData) => void;\n timeUpdate: (e: MediaEventData) => void;\n loadedMetadata: (e: MediaEventData) => void;\n loadedData: (e: MediaEventData) => void;\n canPlay: (e: MediaEventData) => void;\n canPlayThrough: (e: MediaEventData) => void;\n durationChange: (e: MediaEventData) => void;\n rateChange: (e: MediaEventData) => void;\n seeking: (e: MediaEventData) => void;\n seeked: (e: MediaEventData) => void;\n stalled: (e: MediaEventData) => void;\n waiting: (e: MediaEventData) => void;\n};\n\nexport type DisclosureEvents = ContainerEvents & {\n toggle: (e: ToggleEventData) => void;\n};\n\n// ---------------------------------------------------------------------------\n// Common HTML attributes\n// ---------------------------------------------------------------------------\n\nexport type HtmlAttrs = {\n class?: string;\n id?: string;\n style?: string;\n title?: string;\n tabindex?: number;\n hidden?: boolean;\n role?: string;\n draggable?: boolean;\n [attr: string]: unknown;\n};\n\nexport function html<\n Attrs extends HtmlAttrs = HtmlAttrs,\n Events = ContainerEvents,\n>(tag: string): PublicView<Attrs & EventHandlerProps<Events>, void> {\n const fn: ViewFn<Attrs & EventHandlerProps<Events>, void> = <Props>({\n slot,\n }: {\n slot: Slot;\n }): ViewBody<Props, void> => ({\n render() {\n slot();\n },\n });\n fn[$primitive] = tag;\n return view(fn);\n}\n\n// ---------------------------------------------------------------------------\n// Text node — typed as (content: string | number) => void\n// ---------------------------------------------------------------------------\n\nexport const textViewFn: ViewFn<string | number, void> = Object.assign(\n (() => ({ render() {} })) as ViewFn<string | number, void>,\n { [$primitive]: \"text\" as string },\n);\n\nexport function text(content: string | number): void {\n orchestrator.currentEngine()!.view(textViewFn, content, null, null);\n}\n\n// ---------------------------------------------------------------------------\n// Layout / structural\n// ---------------------------------------------------------------------------\n\nexport const div = html(\"div\");\nexport const span = html(\"span\");\nexport const section = html(\"section\");\nexport const article = html(\"article\");\nexport const aside = html(\"aside\");\nexport const nav = html(\"nav\");\nexport const header = html(\"header\");\nexport const footer = html(\"footer\");\nexport const main = html(\"main\");\n\n// ---------------------------------------------------------------------------\n// Text / inline\n// ---------------------------------------------------------------------------\n\nexport const p = html(\"p\");\nexport const h1 = html(\"h1\");\nexport const h2 = html(\"h2\");\nexport const h3 = html(\"h3\");\nexport const h4 = html(\"h4\");\nexport const h5 = html(\"h5\");\nexport const h6 = html(\"h6\");\nexport const pre = html(\"pre\");\nexport const code = html(\"code\");\nexport const em = html(\"em\");\nexport const strong = html(\"strong\");\nexport const small = html(\"small\");\nexport const br = html(\"br\");\nexport const hr = html(\"hr\");\nexport const a = html<\n HtmlAttrs & { href?: string; target?: string },\n ContainerEvents\n>(\"a\");\nexport const blockquote = html(\"blockquote\");\nexport const label = html<HtmlAttrs & { for?: string }, ContainerEvents>(\n \"label\",\n);\n\n// ---------------------------------------------------------------------------\n// Lists\n// ---------------------------------------------------------------------------\n\nexport const ul = html(\"ul\");\nexport const ol = html(\"ol\");\nexport const li = html(\"li\");\n\n// ---------------------------------------------------------------------------\n// Table\n// ---------------------------------------------------------------------------\n\nexport const table = html(\"table\");\nexport const thead = html(\"thead\");\nexport const tbody = html(\"tbody\");\nexport const tfoot = html(\"tfoot\");\nexport const tr = html(\"tr\");\nexport const th = html<\n HtmlAttrs & { colspan?: number; rowspan?: number; scope?: string },\n ContainerEvents\n>(\"th\");\nexport const td = html<\n HtmlAttrs & { colspan?: number; rowspan?: number },\n ContainerEvents\n>(\"td\");\n\n// ---------------------------------------------------------------------------\n// Form\n// ---------------------------------------------------------------------------\n\nexport const form = html<\n HtmlAttrs & { action?: string; method?: string },\n ContainerEvents\n>(\"form\");\n\nexport const button = html<\n HtmlAttrs & { disabled?: boolean; type?: string },\n ContainerEvents\n>(\"button\");\n\nexport const input = html<\n HtmlAttrs & {\n type?: string;\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n checked?: boolean;\n readOnly?: boolean;\n name?: string;\n min?: string;\n max?: string;\n step?: string;\n pattern?: string;\n required?: boolean;\n autofocus?: boolean;\n },\n FormEvents\n>(\"input\");\n\nexport const textarea = html<\n HtmlAttrs & {\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n rows?: number;\n cols?: number;\n name?: string;\n required?: boolean;\n },\n FormEvents\n>(\"textarea\");\n\nexport const select = html<\n HtmlAttrs & {\n value?: string;\n disabled?: boolean;\n name?: string;\n multiple?: boolean;\n required?: boolean;\n },\n FormEvents\n>(\"select\");\n\nexport const option = html<\n HtmlAttrs & { value?: string; selected?: boolean; disabled?: boolean },\n ContainerEvents\n>(\"option\");\n\nexport const fieldset = html<\n HtmlAttrs & { disabled?: boolean },\n ContainerEvents\n>(\"fieldset\");\nexport const legend = html(\"legend\");\n\n// ---------------------------------------------------------------------------\n// Media\n// ---------------------------------------------------------------------------\n\nexport const img = html<\n HtmlAttrs & { src: string; alt?: string; width?: number; height?: number },\n ContainerEvents\n>(\"img\");\n\nexport const video = html<\n HtmlAttrs & {\n src?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n width?: number;\n height?: number;\n },\n MediaEvents\n>(\"video\");\n\nexport const audio = html<\n HtmlAttrs & {\n src?: string;\n controls?: boolean;\n autoplay?: boolean;\n loop?: boolean;\n muted?: boolean;\n },\n MediaEvents\n>(\"audio\");\n\nexport const canvas = html<\n HtmlAttrs & { width?: number; height?: number },\n ContainerEvents\n>(\"canvas\");\n\nexport const source = html<\n HtmlAttrs & { src?: string; type?: string },\n ContainerEvents\n>(\"source\");\n\n// ---------------------------------------------------------------------------\n// Interactive\n// ---------------------------------------------------------------------------\n\nexport const details = html<HtmlAttrs & { open?: boolean }, DisclosureEvents>(\n \"details\",\n);\nexport const summary = html(\"summary\");\nexport const dialog = html<HtmlAttrs & { open?: boolean }, DisclosureEvents>(\n \"dialog\",\n);\nexport const menu = html(\"menu\");\n\n// ---------------------------------------------------------------------------\n// Embedded content\n// ---------------------------------------------------------------------------\n\nexport const iframe = html<\n HtmlAttrs & {\n src?: string;\n width?: number;\n height?: number;\n sandbox?: string;\n allow?: string;\n loading?: string;\n referrerpolicy?: string;\n },\n ContainerEvents\n>(\"iframe\");\nexport const embed = html<\n HtmlAttrs & { src?: string; type?: string; width?: number; height?: number },\n ContainerEvents\n>(\"embed\");\nexport const object = html<\n HtmlAttrs & {\n data?: string;\n type?: string;\n width?: number;\n height?: number;\n name?: string;\n },\n ContainerEvents\n>(\"object\");\nexport const picture = html(\"picture\");\nexport const portal = html<HtmlAttrs & { src?: string }, ContainerEvents>(\n \"portal\",\n);\n\n// ---------------------------------------------------------------------------\n// SVG (container only — inner SVG elements use html() ad-hoc)\n// ---------------------------------------------------------------------------\n\nexport const svg = html<\n HtmlAttrs & {\n viewBox?: string;\n xmlns?: string;\n width?: number | string;\n height?: number | string;\n fill?: string;\n },\n ContainerEvents\n>(\"svg\");\n\n// ---------------------------------------------------------------------------\n// Scripting / metadata (rarely used in render, but complete for parity)\n// ---------------------------------------------------------------------------\n\nexport const script = html<\n HtmlAttrs & { src?: string; type?: string; async?: boolean; defer?: boolean },\n ContainerEvents\n>(\"script\");\nexport const noscript = html(\"noscript\");\nexport const template = html(\"template\");\nexport const slot = html<HtmlAttrs & { name?: string }, ContainerEvents>(\n \"slot\",\n);\n\n// ---------------------------------------------------------------------------\n// Sectioning\n// ---------------------------------------------------------------------------\n\nexport const address = html(\"address\");\nexport const hgroup = html(\"hgroup\");\nexport const search = html(\"search\");\n\n// ---------------------------------------------------------------------------\n// Text semantics\n// ---------------------------------------------------------------------------\n\nexport const abbr = html(\"abbr\");\nexport const b = html(\"b\");\nexport const bdi = html(\"bdi\");\nexport const bdo = html<HtmlAttrs & { dir?: string }, ContainerEvents>(\"bdo\");\nexport const cite = html(\"cite\");\nexport const data = html<HtmlAttrs & { value?: string }, ContainerEvents>(\n \"data\",\n);\nexport const dfn = html(\"dfn\");\nexport const i = html(\"i\");\nexport const kbd = html(\"kbd\");\nexport const mark = html(\"mark\");\nexport const q = html<HtmlAttrs & { cite?: string }, ContainerEvents>(\"q\");\nexport const rp = html(\"rp\");\nexport const rt = html(\"rt\");\nexport const ruby = html(\"ruby\");\nexport const s = html(\"s\");\nexport const samp = html(\"samp\");\nexport const sub = html(\"sub\");\nexport const sup = html(\"sup\");\nexport const time = html<HtmlAttrs & { datetime?: string }, ContainerEvents>(\n \"time\",\n);\nexport const u = html(\"u\");\nexport const varEl = html(\"var\");\nexport const wbr = html(\"wbr\");\n\n// ---------------------------------------------------------------------------\n// Demarcating edits\n// ---------------------------------------------------------------------------\n\nexport const del = html<\n HtmlAttrs & { cite?: string; datetime?: string },\n ContainerEvents\n>(\"del\");\nexport const ins = html<\n HtmlAttrs & { cite?: string; datetime?: string },\n ContainerEvents\n>(\"ins\");\n\n// ---------------------------------------------------------------------------\n// Table (additional)\n// ---------------------------------------------------------------------------\n\nexport const caption = html(\"caption\");\nexport const colgroup = html<HtmlAttrs & { span?: number }, ContainerEvents>(\n \"colgroup\",\n);\nexport const col = html<HtmlAttrs & { span?: number }, ContainerEvents>(\"col\");\n\n// ---------------------------------------------------------------------------\n// Form (additional)\n// ---------------------------------------------------------------------------\n\nexport const datalist = html(\"datalist\");\nexport const optgroup = html<\n HtmlAttrs & { label?: string; disabled?: boolean },\n ContainerEvents\n>(\"optgroup\");\nexport const output = html<\n HtmlAttrs & { for?: string; name?: string },\n ContainerEvents\n>(\"output\");\nexport const progress = html<\n HtmlAttrs & { value?: number; max?: number },\n ContainerEvents\n>(\"progress\");\nexport const meter = html<\n HtmlAttrs & {\n value?: number;\n min?: number;\n max?: number;\n low?: number;\n high?: number;\n optimum?: number;\n },\n ContainerEvents\n>(\"meter\");\n\n// ---------------------------------------------------------------------------\n// Figure\n// ---------------------------------------------------------------------------\n\nexport const figure = html(\"figure\");\nexport const figcaption = html(\"figcaption\");\n\n// ---------------------------------------------------------------------------\n// Line break opportunity / content\n// ---------------------------------------------------------------------------\n\nexport const dd = html(\"dd\");\nexport const dl = html(\"dl\");\nexport const dt = html(\"dt\");\n\n// ---------------------------------------------------------------------------\n// Media (additional)\n// ---------------------------------------------------------------------------\n\nexport const track = html<\n HtmlAttrs & {\n src?: string;\n kind?: string;\n srclang?: string;\n label?: string;\n default?: boolean;\n },\n ContainerEvents\n>(\"track\");\nexport const map = html<HtmlAttrs & { name?: string }, ContainerEvents>(\"map\");\nexport const area = html<\n HtmlAttrs & {\n alt?: string;\n coords?: string;\n href?: string;\n shape?: string;\n target?: string;\n },\n ContainerEvents\n>(\"area\");\n",
|
|
10
10
|
"import type { MaybePromise } from \"@/functional/maybe_promise\";\n\n/**\n * Reactive value — the shared interface returned by `use()`.\n * Both local state and store bindings implement this.\n */\nexport interface Reactive<T> {\n get(): T;\n set(value: T): void;\n update(fn: (current: T) => MaybePromise<T>): void;\n}\n\n/**\n * A single reactive state slot.\n * Returned by calling use(initial) during view init.\n *\n * const count = use(0);\n * count.get() // read current value\n * count.set(5) // set immediately, schedule render\n * count.update(n => n + 1) // update via fn, schedule render\n */\nexport class State<T> implements Reactive<T> {\n #current: T;\n #schedule: () => void;\n\n constructor(initial: T, schedule: () => void) {\n this.#current = initial;\n this.#schedule = schedule;\n }\n\n get(): T {\n return this.#current;\n }\n\n set(value: T): void {\n this.#current = value;\n this.#schedule();\n }\n\n update(fn: (current: T) => MaybePromise<T>): void {\n const result = fn(this.#current);\n if (result instanceof Promise) {\n result.then((value) => {\n this.#current = value;\n this.#schedule();\n });\n } else {\n this.#current = result;\n this.#schedule();\n }\n }\n}\n\n/**\n * Use factory bound to a view.\n * Tracks instances by call order (like React hooks).\n *\n * use(store) — subscribe to a Store, returns Store<T> (Reactive<T>)\n * use(initial) — create local State<T> (Reactive<T>)\n */\nexport type Use = {\n <T>(storeOrInitial: import(\"@/public/store\").Store<T>): Reactive<T>;\n <T>(initial: T): Reactive<T>;\n};\n",
|
|
11
11
|
"import type { MaybePromise } from \"@/functional/maybe_promise\";\n\nconst $store = Symbol(\"store\");\n\n/**\n * Store — globally visible reactive data.\n *\n * Create a store:\n * const ThemeStore = store.new(\"light\");\n *\n * Set from anywhere:\n * ThemeStore.set(\"dark\"); // updates all subscribers\n *\n * Read from a view:\n * const myView = view(({ use }) => {\n * const theme = use(ThemeStore); // re-renders on change\n * return {\n * render() {\n * div(() => text(`Current theme: ${theme.get()}`));\n * }\n * };\n * });\n */\nexport class Store<T> {\n readonly [$store] = true;\n #current: T;\n #subscribers = new Set<() => void>();\n\n constructor(initial: T) {\n this.#current = initial;\n }\n\n get(): T {\n return this.#current;\n }\n\n set(value: T): void {\n this.#current = value;\n this.#notify();\n }\n\n update(fn: (current: T) => MaybePromise<T>): void {\n const result = fn(this.#current);\n if (result instanceof Promise) {\n result.then((value) => {\n this.#current = value;\n this.#notify();\n });\n } else {\n this.#current = result;\n this.#notify();\n }\n }\n\n subscribe(cb: () => void): () => void {\n this.#subscribers.add(cb);\n return () => {\n this.#subscribers.delete(cb);\n };\n }\n\n #notify(): void {\n for (const sub of this.#subscribers) {\n sub();\n }\n }\n}\n\nexport function isStore(value: unknown): value is Store<unknown> {\n return value != null && typeof value === \"object\" && $store in value;\n}\n\nexport const store = {\n new<T>(initial: T): Store<T> {\n return new Store(initial);\n },\n};\n",
|
|
12
12
|
"import type { Wildcard } from \"@/internal/wildcard\";\n\nexport function shallowEqual(a: Wildcard, b: Wildcard): boolean {\n if (a === b) return true;\n\n if (\n typeof a !== \"object\" ||\n a === null ||\n typeof b !== \"object\" ||\n b === null\n ) {\n return false;\n }\n\n // Avoid Object.keys() allocations — use for...in instead\n let countA = 0;\n for (const key in a) {\n countA++;\n // @ts-ignore\n if (!Object.is(a[key], b[key])) return false;\n }\n\n let countB = 0;\n for (const _ in b) countB++;\n\n return countA === countB;\n}\n",
|
|
13
13
|
"/**\n * Longest Increasing Subsequence — O(n log n).\n *\n * Given an array of numbers, returns the Set of *indices* into that array\n * whose elements form the longest strictly increasing subsequence.\n * Entries equal to -1 are skipped (treated as \"not present\").\n *\n * Used by the keyed reconciler to identify the maximal set of children\n * that are already in correct relative order and don't need DOM moves.\n */\nexport function lis(arr: number[]): Set<number> {\n const len = arr.length;\n if (len === 0) return new Set();\n\n // tails[k] = index into arr of the smallest tail element for an IS of length k+1\n const tails: number[] = [];\n // prev[i] = index into arr of the predecessor of arr[i] in the LIS\n const prev = new Array<number>(len).fill(-1);\n\n for (let i = 0; i < len; i++) {\n if (arr[i]! < 0) continue; // skip -1 entries\n\n const val = arr[i]!;\n\n // Binary search for the leftmost tail >= val\n let lo = 0;\n let hi = tails.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (arr[tails[mid]!]! < val) lo = mid + 1;\n else hi = mid;\n }\n\n // lo is the position where val should go\n if (lo > 0) prev[i] = tails[lo - 1]!;\n tails[lo] = i;\n }\n\n // Backtrack from the last element of tails to reconstruct the LIS\n const result = new Set<number>();\n if (tails.length === 0) return result;\n\n let idx = tails[tails.length - 1]!;\n for (let k = tails.length - 1; k >= 0; k--) {\n result.add(idx);\n idx = prev[idx]!;\n }\n\n return result;\n}\n",
|
|
14
14
|
"import type { IRender } from \"@/render/render_interface\";\nimport {\n type ViewRecord,\n hasScStructuralChange,\n F_DIRTY,\n F_MOVED,\n F_PRIMITIVE,\n F_PENDING,\n F_DISPOSED,\n} from \"./internal_view\";\nimport type { Wildcard } from \"./wildcard\";\nimport { type Maybe } from \"@/functional/maybe\";\nimport type { Key } from \"@/functional/key\";\nimport type { Slot, SlotContent, ViewFn } from \"@/public/view\";\nimport { textViewFn } from \"@/public/primitives/primitives\";\nimport { $primitive } from \"@/public/primitive\";\nimport { State, type Reactive } from \"@/public/state\";\nimport { Store, isStore } from \"@/public/store\";\nimport { shallowEqual } from \"@/functional/shallow_equal\";\nimport { lis } from \"@/functional/lis\";\nimport { orchestrator } from \"./orchestrator\";\n\nexport type Scheduler = (callback: () => void) => void;\n\n// Primitive props that map to live DOM properties whose value can drift away\n// from the rendered prop via user input (typing in an input, toggling a\n// checkbox, muting a video). For these keys we cannot trust shallowEqual to\n// mean \"DOM is up to date\" — re-render the primitive so the renderer can\n// re-assert the live property.\nconst STATEFUL_DOM_KEYS = [\"value\", \"checked\", \"selected\", \"indeterminate\", \"muted\"] as const;\nfunction hasStatefulDomKey(props: unknown): boolean {\n if (props == null || typeof props !== \"object\") return false;\n for (const k of STATEFUL_DOM_KEYS) {\n if (k in (props as object)) return true;\n }\n return false;\n}\n\nexport class Engine {\n #dirtyQueue = new Set<ViewRecord>();\n #collector: Maybe<ViewRecord[]>;\n #collectFor: Maybe<ViewRecord>;\n\n #scheduler: Scheduler;\n #renderScheduled = false;\n #rendering = false;\n\n constructor(\n public renderer: IRender<Wildcard>,\n scheduler?: Scheduler,\n ) {\n this.#scheduler = scheduler ?? ((cb) => queueMicrotask(cb));\n renderer.engine = this;\n }\n\n // -- Record initialization --------------------------------------------------\n newView<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n viewFn: ViewFn<Props, Api>,\n parent: Maybe<ViewRecord>,\n props: Props,\n slot: Maybe<SlotContent>,\n userKey: Maybe<Key>,\n ): ViewRecord {\n const res: ViewRecord = {\n viewFn,\n userKey,\n props,\n slot,\n // View was not rendered yet, so there is no body\n body: null,\n // slot was not called _yet_, so there is no slot children\n sc: null,\n // there is no renderer _yet_\n renderRef: null,\n\n flags: F_PENDING | (viewFn[$primitive] != null ? F_PRIMITIVE : 0),\n\n children: null,\n\n keyToView: null,\n unsubscribe: null,\n parent,\n scHost: null,\n };\n if (slot) {\n const slotFn = typeof slot === \"string\" ? this.#stringSlot(slot) : slot;\n res.sc = this.#collect(slotFn, [], res);\n }\n return res;\n }\n\n // called when view renders view\n // Saved potential pending view to collector for further reconsilication\n view<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n viewFn: ViewFn<Props, Api>,\n props: Props,\n slot: Maybe<SlotContent>,\n userKey: Maybe<Key>,\n ): ViewRecord<Props, Api, RenderRef> {\n const view = this.newView(viewFn, this.#collectFor, props, slot, userKey);\n this.#collector?.push(view);\n return view;\n }\n\n views(views: Maybe<ViewRecord[]>): void {\n if (views) this.#collector?.push(...views);\n }\n\n // ViewRecord already exist, but we still need to initialise the whole record\n initViewBody(view: ViewRecord): void {\n // Only for non initialised views:\n if (!(view.flags & F_PENDING)) return;\n\n view.flags &= ~F_PENDING;\n\n // If view is primitive\n if (view.flags & F_PRIMITIVE) {\n const engine = this;\n view.body = {\n render() {\n engine.views(view.sc);\n },\n };\n return;\n }\n // View is composite\n view.body = view.viewFn({\n props: () => view.props,\n use: <T>(storeOrState: T | Store<T>): Reactive<T> => {\n if (!isStore(storeOrState)) {\n return new State(storeOrState, () => this.markDirty(view));\n }\n const s = storeOrState;\n const unsub = s.subscribe(() => this.markDirty(view));\n if (!view.unsubscribe) view.unsubscribe = [];\n view.unsubscribe.push(unsub);\n return s;\n },\n slot: () => {\n if (!view.sc) return;\n view.scHost = this.#collectFor ?? view;\n for (const child of view.sc) {\n child.parent = this.#collectFor ?? view;\n this.#collector?.push(child);\n }\n },\n });\n }\n\n createRoot(children: () => void, props: Wildcard): ViewRecord {\n orchestrator.setCurrentEngine(this);\n const view = this.newView(\n ({ slot }) => ({\n render() {\n slot();\n },\n }),\n null,\n props,\n children,\n null,\n );\n this.markDirty(view);\n return view;\n }\n\n // -- Dirty tracking ---------------------------------------------------------\n\n markDirty<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n view: ViewRecord<Props, Api, RenderRef>,\n ): void {\n if (view.flags & F_DISPOSED) return;\n if (view.flags & F_DIRTY) {\n return;\n }\n view.flags |= F_DIRTY;\n this.#dirtyQueue.add(view);\n this.schedule();\n }\n\n markMoved<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n view: ViewRecord<Props, Api, RenderRef>,\n ): void {\n if (view.flags & F_DISPOSED) return;\n if (view.flags & F_MOVED) {\n return;\n }\n view.flags |= F_MOVED;\n this.#dirtyQueue.add(view);\n this.schedule();\n }\n\n // #removeDirty<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n // view: ViewRecord<Props, Api, RenderRef>,\n // ): void {\n // view.flags &= ~F_DIRTY;\n // view.flags &= ~F_MOVED;\n // this.#dirtyQueue.delete(view);\n // }\n\n schedule(): void {\n if (this.#renderScheduled) return;\n this.#renderScheduled = true;\n this.#scheduler(() => {\n this.#renderScheduled = false;\n this.render();\n });\n }\n\n // -- Collector --------------------------------------------------------------\n\n #collect(\n render: () => void,\n collector: ViewRecord[],\n parent: ViewRecord,\n ): ViewRecord[] {\n const before = this.#collector;\n const beforeParent = this.#collectFor;\n this.#collector = collector;\n this.#collectFor = parent;\n render();\n this.#collector = before;\n this.#collectFor = beforeParent;\n return collector;\n }\n\n /** Convert a string slot into a callback that emits a text ViewRecord. */\n #stringSlot(content: string): Slot {\n return () => {\n this.view(textViewFn as ViewFn<Wildcard, Wildcard>, content, null, null);\n };\n }\n\n // -- Props update -----------------------------------------------------------\n\n nextProps<Props = Wildcard, Api = Wildcard, RenderRef = Wildcard>(\n view: ViewRecord<Props, Api, RenderRef>,\n nextProps: Props,\n nextSlot: Maybe<SlotContent>,\n preCollectedSc?: Maybe<ViewRecord[]>,\n ): void {\n const prevSc = view.sc;\n view.slot = nextSlot;\n // Use pre-collected sc if available (avoids re-running the slot function)\n if (preCollectedSc) {\n // Re-parent sc items to this view (they were parented to the pending view)\n for (const child of preCollectedSc) child.parent = view;\n view.sc = preCollectedSc;\n } else {\n if (nextSlot) {\n const slotFn =\n typeof nextSlot === \"string\" ? this.#stringSlot(nextSlot) : nextSlot;\n view.sc = this.#collect(slotFn, [], view);\n } else {\n view.sc = null;\n }\n }\n\n const structChanged = hasScStructuralChange(prevSc, view.sc);\n const shouldUpdate = view.body?.shouldUpdate\n ? view.body.shouldUpdate(nextProps)\n : !shallowEqual(view.props, nextProps) ||\n // Primitive holding a stateful DOM key — DOM may have drifted from\n // the rendered prop; force a re-render so the renderer re-asserts.\n ((view.flags & F_PRIMITIVE) !== 0 && hasStatefulDomKey(nextProps));\n\n if (shouldUpdate || structChanged) {\n // Full re-render: own props or slot structure changed\n view.props = nextProps;\n this.markDirty(view);\n } else if (view.sc && view.scHost?.children) {\n // Composite with stable structure and own props — propagate sc prop changes directly\n this.#propagateScProps(view);\n } else if (view.sc && prevSc) {\n // No scHost (e.g. primitive) — check if any sc child props changed\n for (let i = 0; i < view.sc.length; i++) {\n if (view.sc[i]!.props !== prevSc[i]!.props) {\n this.markDirty(view);\n break;\n }\n }\n }\n }\n\n /** Propagate slot children prop changes directly to live children, skipping parent reconcile. */\n #propagateScProps(owner: ViewRecord): void {\n const host = owner.scHost;\n const sc = owner.sc;\n if (!host?.children || !sc) return;\n\n if (host.keyToView) {\n for (const item of sc) {\n if (item.userKey != null) {\n const live = host.keyToView.get(item.userKey);\n if (live && live.viewFn === item.viewFn) {\n this.nextProps(live, item.props, item.slot);\n }\n }\n }\n } else {\n const len = Math.min(sc.length, host.children.length);\n for (let i = 0; i < len; i++) {\n const live = host.children[i]!;\n if (live.viewFn === sc[i]!.viewFn) {\n this.nextProps(live, sc[i]!.props, sc[i]!.slot);\n }\n }\n }\n }\n\n // -- Reconciliation ---------------------------------------------------------\n\n reconcile(view: ViewRecord): void {\n let pendingChildren: Maybe<ViewRecord[]> = null;\n if (view.body?.render) {\n pendingChildren = this.#collect(view.body.render, [], view);\n }\n\n if (pendingChildren == null || pendingChildren.length === 0) {\n // No children case\n if (view.children) for (const child of view.children) this.dispose(child);\n return;\n }\n\n // We do not have any previous children. In this case, we just insert new items and that's it\n if (view.children == null) {\n view.children = pendingChildren;\n for (const child of pendingChildren) {\n this.initViewBody(child);\n this.markDirty(child);\n if (child.userKey != null) {\n if (!view.keyToView) view.keyToView = new Map();\n view.keyToView.set(child.userKey, child);\n }\n }\n return;\n }\n // Now, we have both view.children & pendingChildren\n // Check if any child is keyed — if so, use keyed algorithm\n const hasKeys = pendingChildren.some((c) => c.userKey != null);\n if (hasKeys) {\n this.#reconcileKeyed(view, view.children, pendingChildren);\n } else {\n this.#reconcileNonKeyed(view, view.children, pendingChildren);\n }\n }\n\n // -- Non-keyed reconciliation ------------------------------------------------\n\n #reconcileNonKeyed(\n view: ViewRecord,\n oldChildren: ViewRecord[],\n pending: ViewRecord[],\n ): void {\n const oldLen = oldChildren.length;\n const newLen = pending.length;\n const minLen = Math.min(oldLen, newLen);\n\n // Patch overlapping range by position\n for (let i = 0; i < minLen; i++) {\n const old = oldChildren[i]!;\n const pend = pending[i]!;\n this.#patchOrReplace(view, oldChildren, i, old, pend);\n }\n\n // Mount new children\n for (let i = oldLen; i < newLen; i++) {\n oldChildren[i] = pending[i]!;\n this.initViewBody(pending[i]!);\n this.markDirty(pending[i]!);\n }\n\n // Dispose removed children\n for (let i = newLen; i < oldLen; i++) {\n this.dispose(oldChildren[i]!);\n }\n oldChildren.length = newLen;\n }\n\n // -- Keyed reconciliation\n\n #reconcileKeyed(\n view: ViewRecord,\n oldChildren: ViewRecord[],\n pending: ViewRecord[],\n ): void {\n let i = 0;\n let oldEnd = oldChildren.length - 1;\n let newEnd = pending.length - 1;\n\n // Phase 1: Head sync — match from start\n while (i <= oldEnd && i <= newEnd) {\n const oldView = oldChildren[i]!;\n const pendView = pending[i]!;\n if (oldView.userKey !== pendView.userKey) break;\n this.#patchOrReplace(view, oldChildren, i, oldView, pendView);\n i++;\n }\n\n // Phase 2: Tail sync — match from end\n while (oldEnd >= i && newEnd >= i) {\n const oldView = oldChildren[oldEnd]!;\n const pendView = pending[newEnd]!;\n if (oldView.userKey !== pendView.userKey) break;\n this.#patchOrReplace(view, oldChildren, oldEnd, oldView, pendView);\n oldEnd--;\n newEnd--;\n }\n\n // Phase 3: Simple cases\n if (i > oldEnd) {\n // All remaining pending are insertions\n for (let j = i; j <= newEnd; j++) {\n this.initViewBody(pending[j]!);\n this.markDirty(pending[j]!);\n if (pending[j]!.userKey != null) {\n if (!view.keyToView) view.keyToView = new Map();\n view.keyToView.set(pending[j]!.userKey!, pending[j]!);\n }\n }\n // Rebuild children array\n view.children = [\n ...oldChildren.slice(0, i),\n ...pending.slice(i, newEnd + 1),\n ...oldChildren.slice(i, oldEnd + 1), // tail-synced portion is already patched\n ];\n return;\n }\n\n if (i > newEnd) {\n // All remaining old are removals\n for (let j = i; j <= oldEnd; j++) {\n this.dispose(oldChildren[j]!);\n }\n // Rebuild children array: head + tail\n view.children = [\n ...oldChildren.slice(0, i),\n ...oldChildren.slice(oldEnd + 1),\n ];\n return;\n }\n\n // Phase 4: Middle diff\n // Build map: pending key → index in pending\n const newKeyToIndex = new Map<Key, number>();\n for (let j = i; j <= newEnd; j++) {\n const key = pending[j]!.userKey;\n if (key != null) newKeyToIndex.set(key, j);\n }\n\n const middleLen = newEnd - i + 1;\n // newIdxToOldIdx[j] = old index of the view now at pending[i+j], or -1 if new\n const newIdxToOldIdx = new Array<number>(middleLen).fill(-1);\n // Track which old children were matched\n const matched = new Set<number>();\n\n for (let j = i; j <= oldEnd; j++) {\n const oldView = oldChildren[j]!;\n const key = oldView.userKey;\n if (key != null && newKeyToIndex.has(key)) {\n const newIdx = newKeyToIndex.get(key)!;\n newIdxToOldIdx[newIdx - i] = j;\n matched.add(j);\n }\n }\n\n // Dispose unmatched old children\n for (let j = i; j <= oldEnd; j++) {\n if (!matched.has(j)) {\n this.dispose(oldChildren[j]!);\n }\n }\n\n // Compute LIS on the old indices — these views stay in place\n const stable = lis(newIdxToOldIdx);\n\n // Build new children array for the middle portion\n const newChildren: ViewRecord[] = new Array(middleLen);\n for (let j = middleLen - 1; j >= 0; j--) {\n const newIdx = i + j;\n const pendView = pending[newIdx]!;\n\n if (newIdxToOldIdx[j] === -1) {\n // New child — init and mount\n this.initViewBody(pendView);\n this.markDirty(pendView);\n if (pendView.userKey != null) {\n if (!view.keyToView) view.keyToView = new Map();\n view.keyToView.set(pendView.userKey, pendView);\n }\n newChildren[j] = pendView;\n } else {\n // Matched child — reuse the old view\n const oldView = oldChildren[newIdxToOldIdx[j]!]!;\n this.#patchOrReplace(\n view,\n oldChildren,\n newIdxToOldIdx[j]!,\n oldView,\n pendView,\n );\n if (!stable.has(j)) {\n this.markMoved(oldView);\n }\n newChildren[j] = oldView;\n }\n }\n\n // Rebuild view.children: head + middle + tail\n const head = oldChildren.slice(0, i);\n const tail = oldChildren.slice(oldEnd + 1);\n view.children = [...head, ...newChildren, ...tail];\n }\n\n /** Patch an existing view with pending props, or replace if viewFn changed. */\n #patchOrReplace(\n parent: ViewRecord,\n oldChildren: ViewRecord[],\n idx: number,\n oldView: ViewRecord,\n pendView: ViewRecord,\n ): void {\n if (oldView.viewFn === pendView.viewFn) {\n this.nextProps(oldView, pendView.props, pendView.slot, pendView.sc);\n } else {\n this.dispose(oldView);\n oldChildren[idx] = pendView;\n this.initViewBody(pendView);\n this.markDirty(pendView);\n if (pendView.userKey != null) {\n if (!parent.keyToView) parent.keyToView = new Map();\n parent.keyToView.set(pendView.userKey, pendView);\n }\n }\n }\n\n // -- Disposal ---------------------------------------------------------------\n\n dispose(view: ViewRecord): void {\n // If this is a primitive with a DOM element, removing it from DOM\n // automatically removes all descendant DOM nodes. Only do virtual\n // cleanup (unsubscribe, key removal, dirty queue) for children.\n const isPrimitiveWithDom = view.flags & F_PRIMITIVE && view.renderRef;\n\n if (view.children) {\n for (const child of view.children) {\n if (isPrimitiveWithDom) {\n this.#disposeVirtual(child);\n } else {\n this.dispose(child);\n }\n }\n }\n if (view.unsubscribe) for (const unsub of view.unsubscribe) unsub();\n if (view.userKey != null) view.parent?.keyToView?.delete(view.userKey);\n this.renderer.unmount(view);\n this.#dirtyQueue.delete(view);\n view.flags |= F_DISPOSED;\n view.flags &= ~(F_DIRTY | F_MOVED);\n }\n\n /** Dispose without DOM removal — parent primitive handles DOM cleanup. */\n #disposeVirtual(view: ViewRecord): void {\n if (view.children) {\n for (const child of view.children) this.#disposeVirtual(child);\n }\n if (view.unsubscribe) for (const unsub of view.unsubscribe) unsub();\n if (view.userKey != null) view.parent?.keyToView?.delete(view.userKey);\n view.renderRef = undefined;\n this.#dirtyQueue.delete(view);\n view.flags |= F_DISPOSED;\n view.flags &= ~(F_DIRTY | F_MOVED);\n }\n\n // -- Render loop ------------------------------------------------------------\n\n render(): void {\n // Already rendering. Exit.\n if (this.#rendering) return;\n\n // Orchestrator should know which engine is currently active.\n // Inside single task only one engine can be active\n orchestrator.setCurrentEngine(this);\n this.#rendering = true;\n\n try {\n const cbs: (() => void)[] = [];\n for (const view of this.#dirtyQueue) {\n if (view.flags & F_DISPOSED) continue;\n this.initViewBody(view);\n const isNew = !view.renderRef;\n if (!isNew) view.body?.onUpdateBefore?.();\n\n if (view.flags & F_DIRTY) {\n // Full re-render\n this.reconcile(view);\n this.renderer.render(view);\n view.flags &= ~F_DIRTY;\n view.flags &= ~F_MOVED;\n\n if (isNew && view.body?.onMount) {\n const b = view.body;\n cbs.push(() => b.onMount!());\n } else if (!isNew && view.body?.onUpdateAfter) {\n const b = view.body;\n cbs.push(() => b.onUpdateAfter!());\n }\n } else {\n // Move only\n this.renderer.render(view);\n view.flags &= ~F_MOVED;\n }\n }\n\n this.#dirtyQueue.clear();\n orchestrator.setCurrentEngine(null);\n this.#rendering = false;\n for (const cb of cbs) cb();\n } catch (e) {\n orchestrator.setCurrentEngine(null);\n this.#rendering = false;\n throw e;\n }\n }\n}\n",
|
|
15
15
|
"import { Engine, type Scheduler } from \"@/internal/engine\";\nimport type { IRender } from \"@/render/render_interface\";\nimport type { Wildcard } from \"@/internal/wildcard\";\n\ntype AppOptions = {\n scheduler?: Scheduler;\n};\n\ntype AppHandle = {\n engine: Engine;\n};\n\n/**\n * Create a Creo application.\n *\n * createApp(() => App(), new HtmlRender(el)).mount();\n * createApp(() => App(), new HtmlRender(el), { scheduler: requestAnimationFrame }).mount();\n */\nexport function createApp(\n slot: () => void,\n renderer: IRender<Wildcard>,\n options?: AppOptions,\n) {\n return {\n mount(props?: Wildcard): AppHandle {\n const engine = new Engine(renderer, options?.scheduler); \n engine.createRoot(slot, props ?? {});\n engine.render();\n return { engine };\n },\n };\n}\n",
|
|
16
|
-
"import type { ViewRecord } from \"@/internal/internal_view\";\nimport {\n F_PRIMITIVE,\n F_MOVED,\n F_TEXT_CONTENT,\n} from \"@/internal/internal_view\";\nimport type { IRender } from \"./render_interface\";\nimport { $primitive } from \"@/public/primitive\";\nimport type { Wildcard } from \"@/internal/wildcard\";\nimport type { Maybe } from \"@/functional/maybe\";\nimport type { Engine } from \"@/internal/engine\";\n\n// ---------------------------------------------------------------------------\n// Render refs — stored on view.renderRef\n// ---------------------------------------------------------------------------\n\n/**\n * For primitives: { element, prevProps }\n * For composites: renderRef is set to `true` (just a non-null marker)\n *\n * Discriminated via view.flags & F_PRIMITIVE — no `kind` field needed.\n */\ntype PrimitiveDomRef = {\n element: Element | Text;\n prevProps: Maybe<Record<string, unknown>>;\n};\n\n// ---------------------------------------------------------------------------\n// Event delegation — Inferno-style: one listener per event type on container\n// ---------------------------------------------------------------------------\n\nfunction isEventProp(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 && // 'o'\n key.charCodeAt(1) === 110 && // 'n'\n key.charCodeAt(2) >= 65 && // 'A'\n key.charCodeAt(2) <= 90 // 'Z'\n );\n}\n\nconst DOM_EVENT: Record<string, string> = {\n Click: \"click\",\n Dblclick: \"dblclick\",\n PointerDown: \"pointerdown\",\n PointerUp: \"pointerup\",\n PointerMove: \"pointermove\",\n Input: \"input\",\n Change: \"change\",\n KeyDown: \"keydown\",\n KeyUp: \"keyup\",\n Focus: \"focus\",\n Blur: \"blur\",\n};\n\nconst $EV = Symbol.for(\"creo.ev\");\n\nconst containerState = new WeakMap<\n HTMLElement,\n {\n counts: Map<string, number>;\n handler: (e: Event) => void;\n }\n>();\n\nfunction getState(container: HTMLElement) {\n let state = containerState.get(container);\n if (!state) {\n state = {\n counts: new Map(),\n handler(e: Event) {\n const domEvent = e.type;\n let dom = e.target as\n | (HTMLElement & { [$EV]?: Record<string, Function> })\n | null;\n while (dom && dom !== container) {\n const evObj = dom[$EV];\n if (evObj) {\n const handler = evObj[domEvent];\n if (handler) {\n handler(mapEventData(domEvent, e));\n if (e.cancelBubble) return;\n }\n }\n dom = dom.parentElement as typeof dom;\n }\n },\n };\n containerState.set(container, state);\n }\n return state;\n}\n\n// focus/blur don't bubble; listen in the capture phase so delegation works.\nconst CAPTURE_EVENTS = new Set([\"focus\", \"blur\"]);\n\nfunction ensureDelegated(container: HTMLElement, domEvent: string): void {\n const state = getState(container);\n const count = state.counts.get(domEvent) ?? 0;\n if (count === 0) {\n container.addEventListener(domEvent, state.handler, CAPTURE_EVENTS.has(domEvent));\n }\n state.counts.set(domEvent, count + 1);\n}\n\nfunction removeDelegated(container: HTMLElement, domEvent: string): void {\n const state = getState(container);\n const count = state.counts.get(domEvent) ?? 0;\n if (count <= 1) {\n state.counts.delete(domEvent);\n container.removeEventListener(domEvent, state.handler, CAPTURE_EVENTS.has(domEvent));\n } else {\n state.counts.set(domEvent, count - 1);\n }\n}\n\nfunction mapEventData(domEvent: string, e: Event): Record<string, unknown> {\n let data: Record<string, unknown>;\n if (\n domEvent === \"click\" ||\n domEvent === \"dblclick\" ||\n domEvent === \"pointerdown\" ||\n domEvent === \"pointerup\" ||\n domEvent === \"pointermove\"\n ) {\n const pe = e as PointerEvent;\n data = { x: pe.clientX, y: pe.clientY };\n } else if (domEvent === \"input\" || domEvent === \"change\") {\n const target = e.target as HTMLInputElement;\n data = { value: target.value, checked: !!target.checked };\n } else if (domEvent === \"keydown\" || domEvent === \"keyup\") {\n const ke = e as KeyboardEvent;\n data = { key: ke.key, code: ke.code };\n } else {\n data = {};\n }\n data.stopPropagation = () => e.stopPropagation();\n data.preventDefault = () => e.preventDefault();\n return data;\n}\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nconst DOM_PROPERTIES = new Set([\n \"value\",\n \"checked\",\n \"selected\",\n \"indeterminate\",\n \"muted\",\n]);\n\n// ---------------------------------------------------------------------------\n// HTML Renderer\n// ---------------------------------------------------------------------------\n\nexport class HtmlRender implements IRender<HTMLElement | Text> {\n engine!: Engine;\n\n constructor(private container: HTMLElement) {}\n\n // -- IRender ----------------------------------------------------------------\n\n render(view: ViewRecord): void {\n if (!view.renderRef) {\n // --- Mount ---\n if (view.flags & F_PRIMITIVE) {\n const parentNode = this.findParentDom(view);\n const refNode = this.findInsertionPoint(view);\n const tag = view.viewFn[$primitive]!;\n\n if (tag === \"text\") {\n const textNode = document.createTextNode(String(view.props));\n view.renderRef = { element: textNode, prevProps: null };\n parentNode.insertBefore(textNode, refNode);\n } else {\n const parentIsSvg =\n (parentNode as Element).namespaceURI === SVG_NS;\n const useSvg = tag === \"svg\" || parentIsSvg;\n const element = useSvg\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n const props = view.props as Record<string, unknown>;\n const domRef: PrimitiveDomRef = { element, prevProps: null };\n view.renderRef = domRef;\n this.setAttributes(element, props);\n\n // If single text child, use textContent directly\n if (view.children?.length === 1) {\n const child = view.children[0]!;\n if (\n child.flags & F_PRIMITIVE &&\n child.viewFn[$primitive] === \"text\"\n ) {\n element.textContent = String(child.props);\n child.renderRef = { element, prevProps: null };\n child.flags |= F_TEXT_CONTENT;\n }\n }\n\n parentNode.insertBefore(element, refNode);\n }\n } else {\n // Composite: no DOM — just mark as mounted\n view.renderRef = true;\n }\n return;\n }\n\n // --- Update ---\n\n if (view.flags & F_MOVED) {\n const parentNode = this.findParentDom(view);\n const refNode = this.findInsertionPoint(view);\n if (view.flags & F_PRIMITIVE) {\n const ref = view.renderRef as PrimitiveDomRef;\n parentNode.insertBefore(ref.element, refNode);\n } else {\n this.moveDomNodes(view, parentNode, refNode);\n }\n }\n\n if (!(view.flags & F_PRIMITIVE)) return;\n\n const ref = view.renderRef as PrimitiveDomRef;\n\n // Text node in textContent mode — update parent's textContent\n if (view.flags & F_TEXT_CONTENT) {\n const parentEl = ref.element as Element;\n const nextText = String(view.props);\n if (parentEl.textContent !== nextText) {\n parentEl.textContent = nextText;\n }\n return;\n }\n\n if (ref.element instanceof Text) {\n const nextText = String(view.props);\n if (ref.element.textContent !== nextText) {\n ref.element.textContent = nextText;\n }\n return;\n }\n\n const nextProps = view.props as Record<string, unknown>;\n const el = ref.element as Element;\n if (!ref.prevProps) {\n this.setAttributes(el, nextProps);\n } else if (ref.prevProps !== nextProps) {\n this.diffAttributes(el, ref.prevProps, nextProps);\n }\n ref.prevProps = nextProps;\n }\n\n unmount(view: ViewRecord): void {\n if (view.flags & F_PRIMITIVE) {\n this.removeDomNodes(view);\n }\n view.renderRef = undefined;\n }\n\n // -- Internal: DOM tree navigation ------------------------------------------\n\n private findParentDom(view: ViewRecord): Node {\n let parent = view.parent;\n while (parent) {\n if (parent.flags & F_PRIMITIVE) {\n const ref = parent.renderRef as Maybe<PrimitiveDomRef>;\n if (ref && !(ref.element instanceof Text)) return ref.element;\n }\n parent = parent.parent;\n }\n return this.container;\n }\n\n private findInsertionPoint(view: ViewRecord): Node | null {\n const parent = view.parent;\n if (!parent?.children) return null;\n\n const children = parent.children;\n\n // Fast path: last child\n if (children[children.length - 1] === view) {\n return this.#parentEndAnchor(parent);\n }\n\n const idx = children.indexOf(view);\n for (let i = idx + 1; i < children.length; i++) {\n const dom = this.getFirstDomNode(children[i]!);\n if (dom) return dom;\n }\n\n return this.#parentEndAnchor(parent);\n }\n\n #parentEndAnchor(parent: ViewRecord): Node | null {\n if (parent.flags & F_PRIMITIVE) return null; // append to element\n // Composite: walk up\n return this.findInsertionPoint(parent);\n }\n\n // -- Internal: attributes + delegated events --------------------------------\n\n private setAttributes(\n element: Element,\n props: Record<string, unknown>,\n ) {\n for (const key in props) {\n const value = props[key];\n if (key === \"key\" || value == null) continue;\n if (isEventProp(key)) {\n this.bindEvent(element, key, value as Function);\n continue;\n }\n this.setAttribute(element, key, value);\n }\n }\n\n private diffAttributes(\n element: Element,\n prev: Record<string, unknown>,\n next: Record<string, unknown>,\n ) {\n for (const key in prev) {\n if (key === \"key\") continue;\n if (!(key in next) || next[key] == null) {\n if (isEventProp(key)) {\n this.unbindEvent(element, key);\n } else {\n this.removeAttribute(element, key);\n }\n }\n }\n\n for (const key in next) {\n const value = next[key];\n if (key === \"key\" || value == null) continue;\n // Re-assert DOM properties even if prevProps matches: the live DOM\n // value can drift from prevProps via user input (typing in an input,\n // toggling a checkbox) without our state ever changing.\n if (prev[key] === value && !DOM_PROPERTIES.has(key)) continue;\n if (isEventProp(key)) {\n const creoName = key.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj = (element as any)[$EV] as\n | Record<string, Function>\n | undefined;\n if (evObj) {\n evObj[domEvent] = value as Function;\n } else {\n this.bindEvent(element, key, value as Function);\n }\n } else {\n this.setAttribute(element, key, value);\n }\n }\n }\n\n private bindEvent(\n element: Element,\n prop: string,\n handler: Function,\n ): void {\n const creoName = prop.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj: Record<string, Function> =\n (element as any)[$EV] ?? ((element as any)[$EV] = {});\n evObj[domEvent] = handler;\n ensureDelegated(this.container, domEvent);\n }\n\n private unbindEvent(element: Element, prop: string): void {\n const creoName = prop.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj = (element as any)[$EV] as Record<string, Function> | undefined;\n if (evObj) {\n delete evObj[domEvent];\n }\n removeDelegated(this.container, domEvent);\n }\n\n private setAttribute(element: Element, key: string, value: unknown) {\n if (key === \"class\") {\n // className is a settable string on HTMLElement but readonly (SVGAnimatedString)\n // on SVG — use setAttribute which works for both.\n element.setAttribute(\"class\", String(value));\n } else if (key === \"style\") {\n (element as HTMLElement).style.cssText = String(value);\n } else if (DOM_PROPERTIES.has(key)) {\n (element as Wildcard)[key] = value;\n } else if (typeof value === \"boolean\") {\n if (value) element.setAttribute(key, \"\");\n else element.removeAttribute(key);\n } else {\n element.setAttribute(key, String(value));\n }\n }\n\n private removeAttribute(element: Element, key: string) {\n if (key === \"class\") {\n element.removeAttribute(\"class\");\n } else if (key === \"style\") {\n (element as HTMLElement).style.cssText = \"\";\n } else if (DOM_PROPERTIES.has(key)) {\n (element as Wildcard)[key] = key === \"value\" ? \"\" : false;\n } else {\n element.removeAttribute(key);\n }\n }\n\n // -- Internal: DOM navigation -----------------------------------------------\n\n private getFirstDomNode(view: ViewRecord): Node | null {\n if (!view.renderRef) return null;\n if (view.flags & F_PRIMITIVE) return (view.renderRef as PrimitiveDomRef).element;\n if (view.children) {\n for (const child of view.children) {\n const dom = this.getFirstDomNode(child);\n if (dom) return dom;\n }\n }\n return null;\n }\n\n private moveDomNodes(\n view: ViewRecord,\n parentNode: Node,\n insertBefore: Node | null,\n ): void {\n if (!view.renderRef) return;\n if (view.flags & F_PRIMITIVE) {\n parentNode.insertBefore((view.renderRef as PrimitiveDomRef).element, insertBefore);\n } else if (view.children) {\n for (const child of view.children) {\n this.moveDomNodes(child, parentNode, insertBefore);\n }\n }\n }\n\n private removeDomNodes(view: ViewRecord) {\n const ref = view.renderRef as Maybe<PrimitiveDomRef>;\n if (!ref || !(view.flags & F_PRIMITIVE)) return;\n // F_TEXT_CONTENT: ref.element is the PARENT's element (optimization),\n // not this text view's own node. Clear the parent's textContent so\n // incoming siblings mount into an empty host, but never remove the\n // parent — the parent owns its own lifecycle.\n if (view.flags & F_TEXT_CONTENT) {\n (ref.element as Element).textContent = \"\";\n return;\n }\n const evObj = (ref.element as any)[$EV] as\n | Record<string, Function>\n | undefined;\n if (evObj) {\n for (const domEvent in evObj) {\n removeDelegated(this.container, domEvent);\n }\n delete (ref.element as any)[$EV];\n }\n ref.element.parentNode?.removeChild(ref.element);\n }\n}\n",
|
|
16
|
+
"import type { ViewRecord } from \"@/internal/internal_view\";\nimport {\n F_PRIMITIVE,\n F_MOVED,\n F_TEXT_CONTENT,\n} from \"@/internal/internal_view\";\nimport type { IRender } from \"./render_interface\";\nimport { $primitive } from \"@/public/primitive\";\nimport type { Wildcard } from \"@/internal/wildcard\";\nimport type { Maybe } from \"@/functional/maybe\";\nimport type { Engine } from \"@/internal/engine\";\n\n// ---------------------------------------------------------------------------\n// Render refs — stored on view.renderRef\n// ---------------------------------------------------------------------------\n\n/**\n * For primitives: { element, prevProps }\n * For composites: renderRef is set to `true` (just a non-null marker)\n *\n * Discriminated via view.flags & F_PRIMITIVE — no `kind` field needed.\n */\ntype PrimitiveDomRef = {\n element: Element | Text;\n prevProps: Maybe<Record<string, unknown>>;\n};\n\n// ---------------------------------------------------------------------------\n// Event delegation — Inferno-style: one listener per event type on container\n// ---------------------------------------------------------------------------\n\nfunction isEventProp(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 && // 'o'\n key.charCodeAt(1) === 110 && // 'n'\n key.charCodeAt(2) >= 65 && // 'A'\n key.charCodeAt(2) <= 90 // 'Z'\n );\n}\n\nconst DOM_EVENT: Record<string, string> = {\n // Pointer / mouse — bubble.\n Click: \"click\",\n Dblclick: \"dblclick\",\n PointerDown: \"pointerdown\",\n PointerUp: \"pointerup\",\n PointerMove: \"pointermove\",\n // Form — bubble.\n Input: \"input\",\n Change: \"change\",\n // Keyboard — bubble.\n KeyDown: \"keydown\",\n KeyUp: \"keyup\",\n // Focus / blur — don't bubble (capture-phase delegation).\n Focus: \"focus\",\n Blur: \"blur\",\n // Hover — don't bubble; per-target only (no ancestor walk).\n MouseEnter: \"mouseenter\",\n MouseLeave: \"mouseleave\",\n PointerEnter: \"pointerenter\",\n PointerLeave: \"pointerleave\",\n // Scroll / load / error — don't bubble.\n Scroll: \"scroll\",\n Load: \"load\",\n Error: \"error\",\n // Disclosure — don't bubble.\n Toggle: \"toggle\",\n // Media — don't bubble (capture-phase delegation).\n VolumeChange: \"volumechange\",\n Play: \"play\",\n Pause: \"pause\",\n Ended: \"ended\",\n TimeUpdate: \"timeupdate\",\n LoadedMetadata: \"loadedmetadata\",\n LoadedData: \"loadeddata\",\n CanPlay: \"canplay\",\n CanPlayThrough: \"canplaythrough\",\n DurationChange: \"durationchange\",\n RateChange: \"ratechange\",\n Seeking: \"seeking\",\n Seeked: \"seeked\",\n Stalled: \"stalled\",\n Waiting: \"waiting\",\n};\n\nconst $EV = Symbol.for(\"creo.ev\");\n\nconst containerState = new WeakMap<\n HTMLElement,\n {\n counts: Map<string, number>;\n handler: (e: Event) => void;\n }\n>();\n\nfunction getState(container: HTMLElement) {\n let state = containerState.get(container);\n if (!state) {\n state = {\n counts: new Map(),\n handler(e: Event) {\n const domEvent = e.type;\n const noWalk = NO_WALK_EVENTS.has(domEvent);\n let dom = e.target as\n | (HTMLElement & { [$EV]?: Record<string, Function> })\n | null;\n while (dom && dom !== container) {\n const evObj = dom[$EV];\n if (evObj) {\n const handler = evObj[domEvent];\n if (handler) {\n handler(mapEventData(domEvent, e));\n if (e.cancelBubble) return;\n }\n }\n // For mouseenter/leave-style events the browser already dispatches\n // one event per ancestor newly entered — walking up here would\n // double-fire ancestor handlers.\n if (noWalk) return;\n dom = dom.parentElement as typeof dom;\n }\n },\n };\n containerState.set(container, state);\n }\n return state;\n}\n\n// Events that don't bubble — register in the capture phase so delegation\n// at the container still receives them.\nconst CAPTURE_EVENTS = new Set([\n \"focus\",\n \"blur\",\n \"mouseenter\",\n \"mouseleave\",\n \"pointerenter\",\n \"pointerleave\",\n \"scroll\",\n \"load\",\n \"error\",\n \"toggle\",\n \"volumechange\",\n \"play\",\n \"pause\",\n \"ended\",\n \"timeupdate\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"durationchange\",\n \"ratechange\",\n \"seeking\",\n \"seeked\",\n \"stalled\",\n \"waiting\",\n]);\n\n// Events whose semantics are \"this element specifically\" — the browser\n// dispatches one event per ancestor newly entered, so walking up the tree\n// from target to container would double-fire ancestor handlers. For these,\n// only consult the actual target element.\nconst NO_WALK_EVENTS = new Set([\n \"mouseenter\",\n \"mouseleave\",\n \"pointerenter\",\n \"pointerleave\",\n]);\n\n// Events fired at high frequency where we want passive listeners by default.\nconst PASSIVE_EVENTS = new Set([\"scroll\"]);\n\nfunction listenerOptions(domEvent: string): boolean | AddEventListenerOptions {\n const capture = CAPTURE_EVENTS.has(domEvent);\n if (PASSIVE_EVENTS.has(domEvent)) {\n return { capture, passive: true };\n }\n return capture;\n}\n\nfunction ensureDelegated(container: HTMLElement, domEvent: string): void {\n const state = getState(container);\n const count = state.counts.get(domEvent) ?? 0;\n if (count === 0) {\n container.addEventListener(domEvent, state.handler, listenerOptions(domEvent));\n }\n state.counts.set(domEvent, count + 1);\n}\n\nfunction removeDelegated(container: HTMLElement, domEvent: string): void {\n const state = getState(container);\n const count = state.counts.get(domEvent) ?? 0;\n if (count <= 1) {\n state.counts.delete(domEvent);\n container.removeEventListener(domEvent, state.handler, listenerOptions(domEvent));\n } else {\n state.counts.set(domEvent, count - 1);\n }\n}\n\nconst POINTER_EVENTS = new Set([\n \"click\",\n \"dblclick\",\n \"pointerdown\",\n \"pointerup\",\n \"pointermove\",\n \"mouseenter\",\n \"mouseleave\",\n \"pointerenter\",\n \"pointerleave\",\n]);\n\nconst MEDIA_EVENTS = new Set([\n \"volumechange\",\n \"play\",\n \"pause\",\n \"ended\",\n \"timeupdate\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"durationchange\",\n \"ratechange\",\n \"seeking\",\n \"seeked\",\n \"stalled\",\n \"waiting\",\n]);\n\nfunction mapEventData(domEvent: string, e: Event): Record<string, unknown> {\n let data: Record<string, unknown>;\n if (POINTER_EVENTS.has(domEvent)) {\n const pe = e as PointerEvent;\n data = { x: pe.clientX, y: pe.clientY };\n } else if (domEvent === \"input\" || domEvent === \"change\") {\n const target = e.target as HTMLInputElement;\n data = { value: target.value, checked: !!target.checked };\n } else if (MEDIA_EVENTS.has(domEvent)) {\n const target = e.target as HTMLMediaElement;\n data = {\n muted: !!target.muted,\n paused: !!target.paused,\n volume: target.volume,\n currentTime: target.currentTime,\n duration: Number.isFinite(target.duration) ? target.duration : 0,\n };\n } else if (domEvent === \"scroll\") {\n const target = e.target as Element;\n data = {\n scrollTop: (target as HTMLElement).scrollTop ?? 0,\n scrollLeft: (target as HTMLElement).scrollLeft ?? 0,\n };\n } else if (domEvent === \"error\") {\n const ev = e as ErrorEvent;\n data = { message: ev.message ?? \"\" };\n } else if (domEvent === \"toggle\") {\n const target = e.target as HTMLDetailsElement;\n data = { open: !!target.open };\n } else if (domEvent === \"keydown\" || domEvent === \"keyup\") {\n const ke = e as KeyboardEvent;\n data = { key: ke.key, code: ke.code };\n } else {\n data = {};\n }\n data.stopPropagation = () => e.stopPropagation();\n data.preventDefault = () => e.preventDefault();\n return data;\n}\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nconst DOM_PROPERTIES = new Set([\n \"value\",\n \"checked\",\n \"selected\",\n \"indeterminate\",\n \"muted\",\n]);\n\n// ---------------------------------------------------------------------------\n// HTML Renderer\n// ---------------------------------------------------------------------------\n\nexport class HtmlRender implements IRender<HTMLElement | Text> {\n engine!: Engine;\n\n constructor(private container: HTMLElement) {}\n\n // -- IRender ----------------------------------------------------------------\n\n render(view: ViewRecord): void {\n if (!view.renderRef) {\n // --- Mount ---\n if (view.flags & F_PRIMITIVE) {\n const parentNode = this.findParentDom(view);\n const refNode = this.findInsertionPoint(view);\n const tag = view.viewFn[$primitive]!;\n\n if (tag === \"text\") {\n const textNode = document.createTextNode(String(view.props));\n view.renderRef = { element: textNode, prevProps: null };\n parentNode.insertBefore(textNode, refNode);\n } else {\n const parentIsSvg =\n (parentNode as Element).namespaceURI === SVG_NS;\n const useSvg = tag === \"svg\" || parentIsSvg;\n const element = useSvg\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n const props = view.props as Record<string, unknown>;\n const domRef: PrimitiveDomRef = { element, prevProps: null };\n view.renderRef = domRef;\n this.setAttributes(element, props);\n\n // If single text child, use textContent directly\n if (view.children?.length === 1) {\n const child = view.children[0]!;\n if (\n child.flags & F_PRIMITIVE &&\n child.viewFn[$primitive] === \"text\"\n ) {\n element.textContent = String(child.props);\n child.renderRef = { element, prevProps: null };\n child.flags |= F_TEXT_CONTENT;\n }\n }\n\n parentNode.insertBefore(element, refNode);\n }\n } else {\n // Composite: no DOM — just mark as mounted\n view.renderRef = true;\n }\n return;\n }\n\n // --- Update ---\n\n if (view.flags & F_MOVED) {\n const parentNode = this.findParentDom(view);\n const refNode = this.findInsertionPoint(view);\n if (view.flags & F_PRIMITIVE) {\n const ref = view.renderRef as PrimitiveDomRef;\n parentNode.insertBefore(ref.element, refNode);\n } else {\n this.moveDomNodes(view, parentNode, refNode);\n }\n }\n\n if (!(view.flags & F_PRIMITIVE)) return;\n\n const ref = view.renderRef as PrimitiveDomRef;\n\n // Text node in textContent mode — update parent's textContent\n if (view.flags & F_TEXT_CONTENT) {\n const parentEl = ref.element as Element;\n const nextText = String(view.props);\n if (parentEl.textContent !== nextText) {\n parentEl.textContent = nextText;\n }\n return;\n }\n\n if (ref.element instanceof Text) {\n const nextText = String(view.props);\n if (ref.element.textContent !== nextText) {\n ref.element.textContent = nextText;\n }\n return;\n }\n\n const nextProps = view.props as Record<string, unknown>;\n const el = ref.element as Element;\n if (!ref.prevProps) {\n this.setAttributes(el, nextProps);\n } else if (ref.prevProps !== nextProps) {\n this.diffAttributes(el, ref.prevProps, nextProps);\n }\n ref.prevProps = nextProps;\n }\n\n unmount(view: ViewRecord): void {\n if (view.flags & F_PRIMITIVE) {\n this.removeDomNodes(view);\n }\n view.renderRef = undefined;\n }\n\n // -- Internal: DOM tree navigation ------------------------------------------\n\n private findParentDom(view: ViewRecord): Node {\n let parent = view.parent;\n while (parent) {\n if (parent.flags & F_PRIMITIVE) {\n const ref = parent.renderRef as Maybe<PrimitiveDomRef>;\n if (ref && !(ref.element instanceof Text)) return ref.element;\n }\n parent = parent.parent;\n }\n return this.container;\n }\n\n private findInsertionPoint(view: ViewRecord): Node | null {\n const parent = view.parent;\n if (!parent?.children) return null;\n\n const children = parent.children;\n\n // Fast path: last child\n if (children[children.length - 1] === view) {\n return this.#parentEndAnchor(parent);\n }\n\n const idx = children.indexOf(view);\n for (let i = idx + 1; i < children.length; i++) {\n const dom = this.getFirstDomNode(children[i]!);\n if (dom) return dom;\n }\n\n return this.#parentEndAnchor(parent);\n }\n\n #parentEndAnchor(parent: ViewRecord): Node | null {\n if (parent.flags & F_PRIMITIVE) return null; // append to element\n // Composite: walk up\n return this.findInsertionPoint(parent);\n }\n\n // -- Internal: attributes + delegated events --------------------------------\n\n private setAttributes(\n element: Element,\n props: Record<string, unknown>,\n ) {\n for (const key in props) {\n const value = props[key];\n if (key === \"key\" || value == null) continue;\n if (isEventProp(key)) {\n this.bindEvent(element, key, value as Function);\n continue;\n }\n this.setAttribute(element, key, value);\n }\n }\n\n private diffAttributes(\n element: Element,\n prev: Record<string, unknown>,\n next: Record<string, unknown>,\n ) {\n for (const key in prev) {\n if (key === \"key\") continue;\n if (!(key in next) || next[key] == null) {\n if (isEventProp(key)) {\n this.unbindEvent(element, key);\n } else {\n this.removeAttribute(element, key);\n }\n }\n }\n\n for (const key in next) {\n const value = next[key];\n if (key === \"key\" || value == null) continue;\n // Re-assert DOM properties even if prevProps matches: the live DOM\n // value can drift from prevProps via user input (typing in an input,\n // toggling a checkbox) without our state ever changing.\n if (prev[key] === value && !DOM_PROPERTIES.has(key)) continue;\n if (isEventProp(key)) {\n const creoName = key.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj = (element as any)[$EV] as\n | Record<string, Function>\n | undefined;\n if (evObj) {\n evObj[domEvent] = value as Function;\n } else {\n this.bindEvent(element, key, value as Function);\n }\n } else {\n this.setAttribute(element, key, value);\n }\n }\n }\n\n private bindEvent(\n element: Element,\n prop: string,\n handler: Function,\n ): void {\n const creoName = prop.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj: Record<string, Function> =\n (element as any)[$EV] ?? ((element as any)[$EV] = {});\n evObj[domEvent] = handler;\n ensureDelegated(this.container, domEvent);\n }\n\n private unbindEvent(element: Element, prop: string): void {\n const creoName = prop.slice(2);\n const domEvent = DOM_EVENT[creoName] ?? creoName.toLowerCase();\n const evObj = (element as any)[$EV] as Record<string, Function> | undefined;\n if (evObj) {\n delete evObj[domEvent];\n }\n removeDelegated(this.container, domEvent);\n }\n\n private setAttribute(element: Element, key: string, value: unknown) {\n if (key === \"class\") {\n // className is a settable string on HTMLElement but readonly (SVGAnimatedString)\n // on SVG — use setAttribute which works for both.\n element.setAttribute(\"class\", String(value));\n } else if (key === \"style\") {\n (element as HTMLElement).style.cssText = String(value);\n } else if (DOM_PROPERTIES.has(key)) {\n (element as Wildcard)[key] = value;\n } else if (typeof value === \"boolean\") {\n if (value) element.setAttribute(key, \"\");\n else element.removeAttribute(key);\n } else {\n element.setAttribute(key, String(value));\n }\n }\n\n private removeAttribute(element: Element, key: string) {\n if (key === \"class\") {\n element.removeAttribute(\"class\");\n } else if (key === \"style\") {\n (element as HTMLElement).style.cssText = \"\";\n } else if (DOM_PROPERTIES.has(key)) {\n (element as Wildcard)[key] = key === \"value\" ? \"\" : false;\n } else {\n element.removeAttribute(key);\n }\n }\n\n // -- Internal: DOM navigation -----------------------------------------------\n\n private getFirstDomNode(view: ViewRecord): Node | null {\n if (!view.renderRef) return null;\n if (view.flags & F_PRIMITIVE) return (view.renderRef as PrimitiveDomRef).element;\n if (view.children) {\n for (const child of view.children) {\n const dom = this.getFirstDomNode(child);\n if (dom) return dom;\n }\n }\n return null;\n }\n\n private moveDomNodes(\n view: ViewRecord,\n parentNode: Node,\n insertBefore: Node | null,\n ): void {\n if (!view.renderRef) return;\n if (view.flags & F_PRIMITIVE) {\n parentNode.insertBefore((view.renderRef as PrimitiveDomRef).element, insertBefore);\n } else if (view.children) {\n for (const child of view.children) {\n this.moveDomNodes(child, parentNode, insertBefore);\n }\n }\n }\n\n private removeDomNodes(view: ViewRecord) {\n const ref = view.renderRef as Maybe<PrimitiveDomRef>;\n if (!ref || !(view.flags & F_PRIMITIVE)) return;\n // F_TEXT_CONTENT: ref.element is the PARENT's element (optimization),\n // not this text view's own node. Clear the parent's textContent so\n // incoming siblings mount into an empty host, but never remove the\n // parent — the parent owns its own lifecycle.\n if (view.flags & F_TEXT_CONTENT) {\n (ref.element as Element).textContent = \"\";\n return;\n }\n const evObj = (ref.element as any)[$EV] as\n | Record<string, Function>\n | undefined;\n if (evObj) {\n for (const domEvent in evObj) {\n removeDelegated(this.container, domEvent);\n }\n delete (ref.element as any)[$EV];\n }\n ref.element.parentNode?.removeChild(ref.element);\n }\n}\n",
|
|
17
17
|
"import type { ViewRecord } from \"@/internal/internal_view\";\nimport type { IRender } from \"./render_interface\";\nimport { $primitive } from \"@/public/primitive\";\nimport type { Maybe } from \"@/functional/maybe\";\nimport type { Engine } from \"@/internal/engine\";\n\n// ---------------------------------------------------------------------------\n// JSON node — the output type\n// ---------------------------------------------------------------------------\n\nexport type JsonNode = {\n type: string;\n props: Record<string, unknown>;\n children: JsonNode[];\n key?: string | number;\n};\n\n// ---------------------------------------------------------------------------\n// JSON Renderer\n// ---------------------------------------------------------------------------\n\nexport class JsonRender implements IRender<JsonNode> {\n /** The root JSON node after mount. */\n root: Maybe<JsonNode>;\n\n engine!: Engine;\n constructor() {\n this.root = null;\n }\n\n // -- IRender ----------------------------------------------------------------\n\n render(view: ViewRecord): void {\n const existing = view.renderRef as Maybe<JsonNode>;\n\n if (!existing) {\n // Mount\n const node = this.buildNode(view);\n if (!view.parent) {\n this.root = node;\n return;\n }\n const parentNode = view.parent.renderRef as Maybe<JsonNode>;\n if (parentNode) {\n // Insert at correct position\n const idx = view.parent.children\n ? view.parent.children.indexOf(view)\n : -1;\n if (idx >= 0 && idx < parentNode.children.length) {\n parentNode.children.splice(idx, 0, node);\n } else {\n parentNode.children.push(node);\n }\n }\n return;\n }\n\n // Update: reposition + patch props\n if (view.parent) {\n const parentNode = view.parent.renderRef as Maybe<JsonNode>;\n if (parentNode) {\n const oldIdx = parentNode.children.indexOf(existing);\n const targetIdx = view.parent.children\n ? view.parent.children.indexOf(view)\n : -1;\n if (oldIdx !== -1 && targetIdx !== -1 && oldIdx !== targetIdx) {\n parentNode.children.splice(oldIdx, 1);\n parentNode.children.splice(\n Math.min(targetIdx, parentNode.children.length),\n 0,\n existing,\n );\n }\n }\n }\n const tag = view.viewFn[$primitive];\n existing.props = tag === \"text\"\n ? { content: view.props }\n : { ...view.props };\n }\n\n unmount(view: ViewRecord): void {\n const childNode = view.renderRef as Maybe<JsonNode>;\n if (!childNode || !view.parent) return;\n const parentNode = view.parent.renderRef as Maybe<JsonNode>;\n if (parentNode) {\n const idx = parentNode.children.indexOf(childNode);\n if (idx !== -1) parentNode.children.splice(idx, 1);\n }\n }\n\n // -- Internal ---------------------------------------------------------------\n\n private buildNode(view: ViewRecord): JsonNode {\n const tag = view.viewFn[$primitive];\n\n const props = tag === \"text\"\n ? { content: view.props }\n : { ...view.props };\n\n const node: JsonNode = {\n type: tag ?? \"composite\",\n props,\n children: [],\n };\n if (view.userKey != null) node.key = view.userKey;\n view.renderRef = node;\n return node;\n }\n}\n",
|
|
18
18
|
"import type { ViewRecord } from \"@/internal/internal_view\";\nimport { F_PRIMITIVE } from \"@/internal/internal_view\";\nimport type { IRender } from \"./render_interface\";\nimport { $primitive } from \"@/public/primitive\";\nimport type { Maybe } from \"@/functional/maybe\";\nimport type { Engine } from \"@/internal/engine\";\n\n// Self-closing HTML tags (no closing tag)\nconst VOID_TAGS = new Set([\n \"br\", \"hr\", \"img\", \"input\", \"source\", \"track\", \"embed\",\n \"area\", \"col\", \"wbr\",\n]);\n\n// Attributes that are set as DOM properties, not HTML attributes\nconst DOM_PROPERTIES = new Set([\"value\", \"checked\", \"selected\", \"indeterminate\", \"muted\"]);\n\n// Event handler prefix detection\nfunction isEventProp(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 && // 'o'\n key.charCodeAt(1) === 110 && // 'n'\n key.charCodeAt(2) >= 65 && // 'A'\n key.charCodeAt(2) <= 90 // 'Z'\n );\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction escapeAttr(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\n/**\n * HtmlStringRender — pull-based string renderer.\n * render/unmount are no-ops. Call renderToString() to\n * get the current HTML string from the VDOM.\n *\n * Output matches HtmlRender's DOM serialization (innerHTML).\n */\nexport class HtmlStringRender implements IRender<string> {\n private root: Maybe<ViewRecord> = null;\n\n engine!: Engine;\n\n // -- IRender ----------------------------------------------------------------\n\n render(view: ViewRecord): void {\n if (!view.parent) {\n this.root = view;\n }\n }\n\n unmount(_view: ViewRecord): void {}\n\n // -- Public -----------------------------------------------------------------\n\n renderToString(): string {\n if (!this.root) return \"\";\n return this.buildString(this.root);\n }\n\n // -- Internal ---------------------------------------------------------------\n\n private buildString(rec: ViewRecord): string {\n const tag = rec.viewFn[$primitive];\n\n if (tag != null) {\n if (tag === \"text\") {\n return escapeHtml(String(rec.props));\n }\n const attrs = this.buildAttrs(rec.props as Record<string, unknown>);\n if (VOID_TAGS.has(tag)) {\n return `<${tag}${attrs}>`;\n }\n return `<${tag}${attrs}>${this.buildChildren(rec)}</${tag}>`;\n }\n\n // Composite — transparent, just render children\n return this.buildChildren(rec);\n }\n\n private buildAttrs(props: Record<string, unknown>): string {\n let result = \"\";\n for (const key in props) {\n const value = props[key];\n if (key === \"key\" || value == null) continue;\n // Skip event handlers — they don't appear in HTML\n if (isEventProp(key)) continue;\n // Skip DOM-only properties (value, checked, etc.)\n if (DOM_PROPERTIES.has(key)) continue;\n\n if (key === \"style\") {\n // Normalize style to match DOM's cssText (trailing semicolon)\n let css = String(value);\n css = css.trim();\n if (css && !css.endsWith(\";\")) css += \";\";\n result += ` style=\"${escapeAttr(css)}\"`;\n continue;\n }\n if (typeof value === \"boolean\") {\n if (value) result += ` ${key}=\"\"`;\n // false booleans are omitted\n } else {\n const attrName = key === \"class\" ? \"class\" : key;\n result += ` ${attrName}=\"${escapeAttr(String(value))}\"`;\n }\n }\n return result;\n }\n\n private buildChildren(rec: ViewRecord): string {\n if (!rec.children) return \"\";\n let result = \"\";\n for (const child of rec.children) {\n result += this.buildString(child);\n }\n return result;\n }\n}\n\n/** @deprecated Use HtmlStringRender instead */\nexport const StringRender = HtmlStringRender;\n",
|
|
19
19
|
"export type None = null | undefined;\nexport type Just<T> = T;\nexport type Maybe<T> = Just<T> | None;\n\nexport function just<T>(\n maybe: Maybe<T>,\n errorMessage?: string,\n): asserts maybe is Just<T> {\n if (maybe == null) {\n throw new TypeError(\n errorMessage ?? \"Expected Just, received None as Maybe\",\n );\n }\n}\n\nexport function isJust<T>(maybe: Maybe<T>): maybe is Just<T> {\n return maybe != null;\n}\n\nexport function isNone<T>(maybe: Maybe<T>): maybe is None {\n return maybe == null;\n}\n\nexport function withDefault<T, K>(v: Maybe<T>, alternative: K) {\n if (v != null) {\n return v;\n }\n return alternative;\n}\n\nexport const _ = undefined;\n",
|
|
20
20
|
"export function assertNever(x: never): never {\n throw new Error(`Unhandled case: ${x}`)\n}\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "AEF6273D02CC4DF064756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
|
@@ -17,16 +17,41 @@ export type InputEventData = BaseEventData & {
|
|
|
17
17
|
checked: boolean;
|
|
18
18
|
};
|
|
19
19
|
export type FocusEventData = BaseEventData;
|
|
20
|
+
export type ScrollEventData = BaseEventData & {
|
|
21
|
+
scrollTop: number;
|
|
22
|
+
scrollLeft: number;
|
|
23
|
+
};
|
|
24
|
+
export type LoadEventData = BaseEventData;
|
|
25
|
+
export type ErrorEventData = BaseEventData & {
|
|
26
|
+
message: string;
|
|
27
|
+
};
|
|
28
|
+
export type ToggleEventData = BaseEventData & {
|
|
29
|
+
open: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type MediaEventData = BaseEventData & {
|
|
32
|
+
muted: boolean;
|
|
33
|
+
paused: boolean;
|
|
34
|
+
volume: number;
|
|
35
|
+
currentTime: number;
|
|
36
|
+
duration: number;
|
|
37
|
+
};
|
|
20
38
|
export type ContainerEvents = {
|
|
21
39
|
click: (e: PointerEventData) => void;
|
|
22
40
|
dblclick: (e: PointerEventData) => void;
|
|
23
41
|
pointerDown: (e: PointerEventData) => void;
|
|
24
42
|
pointerUp: (e: PointerEventData) => void;
|
|
25
43
|
pointerMove: (e: PointerEventData) => void;
|
|
44
|
+
mouseEnter: (e: PointerEventData) => void;
|
|
45
|
+
mouseLeave: (e: PointerEventData) => void;
|
|
46
|
+
pointerEnter: (e: PointerEventData) => void;
|
|
47
|
+
pointerLeave: (e: PointerEventData) => void;
|
|
26
48
|
keyDown: (e: KeyEventData) => void;
|
|
27
49
|
keyUp: (e: KeyEventData) => void;
|
|
28
50
|
focus: (e: FocusEventData) => void;
|
|
29
51
|
blur: (e: FocusEventData) => void;
|
|
52
|
+
scroll: (e: ScrollEventData) => void;
|
|
53
|
+
load: (e: LoadEventData) => void;
|
|
54
|
+
error: (e: ErrorEventData) => void;
|
|
30
55
|
};
|
|
31
56
|
export type FormEvents = ContainerEvents & {
|
|
32
57
|
input: (e: InputEventData) => void;
|
|
@@ -34,6 +59,26 @@ export type FormEvents = ContainerEvents & {
|
|
|
34
59
|
keyDown: (e: KeyEventData) => void;
|
|
35
60
|
keyUp: (e: KeyEventData) => void;
|
|
36
61
|
};
|
|
62
|
+
export type MediaEvents = ContainerEvents & {
|
|
63
|
+
volumeChange: (e: MediaEventData) => void;
|
|
64
|
+
play: (e: MediaEventData) => void;
|
|
65
|
+
pause: (e: MediaEventData) => void;
|
|
66
|
+
ended: (e: MediaEventData) => void;
|
|
67
|
+
timeUpdate: (e: MediaEventData) => void;
|
|
68
|
+
loadedMetadata: (e: MediaEventData) => void;
|
|
69
|
+
loadedData: (e: MediaEventData) => void;
|
|
70
|
+
canPlay: (e: MediaEventData) => void;
|
|
71
|
+
canPlayThrough: (e: MediaEventData) => void;
|
|
72
|
+
durationChange: (e: MediaEventData) => void;
|
|
73
|
+
rateChange: (e: MediaEventData) => void;
|
|
74
|
+
seeking: (e: MediaEventData) => void;
|
|
75
|
+
seeked: (e: MediaEventData) => void;
|
|
76
|
+
stalled: (e: MediaEventData) => void;
|
|
77
|
+
waiting: (e: MediaEventData) => void;
|
|
78
|
+
};
|
|
79
|
+
export type DisclosureEvents = ContainerEvents & {
|
|
80
|
+
toggle: (e: ToggleEventData) => void;
|
|
81
|
+
};
|
|
37
82
|
export type HtmlAttrs = {
|
|
38
83
|
class?: string;
|
|
39
84
|
id?: string;
|
|
@@ -159,14 +204,14 @@ export declare const video: PublicView<HtmlAttrs & {
|
|
|
159
204
|
muted?: boolean;
|
|
160
205
|
width?: number;
|
|
161
206
|
height?: number;
|
|
162
|
-
} & EventHandlerProps<
|
|
207
|
+
} & EventHandlerProps<MediaEvents>, void>;
|
|
163
208
|
export declare const audio: PublicView<HtmlAttrs & {
|
|
164
209
|
src?: string;
|
|
165
210
|
controls?: boolean;
|
|
166
211
|
autoplay?: boolean;
|
|
167
212
|
loop?: boolean;
|
|
168
213
|
muted?: boolean;
|
|
169
|
-
} & EventHandlerProps<
|
|
214
|
+
} & EventHandlerProps<MediaEvents>, void>;
|
|
170
215
|
export declare const canvas: PublicView<HtmlAttrs & {
|
|
171
216
|
width?: number;
|
|
172
217
|
height?: number;
|
|
@@ -177,11 +222,11 @@ export declare const source: PublicView<HtmlAttrs & {
|
|
|
177
222
|
} & EventHandlerProps<ContainerEvents>, void>;
|
|
178
223
|
export declare const details: PublicView<HtmlAttrs & {
|
|
179
224
|
open?: boolean;
|
|
180
|
-
} & EventHandlerProps<
|
|
225
|
+
} & EventHandlerProps<DisclosureEvents>, void>;
|
|
181
226
|
export declare const summary: PublicView<HtmlAttrs & EventHandlerProps<ContainerEvents>, void>;
|
|
182
227
|
export declare const dialog: PublicView<HtmlAttrs & {
|
|
183
228
|
open?: boolean;
|
|
184
|
-
} & EventHandlerProps<
|
|
229
|
+
} & EventHandlerProps<DisclosureEvents>, void>;
|
|
185
230
|
export declare const menu: PublicView<HtmlAttrs & EventHandlerProps<ContainerEvents>, void>;
|
|
186
231
|
export declare const iframe: PublicView<HtmlAttrs & {
|
|
187
232
|
src?: string;
|