creo 0.2.2 → 0.2.4

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.js CHANGED
@@ -307,6 +307,17 @@ function lis(arr) {
307
307
  }
308
308
 
309
309
  // src/internal/engine.ts
310
+ var STATEFUL_DOM_KEYS = ["value", "checked", "selected", "indeterminate", "muted"];
311
+ function hasStatefulDomKey(props) {
312
+ if (props == null || typeof props !== "object")
313
+ return false;
314
+ for (const k of STATEFUL_DOM_KEYS) {
315
+ if (k in props)
316
+ return true;
317
+ }
318
+ return false;
319
+ }
320
+
310
321
  class Engine {
311
322
  renderer;
312
323
  #dirtyQueue = new Set;
@@ -458,7 +469,7 @@ class Engine {
458
469
  }
459
470
  }
460
471
  const structChanged = hasScStructuralChange(prevSc, view2.sc);
461
- const shouldUpdate = view2.body?.shouldUpdate ? view2.body.shouldUpdate(nextProps) : !shallowEqual(view2.props, nextProps);
472
+ const shouldUpdate = view2.body?.shouldUpdate ? view2.body.shouldUpdate(nextProps) : !shallowEqual(view2.props, nextProps) || (view2.flags & F_PRIMITIVE) !== 0 && hasStatefulDomKey(nextProps);
462
473
  if (shouldUpdate || structChanged) {
463
474
  view2.props = nextProps;
464
475
  this.markDirty(view2);
@@ -796,11 +807,12 @@ function getState(container) {
796
807
  }
797
808
  return state;
798
809
  }
810
+ var CAPTURE_EVENTS = new Set(["focus", "blur"]);
799
811
  function ensureDelegated(container, domEvent) {
800
812
  const state = getState(container);
801
813
  const count = state.counts.get(domEvent) ?? 0;
802
814
  if (count === 0) {
803
- container.addEventListener(domEvent, state.handler);
815
+ container.addEventListener(domEvent, state.handler, CAPTURE_EVENTS.has(domEvent));
804
816
  }
805
817
  state.counts.set(domEvent, count + 1);
806
818
  }
@@ -809,7 +821,7 @@ function removeDelegated(container, domEvent) {
809
821
  const count = state.counts.get(domEvent) ?? 0;
810
822
  if (count <= 1) {
811
823
  state.counts.delete(domEvent);
812
- container.removeEventListener(domEvent, state.handler);
824
+ container.removeEventListener(domEvent, state.handler, CAPTURE_EVENTS.has(domEvent));
813
825
  } else {
814
826
  state.counts.set(domEvent, count - 1);
815
827
  }
@@ -820,7 +832,8 @@ function mapEventData(domEvent, e) {
820
832
  const pe = e;
821
833
  data2 = { x: pe.clientX, y: pe.clientY };
822
834
  } else if (domEvent === "input" || domEvent === "change") {
823
- data2 = { value: e.target.value };
835
+ const target = e.target;
836
+ data2 = { value: target.value, checked: !!target.checked };
824
837
  } else if (domEvent === "keydown" || domEvent === "keyup") {
825
838
  const ke = e;
826
839
  data2 = { key: ke.key, code: ke.code };
@@ -831,11 +844,13 @@ function mapEventData(domEvent, e) {
831
844
  data2.preventDefault = () => e.preventDefault();
832
845
  return data2;
833
846
  }
847
+ var SVG_NS = "http://www.w3.org/2000/svg";
834
848
  var DOM_PROPERTIES = new Set([
835
849
  "value",
836
850
  "checked",
837
851
  "selected",
838
- "indeterminate"
852
+ "indeterminate",
853
+ "muted"
839
854
  ]);
840
855
 
841
856
  class HtmlRender {
@@ -855,7 +870,9 @@ class HtmlRender {
855
870
  view2.renderRef = { element: textNode, prevProps: null };
856
871
  parentNode.insertBefore(textNode, refNode);
857
872
  } else {
858
- const element = document.createElement(tag);
873
+ const parentIsSvg = parentNode.namespaceURI === SVG_NS;
874
+ const useSvg = tag === "svg" || parentIsSvg;
875
+ const element = useSvg ? document.createElementNS(SVG_NS, tag) : document.createElement(tag);
859
876
  const props = view2.props;
860
877
  const domRef = { element, prevProps: null };
861
878
  view2.renderRef = domRef;
@@ -904,10 +921,11 @@ class HtmlRender {
904
921
  return;
905
922
  }
906
923
  const nextProps = view2.props;
924
+ const el = ref.element;
907
925
  if (!ref.prevProps) {
908
- this.setAttributes(ref.element, nextProps);
926
+ this.setAttributes(el, nextProps);
909
927
  } else if (ref.prevProps !== nextProps) {
910
- this.diffAttributes(ref.element, ref.prevProps, nextProps);
928
+ this.diffAttributes(el, ref.prevProps, nextProps);
911
929
  }
912
930
  ref.prevProps = nextProps;
913
931
  }
@@ -922,7 +940,7 @@ class HtmlRender {
922
940
  while (parent) {
923
941
  if (parent.flags & F_PRIMITIVE) {
924
942
  const ref = parent.renderRef;
925
- if (ref && ref.element instanceof HTMLElement)
943
+ if (ref && !(ref.element instanceof Text))
926
944
  return ref.element;
927
945
  }
928
946
  parent = parent.parent;
@@ -978,7 +996,7 @@ class HtmlRender {
978
996
  const value = next[key];
979
997
  if (key === "key" || value == null)
980
998
  continue;
981
- if (prev[key] === value)
999
+ if (prev[key] === value && !DOM_PROPERTIES.has(key))
982
1000
  continue;
983
1001
  if (isEventProp(key)) {
984
1002
  const creoName = key.slice(2);
@@ -1012,7 +1030,7 @@ class HtmlRender {
1012
1030
  }
1013
1031
  setAttribute(element, key, value) {
1014
1032
  if (key === "class") {
1015
- element.className = String(value);
1033
+ element.setAttribute("class", String(value));
1016
1034
  } else if (key === "style") {
1017
1035
  element.style.cssText = String(value);
1018
1036
  } else if (DOM_PROPERTIES.has(key)) {
@@ -1028,7 +1046,7 @@ class HtmlRender {
1028
1046
  }
1029
1047
  removeAttribute(element, key) {
1030
1048
  if (key === "class") {
1031
- element.className = "";
1049
+ element.removeAttribute("class");
1032
1050
  } else if (key === "style") {
1033
1051
  element.style.cssText = "";
1034
1052
  } else if (DOM_PROPERTIES.has(key)) {
@@ -1158,7 +1176,7 @@ var VOID_TAGS = new Set([
1158
1176
  "col",
1159
1177
  "wbr"
1160
1178
  ]);
1161
- var DOM_PROPERTIES2 = new Set(["value", "checked", "selected", "indeterminate"]);
1179
+ var DOM_PROPERTIES2 = new Set(["value", "checked", "selected", "indeterminate", "muted"]);
1162
1180
  function isEventProp2(key) {
1163
1181
  return key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.charCodeAt(2) >= 65 && key.charCodeAt(2) <= 90;
1164
1182
  }
@@ -1381,4 +1399,4 @@ export {
1381
1399
  $primitive
1382
1400
  };
1383
1401
 
1384
- //# debugId=B12A03136056333664756E2164756E21
1402
+ //# debugId=E2DD104085BAD69A64756E2164756E21
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};\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\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",
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
- "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\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\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",
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: HTMLElement | 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\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);\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);\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 data = { value: (e.target as HTMLInputElement).value };\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 DOM_PROPERTIES = new Set([\n \"value\",\n \"checked\",\n \"selected\",\n \"indeterminate\",\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 element = 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 HTMLElement;\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 if (!ref.prevProps) {\n this.setAttributes(ref.element, nextProps);\n } else if (ref.prevProps !== nextProps) {\n this.diffAttributes(ref.element, 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 HTMLElement) 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: HTMLElement,\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: HTMLElement,\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 if (prev[key] === value) 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: HTMLElement,\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: HTMLElement, 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: HTMLElement, key: string, value: unknown) {\n if (key === \"class\") {\n element.className = String(value);\n } else if (key === \"style\") {\n element.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: HTMLElement, key: string) {\n if (key === \"class\") {\n element.className = \"\";\n } else if (key === \"style\") {\n element.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 HTMLElement).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 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",
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
- "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\"]);\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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttr(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\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",
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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttr(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\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": "B12A03136056333664756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "E2DD104085BAD69A64756E2164756E21",
24
24
  "names": []
25
25
  }
@@ -14,6 +14,7 @@ export type KeyEventData = BaseEventData & {
14
14
  };
15
15
  export type InputEventData = BaseEventData & {
16
16
  value: string;
17
+ checked: boolean;
17
18
  };
18
19
  export type FocusEventData = BaseEventData;
19
20
  export type ContainerEvents = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "creo",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",