synstate-dom 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +218 -2
  3. package/dist/bind/bind-props.d.mts +9 -0
  4. package/dist/bind/bind-props.d.mts.map +1 -0
  5. package/dist/bind/bind-props.mjs +117 -0
  6. package/dist/bind/bind-props.mjs.map +1 -0
  7. package/dist/bind/index.d.mts +2 -0
  8. package/dist/bind/index.d.mts.map +1 -0
  9. package/dist/bind/index.mjs +2 -0
  10. package/dist/bind/index.mjs.map +1 -0
  11. package/dist/constant/bindable.d.mts +11 -0
  12. package/dist/constant/bindable.d.mts.map +1 -0
  13. package/dist/constant/bindable.mjs +2 -0
  14. package/dist/constant/bindable.mjs.map +1 -0
  15. package/dist/constant/constant.d.mts +20 -0
  16. package/dist/constant/constant.d.mts.map +1 -0
  17. package/dist/constant/constant.mjs +10 -0
  18. package/dist/constant/constant.mjs.map +1 -0
  19. package/dist/constant/derive.d.mts +16 -0
  20. package/dist/constant/derive.d.mts.map +1 -0
  21. package/dist/constant/derive.mjs +28 -0
  22. package/dist/constant/derive.mjs.map +1 -0
  23. package/dist/constant/index.d.mts +7 -0
  24. package/dist/constant/index.d.mts.map +1 -0
  25. package/dist/constant/index.mjs +7 -0
  26. package/dist/constant/index.mjs.map +1 -0
  27. package/dist/constant/map-bindable.d.mts +10 -0
  28. package/dist/constant/map-bindable.d.mts.map +1 -0
  29. package/dist/constant/map-bindable.mjs +16 -0
  30. package/dist/constant/map-bindable.mjs.map +1 -0
  31. package/dist/constant/to-observable.d.mts +12 -0
  32. package/dist/constant/to-observable.d.mts.map +1 -0
  33. package/dist/constant/to-observable.mjs +16 -0
  34. package/dist/constant/to-observable.mjs.map +1 -0
  35. package/dist/constant/view.d.mts +25 -0
  36. package/dist/constant/view.d.mts.map +1 -0
  37. package/dist/constant/view.mjs +15 -0
  38. package/dist/constant/view.mjs.map +1 -0
  39. package/dist/control/for.d.mts +29 -0
  40. package/dist/control/for.d.mts.map +1 -0
  41. package/dist/control/for.mjs +201 -0
  42. package/dist/control/for.mjs.map +1 -0
  43. package/dist/control/if.d.mts +16 -0
  44. package/dist/control/if.d.mts.map +1 -0
  45. package/dist/control/if.mjs +12 -0
  46. package/dist/control/if.mjs.map +1 -0
  47. package/dist/control/index.d.mts +6 -0
  48. package/dist/control/index.d.mts.map +1 -0
  49. package/dist/control/index.mjs +6 -0
  50. package/dist/control/index.mjs.map +1 -0
  51. package/dist/control/longest-increasing-subsequence.d.mts +7 -0
  52. package/dist/control/longest-increasing-subsequence.d.mts.map +1 -0
  53. package/dist/control/longest-increasing-subsequence.mjs +37 -0
  54. package/dist/control/longest-increasing-subsequence.mjs.map +1 -0
  55. package/dist/control/match-optional.d.mts +19 -0
  56. package/dist/control/match-optional.d.mts.map +1 -0
  57. package/dist/control/match-optional.mjs +21 -0
  58. package/dist/control/match-optional.mjs.map +1 -0
  59. package/dist/control/match-result.d.mts +19 -0
  60. package/dist/control/match-result.d.mts.map +1 -0
  61. package/dist/control/match-result.mjs +27 -0
  62. package/dist/control/match-result.mjs.map +1 -0
  63. package/dist/control/mount-switch.d.mts +18 -0
  64. package/dist/control/mount-switch.d.mts.map +1 -0
  65. package/dist/control/mount-switch.mjs +51 -0
  66. package/dist/control/mount-switch.mjs.map +1 -0
  67. package/dist/control/portal.d.mts +15 -0
  68. package/dist/control/portal.d.mts.map +1 -0
  69. package/dist/control/portal.mjs +22 -0
  70. package/dist/control/portal.mjs.map +1 -0
  71. package/dist/index.d.mts +5 -0
  72. package/dist/index.d.mts.map +1 -0
  73. package/dist/index.mjs +5 -0
  74. package/dist/index.mjs.map +1 -0
  75. package/dist/internal/as-constant.d.mts +9 -0
  76. package/dist/internal/as-constant.d.mts.map +1 -0
  77. package/dist/internal/as-constant.mjs +10 -0
  78. package/dist/internal/as-constant.mjs.map +1 -0
  79. package/dist/internal/bind-value.d.mts +14 -0
  80. package/dist/internal/bind-value.d.mts.map +1 -0
  81. package/dist/internal/bind-value.mjs +39 -0
  82. package/dist/internal/bind-value.mjs.map +1 -0
  83. package/dist/internal/dom-tables.d.mts +30 -0
  84. package/dist/internal/dom-tables.d.mts.map +1 -0
  85. package/dist/internal/dom-tables.mjs +167 -0
  86. package/dist/internal/dom-tables.mjs.map +1 -0
  87. package/dist/internal/index.d.mts +7 -0
  88. package/dist/internal/index.d.mts.map +1 -0
  89. package/dist/internal/index.mjs +7 -0
  90. package/dist/internal/index.mjs.map +1 -0
  91. package/dist/internal/is-view.d.mts +3 -0
  92. package/dist/internal/is-view.d.mts.map +1 -0
  93. package/dist/internal/is-view.mjs +4 -0
  94. package/dist/internal/is-view.mjs.map +1 -0
  95. package/dist/internal/mountable-tag.d.mts +6 -0
  96. package/dist/internal/mountable-tag.d.mts.map +1 -0
  97. package/dist/internal/mountable-tag.mjs +6 -0
  98. package/dist/internal/mountable-tag.mjs.map +1 -0
  99. package/dist/internal/view-tag.d.mts +7 -0
  100. package/dist/internal/view-tag.d.mts.map +1 -0
  101. package/dist/internal/view-tag.mjs +7 -0
  102. package/dist/internal/view-tag.mjs.map +1 -0
  103. package/dist/jsx/child.d.mts +20 -0
  104. package/dist/jsx/child.d.mts.map +1 -0
  105. package/dist/jsx/child.mjs +33 -0
  106. package/dist/jsx/child.mjs.map +1 -0
  107. package/dist/jsx/element-props.d.mts +78 -0
  108. package/dist/jsx/element-props.d.mts.map +1 -0
  109. package/dist/jsx/element-props.mjs +2 -0
  110. package/dist/jsx/element-props.mjs.map +1 -0
  111. package/dist/jsx/event-prop-names.d.mts +120 -0
  112. package/dist/jsx/event-prop-names.d.mts.map +1 -0
  113. package/dist/jsx/event-prop-names.mjs +2 -0
  114. package/dist/jsx/event-prop-names.mjs.map +1 -0
  115. package/dist/jsx/index.d.mts +7 -0
  116. package/dist/jsx/index.d.mts.map +1 -0
  117. package/dist/jsx/index.mjs +7 -0
  118. package/dist/jsx/index.mjs.map +1 -0
  119. package/dist/jsx/jsx-namespace.d.mts +11 -0
  120. package/dist/jsx/jsx-namespace.d.mts.map +1 -0
  121. package/dist/jsx/jsx-namespace.mjs +2 -0
  122. package/dist/jsx/jsx-namespace.mjs.map +1 -0
  123. package/dist/jsx/jsx.d.mts +18 -0
  124. package/dist/jsx/jsx.d.mts.map +1 -0
  125. package/dist/jsx/jsx.mjs +46 -0
  126. package/dist/jsx/jsx.mjs.map +1 -0
  127. package/dist/jsx/mountable.d.mts +25 -0
  128. package/dist/jsx/mountable.d.mts.map +1 -0
  129. package/dist/jsx/mountable.mjs +7 -0
  130. package/dist/jsx/mountable.mjs.map +1 -0
  131. package/dist/jsx-dev-runtime.d.mts +7 -0
  132. package/dist/jsx-dev-runtime.d.mts.map +1 -0
  133. package/dist/jsx-dev-runtime.mjs +7 -0
  134. package/dist/jsx-dev-runtime.mjs.map +1 -0
  135. package/dist/jsx-runtime.d.mts +7 -0
  136. package/dist/jsx-runtime.d.mts.map +1 -0
  137. package/dist/jsx-runtime.mjs +7 -0
  138. package/dist/jsx-runtime.mjs.map +1 -0
  139. package/dist/render.d.mts +14 -0
  140. package/dist/render.d.mts.map +1 -0
  141. package/dist/render.mjs +25 -0
  142. package/dist/render.mjs.map +1 -0
  143. package/package.json +97 -3
  144. package/src/bind/bind-props.mts +174 -0
  145. package/src/bind/index.mts +1 -0
  146. package/src/constant/bindable.mts +19 -0
  147. package/src/constant/constant.mts +24 -0
  148. package/src/constant/constant.test.mts +70 -0
  149. package/src/constant/derive.mts +51 -0
  150. package/src/constant/derive.test.mts +64 -0
  151. package/src/constant/index.mts +6 -0
  152. package/src/constant/map-bindable.mts +23 -0
  153. package/src/constant/map-bindable.test.mts +63 -0
  154. package/src/constant/to-observable.mts +20 -0
  155. package/src/constant/to-observable.test.mts +37 -0
  156. package/src/constant/view.mts +35 -0
  157. package/src/constant/view.test.mts +40 -0
  158. package/src/control/for.mts +362 -0
  159. package/src/control/if.mts +28 -0
  160. package/src/control/index.mts +5 -0
  161. package/src/control/longest-increasing-subsequence.mts +59 -0
  162. package/src/control/longest-increasing-subsequence.test.mts +26 -0
  163. package/src/control/match-optional.mts +41 -0
  164. package/src/control/match-result.mts +48 -0
  165. package/src/control/mount-switch.mts +75 -0
  166. package/src/control/portal.mts +32 -0
  167. package/src/index.mts +4 -0
  168. package/src/internal/as-constant.mts +11 -0
  169. package/src/internal/bind-value.mts +58 -0
  170. package/src/internal/dom-tables.mts +176 -0
  171. package/src/internal/index.mts +6 -0
  172. package/src/internal/is-view.mts +6 -0
  173. package/src/internal/mountable-tag.mts +5 -0
  174. package/src/internal/view-tag.mts +6 -0
  175. package/src/jsx/child.mts +51 -0
  176. package/src/jsx/element-props.mts +132 -0
  177. package/src/jsx/element-props.test.mts +28 -0
  178. package/src/jsx/event-prop-names.mts +119 -0
  179. package/src/jsx/index.mts +6 -0
  180. package/src/jsx/jsx-namespace.mts +11 -0
  181. package/src/jsx/jsx.mts +63 -0
  182. package/src/jsx/mountable.mts +31 -0
  183. package/src/jsx-dev-runtime.mts +6 -0
  184. package/src/jsx-runtime.mts +11 -0
  185. package/src/render.mts +32 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child.mjs","sourceRoot":"","sources":["../../src/jsx/child.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AASzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAwB,EAAE;IAC/D,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAE7C,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAwB,EAAE,CACnE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAW,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAkB,EAAE,CACxD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IAClB,QAAQ,CAAC,KAAK,CAAC;IACf,QAAQ,CAAC,KAAK,CAAC;IACf,YAAY,CAAC,KAAK,CAAC;IACnB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,GAAG,CAAC,KAAY,EAAsB,EAAE,CACvD,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { ReadonlyRecord, StrictPick, TypeEq } from 'ts-type-forge';
2
+ import type { Bindable } from '../constant/index.mjs';
3
+ import type { propertyNames, svgAttributeNames, SvgTagName } from '../internal/index.mjs';
4
+ import type { Child } from './child.mjs';
5
+ import type { EventPropNames } from './event-prop-names.mjs';
6
+ /**
7
+ * The props every intrinsic element takes.
8
+ *
9
+ * - `ref` is called once with the element, right after it is created and
10
+ * before its children are mounted or anything is bound.
11
+ * - `class` is either a string or an object of `Bindable<boolean>`s, one per
12
+ * class name, never both (SPEC.md 7.2).
13
+ * - `style` is either a `cssText` string or an object of CSS properties, each
14
+ * bound with `style.setProperty`, so the keys are the hyphenated names
15
+ * (`'background-color'`, `'--accent'`).
16
+ */
17
+ export type CommonElementProps<E extends Element> = Readonly<{
18
+ ref?: (element: E) => void;
19
+ children?: Child;
20
+ class?: Bindable<string> | ClassObject;
21
+ style?: Bindable<string> | StyleObject;
22
+ }> & Partial<ReadonlyRecord<`aria-${string}` | `data-${string}`, Bindable<string | undefined>>>;
23
+ /** `class` as one `Bindable<boolean>` per class name. */
24
+ export type ClassObject = ReadonlyRecord<string, Bindable<boolean>>;
25
+ /**
26
+ * `style` as one `Bindable<string | undefined>` per hyphenated CSS property
27
+ * name; `undefined` removes the property.
28
+ */
29
+ export type StyleObject = ReadonlyRecord<string, Bindable<string | undefined>>;
30
+ /**
31
+ * The props of an HTML element: the common ones, one `Bindable` per writable
32
+ * primitive DOM property of `E` (`id`, `disabled`, `value`, `tabIndex`, …),
33
+ * and one handler per event of `HTMLElementEventMap`.
34
+ *
35
+ * An attribute, `aria-*` and `data-*` included, also takes `undefined`, which
36
+ * removes it: a value that comes and goes is an observable of `T | undefined`
37
+ * (SPEC.md 4.1). A DOM property of `propertyNames` (`value`, `checked`, …) has
38
+ * no absent state and does not.
39
+ */
40
+ export type HtmlElementProps<E extends HTMLElement> = CommonElementProps<E> & ReflectedProps<E> & EventProps<E, HTMLElementEventMap>;
41
+ /**
42
+ * The props of an SVG element: the common ones, the attributes of
43
+ * `svgAttributeNames`, and one handler per event of `SVGElementEventMap`.
44
+ */
45
+ export type SvgElementProps<E extends SVGElement> = CommonElementProps<E> & Partial<ReadonlyRecord<(typeof svgAttributeNames)[number], Bindable<number | string | undefined>>> & EventProps<E, SVGElementEventMap>;
46
+ /**
47
+ * One handler per event, named `on` followed by the event's name in
48
+ * PascalCase (`onClick`, `onPointerDown`). `currentTarget` is narrowed to the
49
+ * element. A handler is a function, never an observable.
50
+ */
51
+ export type EventProps<E extends Element, M> = Readonly<{
52
+ [K in keyof M & keyof EventPropNames as EventPropNames[K]]?: (event: M[K] & Readonly<{
53
+ currentTarget: E;
54
+ }>) => void;
55
+ }>;
56
+ export type GeneratedIntrinsicElements = Readonly<{
57
+ [K in keyof HTMLElementTagNameMap]: HtmlElementProps<HTMLElementTagNameMap[K]>;
58
+ }> & Readonly<{
59
+ [K in SvgTagName]: SvgElementProps<SVGElementTagNameMap[K]>;
60
+ }>;
61
+ type ReflectedProps<E> = Readonly<{
62
+ [K in keyof E as ReflectedKey<E, K>]?: Bindable<K extends PropertyName ? NonNullable<E[K]> : NonNullable<E[K]> | undefined>;
63
+ }>;
64
+ type PropertyName = (typeof propertyNames)[number];
65
+ /**
66
+ * `K` if it is a writable primitive property of `E`, and `never` otherwise.
67
+ * An index signature is dropped: `HTMLFormElement` has one for its named
68
+ * controls, which would otherwise swallow every other key.
69
+ */
70
+ type ReflectedKey<E, K extends keyof E> = string extends K ? never : number extends K ? never : K extends ExcludedKey | `aria${string}` | `on${string}` ? never : NonNullable<E[K]> extends boolean | number | string ? IsWritable<E, K> extends true ? K : never : never;
71
+ type IsWritable<E, K extends keyof E> = TypeEq<StrictPick<E, K>, Readonly<StrictPick<E, K>>> extends true ? false : true;
72
+ /**
73
+ * Writable primitive properties that are not attributes, or that are props of
74
+ * their own (`class`, `style`).
75
+ */
76
+ type ExcludedKey = 'className' | 'innerHTML' | 'innerText' | 'nodeValue' | 'outerHTML' | 'outerText' | 'scrollLeft' | 'scrollTop' | 'textContent';
77
+ export {};
78
+ //# sourceMappingURL=element-props.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-props.d.mts","sourceRoot":"","sources":["../../src/jsx/element-props.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=element-props.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-props.mjs","sourceRoot":"","sources":["../../src/jsx/element-props.mts"],"names":[],"mappings":""}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The prop name of each DOM event, in the PascalCase React uses
3
+ * (`pointerdown` → `onPointerDown`). The event names are single lower-case
4
+ * words, so the word boundaries have to be written down; binding needs no
5
+ * table, since lower-casing the prop name gives the event name back.
6
+ *
7
+ * Covers every key of `HTMLElementEventMap` and `SVGElementEventMap`, which
8
+ * `element-props.test.mts` asserts.
9
+ */
10
+ export type EventPropNames = Readonly<{
11
+ abort: 'onAbort';
12
+ animationcancel: 'onAnimationCancel';
13
+ animationend: 'onAnimationEnd';
14
+ animationiteration: 'onAnimationIteration';
15
+ animationstart: 'onAnimationStart';
16
+ auxclick: 'onAuxClick';
17
+ beforeinput: 'onBeforeInput';
18
+ beforematch: 'onBeforeMatch';
19
+ beforetoggle: 'onBeforeToggle';
20
+ blur: 'onBlur';
21
+ cancel: 'onCancel';
22
+ canplay: 'onCanPlay';
23
+ canplaythrough: 'onCanPlayThrough';
24
+ change: 'onChange';
25
+ click: 'onClick';
26
+ close: 'onClose';
27
+ command: 'onCommand';
28
+ compositionend: 'onCompositionEnd';
29
+ compositionstart: 'onCompositionStart';
30
+ compositionupdate: 'onCompositionUpdate';
31
+ contextlost: 'onContextLost';
32
+ contextmenu: 'onContextMenu';
33
+ contextrestored: 'onContextRestored';
34
+ copy: 'onCopy';
35
+ cuechange: 'onCueChange';
36
+ cut: 'onCut';
37
+ dblclick: 'onDblClick';
38
+ drag: 'onDrag';
39
+ dragend: 'onDragEnd';
40
+ dragenter: 'onDragEnter';
41
+ dragleave: 'onDragLeave';
42
+ dragover: 'onDragOver';
43
+ dragstart: 'onDragStart';
44
+ drop: 'onDrop';
45
+ durationchange: 'onDurationChange';
46
+ emptied: 'onEmptied';
47
+ ended: 'onEnded';
48
+ error: 'onError';
49
+ focus: 'onFocus';
50
+ focusin: 'onFocusIn';
51
+ focusout: 'onFocusOut';
52
+ formdata: 'onFormData';
53
+ fullscreenchange: 'onFullscreenChange';
54
+ fullscreenerror: 'onFullscreenError';
55
+ gotpointercapture: 'onGotPointerCapture';
56
+ input: 'onInput';
57
+ invalid: 'onInvalid';
58
+ keydown: 'onKeyDown';
59
+ keypress: 'onKeyPress';
60
+ keyup: 'onKeyUp';
61
+ load: 'onLoad';
62
+ loadeddata: 'onLoadedData';
63
+ loadedmetadata: 'onLoadedMetadata';
64
+ loadstart: 'onLoadStart';
65
+ lostpointercapture: 'onLostPointerCapture';
66
+ mousedown: 'onMouseDown';
67
+ mouseenter: 'onMouseEnter';
68
+ mouseleave: 'onMouseLeave';
69
+ mousemove: 'onMouseMove';
70
+ mouseout: 'onMouseOut';
71
+ mouseover: 'onMouseOver';
72
+ mouseup: 'onMouseUp';
73
+ paste: 'onPaste';
74
+ pause: 'onPause';
75
+ play: 'onPlay';
76
+ playing: 'onPlaying';
77
+ pointercancel: 'onPointerCancel';
78
+ pointerdown: 'onPointerDown';
79
+ pointerenter: 'onPointerEnter';
80
+ pointerleave: 'onPointerLeave';
81
+ pointermove: 'onPointerMove';
82
+ pointerout: 'onPointerOut';
83
+ pointerover: 'onPointerOver';
84
+ pointerrawupdate: 'onPointerRawUpdate';
85
+ pointerup: 'onPointerUp';
86
+ progress: 'onProgress';
87
+ ratechange: 'onRateChange';
88
+ reset: 'onReset';
89
+ resize: 'onResize';
90
+ scroll: 'onScroll';
91
+ scrollend: 'onScrollEnd';
92
+ securitypolicyviolation: 'onSecurityPolicyViolation';
93
+ seeked: 'onSeeked';
94
+ seeking: 'onSeeking';
95
+ select: 'onSelect';
96
+ selectionchange: 'onSelectionChange';
97
+ selectstart: 'onSelectStart';
98
+ slotchange: 'onSlotChange';
99
+ stalled: 'onStalled';
100
+ submit: 'onSubmit';
101
+ suspend: 'onSuspend';
102
+ timeupdate: 'onTimeUpdate';
103
+ toggle: 'onToggle';
104
+ touchcancel: 'onTouchCancel';
105
+ touchend: 'onTouchEnd';
106
+ touchmove: 'onTouchMove';
107
+ touchstart: 'onTouchStart';
108
+ transitioncancel: 'onTransitionCancel';
109
+ transitionend: 'onTransitionEnd';
110
+ transitionrun: 'onTransitionRun';
111
+ transitionstart: 'onTransitionStart';
112
+ volumechange: 'onVolumeChange';
113
+ waiting: 'onWaiting';
114
+ webkitanimationend: 'onWebkitAnimationEnd';
115
+ webkitanimationiteration: 'onWebkitAnimationIteration';
116
+ webkitanimationstart: 'onWebkitAnimationStart';
117
+ webkittransitionend: 'onWebkitTransitionEnd';
118
+ wheel: 'onWheel';
119
+ }>;
120
+ //# sourceMappingURL=event-prop-names.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-prop-names.d.mts","sourceRoot":"","sources":["../../src/jsx/event-prop-names.mts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,mBAAmB,CAAC;IACrC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,cAAc,EAAE,kBAAkB,CAAC;IACnC,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,EAAE,kBAAkB,CAAC;IACnC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,kBAAkB,CAAC;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,eAAe,EAAE,mBAAmB,CAAC;IACrC,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;IACnC,SAAS,EAAE,aAAa,CAAC;IACzB,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,iBAAiB,CAAC;IACjC,WAAW,EAAE,eAAe,CAAC;IAC7B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,eAAe,CAAC;IAC7B,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,uBAAuB,EAAE,2BAA2B,CAAC;IACrD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,mBAAmB,CAAC;IACrC,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,cAAc,CAAC;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,aAAa,EAAE,iBAAiB,CAAC;IACjC,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,EAAE,mBAAmB,CAAC;IACrC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,wBAAwB,EAAE,4BAA4B,CAAC;IACvD,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-prop-names.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-prop-names.mjs","sourceRoot":"","sources":["../../src/jsx/event-prop-names.mts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from './child.mjs';
2
+ export * from './element-props.mjs';
3
+ export * from './event-prop-names.mjs';
4
+ export * from './jsx-namespace.mjs';
5
+ export * from './jsx.mjs';
6
+ export * from './mountable.mjs';
7
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/jsx/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './child.mjs';
2
+ export * from './element-props.mjs';
3
+ export * from './event-prop-names.mjs';
4
+ export * from './jsx-namespace.mjs';
5
+ export * from './jsx.mjs';
6
+ export * from './mountable.mjs';
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/jsx/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { GeneratedIntrinsicElements } from './element-props.mjs';
2
+ import type { Mountable } from './mountable.mjs';
3
+ /** The `JSX` namespace TypeScript reads through `jsxImportSource`. */
4
+ export declare namespace JSX {
5
+ type Element = Mountable;
6
+ type ElementChildrenAttribute = Readonly<{
7
+ children: unknown;
8
+ }>;
9
+ type IntrinsicElements = GeneratedIntrinsicElements;
10
+ }
11
+ //# sourceMappingURL=jsx-namespace.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-namespace.d.mts","sourceRoot":"","sources":["../../src/jsx/jsx-namespace.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,sEAAsE;AACtE,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAK,OAAO,GAAG,SAAS,CAAC;IAEzB,KAAK,wBAAwB,GAAG,QAAQ,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEhE,KAAK,iBAAiB,GAAG,0BAA0B,CAAC;CACrD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jsx-namespace.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-namespace.mjs","sourceRoot":"","sources":["../../src/jsx/jsx-namespace.mts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { type Child } from './child.mjs';
2
+ import { type Mountable } from './mountable.mjs';
3
+ /**
4
+ * The JSX factory (SPEC.md 6.2), exported from `synstate-dom/jsx-runtime` as
5
+ * `jsx` and `jsxs`. Returns a description and does nothing else:
6
+ * no DOM is created and no component is called until it is mounted.
7
+ *
8
+ * TypeScript checks a JSX expression against the `JSX` namespace, not against
9
+ * this signature, so the props of an intrinsic element arrive as `P` and are
10
+ * read with run-time checks.
11
+ *
12
+ */
13
+ export declare const createMountable: <P>(type: string | ((componentProps: P) => Mountable), props: P, key?: unknown) => Mountable;
14
+ /** Mounts its children in order, with no element around them. */
15
+ export declare const Fragment: (props: Readonly<{
16
+ children?: Child;
17
+ }>) => Mountable;
18
+ //# sourceMappingURL=jsx.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx.d.mts","sourceRoot":"","sources":["../../src/jsx/jsx.mts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,QACzB,MAAM,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,SAAS,CAAC,SAC1C,CAAC,QACF,OAAO,KACZ,SAQF,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,QAAQ,UAAW,QAAQ,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,KAAG,SACd,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { hasKey, isRecord } from 'ts-data-forge';
2
+ import { bindProps } from '../bind/index.mjs';
3
+ import { svgTagNames } from '../internal/index.mjs';
4
+ import { isChild, mountChild } from './child.mjs';
5
+ import { mountable } from './mountable.mjs';
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export const createMountable = (type, props, key) => {
17
+
18
+
19
+ const propsWithKey = key === undefined ? props : { ...props, key };
20
+ return typeof type === 'string'
21
+ ? mountable(() => mountElement(type, props))
22
+ : mountable(() => type(propsWithKey).mount());
23
+ };
24
+
25
+ export const Fragment = (props) => mountable(() => mountChild(props.children ?? []));
26
+ const mountElement = (tag, props) => {
27
+ const element = svgTagNameSet.has(tag)
28
+ ? document.createElementNS(svgNamespace, tag)
29
+ : document.createElement(tag);
30
+ if (!isRecord(props)) {
31
+ return element;
32
+ }
33
+ if (hasKey(props, 'ref') && isRefCallback(props.ref)) {
34
+ props.ref(element);
35
+ }
36
+
37
+ if (hasKey(props, 'children') && isChild(props.children)) {
38
+ element.append(...mountChild(props.children));
39
+ }
40
+ bindProps(element, props);
41
+ return element;
42
+ };
43
+ const svgNamespace = 'http://www.w3.org/2000/svg';
44
+ const svgTagNameSet = new Set(svgTagNames);
45
+ const isRefCallback = (value) => typeof value === 'function';
46
+ //# sourceMappingURL=jsx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx.mjs","sourceRoot":"","sources":["../../src/jsx/jsx.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAiD,EACjD,KAAQ,EACR,GAAa,EACF,EAAE;IACb,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,YAAY,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAY,CAAC;IAE9E,OAAO,OAAO,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAqC,EAAa,EAAE,CAC3E,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;AAEpD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAc,EAAW,EAAE;IAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,EAAE,GAAG,CAAC;QAC7C,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,wEAAwE;IACxE,IAAI,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE1B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAElD,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAEhE,MAAM,aAAa,GAAG,CAAC,KAAc,EAAuC,EAAE,CAC5E,OAAO,KAAK,KAAK,UAAU,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { mountableTag } from '../internal/index.mjs';
2
+ /**
3
+ * What a JSX expression evaluates to: a description that creates DOM nodes
4
+ * when mounted, not the nodes themselves (SPEC.md 6.1).
5
+ *
6
+ * The children of a JSX element are evaluated before the element, so a
7
+ * description that created its nodes at once would create both branches of
8
+ * `<If cond={c$} then={<A />} else={<B />} />` before either was chosen.
9
+ *
10
+ * It is an object rather than a function: a props object with a `then` prop
11
+ * holding a function would be taken for a thenable.
12
+ *
13
+ * The same description may be mounted any number of times; each mount
14
+ * creates new nodes.
15
+ */
16
+ export type Mountable = Readonly<{
17
+ [mountableTag]: true;
18
+ /** Called inside the current scope; creates the nodes and returns them. */
19
+ mount: () => MountedNodes;
20
+ }>;
21
+ /** What one mount produced. */
22
+ export type MountedNodes = ChildNode | readonly ChildNode[];
23
+ /** Makes a {@link Mountable} from the function that mounts it. */
24
+ export declare const mountable: (mount: () => MountedNodes) => Mountable;
25
+ //# sourceMappingURL=mountable.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mountable.d.mts","sourceRoot":"","sources":["../../src/jsx/mountable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IACrB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,YAAY,CAAC;CAC3B,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC;AAE5D,kEAAkE;AAClE,eAAO,MAAM,SAAS,UAAW,MAAM,YAAY,KAAG,SAIzC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { mountableTag } from '../internal/index.mjs';
2
+
3
+ export const mountable = (mount) => ({
4
+ [mountableTag]: true,
5
+ mount,
6
+ });
7
+ //# sourceMappingURL=mountable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mountable.mjs","sourceRoot":"","sources":["../../src/jsx/mountable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAyBrD,kEAAkE;AAClE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAa,EAAE,CAChE,CAAC;IACC,CAAC,YAAY,CAAC,EAAE,IAAI;IACpB,KAAK;CACN,CAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The module `"jsxImportSource": "synstate-dom"` makes TypeScript import for
3
+ * `"jsx": "react-jsxdev"`. The extra arguments (`key`, source location) are
4
+ * not used.
5
+ */
6
+ export { Fragment, createMountable as jsxDEV, type JSX } from './jsx/index.mjs';
7
+ //# sourceMappingURL=jsx-dev-runtime.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.d.mts","sourceRoot":"","sources":["../src/jsx-dev-runtime.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,eAAe,IAAI,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+
2
+
3
+
4
+
5
+
6
+ export { Fragment, createMountable as jsxDEV } from './jsx/index.mjs';
7
+ //# sourceMappingURL=jsx-dev-runtime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-dev-runtime.mjs","sourceRoot":"","sources":["../src/jsx-dev-runtime.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,eAAe,IAAI,MAAM,EAAY,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The module `"jsxImportSource": "synstate-dom"` makes TypeScript import for
3
+ * `"jsx": "react-jsx"`. `jsxs` is the call for an element with several
4
+ * children; both are the same factory.
5
+ */
6
+ export { Fragment, createMountable as jsx, createMountable as jsxs, type JSX, } from './jsx/index.mjs';
7
+ //# sourceMappingURL=jsx-runtime.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.mts","sourceRoot":"","sources":["../src/jsx-runtime.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,QAAQ,EACR,eAAe,IAAI,GAAG,EACtB,eAAe,IAAI,IAAI,EACvB,KAAK,GAAG,GACT,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+
2
+
3
+
4
+
5
+
6
+ export { Fragment, createMountable as jsx, createMountable as jsxs, } from './jsx/index.mjs';
7
+ //# sourceMappingURL=jsx-runtime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.mjs","sourceRoot":"","sources":["../src/jsx-runtime.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,QAAQ,EACR,eAAe,IAAI,GAAG,EACtB,eAAe,IAAI,IAAI,GAExB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type JSX } from './jsx/index.mjs';
2
+ /**
3
+ * Mounts `app` into `container` and returns the function that unmounts it
4
+ * (SPEC.md 6.5).
5
+ *
6
+ * `app` is called once, inside a new root scope; everything created while it
7
+ * and the description it returns are mounted belongs to that scope, and
8
+ * unmounting disposes it and removes the nodes.
9
+ *
10
+ * `render(App, el)` rather than `render(<App />, el)`: taking the component
11
+ * makes it plain that it is evaluated here.
12
+ */
13
+ export declare const render: (app: () => JSX.Element, container: Element) => (() => void);
14
+ //# sourceMappingURL=render.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.mts","sourceRoot":"","sources":["../src/render.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAW,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,QACZ,MAAM,GAAG,CAAC,OAAO,aACX,OAAO,KACjB,CAAC,MAAM,IAAI,CAcb,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { createScope } from 'synstate';
2
+ import { toNodes } from './jsx/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ export const render = (app, container) => {
15
+ const root = createScope(undefined);
16
+ const nodes = root.run(() => toNodes(app().mount()));
17
+ container.append(...nodes);
18
+ return () => {
19
+ root.dispose();
20
+ for (const node of nodes) {
21
+ node.remove();
22
+ }
23
+ };
24
+ };
25
+ //# sourceMappingURL=render.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.mjs","sourceRoot":"","sources":["../src/render.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAY,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAAsB,EACtB,SAAkB,EACJ,EAAE;IAChB,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAErD,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAE3B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,100 @@
1
1
  {
2
2
  "name": "synstate-dom",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Compiler-free fine-grained UI library that binds synstate observables directly to the DOM",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/noshiro-pf/mono.git",
8
+ "directory": "libs/synstate-dom"
9
+ },
10
+ "license": "Apache-2.0",
11
+ "author": "noshiro-pf <noshiro.pf@gmail.com>",
12
+ "sideEffects": false,
13
+ "type": "module",
14
+ "exports": {
15
+ ".": {
16
+ "import": {
17
+ "types": "./dist/index.d.mts",
18
+ "default": "./dist/index.mjs"
19
+ }
20
+ },
21
+ "./jsx-runtime": {
22
+ "import": {
23
+ "types": "./dist/jsx-runtime.d.mts",
24
+ "default": "./dist/jsx-runtime.mjs"
25
+ }
26
+ },
27
+ "./jsx-dev-runtime": {
28
+ "import": {
29
+ "types": "./dist/jsx-dev-runtime.d.mts",
30
+ "default": "./dist/jsx-dev-runtime.mjs"
31
+ }
32
+ }
33
+ },
34
+ "module": "./dist/index.mjs",
35
+ "types": "./dist/index.d.mts",
36
+ "files": [
37
+ "src",
38
+ "dist",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "dependencies": {
43
+ "ts-type-forge": "^9.2.2"
44
+ },
45
+ "devDependencies": {
46
+ "@vitest/browser-playwright": "5.0.5",
47
+ "eslint-config-typed": "5.19.2",
48
+ "eslint-plugin-ts-data-forge": "0.10.3",
49
+ "eslint-plugin-ts-fortress": "1.3.8",
50
+ "eslint-plugin-ts-type-forge": "0.8.13",
51
+ "playwright": "1.64.1",
52
+ "prettier": "3.9.10",
53
+ "prettier-plugin-organize-imports": "4.3.0",
54
+ "prettier-plugin-packagejson": "3.0.2",
55
+ "synstate": "5.0.1",
56
+ "ts-data-forge": "14.10.0",
57
+ "ts-repo-utils": "10.7.1"
58
+ },
59
+ "peerDependencies": {
60
+ "synstate": ">=5.0.1",
61
+ "ts-data-forge": ">=14.10.0"
62
+ },
63
+ "engines": {
64
+ "node": ">=22.22.2",
65
+ "pnpm": ">=9.0.0"
66
+ },
67
+ "publishConfig": {
68
+ "access": "public",
69
+ "provenance": true
70
+ },
71
+ "scripts": {
72
+ "build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
73
+ "check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
74
+ "check:lint": "node ../../tools/scripts/cmd/assert-deps-built.mts && oxlint . && eslint .",
75
+ "check:test": "node ../../tools/scripts/cmd/assert-deps-built.mts && pnpm run z:vitest:node run",
76
+ "check:test:browser": "node ../../tools/scripts/cmd/assert-deps-built.mts && pnpm run z:vitest --project='Browser' run",
77
+ "check:test:cov": "node ../../tools/scripts/cmd/assert-deps-built.mts && pnpm run z:vitest:node run --coverage",
78
+ "check:types": "node ../../tools/scripts/cmd/assert-deps-built.mts && node ../../node_modules/typescript-native/bin/tsc --noEmit",
79
+ "check-all": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-all.mts",
80
+ "doc": "run-s gen:readme fix:fmt",
81
+ "fix:codemod": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-codemod-cli/src/cmd/ts-codemod.mts --transformer convert-to-readonly '{src,samples,test}/**/*.{mts,tsx}'",
82
+ "fix:fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
83
+ "fix:fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
84
+ "fix:fmt:full": "pnpm run z:prettier .",
85
+ "fix:lint": "node ../../tools/scripts/cmd/assert-deps-built.mts && oxlint . --fix && eslint . --fix",
86
+ "fmt": "pnpm run fix:fmt",
87
+ "gen": "run-s gen:index gen:readme",
88
+ "gen:index": "run-s gen:index:src fix:fmt",
89
+ "gen:index:src": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/gen-index-ts.mts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude jsx-runtime.mts --exclude jsx-dev-runtime.mts --exclude \"bind/**\" --exclude control/mount-switch.mts --exclude control/longest-increasing-subsequence.mts --exclude \"internal/**\"",
90
+ "gen:readme": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/embed-examples.mts",
91
+ "test": "pnpm run check:test",
92
+ "test:cov:ui": "vite preview --outDir ./coverage",
93
+ "test:ui": "pnpm run z:vitest:node --ui",
94
+ "watch:test": "pnpm run z:vitest:node watch",
95
+ "watch:types": "node ../../node_modules/typescript-native/bin/tsc --noEmit --watch",
96
+ "z:prettier": "prettier --config ../../.prettierrc --ignore-path ../../.prettierignore --ignore-path ../../.gitignore --ignore-unknown --no-error-on-unmatched-pattern --write",
97
+ "z:vitest": "vitest --config ./configs/vitest.config.mts",
98
+ "z:vitest:node": "pnpm run z:vitest --project='Node.js'"
99
+ }
6
100
  }