sygnal 5.4.0 → 6.0.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 (316) hide show
  1. package/CHANGELOG.md +646 -0
  2. package/README.md +24 -9
  3. package/dist/astro/client.cjs.js +16 -9
  4. package/dist/astro/client.cjs.js.map +1 -1
  5. package/dist/astro/client.mjs +16 -9
  6. package/dist/astro/client.mjs.map +1 -1
  7. package/dist/astro/index.cjs.js +362 -91
  8. package/dist/astro/index.cjs.js.map +1 -1
  9. package/dist/astro/index.mjs +362 -92
  10. package/dist/astro/index.mjs.map +1 -1
  11. package/dist/astro/server.cjs.js +3396 -165
  12. package/dist/astro/server.cjs.js.map +1 -1
  13. package/dist/astro/server.mjs +3396 -165
  14. package/dist/astro/server.mjs.map +1 -1
  15. package/dist/devtools.cjs.js +1431 -0
  16. package/dist/devtools.cjs.js.map +1 -0
  17. package/dist/devtools.esm.js +1419 -0
  18. package/dist/devtools.esm.js.map +1 -0
  19. package/dist/diagnostics.cjs.js +3032 -296
  20. package/dist/diagnostics.cjs.js.map +1 -1
  21. package/dist/diagnostics.esm.js +3032 -296
  22. package/dist/diagnostics.esm.js.map +1 -1
  23. package/dist/element.cjs.js +230 -0
  24. package/dist/element.cjs.js.map +1 -0
  25. package/dist/element.esm.js +228 -0
  26. package/dist/element.esm.js.map +1 -0
  27. package/dist/guide/accessibility.md +257 -0
  28. package/dist/guide/adapters.md +221 -0
  29. package/dist/guide/behaviors.md +312 -0
  30. package/dist/guide/browser-sources.md +203 -0
  31. package/dist/guide/drag-and-drop.md +342 -0
  32. package/dist/guide/element-commands.md +306 -0
  33. package/dist/guide/error-boundaries.md +169 -0
  34. package/dist/guide/forms-reference.md +381 -0
  35. package/dist/guide/forms.md +250 -0
  36. package/dist/guide/http.md +299 -0
  37. package/dist/guide/inputs.md +173 -0
  38. package/dist/guide/persistence.md +245 -0
  39. package/dist/guide/recipes/carousel.md +155 -0
  40. package/dist/guide/recipes/charts.md +177 -0
  41. package/dist/guide/recipes/code-editor.md +135 -0
  42. package/dist/guide/recipes/data-grid.md +155 -0
  43. package/dist/guide/recipes/data-table.md +196 -0
  44. package/dist/guide/recipes/i18n.md +222 -0
  45. package/dist/guide/recipes/icons.md +115 -0
  46. package/dist/guide/recipes/overview.md +33 -0
  47. package/dist/guide/recipes/rich-text.md +154 -0
  48. package/dist/guide/resources.md +471 -0
  49. package/dist/guide/ssr.md +255 -0
  50. package/dist/guide/timers.md +178 -0
  51. package/dist/guide/ui/accordion.md +93 -0
  52. package/dist/guide/ui/combobox.md +144 -0
  53. package/dist/guide/ui/dialog.md +124 -0
  54. package/dist/guide/ui/disclosure.md +60 -0
  55. package/dist/guide/ui/menu.md +125 -0
  56. package/dist/guide/ui/overview.md +166 -0
  57. package/dist/guide/ui/popover.md +101 -0
  58. package/dist/guide/ui/select.md +114 -0
  59. package/dist/guide/ui/tabs.md +161 -0
  60. package/dist/guide/ui/toaster.md +152 -0
  61. package/dist/guide/ui/tooltip.md +103 -0
  62. package/dist/guide/undo.md +178 -0
  63. package/dist/guide/virtual-collections.md +183 -0
  64. package/dist/guide/web-components.md +179 -0
  65. package/dist/guide/widgets.md +217 -0
  66. package/dist/index.cjs.js +13178 -5769
  67. package/dist/index.cjs.js.map +1 -1
  68. package/dist/index.d.ts +2908 -276
  69. package/dist/index.esm.js +13149 -5779
  70. package/dist/index.esm.js.map +1 -1
  71. package/dist/jsx-dev-runtime.cjs.js +26 -334
  72. package/dist/jsx-dev-runtime.cjs.js.map +1 -1
  73. package/dist/jsx-dev-runtime.esm.js +19 -327
  74. package/dist/jsx-dev-runtime.esm.js.map +1 -1
  75. package/dist/jsx-runtime.cjs.js +26 -334
  76. package/dist/jsx-runtime.cjs.js.map +1 -1
  77. package/dist/jsx-runtime.esm.js +19 -327
  78. package/dist/jsx-runtime.esm.js.map +1 -1
  79. package/dist/jsx.cjs.js +10 -314
  80. package/dist/jsx.cjs.js.map +1 -1
  81. package/dist/jsx.esm.js +8 -315
  82. package/dist/jsx.esm.js.map +1 -1
  83. package/dist/react.cjs.js +117 -0
  84. package/dist/react.cjs.js.map +1 -0
  85. package/dist/react.esm.js +115 -0
  86. package/dist/react.esm.js.map +1 -0
  87. package/dist/shims/globalthis.cjs +20 -0
  88. package/dist/sygnal.min.js +1 -1
  89. package/dist/sygnal.min.js.map +1 -1
  90. package/dist/ui-combobox.cjs.js +169 -0
  91. package/dist/ui-combobox.cjs.js.map +1 -0
  92. package/dist/ui-combobox.esm.js +148 -0
  93. package/dist/ui-combobox.esm.js.map +1 -0
  94. package/dist/ui-menu.cjs.js +87 -0
  95. package/dist/ui-menu.cjs.js.map +1 -0
  96. package/dist/ui-menu.esm.js +66 -0
  97. package/dist/ui-menu.esm.js.map +1 -0
  98. package/dist/ui-select.cjs.js +104 -0
  99. package/dist/ui-select.cjs.js.map +1 -0
  100. package/dist/ui-select.esm.js +83 -0
  101. package/dist/ui-select.esm.js.map +1 -0
  102. package/dist/ui.cjs.js +738 -0
  103. package/dist/ui.cjs.js.map +1 -0
  104. package/dist/ui.esm.js +727 -0
  105. package/dist/ui.esm.js.map +1 -0
  106. package/dist/vike/ClientOnly.cjs.js +4 -14
  107. package/dist/vike/ClientOnly.cjs.js.map +1 -1
  108. package/dist/vike/ClientOnly.mjs +4 -14
  109. package/dist/vike/ClientOnly.mjs.map +1 -1
  110. package/dist/vike/{+config.js → config/+config.js} +9 -1
  111. package/dist/vike/config/+config.js.map +1 -0
  112. package/dist/vike/config/package.json +6 -0
  113. package/dist/vike/onRenderClient.cjs.js +165 -95
  114. package/dist/vike/onRenderClient.cjs.js.map +1 -1
  115. package/dist/vike/onRenderClient.mjs +165 -95
  116. package/dist/vike/onRenderClient.mjs.map +1 -1
  117. package/dist/vike/onRenderHtml.cjs.js +59 -24
  118. package/dist/vike/onRenderHtml.cjs.js.map +1 -1
  119. package/dist/vike/onRenderHtml.mjs +60 -25
  120. package/dist/vike/onRenderHtml.mjs.map +1 -1
  121. package/dist/vite/plugin.cjs.js +323 -88
  122. package/dist/vite/plugin.cjs.js.map +1 -1
  123. package/dist/vite/plugin.mjs +323 -89
  124. package/dist/vite/plugin.mjs.map +1 -1
  125. package/dist/zag.cjs.js +408 -0
  126. package/dist/zag.cjs.js.map +1 -0
  127. package/dist/zag.esm.js +405 -0
  128. package/dist/zag.esm.js.map +1 -0
  129. package/llms.txt +166 -103
  130. package/package.json +98 -14
  131. package/src/astro/client.ts +27 -16
  132. package/src/astro/index.d.ts +24 -0
  133. package/src/astro/index.ts +69 -3
  134. package/src/astro/server.ts +8 -2
  135. package/src/collection.ts +6 -93
  136. package/src/core/actions.ts +134 -0
  137. package/src/core/cell.ts +202 -0
  138. package/src/core/debug.ts +23 -0
  139. package/src/core/define.ts +242 -0
  140. package/src/core/hooks.ts +314 -0
  141. package/src/core/hosts/collection.ts +325 -0
  142. package/src/core/hosts/switchable.ts +146 -0
  143. package/src/core/instance.ts +592 -0
  144. package/src/core/markers/clientonly.ts +13 -0
  145. package/src/core/markers/lazy.ts +40 -0
  146. package/src/core/markers/portal.ts +96 -0
  147. package/src/core/markers/suspense.ts +41 -0
  148. package/src/core/markers/transition.ts +70 -0
  149. package/src/core/registry.ts +25 -0
  150. package/src/core/runtime.ts +573 -0
  151. package/src/core/statics.ts +104 -0
  152. package/src/core/teardown.ts +60 -0
  153. package/src/core/view.ts +37 -0
  154. package/src/cycle/dom/DocumentDOMSource.ts +13 -8
  155. package/src/cycle/dom/ElementFinder.ts +7 -9
  156. package/src/cycle/dom/EventDelegator.ts +174 -223
  157. package/src/cycle/dom/IsolateModule.ts +65 -35
  158. package/src/cycle/dom/MainDOMSource.ts +9 -2
  159. package/src/cycle/dom/PriorityQueue.ts +4 -2
  160. package/src/cycle/dom/SymbolTree.ts +18 -47
  161. package/src/cycle/dom/classNameModule.ts +9 -7
  162. package/src/cycle/dom/controlledInputModule.ts +23 -6
  163. package/src/cycle/dom/enrichEventStream.ts +25 -47
  164. package/src/cycle/dom/fragment.ts +7 -0
  165. package/src/cycle/dom/isolate.ts +30 -27
  166. package/src/cycle/dom/makeDOMDriver.ts +115 -56
  167. package/src/cycle/dom/mockDOMSource.ts +21 -1
  168. package/src/cycle/dom/modules.ts +16 -3
  169. package/src/cycle/dom/propsModule.ts +65 -0
  170. package/src/cycle/dom/selectModule.ts +22 -17
  171. package/src/cycle/dom/snabbdom.ts +1 -6
  172. package/src/cycle/dom/thunk.ts +3 -0
  173. package/src/cycle/dom/utils.ts +98 -0
  174. package/src/cycle/dom/viewTransition.ts +43 -0
  175. package/src/cycle/state/StateSource.ts +19 -3
  176. package/src/cycle/state/objIsEqual.ts +50 -0
  177. package/src/cycle/state/types.ts +0 -10
  178. package/src/defineComponent.ts +34 -0
  179. package/src/devtools.d.ts +151 -0
  180. package/src/devtools.ts +34 -0
  181. package/src/element.d.ts +59 -0
  182. package/src/element.ts +235 -0
  183. package/src/extra/backoff.ts +9 -0
  184. package/src/extra/behaviors.ts +169 -0
  185. package/src/extra/browserSignals.ts +23 -0
  186. package/src/extra/browserSources.ts +326 -0
  187. package/src/extra/command.ts +3 -3
  188. package/src/extra/controls.ts +47 -0
  189. package/src/extra/copyAsTest.ts +286 -0
  190. package/src/extra/devtools.ts +101 -31
  191. package/src/extra/devtoolsActions.ts +379 -0
  192. package/src/extra/devtoolsHook.ts +9 -0
  193. package/src/extra/devtoolsNext.ts +83 -0
  194. package/src/extra/diagnostics/checks/actionLog.ts +108 -0
  195. package/src/extra/diagnostics/checks/behaviors.ts +49 -0
  196. package/src/extra/diagnostics/checks/browserSources.ts +96 -0
  197. package/src/extra/diagnostics/checks/collections.ts +1 -1
  198. package/src/extra/diagnostics/checks/controls.ts +148 -0
  199. package/src/extra/diagnostics/checks/dataset.ts +57 -0
  200. package/src/extra/diagnostics/checks/dom.ts +20 -11
  201. package/src/extra/diagnostics/checks/elementCommands.ts +175 -0
  202. package/src/extra/diagnostics/checks/events.ts +17 -2
  203. package/src/extra/diagnostics/checks/fetch.ts +135 -0
  204. package/src/extra/diagnostics/checks/forms.ts +163 -0
  205. package/src/extra/diagnostics/checks/index.ts +97 -4
  206. package/src/extra/diagnostics/checks/inspect.ts +140 -32
  207. package/src/extra/diagnostics/checks/next.ts +417 -0
  208. package/src/extra/diagnostics/checks/persist.ts +54 -0
  209. package/src/extra/diagnostics/checks/props.ts +10 -5
  210. package/src/extra/diagnostics/checks/public.d.ts +98 -7
  211. package/src/extra/diagnostics/checks/replies.ts +128 -0
  212. package/src/extra/diagnostics/checks/router.ts +100 -0
  213. package/src/extra/diagnostics/checks/rxjsHints.ts +1 -1
  214. package/src/extra/diagnostics/checks/shared.ts +86 -2
  215. package/src/extra/diagnostics/checks/shorthand.ts +115 -0
  216. package/src/extra/diagnostics/checks/sortable.ts +129 -0
  217. package/src/extra/diagnostics/checks/state.ts +100 -7
  218. package/src/extra/diagnostics/checks/statics.ts +48 -0
  219. package/src/extra/diagnostics/checks/strict.ts +10 -67
  220. package/src/extra/diagnostics/checks/timers.ts +80 -0
  221. package/src/extra/diagnostics/checks/viewTransitions.ts +47 -0
  222. package/src/extra/diagnostics/checks/virtual.ts +73 -0
  223. package/src/extra/diagnostics/checks/widgets.ts +109 -0
  224. package/src/extra/diagnostics/checks/wiring.ts +66 -10
  225. package/src/extra/diagnostics/codes.ts +268 -23
  226. package/src/extra/diagnostics/index.ts +34 -9
  227. package/src/extra/diagnostics/legacy.ts +17 -0
  228. package/src/extra/driverFactories.ts +83 -19
  229. package/src/extra/elementCommands.ts +53 -0
  230. package/src/extra/fetchDriver.ts +519 -0
  231. package/src/extra/focusWithin.ts +27 -0
  232. package/src/extra/form.ts +268 -0
  233. package/src/extra/formHelpers.ts +139 -0
  234. package/src/extra/head.ts +106 -0
  235. package/src/extra/hmr.ts +2 -3
  236. package/src/extra/owned.ts +24 -0
  237. package/src/extra/pager.ts +50 -0
  238. package/src/extra/persist.ts +133 -0
  239. package/src/extra/pwa.ts +1 -1
  240. package/src/extra/queryCache.ts +107 -0
  241. package/src/extra/reducers.ts +1 -1
  242. package/src/extra/reduxDevtools.ts +92 -0
  243. package/src/extra/replies.ts +54 -0
  244. package/src/extra/router.ts +323 -0
  245. package/src/extra/run.ts +90 -217
  246. package/src/extra/selection.ts +76 -0
  247. package/src/extra/socketDriver.ts +265 -0
  248. package/src/extra/sortable.ts +377 -0
  249. package/src/extra/ssr.ts +427 -160
  250. package/src/extra/standardSchema.ts +27 -0
  251. package/src/extra/testing.ts +2433 -175
  252. package/src/extra/timers.ts +95 -0
  253. package/src/extra/undo.ts +261 -0
  254. package/src/extra/viewTransitions.ts +38 -0
  255. package/src/extra/virtual.ts +513 -0
  256. package/src/extra/widget.ts +201 -0
  257. package/src/index.d.ts +2631 -117
  258. package/src/index.ts +25 -4
  259. package/src/jsx-runtime.ts +15 -1
  260. package/src/jsx.ts +2 -1
  261. package/src/lazy.ts +50 -7
  262. package/src/portal.ts +3 -1
  263. package/src/pragma/index.ts +256 -133
  264. package/src/react-peers.d.ts +5 -0
  265. package/src/react.d.ts +43 -0
  266. package/src/react.ts +110 -0
  267. package/src/shared.ts +48 -0
  268. package/src/slot.ts +1 -1
  269. package/src/suspense.ts +3 -1
  270. package/src/switchable.ts +6 -121
  271. package/src/transition.ts +3 -1
  272. package/src/ui/accordion.ts +64 -0
  273. package/src/ui/dialog.ts +129 -0
  274. package/src/ui/disclosure.ts +35 -0
  275. package/src/ui/popover.ts +45 -0
  276. package/src/ui/shared.ts +94 -0
  277. package/src/ui/tabs.ts +82 -0
  278. package/src/ui/toaster.ts +198 -0
  279. package/src/ui/tooltip.ts +70 -0
  280. package/src/ui/zag/combobox.ts +115 -0
  281. package/src/ui/zag/menu.ts +40 -0
  282. package/src/ui/zag/select.ts +54 -0
  283. package/src/ui/zag/shared.ts +43 -0
  284. package/src/ui-combobox.d.ts +20 -0
  285. package/src/ui-combobox.ts +6 -0
  286. package/src/ui-menu.d.ts +30 -0
  287. package/src/ui-menu.ts +6 -0
  288. package/src/ui-select.d.ts +17 -0
  289. package/src/ui-select.ts +6 -0
  290. package/src/ui-zag-types.d.ts +42 -0
  291. package/src/ui.d.ts +208 -0
  292. package/src/ui.ts +15 -0
  293. package/src/vike/+config.ts +9 -1
  294. package/src/vike/ClientOnly.ts +1 -1
  295. package/src/vike/onRenderClient.ts +144 -96
  296. package/src/vike/onRenderHtml.ts +69 -26
  297. package/src/vike/types.ts +7 -1
  298. package/src/vite/globalthis-shim.ts +18 -0
  299. package/src/vite/globalthis.ts +56 -0
  300. package/src/vite/plugin.d.ts +22 -3
  301. package/src/vite/plugin.ts +222 -24
  302. package/src/zag.d.ts +64 -0
  303. package/src/zag.ts +238 -0
  304. package/dist/vike/+config.cjs.js +0 -66
  305. package/dist/vike/+config.cjs.js.map +0 -1
  306. package/dist/vike/+config.js.map +0 -1
  307. package/src/component.ts +0 -2301
  308. package/src/cycle/isolate/index.ts +0 -196
  309. package/src/cycle/run/index.ts +0 -151
  310. package/src/cycle/run/internals.ts +0 -143
  311. package/src/cycle/state/Collection.ts +0 -184
  312. package/src/cycle/state/index.ts +0 -5
  313. package/src/cycle/state/pickCombine.ts +0 -201
  314. package/src/cycle/state/pickMerge.ts +0 -122
  315. package/src/cycle/state/withState.ts +0 -47
  316. package/src/pragma/fn.ts +0 -55
@@ -0,0 +1,60 @@
1
+ /**
2
+ * PLAN-4.6 core: teardown without timers (D165 / Q18). xstream stops a stream left without
3
+ * listeners in a setTimeout of its own (1-2k timers to unmount 1k components). While an instance
4
+ * unsubscribes (tearDown), Stream.prototype._remove queues such a stream instead (_stopID 0: an
5
+ * _add before the stop cancels it, as xstream's clearTimeout would), and stopQueued() stops the
6
+ * queue at the first macrotask after the drain / flush (G-302: xstream's timing; the runtime's
7
+ * setImmediate / MessageChannel ping, no setTimeout). The swap is scoped to the call (PLAN-4.5's
8
+ * tearDown, narrowed; R5 deleted the 5.x core's permanent one).
9
+ */
10
+ import xs from '../extra/xstreamCompat'
11
+
12
+ // G-315: probed on first use (a top-level probe would survive the D175 strip of production builds)
13
+ let SP: any, NO: any, down: any[] | null = null, outer: any, owner: any
14
+ // G-342/G-267: the instance a queued stream was left by (its stop() error is reported for it)
15
+ const owners = new WeakMap<object, any>()
16
+ const probe = () => { if (!SP) { const s: any = xs.create(); SP = Object.getPrototypeOf(s); NO = s._prod } }
17
+
18
+ function removeQueued(this: any, il: any) {
19
+ if (this._target) return this._target._remove(il)
20
+ const a = this._ils, i = a.indexOf(il)
21
+ if (i < 0) return
22
+ a.splice(i, 1)
23
+ if (this._prod !== NO && !a.length) { this._err = NO; this._stopID = 0; down!.push(this); if (owner) owners.set(this, owner) }
24
+ else if (a.length == 1) this._pruneCycles()
25
+ }
26
+
27
+ /** run f with _remove queuing into q (nested calls share the outermost swap); `by`: the instance */
28
+ export function tearDown(f: () => void, q: any[], by?: any) {
29
+ probe()
30
+ const prev = down, prevBy = owner
31
+ if (!prev) { outer = SP._remove; SP._remove = removeQueued }
32
+ down = q
33
+ if (by) owner = by
34
+ try { f() } finally { down = prev; owner = prevBy; if (!prev) SP._remove = outer }
35
+ }
36
+
37
+ /**
38
+ * stop the queued streams; a stop that leaves its upstream without listeners queues it here too.
39
+ * A throwing stop() (a producer's) stops nothing else from stopping; G-342/G-267: it is reported
40
+ * through `err` (with the instance that left the stream), not swallowed
41
+ */
42
+ export function stopQueued(q: any[], err?: (e: any, by: any) => void) {
43
+ probe()
44
+ for (let i = 0; i < q.length; i++) {
45
+ const s = q[i]
46
+ if (s._stopID === 0 && !s._ils.length) {
47
+ s._stopID = NO
48
+ const by = owners.get(s)
49
+ tearDown(() => { if (s._prod !== NO) try { s._stopNow() } catch (e) { err?.(e, by) } }, q, by)
50
+ }
51
+ }
52
+ q.length = 0
53
+ }
54
+
55
+ /** the instance behind an intent's sources object (the source getters read it) */
56
+ export const INST = /*#__PURE__*/ Symbol('sygnal.inst')
57
+ /** the queue's action type for a state write (runtime setState, a child's seeded slice) */
58
+ export const SET = /*#__PURE__*/ Symbol('setState')
59
+ /** a child's seeded slice (D174), written even when it reads its initialState as the default */
60
+ export const SEED = /*#__PURE__*/ Symbol('seed')
@@ -0,0 +1,37 @@
1
+ /**
2
+ * PLAN-4.6 core: the read-only InstanceView hooks and tools get (04 §2.3), never the raw
3
+ * instance. Made on the first hook call that needs it (an app without hooks makes none).
4
+ */
5
+ import type {InstanceView} from './hooks'
6
+ import type {Inst} from './instance'
7
+
8
+ class View implements InstanceView {
9
+ constructor(private i: Inst) {}
10
+ get id() { return this.i.id }
11
+ get parentId() { return this.i.parent?.id }
12
+ get name() { return this.i.def.name }
13
+ get def() { return this.i.def }
14
+ get state() { return this.i.cell.get() }
15
+ get props() { return this.i.props }
16
+ get context() { return this.i.context() }
17
+ get isRoot() { return !this.i.parent }
18
+ get kind() { return this.i.kind }
19
+ /** false on a hidden Switchable page and below it */
20
+ get shown() {
21
+ for (let i: any = this.i; i; i = i.parent) if (!i.shown) return false
22
+ return true
23
+ }
24
+ get disposed() { return this.i.disposed }
25
+ get uid() { return this.i.uidBase }
26
+ get sources() { return this.i.sources() }
27
+ children(): InstanceView[] {
28
+ const out: InstanceView[] = []
29
+ this.i.kids.forEach((k: any) => {
30
+ if (k.def && k.app) out.push(viewOf(k))
31
+ else if (k.insts) for (const j of k.insts()) out.push(viewOf(j))
32
+ })
33
+ return out
34
+ }
35
+ }
36
+
37
+ export const viewOf = (i: Inst): InstanceView => (i.iv ||= new View(i))
@@ -12,20 +12,22 @@ export class DocumentDOMSource {
12
12
  this._selector = selector || null;
13
13
  }
14
14
 
15
+ // CT-1: a control works as is: querySelectorAll() and matches() stringify their argument,
16
+ // and a control stringifies to its selector
15
17
  public select(selector: string): DocumentDOMSource {
16
18
  return new DocumentDOMSource(this._name, selector);
17
19
  }
18
20
 
19
21
  public elements(): MemoryStream<Array<Document | Element>> {
20
22
  if (this._selector) {
21
- const out: DevToolEnabledSource & MemoryStream<Array<Element>> = adapt(
22
- xs.of(Array.from(document.querySelectorAll(this._selector)))
23
+ const out: DevToolEnabledSource & MemoryStream<Array<Document | Element>> = adapt(
24
+ xs.of<Array<Document | Element>>(Array.from(document.querySelectorAll(this._selector)))
23
25
  );
24
26
  out._isCycleSource = this._name;
25
27
  return out;
26
28
  }
27
- const out: DevToolEnabledSource & MemoryStream<Array<Document>> = adapt(
28
- xs.of([document])
29
+ const out: DevToolEnabledSource & MemoryStream<Array<Document | Element>> = adapt(
30
+ xs.of<Array<Document | Element>>([document])
29
31
  );
30
32
  out._isCycleSource = this._name;
31
33
  return out;
@@ -33,14 +35,14 @@ export class DocumentDOMSource {
33
35
 
34
36
  public element(): MemoryStream<Document | Element | null> {
35
37
  if (this._selector) {
36
- const out: DevToolEnabledSource & MemoryStream<Element | null> = adapt(
37
- xs.of(document.querySelector(this._selector))
38
+ const out: DevToolEnabledSource & MemoryStream<Document | Element | null> = adapt(
39
+ xs.of<Document | Element | null>(document.querySelector(this._selector))
38
40
  );
39
41
  out._isCycleSource = this._name;
40
42
  return out;
41
43
  }
42
- const out: DevToolEnabledSource & MemoryStream<Document> = adapt(
43
- xs.of(document)
44
+ const out: DevToolEnabledSource & MemoryStream<Document | Element | null> = adapt(
45
+ xs.of<Document | Element | null>(document)
44
46
  );
45
47
  out._isCycleSource = this._name;
46
48
  return out;
@@ -51,6 +53,9 @@ export class DocumentDOMSource {
51
53
  options?: EventsFnOptions,
52
54
  bubbles?: boolean
53
55
  ): EnrichedEventStream<DocumentEventMap[K]>;
56
+ // PLAN-5 0-S6: any other name (a custom element's 'wa-hover', a widget's or element's
57
+ // CustomEvent): the overload above only typed the built-in names (types only)
58
+ public events(eventType: string, options?: EventsFnOptions, bubbles?: boolean): EnrichedEventStream<Event>;
54
59
  public events(
55
60
  eventType: string,
56
61
  options: EventsFnOptions = {},
@@ -18,20 +18,18 @@ export class ElementFinder {
18
18
  const selector = getSelectors(namespace);
19
19
 
20
20
  const scopeChecker = new ScopeChecker(namespace, this.isolateModule);
21
- const topNode = this.isolateModule.getElement(
21
+ // G-144: every root element of the scope (a fragment-rooted component has several)
22
+ const topNodes = this.isolateModule.getElements(
22
23
  namespace.filter(n => n.type !== 'selector')
23
24
  );
24
25
 
25
- if (topNode === undefined) {
26
- return [];
27
- }
28
-
29
26
  if (selector === '') {
30
- return [topNode];
27
+ return topNodes;
31
28
  }
32
29
 
33
- return toElArray(topNode.querySelectorAll(selector))
34
- .filter(scopeChecker.isDirectlyInScope, scopeChecker)
35
- .concat(topNode.matches(selector) ? [topNode] : []);
30
+ return topNodes.reduce((out: Array<Element>, topNode) => out.concat(
31
+ toElArray(topNode.querySelectorAll(selector)).filter(scopeChecker.isDirectlyInScope, scopeChecker),
32
+ topNode.matches(selector) ? [topNode] : []
33
+ ), []);
36
34
  }
37
35
  }