@e280/sly 0.2.5 → 0.3.0-10

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 (350) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +356 -626
  3. package/package.json +22 -30
  4. package/s/_archive/README.md +1221 -0
  5. package/s/_archive/view/index.ts +7 -0
  6. package/s/_archive/view/types.ts +45 -0
  7. package/s/demo/demo.bundle.ts +5 -8
  8. package/s/demo/views/counter-light.ts +13 -0
  9. package/s/demo/views/counter-shadow.ts +16 -0
  10. package/s/demo/views/demo.ts +24 -20
  11. package/s/demo/views/loaders.ts +9 -9
  12. package/s/demo/views/time-light.ts +19 -0
  13. package/s/demo/views/time-shadow.ts +22 -0
  14. package/s/dom/attrs/attrs.ts +3 -3
  15. package/s/dom/attrs/parts/attr-spec.ts +17 -5
  16. package/s/dom/attrs/parts/on-attrs.ts +1 -1
  17. package/s/dom/dom.ts +1 -1
  18. package/s/index.html.ts +30 -33
  19. package/s/index.ts +2 -4
  20. package/s/{loaders → loader}/index.barrel.ts +0 -1
  21. package/s/{loaders → loader}/index.ts +0 -1
  22. package/s/{loaders → loader}/make.ts +1 -1
  23. package/s/{loaders → loader}/parts/ascii-anim.ts +6 -8
  24. package/s/loader/parts/error-display.ts +26 -0
  25. package/s/{loaders → loader}/types.ts +1 -1
  26. package/s/test.ts +5 -0
  27. package/s/view/common/css-reset.ts +19 -0
  28. package/s/view/common/sly-shadow.ts +14 -0
  29. package/s/view/elements/light.ts +14 -0
  30. package/s/view/elements/shadow.ts +52 -0
  31. package/s/view/hooks/plumbing/hooks.ts +28 -0
  32. package/s/view/hooks/plumbing/hookscope.ts +12 -0
  33. package/s/view/hooks/use-attrs.ts +28 -0
  34. package/s/view/hooks/use-css.ts +14 -0
  35. package/s/view/hooks/use-cx.ts +41 -0
  36. package/s/view/hooks/use-life.ts +17 -0
  37. package/s/view/hooks/use-mount.ts +30 -0
  38. package/s/view/hooks/use-name.ts +10 -0
  39. package/s/view/hooks/use-once.ts +9 -0
  40. package/s/view/hooks/use-op.ts +12 -0
  41. package/s/view/hooks/use-ref.ts +11 -0
  42. package/s/view/hooks/use-signal.ts +16 -0
  43. package/s/view/hooks/use-state.ts +20 -0
  44. package/s/view/hooks/use-wake.ts +8 -0
  45. package/s/view/index.ts +22 -4
  46. package/s/view/light.ts +50 -0
  47. package/s/view/parts/apply-attrs.ts +22 -0
  48. package/s/view/parts/apply-styles.ts +21 -0
  49. package/s/view/parts/cx.ts +26 -0
  50. package/s/view/parts/reactivity.ts +22 -0
  51. package/s/view/shadow.ts +93 -0
  52. package/s/view/types.ts +15 -34
  53. package/x/demo/demo.bundle.js +5 -8
  54. package/x/demo/demo.bundle.js.map +1 -1
  55. package/x/demo/demo.bundle.min.js +52 -63
  56. package/x/demo/demo.bundle.min.js.map +4 -4
  57. package/x/demo/views/counter-light.d.ts +1 -0
  58. package/x/demo/views/counter-light.js +10 -0
  59. package/x/demo/views/counter-light.js.map +1 -0
  60. package/x/demo/views/counter-shadow.d.ts +1 -0
  61. package/x/demo/views/counter-shadow.js +12 -0
  62. package/x/demo/views/counter-shadow.js.map +1 -0
  63. package/x/demo/views/demo.d.ts +1 -4
  64. package/x/demo/views/demo.js +24 -20
  65. package/x/demo/views/demo.js.map +1 -1
  66. package/x/demo/views/loaders.d.ts +1 -1
  67. package/x/demo/views/loaders.js +9 -9
  68. package/x/demo/views/loaders.js.map +1 -1
  69. package/x/demo/views/{counter.d.ts → time-light.d.ts} +3 -19
  70. package/x/demo/views/time-light.js +16 -0
  71. package/x/demo/views/time-light.js.map +1 -0
  72. package/x/demo/views/time-shadow.d.ts +365 -0
  73. package/x/demo/views/time-shadow.js +18 -0
  74. package/x/demo/views/time-shadow.js.map +1 -0
  75. package/x/dom/attrs/attrs.d.ts +3 -2
  76. package/x/dom/attrs/attrs.js +2 -2
  77. package/x/dom/attrs/attrs.js.map +1 -1
  78. package/x/dom/attrs/parts/attr-spec.d.ts +5 -1
  79. package/x/dom/attrs/parts/attr-spec.js +12 -6
  80. package/x/dom/attrs/parts/attr-spec.js.map +1 -1
  81. package/x/dom/attrs/parts/on-attrs.d.ts +1 -1
  82. package/x/dom/attrs/parts/on-attrs.js.map +1 -1
  83. package/x/dom/dom.d.ts +1 -1
  84. package/x/dom/dom.js.map +1 -1
  85. package/x/index.d.ts +2 -4
  86. package/x/index.html +30 -140
  87. package/x/index.html.js +31 -31
  88. package/x/index.html.js.map +1 -1
  89. package/x/index.js +2 -4
  90. package/x/index.js.map +1 -1
  91. package/x/{loaders → loader}/index.barrel.d.ts +0 -1
  92. package/x/loader/index.barrel.js.map +1 -0
  93. package/x/{loaders → loader}/index.d.ts +0 -1
  94. package/x/loader/index.js.map +1 -0
  95. package/x/{loaders → loader}/make.d.ts +1 -1
  96. package/x/loader/make.js.map +1 -0
  97. package/x/loader/mock.js.map +1 -0
  98. package/x/loader/parts/anims.js.map +1 -0
  99. package/x/{loaders → loader}/parts/ascii-anim.d.ts +1 -1
  100. package/x/{loaders → loader}/parts/ascii-anim.js +6 -7
  101. package/x/loader/parts/ascii-anim.js.map +1 -0
  102. package/x/loader/parts/error-display.d.ts +1 -0
  103. package/x/loader/parts/error-display.js +20 -0
  104. package/x/loader/parts/error-display.js.map +1 -0
  105. package/x/{loaders → loader}/types.d.ts +1 -1
  106. package/x/{loaders → loader}/types.js.map +1 -1
  107. package/x/loot/drag-and-drops.d.ts +2 -2
  108. package/x/loot/drops.d.ts +1 -1
  109. package/x/op/index.js.map +1 -0
  110. package/x/op/op.js.map +1 -0
  111. package/x/op/podium.js.map +1 -0
  112. package/x/{ops → op}/types.js.map +1 -1
  113. package/x/test.js +3 -0
  114. package/x/test.js.map +1 -0
  115. package/x/view/common/css-reset.js +17 -0
  116. package/x/view/common/css-reset.js.map +1 -0
  117. package/x/view/common/sly-shadow.d.ts +4 -0
  118. package/x/view/common/sly-shadow.js +11 -0
  119. package/x/view/common/sly-shadow.js.map +1 -0
  120. package/x/view/elements/light.d.ts +357 -0
  121. package/x/view/elements/light.js +10 -0
  122. package/x/view/elements/light.js.map +1 -0
  123. package/x/view/elements/shadow.d.ts +366 -0
  124. package/x/view/elements/shadow.js +42 -0
  125. package/x/view/elements/shadow.js.map +1 -0
  126. package/x/view/hooks/plumbing/hooks.d.ts +11 -0
  127. package/x/view/hooks/plumbing/hooks.js +26 -0
  128. package/x/view/hooks/plumbing/hooks.js.map +1 -0
  129. package/x/view/hooks/plumbing/hookscope.d.ts +10 -0
  130. package/x/view/hooks/plumbing/hookscope.js +12 -0
  131. package/x/view/hooks/plumbing/hookscope.js.map +1 -0
  132. package/x/view/hooks/use-attrs.d.ts +2 -0
  133. package/x/view/hooks/use-attrs.js +23 -0
  134. package/x/view/hooks/use-attrs.js.map +1 -0
  135. package/x/view/hooks/use-css.d.ts +4 -0
  136. package/x/view/hooks/use-css.js +10 -0
  137. package/x/view/hooks/use-css.js.map +1 -0
  138. package/x/view/hooks/use-cx.d.ts +10 -0
  139. package/x/view/hooks/use-cx.js +33 -0
  140. package/x/view/hooks/use-cx.js.map +1 -0
  141. package/x/view/hooks/use-life.d.ts +2 -0
  142. package/x/view/hooks/use-life.js +13 -0
  143. package/x/view/hooks/use-life.js.map +1 -0
  144. package/x/{base/utils/mounts.d.ts → view/hooks/use-mount.d.ts} +1 -0
  145. package/x/{base/utils/mounts.js → view/hooks/use-mount.js} +7 -1
  146. package/x/view/hooks/use-mount.js.map +1 -0
  147. package/x/view/hooks/use-name.d.ts +2 -0
  148. package/x/view/hooks/use-name.js +8 -0
  149. package/x/view/hooks/use-name.js.map +1 -0
  150. package/x/view/hooks/use-once.d.ts +2 -0
  151. package/x/view/hooks/use-once.js +7 -0
  152. package/x/view/hooks/use-once.js.map +1 -0
  153. package/x/view/hooks/use-op.d.ts +3 -0
  154. package/x/view/hooks/use-op.js +9 -0
  155. package/x/view/hooks/use-op.js.map +1 -0
  156. package/x/view/hooks/use-ref.d.ts +5 -0
  157. package/x/view/hooks/use-ref.js +11 -0
  158. package/x/view/hooks/use-ref.js.map +1 -0
  159. package/x/view/hooks/use-signal.d.ts +3 -0
  160. package/x/view/hooks/use-signal.js +12 -0
  161. package/x/view/hooks/use-signal.js.map +1 -0
  162. package/x/view/hooks/use-state.d.ts +1 -0
  163. package/x/view/hooks/use-state.js +17 -0
  164. package/x/view/hooks/use-state.js.map +1 -0
  165. package/x/view/hooks/use-wake.d.ts +2 -0
  166. package/x/view/hooks/use-wake.js +6 -0
  167. package/x/view/hooks/use-wake.js.map +1 -0
  168. package/x/view/index.d.ts +19 -4
  169. package/x/view/index.js +19 -4
  170. package/x/view/index.js.map +1 -1
  171. package/x/view/light.d.ts +2 -0
  172. package/x/view/light.js +41 -0
  173. package/x/view/light.js.map +1 -0
  174. package/x/view/parts/apply-attrs.d.ts +2 -0
  175. package/x/view/parts/apply-attrs.js +22 -0
  176. package/x/view/parts/apply-attrs.js.map +1 -0
  177. package/x/{base/utils → view/parts}/apply-styles.js.map +1 -1
  178. package/x/view/parts/cx.d.ts +12 -0
  179. package/x/view/parts/cx.js +24 -0
  180. package/x/view/parts/cx.js.map +1 -0
  181. package/x/view/parts/reactivity.d.ts +5 -0
  182. package/x/view/parts/reactivity.js +18 -0
  183. package/x/view/parts/reactivity.js.map +1 -0
  184. package/x/view/shadow.d.ts +6 -0
  185. package/x/view/shadow.js +71 -0
  186. package/x/view/shadow.js.map +1 -0
  187. package/x/view/types.d.ts +13 -21
  188. package/s/demo/views/counter.ts +0 -50
  189. package/s/demo/views/fastcount.ts +0 -29
  190. package/s/demo/views/mounting.ts +0 -36
  191. package/s/loaders/parts/error-display.ts +0 -26
  192. package/s/tests.test.ts +0 -8
  193. package/x/base/css-reset.js +0 -19
  194. package/x/base/css-reset.js.map +0 -1
  195. package/x/base/element.d.ts +0 -19
  196. package/x/base/element.js +0 -55
  197. package/x/base/element.js.map +0 -1
  198. package/x/base/index.d.ts +0 -5
  199. package/x/base/index.js +0 -6
  200. package/x/base/index.js.map +0 -1
  201. package/x/base/types.d.ts +0 -3
  202. package/x/base/types.js +0 -3
  203. package/x/base/types.js.map +0 -1
  204. package/x/base/use.d.ts +0 -59
  205. package/x/base/use.js +0 -129
  206. package/x/base/use.js.map +0 -1
  207. package/x/base/utils/attr-watcher.d.ts +0 -8
  208. package/x/base/utils/attr-watcher.js +0 -20
  209. package/x/base/utils/attr-watcher.js.map +0 -1
  210. package/x/base/utils/mounts.js.map +0 -1
  211. package/x/base/utils/reactor.d.ts +0 -5
  212. package/x/base/utils/reactor.js +0 -25
  213. package/x/base/utils/reactor.js.map +0 -1
  214. package/x/base/utils/states.d.ts +0 -13
  215. package/x/base/utils/states.js +0 -41
  216. package/x/base/utils/states.js.map +0 -1
  217. package/x/base/utils/use-attrs.d.ts +0 -11
  218. package/x/base/utils/use-attrs.js +0 -18
  219. package/x/base/utils/use-attrs.js.map +0 -1
  220. package/x/demo/views/counter.js +0 -42
  221. package/x/demo/views/counter.js.map +0 -1
  222. package/x/demo/views/fastcount.d.ts +0 -12
  223. package/x/demo/views/fastcount.js +0 -21
  224. package/x/demo/views/fastcount.js.map +0 -1
  225. package/x/demo/views/mounting.d.ts +0 -3
  226. package/x/demo/views/mounting.js +0 -28
  227. package/x/demo/views/mounting.js.map +0 -1
  228. package/x/loaders/index.barrel.js.map +0 -1
  229. package/x/loaders/index.js.map +0 -1
  230. package/x/loaders/make.js.map +0 -1
  231. package/x/loaders/mock.js.map +0 -1
  232. package/x/loaders/parts/anims.js.map +0 -1
  233. package/x/loaders/parts/ascii-anim.js.map +0 -1
  234. package/x/loaders/parts/error-display.d.ts +0 -1
  235. package/x/loaders/parts/error-display.js +0 -20
  236. package/x/loaders/parts/error-display.js.map +0 -1
  237. package/x/ops/index.js.map +0 -1
  238. package/x/ops/op.js.map +0 -1
  239. package/x/ops/podium.js.map +0 -1
  240. package/x/spa/index.barrel.d.ts +0 -4
  241. package/x/spa/index.barrel.js +0 -3
  242. package/x/spa/index.barrel.js.map +0 -1
  243. package/x/spa/index.d.ts +0 -2
  244. package/x/spa/index.js +0 -2
  245. package/x/spa/index.js.map +0 -1
  246. package/x/spa/plumbing/braces.d.ts +0 -12
  247. package/x/spa/plumbing/braces.js +0 -55
  248. package/x/spa/plumbing/braces.js.map +0 -1
  249. package/x/spa/plumbing/primitives.d.ts +0 -22
  250. package/x/spa/plumbing/primitives.js +0 -65
  251. package/x/spa/plumbing/primitives.js.map +0 -1
  252. package/x/spa/plumbing/router-core.d.ts +0 -13
  253. package/x/spa/plumbing/router-core.js +0 -38
  254. package/x/spa/plumbing/router-core.js.map +0 -1
  255. package/x/spa/plumbing/types.d.ts +0 -35
  256. package/x/spa/plumbing/types.js +0 -2
  257. package/x/spa/plumbing/types.js.map +0 -1
  258. package/x/spa/router.d.ts +0 -13
  259. package/x/spa/router.js +0 -39
  260. package/x/spa/router.js.map +0 -1
  261. package/x/spa/spa.test.d.ts +0 -15
  262. package/x/spa/spa.test.js +0 -78
  263. package/x/spa/spa.test.js.map +0 -1
  264. package/x/tests.test.js +0 -6
  265. package/x/tests.test.js.map +0 -1
  266. package/x/view/utils/contextualize.d.ts +0 -13
  267. package/x/view/utils/contextualize.js +0 -18
  268. package/x/view/utils/contextualize.js.map +0 -1
  269. package/x/view/utils/make-component.d.ts +0 -5
  270. package/x/view/utils/make-component.js +0 -17
  271. package/x/view/utils/make-component.js.map +0 -1
  272. package/x/view/utils/make-view.d.ts +0 -2
  273. package/x/view/utils/make-view.js +0 -32
  274. package/x/view/utils/make-view.js.map +0 -1
  275. package/x/view/utils/parts/capsule.d.ts +0 -12
  276. package/x/view/utils/parts/capsule.js +0 -56
  277. package/x/view/utils/parts/capsule.js.map +0 -1
  278. package/x/view/utils/parts/chain.d.ts +0 -13
  279. package/x/view/utils/parts/chain.js +0 -26
  280. package/x/view/utils/parts/chain.js.map +0 -1
  281. package/x/view/utils/parts/context.d.ts +0 -9
  282. package/x/view/utils/parts/context.js +0 -10
  283. package/x/view/utils/parts/context.js.map +0 -1
  284. package/x/view/utils/parts/directive.d.ts +0 -5
  285. package/x/view/utils/parts/directive.js +0 -20
  286. package/x/view/utils/parts/directive.js.map +0 -1
  287. package/x/view/utils/parts/naked.d.ts +0 -18
  288. package/x/view/utils/parts/naked.js +0 -57
  289. package/x/view/utils/parts/naked.js.map +0 -1
  290. package/x/view/utils/parts/sly-view.d.ts +0 -6
  291. package/x/view/utils/parts/sly-view.js +0 -16
  292. package/x/view/utils/parts/sly-view.js.map +0 -1
  293. package/x/view/view.d.ts +0 -11
  294. package/x/view/view.js +0 -15
  295. package/x/view/view.js.map +0 -1
  296. /package/s/{base → _archive/base}/css-reset.ts +0 -0
  297. /package/s/{base → _archive/base}/element.ts +0 -0
  298. /package/s/{base → _archive/base}/index.ts +0 -0
  299. /package/s/{base → _archive/base}/types.ts +0 -0
  300. /package/s/{base → _archive/base}/use.ts +0 -0
  301. /package/s/{base → _archive/base}/utils/apply-styles.ts +0 -0
  302. /package/s/{base → _archive/base}/utils/attr-watcher.ts +0 -0
  303. /package/s/{base → _archive/base}/utils/mounts.ts +0 -0
  304. /package/s/{base → _archive/base}/utils/reactor.ts +0 -0
  305. /package/s/{base → _archive/base}/utils/states.ts +0 -0
  306. /package/s/{base → _archive/base}/utils/use-attrs.ts +0 -0
  307. /package/s/{spa → _archive/spa}/index.barrel.ts +0 -0
  308. /package/s/{spa → _archive/spa}/index.ts +0 -0
  309. /package/s/{spa → _archive/spa}/plumbing/braces.ts +0 -0
  310. /package/s/{spa → _archive/spa}/plumbing/primitives.ts +0 -0
  311. /package/s/{spa → _archive/spa}/plumbing/router-core.ts +0 -0
  312. /package/s/{spa → _archive/spa}/plumbing/types.ts +0 -0
  313. /package/s/{spa → _archive/spa}/router.ts +0 -0
  314. /package/s/{spa → _archive/spa}/spa.test.ts +0 -0
  315. /package/s/{view → _archive/view}/utils/contextualize.ts +0 -0
  316. /package/s/{view → _archive/view}/utils/make-component.ts +0 -0
  317. /package/s/{view → _archive/view}/utils/make-view.ts +0 -0
  318. /package/s/{view → _archive/view}/utils/parts/capsule.ts +0 -0
  319. /package/s/{view → _archive/view}/utils/parts/chain.ts +0 -0
  320. /package/s/{view → _archive/view}/utils/parts/context.ts +0 -0
  321. /package/s/{view → _archive/view}/utils/parts/directive.ts +0 -0
  322. /package/s/{view → _archive/view}/utils/parts/naked.ts +0 -0
  323. /package/s/{view → _archive/view}/utils/parts/sly-view.ts +0 -0
  324. /package/s/{view → _archive/view}/view.ts +0 -0
  325. /package/s/{loaders → loader}/mock.ts +0 -0
  326. /package/s/{loaders → loader}/parts/anims.ts +0 -0
  327. /package/s/{ops → op}/index.ts +0 -0
  328. /package/s/{ops → op}/op.ts +0 -0
  329. /package/s/{ops → op}/podium.ts +0 -0
  330. /package/s/{ops → op}/types.ts +0 -0
  331. /package/x/{loaders → loader}/index.barrel.js +0 -0
  332. /package/x/{loaders → loader}/index.js +0 -0
  333. /package/x/{loaders → loader}/make.js +0 -0
  334. /package/x/{loaders → loader}/mock.d.ts +0 -0
  335. /package/x/{loaders → loader}/mock.js +0 -0
  336. /package/x/{loaders → loader}/parts/anims.d.ts +0 -0
  337. /package/x/{loaders → loader}/parts/anims.js +0 -0
  338. /package/x/{loaders → loader}/types.js +0 -0
  339. /package/x/{ops → op}/index.d.ts +0 -0
  340. /package/x/{ops → op}/index.js +0 -0
  341. /package/x/{ops → op}/op.d.ts +0 -0
  342. /package/x/{ops → op}/op.js +0 -0
  343. /package/x/{ops → op}/podium.d.ts +0 -0
  344. /package/x/{ops → op}/podium.js +0 -0
  345. /package/x/{ops → op}/types.d.ts +0 -0
  346. /package/x/{ops → op}/types.js +0 -0
  347. /package/x/{tests.test.d.ts → test.d.ts} +0 -0
  348. /package/x/{base → view/common}/css-reset.d.ts +0 -0
  349. /package/x/{base/utils → view/parts}/apply-styles.d.ts +0 -0
  350. /package/x/{base/utils → view/parts}/apply-styles.js +0 -0
@@ -0,0 +1,366 @@
1
+ import { Content } from "../types.js";
2
+ import { ShadowCx } from "../parts/cx.js";
3
+ import { Reactivity } from "../parts/reactivity.js";
4
+ import { Hookscope } from "../hooks/plumbing/hookscope.js";
5
+ export declare function shadowElement(view: () => Content): {
6
+ new (): {
7
+ "__#private@#cx": ShadowCx;
8
+ "__#private@#hookscope": Hookscope;
9
+ "__#private@#reactivity": Reactivity;
10
+ "__#private@#shadow": ShadowRoot;
11
+ "__#private@#renderContent"(): Content;
12
+ render(): void;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ accessKey: string;
16
+ readonly accessKeyLabel: string;
17
+ autocapitalize: string;
18
+ autocorrect: boolean;
19
+ dir: string;
20
+ draggable: boolean;
21
+ hidden: boolean;
22
+ inert: boolean;
23
+ innerText: string;
24
+ lang: string;
25
+ readonly offsetHeight: number;
26
+ readonly offsetLeft: number;
27
+ readonly offsetParent: Element | null;
28
+ readonly offsetTop: number;
29
+ readonly offsetWidth: number;
30
+ outerText: string;
31
+ popover: string | null;
32
+ spellcheck: boolean;
33
+ title: string;
34
+ translate: boolean;
35
+ writingSuggestions: string;
36
+ attachInternals(): ElementInternals;
37
+ click(): void;
38
+ hidePopover(): void;
39
+ showPopover(): void;
40
+ togglePopover(options?: boolean): boolean;
41
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
42
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
43
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
44
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
45
+ readonly attributes: NamedNodeMap;
46
+ get classList(): DOMTokenList;
47
+ set classList(value: string);
48
+ className: string;
49
+ readonly clientHeight: number;
50
+ readonly clientLeft: number;
51
+ readonly clientTop: number;
52
+ readonly clientWidth: number;
53
+ readonly currentCSSZoom: number;
54
+ id: string;
55
+ innerHTML: string;
56
+ readonly localName: string;
57
+ readonly namespaceURI: string | null;
58
+ onfullscreenchange: ((this: Element, ev: Event) => any) | null;
59
+ onfullscreenerror: ((this: Element, ev: Event) => any) | null;
60
+ outerHTML: string;
61
+ readonly ownerDocument: Document;
62
+ get part(): DOMTokenList;
63
+ set part(value: string);
64
+ readonly prefix: string | null;
65
+ readonly scrollHeight: number;
66
+ scrollLeft: number;
67
+ scrollTop: number;
68
+ readonly scrollWidth: number;
69
+ readonly shadowRoot: ShadowRoot | null;
70
+ slot: string;
71
+ readonly tagName: string;
72
+ attachShadow(init: ShadowRootInit): ShadowRoot;
73
+ checkVisibility(options?: CheckVisibilityOptions): boolean;
74
+ closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;
75
+ closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;
76
+ closest<K extends keyof MathMLElementTagNameMap>(selector: K): MathMLElementTagNameMap[K] | null;
77
+ closest<E extends Element = Element>(selectors: string): E | null;
78
+ computedStyleMap(): StylePropertyMapReadOnly;
79
+ getAttribute(qualifiedName: string): string | null;
80
+ getAttributeNS(namespace: string | null, localName: string): string | null;
81
+ getAttributeNames(): string[];
82
+ getAttributeNode(qualifiedName: string): Attr | null;
83
+ getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;
84
+ getBoundingClientRect(): DOMRect;
85
+ getClientRects(): DOMRectList;
86
+ getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;
87
+ getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;
88
+ getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;
89
+ getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;
90
+ getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;
91
+ getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;
92
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf<HTMLElement>;
93
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf<SVGElement>;
94
+ getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf<MathMLElement>;
95
+ getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;
96
+ getHTML(options?: GetHTMLOptions): string;
97
+ hasAttribute(qualifiedName: string): boolean;
98
+ hasAttributeNS(namespace: string | null, localName: string): boolean;
99
+ hasAttributes(): boolean;
100
+ hasPointerCapture(pointerId: number): boolean;
101
+ insertAdjacentElement(where: InsertPosition, element: Element): Element | null;
102
+ insertAdjacentHTML(position: InsertPosition, string: string): void;
103
+ insertAdjacentText(where: InsertPosition, data: string): void;
104
+ matches(selectors: string): boolean;
105
+ releasePointerCapture(pointerId: number): void;
106
+ removeAttribute(qualifiedName: string): void;
107
+ removeAttributeNS(namespace: string | null, localName: string): void;
108
+ removeAttributeNode(attr: Attr): Attr;
109
+ requestFullscreen(options?: FullscreenOptions): Promise<void>;
110
+ requestPointerLock(options?: PointerLockOptions): Promise<void>;
111
+ scroll(options?: ScrollToOptions): void;
112
+ scroll(x: number, y: number): void;
113
+ scrollBy(options?: ScrollToOptions): void;
114
+ scrollBy(x: number, y: number): void;
115
+ scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;
116
+ scrollTo(options?: ScrollToOptions): void;
117
+ scrollTo(x: number, y: number): void;
118
+ setAttribute(qualifiedName: string, value: string): void;
119
+ setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
120
+ setAttributeNode(attr: Attr): Attr | null;
121
+ setAttributeNodeNS(attr: Attr): Attr | null;
122
+ setHTMLUnsafe(html: string): void;
123
+ setPointerCapture(pointerId: number): void;
124
+ toggleAttribute(qualifiedName: string, force?: boolean): boolean;
125
+ webkitMatchesSelector(selectors: string): boolean;
126
+ get textContent(): string;
127
+ set textContent(value: string | null);
128
+ readonly baseURI: string;
129
+ readonly childNodes: NodeListOf<ChildNode>;
130
+ readonly firstChild: ChildNode | null;
131
+ readonly isConnected: boolean;
132
+ readonly lastChild: ChildNode | null;
133
+ readonly nextSibling: ChildNode | null;
134
+ readonly nodeName: string;
135
+ readonly nodeType: number;
136
+ nodeValue: string | null;
137
+ readonly parentElement: HTMLElement | null;
138
+ readonly parentNode: ParentNode | null;
139
+ readonly previousSibling: ChildNode | null;
140
+ appendChild<T extends Node>(node: T): T;
141
+ cloneNode(subtree?: boolean): Node;
142
+ compareDocumentPosition(other: Node): number;
143
+ contains(other: Node | null): boolean;
144
+ getRootNode(options?: GetRootNodeOptions): Node;
145
+ hasChildNodes(): boolean;
146
+ insertBefore<T extends Node>(node: T, child: Node | null): T;
147
+ isDefaultNamespace(namespace: string | null): boolean;
148
+ isEqualNode(otherNode: Node | null): boolean;
149
+ isSameNode(otherNode: Node | null): boolean;
150
+ lookupNamespaceURI(prefix: string | null): string | null;
151
+ lookupPrefix(namespace: string | null): string | null;
152
+ normalize(): void;
153
+ removeChild<T extends Node>(child: T): T;
154
+ replaceChild<T extends Node>(node: Node, child: T): T;
155
+ readonly ELEMENT_NODE: 1;
156
+ readonly ATTRIBUTE_NODE: 2;
157
+ readonly TEXT_NODE: 3;
158
+ readonly CDATA_SECTION_NODE: 4;
159
+ readonly ENTITY_REFERENCE_NODE: 5;
160
+ readonly ENTITY_NODE: 6;
161
+ readonly PROCESSING_INSTRUCTION_NODE: 7;
162
+ readonly COMMENT_NODE: 8;
163
+ readonly DOCUMENT_NODE: 9;
164
+ readonly DOCUMENT_TYPE_NODE: 10;
165
+ readonly DOCUMENT_FRAGMENT_NODE: 11;
166
+ readonly NOTATION_NODE: 12;
167
+ readonly DOCUMENT_POSITION_DISCONNECTED: 1;
168
+ readonly DOCUMENT_POSITION_PRECEDING: 2;
169
+ readonly DOCUMENT_POSITION_FOLLOWING: 4;
170
+ readonly DOCUMENT_POSITION_CONTAINS: 8;
171
+ readonly DOCUMENT_POSITION_CONTAINED_BY: 16;
172
+ readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32;
173
+ dispatchEvent(event: Event): boolean;
174
+ ariaActiveDescendantElement: Element | null;
175
+ ariaAtomic: string | null;
176
+ ariaAutoComplete: string | null;
177
+ ariaBrailleLabel: string | null;
178
+ ariaBrailleRoleDescription: string | null;
179
+ ariaBusy: string | null;
180
+ ariaChecked: string | null;
181
+ ariaColCount: string | null;
182
+ ariaColIndex: string | null;
183
+ ariaColIndexText: string | null;
184
+ ariaColSpan: string | null;
185
+ ariaControlsElements: ReadonlyArray<Element> | null;
186
+ ariaCurrent: string | null;
187
+ ariaDescribedByElements: ReadonlyArray<Element> | null;
188
+ ariaDescription: string | null;
189
+ ariaDetailsElements: ReadonlyArray<Element> | null;
190
+ ariaDisabled: string | null;
191
+ ariaErrorMessageElements: ReadonlyArray<Element> | null;
192
+ ariaExpanded: string | null;
193
+ ariaFlowToElements: ReadonlyArray<Element> | null;
194
+ ariaHasPopup: string | null;
195
+ ariaHidden: string | null;
196
+ ariaInvalid: string | null;
197
+ ariaKeyShortcuts: string | null;
198
+ ariaLabel: string | null;
199
+ ariaLabelledByElements: ReadonlyArray<Element> | null;
200
+ ariaLevel: string | null;
201
+ ariaLive: string | null;
202
+ ariaModal: string | null;
203
+ ariaMultiLine: string | null;
204
+ ariaMultiSelectable: string | null;
205
+ ariaOrientation: string | null;
206
+ ariaOwnsElements: ReadonlyArray<Element> | null;
207
+ ariaPlaceholder: string | null;
208
+ ariaPosInSet: string | null;
209
+ ariaPressed: string | null;
210
+ ariaReadOnly: string | null;
211
+ ariaRelevant: string | null;
212
+ ariaRequired: string | null;
213
+ ariaRoleDescription: string | null;
214
+ ariaRowCount: string | null;
215
+ ariaRowIndex: string | null;
216
+ ariaRowIndexText: string | null;
217
+ ariaRowSpan: string | null;
218
+ ariaSelected: string | null;
219
+ ariaSetSize: string | null;
220
+ ariaSort: string | null;
221
+ ariaValueMax: string | null;
222
+ ariaValueMin: string | null;
223
+ ariaValueNow: string | null;
224
+ ariaValueText: string | null;
225
+ role: string | null;
226
+ animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;
227
+ getAnimations(options?: GetAnimationsOptions): Animation[];
228
+ after(...nodes: (Node | string)[]): void;
229
+ before(...nodes: (Node | string)[]): void;
230
+ remove(): void;
231
+ replaceWith(...nodes: (Node | string)[]): void;
232
+ readonly nextElementSibling: Element | null;
233
+ readonly previousElementSibling: Element | null;
234
+ readonly childElementCount: number;
235
+ readonly children: HTMLCollection;
236
+ readonly firstElementChild: Element | null;
237
+ readonly lastElementChild: Element | null;
238
+ append(...nodes: (Node | string)[]): void;
239
+ prepend(...nodes: (Node | string)[]): void;
240
+ querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;
241
+ querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;
242
+ querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;
243
+ querySelector<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): HTMLElementDeprecatedTagNameMap[K] | null;
244
+ querySelector<E extends Element = Element>(selectors: string): E | null;
245
+ querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
246
+ querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
247
+ querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
248
+ querySelectorAll<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): NodeListOf<HTMLElementDeprecatedTagNameMap[K]>;
249
+ querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
250
+ replaceChildren(...nodes: (Node | string)[]): void;
251
+ readonly assignedSlot: HTMLSlotElement | null;
252
+ readonly attributeStyleMap: StylePropertyMap;
253
+ get style(): CSSStyleDeclaration;
254
+ set style(cssText: string);
255
+ contentEditable: string;
256
+ enterKeyHint: string;
257
+ inputMode: string;
258
+ readonly isContentEditable: boolean;
259
+ onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
260
+ onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
261
+ onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
262
+ onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
263
+ onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;
264
+ onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
265
+ onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;
266
+ onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null;
267
+ onbeforetoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null;
268
+ onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
269
+ oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;
270
+ oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
271
+ oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;
272
+ onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
273
+ onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
274
+ onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;
275
+ oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null;
276
+ oncontextmenu: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
277
+ oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null;
278
+ oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
279
+ oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
280
+ oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
281
+ ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
282
+ ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
283
+ ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
284
+ ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
285
+ ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
286
+ ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
287
+ ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
288
+ ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;
289
+ ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
290
+ onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;
291
+ onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;
292
+ onerror: OnErrorEventHandler;
293
+ onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;
294
+ onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;
295
+ ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
296
+ oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;
297
+ oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;
298
+ onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
299
+ onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
300
+ onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;
301
+ onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;
302
+ onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
303
+ onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;
304
+ onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
305
+ onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
306
+ onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
307
+ onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
308
+ onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
309
+ onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
310
+ onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
311
+ onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
312
+ onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;
313
+ onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;
314
+ onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;
315
+ onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;
316
+ onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;
317
+ onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
318
+ onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
319
+ onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
320
+ onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
321
+ onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
322
+ onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
323
+ onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
324
+ onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
325
+ onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;
326
+ onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;
327
+ onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
328
+ onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;
329
+ onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;
330
+ onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;
331
+ onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
332
+ onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;
333
+ onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;
334
+ onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;
335
+ onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;
336
+ onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
337
+ onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
338
+ onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
339
+ onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;
340
+ onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;
341
+ onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
342
+ ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;
343
+ ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null;
344
+ ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
345
+ ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
346
+ ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
347
+ ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;
348
+ ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
349
+ ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
350
+ ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
351
+ ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;
352
+ onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;
353
+ onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;
354
+ onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
355
+ onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;
356
+ onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;
357
+ onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;
358
+ onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;
359
+ autofocus: boolean;
360
+ readonly dataset: DOMStringMap;
361
+ nonce?: string;
362
+ tabIndex: number;
363
+ blur(): void;
364
+ focus(options?: FocusOptions): void;
365
+ };
366
+ };
@@ -0,0 +1,42 @@
1
+ import { microbounce } from "@e280/stz";
2
+ import { render as litRender } from "lit";
3
+ import { ShadowCx } from "../parts/cx.js";
4
+ import { hooks } from "../hooks/plumbing/hooks.js";
5
+ import { Reactivity } from "../parts/reactivity.js";
6
+ import { Hookscope } from "../hooks/plumbing/hookscope.js";
7
+ export function shadowElement(view) {
8
+ return class extends HTMLElement {
9
+ #cx;
10
+ #hookscope;
11
+ #reactivity = new Reactivity();
12
+ #shadow = this.attachShadow({ mode: "open" });
13
+ constructor() {
14
+ super();
15
+ const rerender = microbounce(() => {
16
+ if (!this.isConnected)
17
+ return;
18
+ const content = this.#renderContent();
19
+ litRender(content, this.#cx.shadow);
20
+ this.#cx.doneRender();
21
+ });
22
+ this.#cx = new ShadowCx(rerender, this, this.#shadow);
23
+ this.#hookscope = new Hookscope(this.#cx);
24
+ }
25
+ #renderContent() {
26
+ return this.#reactivity.observe(() => hooks.wrap(this.#hookscope, () => view()), this.#cx.render);
27
+ }
28
+ render() {
29
+ litRender(this.#renderContent(), this.#cx.shadow);
30
+ this.#cx.doneRender();
31
+ }
32
+ connectedCallback() {
33
+ this.#hookscope.mounts.remountAll();
34
+ this.#cx.render();
35
+ }
36
+ disconnectedCallback() {
37
+ this.#hookscope.mounts.unmountAll();
38
+ this.#reactivity.clear();
39
+ }
40
+ };
41
+ }
42
+ //# sourceMappingURL=shadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../../s/view/elements/shadow.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAA;AACrC,OAAO,EAAC,MAAM,IAAI,SAAS,EAAC,MAAM,KAAK,CAAA;AAEvC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAA;AAChD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAC,SAAS,EAAC,MAAM,gCAAgC,CAAA;AAExD,MAAM,UAAU,aAAa,CAAC,IAAmB;IAChD,OAAO,KAAM,SAAQ,WAAW;QAC/B,GAAG,CAAA;QACH,UAAU,CAAA;QACV,WAAW,GAAG,IAAI,UAAU,EAAE,CAAA;QAC9B,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;QAE3C;YACC,KAAK,EAAE,CAAA;YACP,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,OAAM;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBACrC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACnC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YACrD,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,CAAC;QAED,cAAc;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAC9B,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAC/C,IAAI,CAAC,GAAG,CAAC,MAAM,CACf,CAAA;QACF,CAAC;QAED,MAAM;YACL,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACjD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;QACtB,CAAC;QAED,iBAAiB;YAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;YACnC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;QAClB,CAAC;QAED,oBAAoB;YACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;YACnC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QACzB,CAAC;KACD,CAAA;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Hookscope } from "./hookscope.js";
2
+ export declare class Hooks {
3
+ #private;
4
+ get scope(): Hookscope;
5
+ increment(): {
6
+ scope: Hookscope;
7
+ position: number;
8
+ };
9
+ wrap<Ret>(scope: Hookscope, fn: () => Ret): Ret;
10
+ }
11
+ export declare const hooks: Hooks;
@@ -0,0 +1,26 @@
1
+ export class Hooks {
2
+ #scopes = [];
3
+ get scope() {
4
+ const scope = this.#scopes.at(-1);
5
+ if (!scope)
6
+ throw new Error("hooks must be called within a render fn");
7
+ return scope;
8
+ }
9
+ increment() {
10
+ const scope = this.scope;
11
+ const position = scope.position++;
12
+ return { scope, position };
13
+ }
14
+ wrap(scope, fn) {
15
+ scope.position = 0;
16
+ this.#scopes.push(scope);
17
+ try {
18
+ return fn();
19
+ }
20
+ finally {
21
+ this.#scopes.pop();
22
+ }
23
+ }
24
+ }
25
+ export const hooks = globalThis[Symbol.for("e280.hooks")] ??= new Hooks();
26
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../s/view/hooks/plumbing/hooks.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,KAAK;IACjB,OAAO,GAAgB,EAAE,CAAA;IAEzB,IAAI,KAAK;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QACtE,OAAO,KAAK,CAAA;IACb,CAAC;IAED,SAAS;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QACjC,OAAO,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAA;IACzB,CAAC;IAED,IAAI,CAAM,KAAgB,EAAE,EAAa;QACxC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,CAAC;YAAC,OAAO,EAAE,EAAE,CAAA;QAAC,CAAC;gBACX,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QAAC,CAAC;IAC/B,CAAC;CACD;AAED,MAAM,CAAC,MAAM,KAAK,GAAW,UAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { GMap } from "@e280/stz";
2
+ import { Mounts } from "../use-mount.js";
3
+ import { LightCx, ShadowCx } from "../../parts/cx.js";
4
+ export declare class Hookscope {
5
+ cx: LightCx | ShadowCx;
6
+ position: number;
7
+ values: GMap<number, any>;
8
+ mounts: Mounts;
9
+ constructor(cx: LightCx | ShadowCx);
10
+ }
@@ -0,0 +1,12 @@
1
+ import { GMap } from "@e280/stz";
2
+ import { Mounts } from "../use-mount.js";
3
+ export class Hookscope {
4
+ cx;
5
+ position = 0;
6
+ values = new GMap();
7
+ mounts = new Mounts();
8
+ constructor(cx) {
9
+ this.cx = cx;
10
+ }
11
+ }
12
+ //# sourceMappingURL=hookscope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookscope.js","sourceRoot":"","sources":["../../../../s/view/hooks/plumbing/hookscope.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAGtC,MAAM,OAAO,SAAS;IAIF;IAHnB,QAAQ,GAAG,CAAC,CAAA;IACZ,MAAM,GAAG,IAAI,IAAI,EAAe,CAAA;IAChC,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;IACrB,YAAmB,EAAsB;QAAtB,OAAE,GAAF,EAAE,CAAoB;IAAG,CAAC;CAC7C"}
@@ -0,0 +1,2 @@
1
+ import { AttrSpec } from "../../dom/types.js";
2
+ export declare function useAttrs<A extends AttrSpec>(spec: A): import("../../dom/types.js").AttrTypes<A>;
@@ -0,0 +1,23 @@
1
+ import { useRef } from "./use-ref.js";
2
+ import { dom } from "../../dom/dom.js";
3
+ import { useOnce } from "./use-once.js";
4
+ import { useMount } from "./use-mount.js";
5
+ import { useHost, useRender, useRendered } from "./use-cx.js";
6
+ export function useAttrs(spec) {
7
+ const host = useHost();
8
+ const rerender = useRender();
9
+ const ourChanges = useRef(new Set());
10
+ useMount(() => dom.attrs(host).on(records => {
11
+ for (const record of records) {
12
+ if (ourChanges.current.has(record.attributeName))
13
+ continue;
14
+ rerender();
15
+ break;
16
+ }
17
+ }));
18
+ useRendered().then(() => ourChanges.current.clear());
19
+ return useOnce(() => dom.attrs(host).spec(spec, {
20
+ beforeSet: key => ourChanges.current.add(key),
21
+ }));
22
+ }
23
+ //# sourceMappingURL=use-attrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-attrs.js","sourceRoot":"","sources":["../../../s/view/hooks/use-attrs.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAE3D,MAAM,UAAU,QAAQ,CAAqB,IAAO;IACnD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,EAAU,CAAC,CAAA;IAE5C,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,aAAc,CAAC;gBAAE,SAAQ;YAC3D,QAAQ,EAAE,CAAA;YACV,MAAK;QACN,CAAC;IACF,CAAC,CAAC,CAAC,CAAA;IAEH,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAEpD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;QAC/C,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;KAC7C,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { CSSResultGroup } from "lit";
2
+ /** attach stylesheets to the shadow root */
3
+ export declare function useCss(...styles: CSSResultGroup[]): void;
4
+ export declare const useStyles: typeof useCss;
@@ -0,0 +1,10 @@
1
+ import { useShadow } from "./use-cx.js";
2
+ import { useOnce } from "./use-once.js";
3
+ import { applyStyles } from "../parts/apply-styles.js";
4
+ /** attach stylesheets to the shadow root */
5
+ export function useCss(...styles) {
6
+ const shadow = useShadow();
7
+ useOnce(() => applyStyles(shadow, styles));
8
+ }
9
+ export const useStyles = useCss;
10
+ //# sourceMappingURL=use-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-css.js","sourceRoot":"","sources":["../../../s/view/hooks/use-css.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,WAAW,EAAC,MAAM,0BAA0B,CAAA;AAEpD,4CAA4C;AAC5C,MAAM,UAAU,MAAM,CAAC,GAAG,MAAwB;IACjD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAA"}
@@ -0,0 +1,10 @@
1
+ /** return the current count of how many times this view has been rendered (starts at 0) */
2
+ export declare function useCount(): number;
3
+ /** return a function that triggers the view to rerender */
4
+ export declare function useRender(): () => Promise<void>;
5
+ /** return a promise that resolves after the next render is complete */
6
+ export declare function useRendered(): Promise<void>;
7
+ /** return the shadow view's host element */
8
+ export declare function useHost(): HTMLElement;
9
+ /** return the shadow root */
10
+ export declare function useShadow(): ShadowRoot;
@@ -0,0 +1,33 @@
1
+ import { ShadowCx } from "../parts/cx.js";
2
+ import { hooks } from "./plumbing/hooks.js";
3
+ function useCx() {
4
+ const { scope } = hooks.increment();
5
+ return scope.cx;
6
+ }
7
+ function useShadowCx() {
8
+ const cx = useCx();
9
+ if (!(cx instanceof ShadowCx))
10
+ throw new Error("this hook only works on shadow views (but was called in a light view)");
11
+ return cx;
12
+ }
13
+ /** return the current count of how many times this view has been rendered (starts at 0) */
14
+ export function useCount() {
15
+ return useCx().count;
16
+ }
17
+ /** return a function that triggers the view to rerender */
18
+ export function useRender() {
19
+ return useCx().render;
20
+ }
21
+ /** return a promise that resolves after the next render is complete */
22
+ export function useRendered() {
23
+ return useCx().rendered.promise;
24
+ }
25
+ /** return the shadow view's host element */
26
+ export function useHost() {
27
+ return useShadowCx().host;
28
+ }
29
+ /** return the shadow root */
30
+ export function useShadow() {
31
+ return useShadowCx().shadow;
32
+ }
33
+ //# sourceMappingURL=use-cx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-cx.js","sourceRoot":"","sources":["../../../s/view/hooks/use-cx.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAA;AAEzC,SAAS,KAAK;IACb,MAAM,EAAC,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IACjC,OAAO,KAAK,CAAC,EAAE,CAAA;AAChB,CAAC;AAED,SAAS,WAAW;IACnB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAClB,IAAI,CAAC,CAAC,EAAE,YAAY,QAAQ,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IACzF,OAAO,EAAE,CAAA;AACV,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,QAAQ;IACvB,OAAO,KAAK,EAAE,CAAC,KAAK,CAAA;AACrB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,SAAS;IACxB,OAAO,KAAK,EAAE,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW;IAC1B,OAAO,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAA;AAChC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,OAAO;IACtB,OAAO,WAAW,EAAE,CAAC,IAAI,CAAA;AAC1B,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,SAAS;IACxB,OAAO,WAAW,EAAE,CAAC,MAAM,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ /** mount/unmount lifecycle, but also return a value */
2
+ export declare function useLife<Value>(fn: () => [value: Value, dispose: () => void]): Value;
@@ -0,0 +1,13 @@
1
+ import { useRef } from "./use-ref.js";
2
+ import { useMount } from "./use-mount.js";
3
+ /** mount/unmount lifecycle, but also return a value */
4
+ export function useLife(fn) {
5
+ const ref = useRef(undefined);
6
+ useMount(() => {
7
+ const [value, dispose] = fn();
8
+ ref.current = value;
9
+ return dispose;
10
+ });
11
+ return ref.current;
12
+ }
13
+ //# sourceMappingURL=use-life.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-life.js","sourceRoot":"","sources":["../../../s/view/hooks/use-life.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAA;AAEvC,uDAAuD;AACvD,MAAM,UAAU,OAAO,CAAQ,EAA6C;IAC3E,MAAM,GAAG,GAAG,MAAM,CAAQ,SAAkB,CAAC,CAAA;IAE7C,QAAQ,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAA;QAC7B,GAAG,CAAC,OAAO,GAAG,KAAK,CAAA;QACnB,OAAO,OAAO,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,OAAO,CAAA;AACnB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export declare function useMount(fn: () => () => void): void;
1
2
  export declare class Mounts {
2
3
  #private;
3
4
  mount(mount: () => () => void): void;
@@ -1,3 +1,9 @@
1
+ import { useOnce } from "./use-once.js";
2
+ import { hooks } from "./plumbing/hooks.js";
3
+ export function useMount(fn) {
4
+ const { scope } = hooks.increment();
5
+ return useOnce(() => scope.mounts.mount(fn));
6
+ }
1
7
  export class Mounts {
2
8
  #mounters = [];
3
9
  #unmounters = [];
@@ -15,4 +21,4 @@ export class Mounts {
15
21
  this.#unmounters.push(mount());
16
22
  }
17
23
  }
18
- //# sourceMappingURL=mounts.js.map
24
+ //# sourceMappingURL=use-mount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mount.js","sourceRoot":"","sources":["../../../s/view/hooks/use-mount.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAA;AAEzC,MAAM,UAAU,QAAQ,CAAC,EAAoB;IAC5C,MAAM,EAAC,KAAK,EAAC,GAAG,KAAK,CAAC,SAAS,EAAE,CAAA;IACjC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,OAAO,MAAM;IAClB,SAAS,GAAyB,EAAE,CAAA;IACpC,WAAW,GAAmB,EAAE,CAAA;IAEhC,KAAK,CAAC,KAAuB;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAC/B,CAAC;IAED,UAAU;QACT,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW;YACrC,OAAO,EAAE,CAAA;QACV,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,UAAU;QACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS;YACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ /** sets the host element's "data-view" attribute */
2
+ export declare function useName(name?: string): void;