@adukiorg/anza 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 (349) hide show
  1. package/CHANGELOG.md +137 -0
  2. package/README.md +215 -0
  3. package/bin/anza.js +63 -0
  4. package/bin/create.js +150 -0
  5. package/importmap.json +72 -0
  6. package/package.json +100 -0
  7. package/src/core/animations/index.js +55 -0
  8. package/src/core/animations/play.js +111 -0
  9. package/src/core/animations/registry.js +54 -0
  10. package/src/core/animations/scroll.js +50 -0
  11. package/src/core/animations/tokens.js +58 -0
  12. package/src/core/animations/usage.md +301 -0
  13. package/src/core/animations/waapi.js +86 -0
  14. package/src/core/api/cache.js +120 -0
  15. package/src/core/api/caches/glob.js +24 -0
  16. package/src/core/api/caches/index.js +118 -0
  17. package/src/core/api/events/index.js +75 -0
  18. package/src/core/api/fetch.js +99 -0
  19. package/src/core/api/index.js +158 -0
  20. package/src/core/api/pipeline.js +98 -0
  21. package/src/core/api/plan.md +209 -0
  22. package/src/core/api/prefixes/index.js +66 -0
  23. package/src/core/api/retry.js +69 -0
  24. package/src/core/api/stream.js +127 -0
  25. package/src/core/api/upload.js +180 -0
  26. package/src/core/api/usage.md +206 -0
  27. package/src/core/events/bus.js +38 -0
  28. package/src/core/events/delegate.js +79 -0
  29. package/src/core/events/index.js +26 -0
  30. package/src/core/events/listen.js +50 -0
  31. package/src/core/events/missing.md +103 -0
  32. package/src/core/events/once.js +49 -0
  33. package/src/core/events/plan.md +177 -0
  34. package/src/core/events/types/index.js +34 -0
  35. package/src/core/events/usage.md +107 -0
  36. package/src/core/offline/bridge.js +51 -0
  37. package/src/core/offline/clock.js +100 -0
  38. package/src/core/offline/connectivity.js +116 -0
  39. package/src/core/offline/index.js +41 -0
  40. package/src/core/offline/missing.md +89 -0
  41. package/src/core/offline/plan.md +143 -0
  42. package/src/core/offline/queue.js +168 -0
  43. package/src/core/offline/state.js +18 -0
  44. package/src/core/offline/sync.js +106 -0
  45. package/src/core/offline/usage.md +273 -0
  46. package/src/core/platform/guard.js +104 -0
  47. package/src/core/platform/index.js +42 -0
  48. package/src/core/platform/missing.md +119 -0
  49. package/src/core/platform/platform.d.ts +88 -0
  50. package/src/core/platform/polyfills/anchor.js +79 -0
  51. package/src/core/platform/polyfills/navigation.js +142 -0
  52. package/src/core/platform/polyfills/popover.js +142 -0
  53. package/src/core/platform/polyfills/scheduler.js +194 -0
  54. package/src/core/platform/polyfills/shadow.js +35 -0
  55. package/src/core/platform/polyfills/urlpattern.js +119 -0
  56. package/src/core/platform/supports.js +186 -0
  57. package/src/core/platform/usage.md +287 -0
  58. package/src/core/router/cache.js +95 -0
  59. package/src/core/router/container.js +146 -0
  60. package/src/core/router/handler.js +52 -0
  61. package/src/core/router/history.js +120 -0
  62. package/src/core/router/index.js +158 -0
  63. package/src/core/router/intercept.js +376 -0
  64. package/src/core/router/match.js +145 -0
  65. package/src/core/router/missing.md +716 -0
  66. package/src/core/router/outlet.js +139 -0
  67. package/src/core/router/plan.md +370 -0
  68. package/src/core/router/sync/index.js +16 -0
  69. package/src/core/router/sync/tab.js +115 -0
  70. package/src/core/router/sync/transport.js +139 -0
  71. package/src/core/router/transitions.js +59 -0
  72. package/src/core/router/usage.md +773 -0
  73. package/src/core/security/crypto.js +159 -0
  74. package/src/core/security/index.js +49 -0
  75. package/src/core/security/missing.md +97 -0
  76. package/src/core/security/permissions.js +64 -0
  77. package/src/core/security/sanitize.js +100 -0
  78. package/src/core/security/usage.md +283 -0
  79. package/src/core/state/derived.js +117 -0
  80. package/src/core/state/index.js +23 -0
  81. package/src/core/state/missing.md +165 -0
  82. package/src/core/state/persist.js +284 -0
  83. package/src/core/state/store.js +308 -0
  84. package/src/core/state/sync.js +46 -0
  85. package/src/core/state/usage.md +440 -0
  86. package/src/core/storage/cache.js +83 -0
  87. package/src/core/storage/idb.js +196 -0
  88. package/src/core/storage/index.js +373 -0
  89. package/src/core/storage/lru.js +107 -0
  90. package/src/core/storage/missing.md +165 -0
  91. package/src/core/storage/opfs.js +190 -0
  92. package/src/core/storage/plan.md +69 -0
  93. package/src/core/storage/quota.js +69 -0
  94. package/src/core/storage/usage.md +226 -0
  95. package/src/core/ui/base.js +50 -0
  96. package/src/core/ui/define/container.js +82 -0
  97. package/src/core/ui/define/define.js +12 -0
  98. package/src/core/ui/define/element.js +390 -0
  99. package/src/core/ui/define/index.js +9 -0
  100. package/src/core/ui/define/orchestrator.js +105 -0
  101. package/src/core/ui/define/proxy.js +644 -0
  102. package/src/core/ui/define/state.js +6 -0
  103. package/src/core/ui/define/utils.js +134 -0
  104. package/src/core/ui/implementation.md +170 -0
  105. package/src/core/ui/index.js +41 -0
  106. package/src/core/ui/observe.js +117 -0
  107. package/src/core/ui/plan.md +510 -0
  108. package/src/core/ui/schedule.js +60 -0
  109. package/src/core/ui/template.js +37 -0
  110. package/src/core/ui/transitions.js +37 -0
  111. package/src/core/ui/ui.types.md +890 -0
  112. package/src/core/ui/usage.md +1124 -0
  113. package/src/core/ui/watch.md +346 -0
  114. package/src/core/workers/broadcast.js +138 -0
  115. package/src/core/workers/dedicated.js +153 -0
  116. package/src/core/workers/index.js +169 -0
  117. package/src/core/workers/locks.js +160 -0
  118. package/src/core/workers/offscreen.js +166 -0
  119. package/src/core/workers/plan.md +381 -0
  120. package/src/core/workers/pool.js +267 -0
  121. package/src/core/workers/shared.js +137 -0
  122. package/src/core/workers/usage.md +622 -0
  123. package/src/elements/base.js +12 -0
  124. package/src/elements/data/card/index.html +9 -0
  125. package/src/elements/data/card/index.js +19 -0
  126. package/src/elements/data/card/index.tags.json +1 -0
  127. package/src/elements/data/card/style.css +46 -0
  128. package/src/elements/data/chart/index.html +1 -0
  129. package/src/elements/data/chart/index.js +143 -0
  130. package/src/elements/data/chart/index.tags.json +1 -0
  131. package/src/elements/data/chart/style.css +13 -0
  132. package/src/elements/data/list/index.html +3 -0
  133. package/src/elements/data/list/index.js +19 -0
  134. package/src/elements/data/list/index.tags.json +1 -0
  135. package/src/elements/data/list/style.css +39 -0
  136. package/src/elements/data/stat/index.html +9 -0
  137. package/src/elements/data/stat/index.js +19 -0
  138. package/src/elements/data/stat/index.tags.json +1 -0
  139. package/src/elements/data/stat/style.css +50 -0
  140. package/src/elements/data/table/index.html +1 -0
  141. package/src/elements/data/table/index.js +16 -0
  142. package/src/elements/data/table/index.tags.json +1 -0
  143. package/src/elements/data/table/style.css +50 -0
  144. package/src/elements/feedback/alert/index.html +11 -0
  145. package/src/elements/feedback/alert/index.js +28 -0
  146. package/src/elements/feedback/alert/index.tags.json +1 -0
  147. package/src/elements/feedback/alert/style.css +75 -0
  148. package/src/elements/feedback/empty/index.html +13 -0
  149. package/src/elements/feedback/empty/index.js +34 -0
  150. package/src/elements/feedback/empty/index.tags.json +1 -0
  151. package/src/elements/feedback/empty/style.css +45 -0
  152. package/src/elements/feedback/progress/index.html +7 -0
  153. package/src/elements/feedback/progress/index.js +46 -0
  154. package/src/elements/feedback/progress/index.tags.json +1 -0
  155. package/src/elements/feedback/progress/style.css +36 -0
  156. package/src/elements/feedback/skeleton/index.html +1 -0
  157. package/src/elements/feedback/skeleton/index.js +78 -0
  158. package/src/elements/feedback/skeleton/index.tags.json +1 -0
  159. package/src/elements/feedback/skeleton/style.css +28 -0
  160. package/src/elements/feedback/toast/index.html +3 -0
  161. package/src/elements/feedback/toast/index.js +65 -0
  162. package/src/elements/feedback/toast/index.tags.json +1 -0
  163. package/src/elements/feedback/toast/style.css +36 -0
  164. package/src/elements/forms/checkbox/index.html +7 -0
  165. package/src/elements/forms/checkbox/index.js +104 -0
  166. package/src/elements/forms/checkbox/index.tags.json +1 -0
  167. package/src/elements/forms/checkbox/style.css +86 -0
  168. package/src/elements/forms/field/index.html +13 -0
  169. package/src/elements/forms/field/index.js +42 -0
  170. package/src/elements/forms/field/index.tags.json +1 -0
  171. package/src/elements/forms/field/style.css +42 -0
  172. package/src/elements/forms/form/index.html +3 -0
  173. package/src/elements/forms/form/index.js +122 -0
  174. package/src/elements/forms/form/index.tags.json +1 -0
  175. package/src/elements/forms/form/style.css +11 -0
  176. package/src/elements/forms/input/index.html +4 -0
  177. package/src/elements/forms/input/index.js +103 -0
  178. package/src/elements/forms/input/index.tags.json +1 -0
  179. package/src/elements/forms/input/style.css +39 -0
  180. package/src/elements/forms/radio/index.html +4 -0
  181. package/src/elements/forms/radio/index.js +109 -0
  182. package/src/elements/forms/radio/index.tags.json +1 -0
  183. package/src/elements/forms/radio/style.css +65 -0
  184. package/src/elements/forms/select/index.html +9 -0
  185. package/src/elements/forms/select/index.js +114 -0
  186. package/src/elements/forms/select/index.tags.json +1 -0
  187. package/src/elements/forms/select/style.css +95 -0
  188. package/src/elements/forms/textarea/index.html +4 -0
  189. package/src/elements/forms/textarea/index.js +115 -0
  190. package/src/elements/forms/textarea/index.tags.json +1 -0
  191. package/src/elements/forms/textarea/style.css +46 -0
  192. package/src/elements/forms/toggle/index.html +4 -0
  193. package/src/elements/forms/toggle/index.js +89 -0
  194. package/src/elements/forms/toggle/index.tags.json +1 -0
  195. package/src/elements/forms/toggle/style.css +63 -0
  196. package/src/elements/forms/upload/index.html +13 -0
  197. package/src/elements/forms/upload/index.js +120 -0
  198. package/src/elements/forms/upload/index.tags.json +1 -0
  199. package/src/elements/forms/upload/style.css +61 -0
  200. package/src/elements/index.js +71 -0
  201. package/src/elements/layout/app/index.html +7 -0
  202. package/src/elements/layout/app/index.js +16 -0
  203. package/src/elements/layout/app/index.tags.json +1 -0
  204. package/src/elements/layout/app/style.css +41 -0
  205. package/src/elements/layout/grid/index.html +3 -0
  206. package/src/elements/layout/grid/index.js +41 -0
  207. package/src/elements/layout/grid/index.tags.json +1 -0
  208. package/src/elements/layout/grid/style.css +12 -0
  209. package/src/elements/layout/header/index.html +8 -0
  210. package/src/elements/layout/header/index.js +16 -0
  211. package/src/elements/layout/header/index.tags.json +1 -0
  212. package/src/elements/layout/header/style.css +28 -0
  213. package/src/elements/layout/scroll/index.html +3 -0
  214. package/src/elements/layout/scroll/index.js +19 -0
  215. package/src/elements/layout/scroll/index.tags.json +1 -0
  216. package/src/elements/layout/scroll/style.css +24 -0
  217. package/src/elements/layout/sidebar/index.html +3 -0
  218. package/src/elements/layout/sidebar/index.js +24 -0
  219. package/src/elements/layout/sidebar/index.tags.json +1 -0
  220. package/src/elements/layout/sidebar/style.css +30 -0
  221. package/src/elements/layout/split/index.html +3 -0
  222. package/src/elements/layout/split/index.js +18 -0
  223. package/src/elements/layout/split/index.tags.json +1 -0
  224. package/src/elements/layout/split/style.css +28 -0
  225. package/src/elements/layout/stack/index.html +3 -0
  226. package/src/elements/layout/stack/index.js +31 -0
  227. package/src/elements/layout/stack/index.tags.json +1 -0
  228. package/src/elements/layout/stack/style.css +15 -0
  229. package/src/elements/layout/surface/index.html +3 -0
  230. package/src/elements/layout/surface/index.js +19 -0
  231. package/src/elements/layout/surface/index.tags.json +1 -0
  232. package/src/elements/layout/surface/style.css +29 -0
  233. package/src/elements/navigation/breadcrumb/index.html +5 -0
  234. package/src/elements/navigation/breadcrumb/index.js +16 -0
  235. package/src/elements/navigation/breadcrumb/index.tags.json +1 -0
  236. package/src/elements/navigation/breadcrumb/style.css +36 -0
  237. package/src/elements/navigation/nav/index.html +3 -0
  238. package/src/elements/navigation/nav/index.js +24 -0
  239. package/src/elements/navigation/nav/index.tags.json +1 -0
  240. package/src/elements/navigation/nav/style.css +38 -0
  241. package/src/elements/navigation/pagination/index.html +3 -0
  242. package/src/elements/navigation/pagination/index.js +94 -0
  243. package/src/elements/navigation/pagination/index.tags.json +1 -0
  244. package/src/elements/navigation/pagination/style.css +39 -0
  245. package/src/elements/navigation/steps/index.html +6 -0
  246. package/src/elements/navigation/steps/index.js +64 -0
  247. package/src/elements/navigation/steps/index.tags.json +1 -0
  248. package/src/elements/navigation/steps/style.css +78 -0
  249. package/src/elements/navigation/tabs/index.html +6 -0
  250. package/src/elements/navigation/tabs/index.js +132 -0
  251. package/src/elements/navigation/tabs/index.tags.json +1 -0
  252. package/src/elements/navigation/tabs/style.css +52 -0
  253. package/src/elements/overlay/dialog/index.html +5 -0
  254. package/src/elements/overlay/dialog/index.js +57 -0
  255. package/src/elements/overlay/dialog/index.tags.json +1 -0
  256. package/src/elements/overlay/dialog/style.css +31 -0
  257. package/src/elements/overlay/drawer/index.html +3 -0
  258. package/src/elements/overlay/drawer/index.js +56 -0
  259. package/src/elements/overlay/drawer/index.tags.json +1 -0
  260. package/src/elements/overlay/drawer/style.css +48 -0
  261. package/src/elements/overlay/menu/index.html +3 -0
  262. package/src/elements/overlay/menu/index.js +107 -0
  263. package/src/elements/overlay/menu/index.tags.json +1 -0
  264. package/src/elements/overlay/menu/style.css +43 -0
  265. package/src/elements/overlay/popover/index.html +3 -0
  266. package/src/elements/overlay/popover/index.js +44 -0
  267. package/src/elements/overlay/popover/index.tags.json +1 -0
  268. package/src/elements/overlay/popover/style.css +21 -0
  269. package/src/elements/overlay/sheet/index.html +8 -0
  270. package/src/elements/overlay/sheet/index.js +105 -0
  271. package/src/elements/overlay/sheet/index.tags.json +1 -0
  272. package/src/elements/overlay/sheet/style.css +64 -0
  273. package/src/elements/overlay/tooltip/index.html +6 -0
  274. package/src/elements/overlay/tooltip/index.js +16 -0
  275. package/src/elements/overlay/tooltip/index.tags.json +1 -0
  276. package/src/elements/overlay/tooltip/style.css +41 -0
  277. package/src/elements/primitives/avatar/index.html +2 -0
  278. package/src/elements/primitives/avatar/index.js +79 -0
  279. package/src/elements/primitives/avatar/index.tags.json +1 -0
  280. package/src/elements/primitives/avatar/style.css +36 -0
  281. package/src/elements/primitives/badge/index.html +3 -0
  282. package/src/elements/primitives/badge/index.js +20 -0
  283. package/src/elements/primitives/badge/index.tags.json +1 -0
  284. package/src/elements/primitives/badge/style.css +67 -0
  285. package/src/elements/primitives/button/index.html +3 -0
  286. package/src/elements/primitives/button/index.js +61 -0
  287. package/src/elements/primitives/button/index.tags.json +1 -0
  288. package/src/elements/primitives/button/style.css +66 -0
  289. package/src/elements/primitives/divider/index.html +1 -0
  290. package/src/elements/primitives/divider/index.js +43 -0
  291. package/src/elements/primitives/divider/index.tags.json +1 -0
  292. package/src/elements/primitives/divider/style.css +39 -0
  293. package/src/elements/primitives/icon/index.html +3 -0
  294. package/src/elements/primitives/icon/index.js +66 -0
  295. package/src/elements/primitives/icon/index.tags.json +1 -0
  296. package/src/elements/primitives/icon/style.css +20 -0
  297. package/src/elements/primitives/link/index.html +3 -0
  298. package/src/elements/primitives/link/index.js +129 -0
  299. package/src/elements/primitives/link/index.tags.json +1 -0
  300. package/src/elements/primitives/link/style.css +40 -0
  301. package/src/elements/primitives/spinner/index.html +1 -0
  302. package/src/elements/primitives/spinner/index.js +62 -0
  303. package/src/elements/primitives/spinner/index.tags.json +1 -0
  304. package/src/elements/primitives/spinner/style.css +20 -0
  305. package/src/elements/primitives/text/index.html +1 -0
  306. package/src/elements/primitives/text/index.js +79 -0
  307. package/src/elements/primitives/text/index.tags.json +1 -0
  308. package/src/elements/primitives/text/style.css +25 -0
  309. package/src/index.js +23 -0
  310. package/src/styles/base.css +66 -0
  311. package/src/styles/index.css +10 -0
  312. package/src/styles/layers.css +9 -0
  313. package/src/styles/reset.css +66 -0
  314. package/src/sw/activate.js +51 -0
  315. package/src/sw/expire.js +47 -0
  316. package/src/sw/index.js +28 -0
  317. package/src/sw/install.js +35 -0
  318. package/src/sw/push.js +58 -0
  319. package/src/sw/queue.js +60 -0
  320. package/src/sw/routes.js +71 -0
  321. package/src/sw/strategies.js +247 -0
  322. package/src/sw/sync.js +80 -0
  323. package/src/tokens/index.css +26 -0
  324. package/src/tokens/primitives/colors.css +54 -0
  325. package/src/tokens/primitives/motion.css +34 -0
  326. package/src/tokens/primitives/radius.css +16 -0
  327. package/src/tokens/primitives/shadow.css +34 -0
  328. package/src/tokens/primitives/spacing.css +27 -0
  329. package/src/tokens/primitives/typography.css +46 -0
  330. package/src/tokens/primitives/zindex.css +18 -0
  331. package/src/tokens/registered/colors.css +133 -0
  332. package/src/tokens/registered/dimensions.css +31 -0
  333. package/src/tokens/semantic/components.css +125 -0
  334. package/src/tokens/semantic/contrast.css +33 -0
  335. package/src/tokens/semantic/dark.css +61 -0
  336. package/src/tokens/semantic/light.css +64 -0
  337. package/types/core/animations/index.d.ts +52 -0
  338. package/types/core/api/index.d.ts +68 -0
  339. package/types/core/events/index.d.ts +50 -0
  340. package/types/core/offline/index.d.ts +68 -0
  341. package/types/core/platform/index.d.ts +60 -0
  342. package/types/core/router/index.d.ts +203 -0
  343. package/types/core/security/index.d.ts +33 -0
  344. package/types/core/state/index.d.ts +68 -0
  345. package/types/core/storage/index.d.ts +40 -0
  346. package/types/core/ui/index.d.ts +446 -0
  347. package/types/core/workers/index.d.ts +221 -0
  348. package/types/elements/index.d.ts +150 -0
  349. package/types/index.d.ts +18 -0
@@ -0,0 +1,446 @@
1
+ /**
2
+ * types/core/ui/index.d.ts
3
+ *
4
+ * Strict TypeScript declarations for the Native UI runtime.
5
+ */
6
+
7
+ export type TaskPriority = 'user-blocking' | 'user-visible' | 'background';
8
+
9
+ export type MaybePromise<T> = T | Promise<T>;
10
+
11
+ export type Disposer = () => void;
12
+
13
+ export type RefsMap = Record<string, Element>;
14
+
15
+ export type ElementRefs<T> = {
16
+ [K in keyof T]: Element;
17
+ };
18
+
19
+ export type PropConstructor =
20
+ | BooleanConstructor
21
+ | NumberConstructor
22
+ | StringConstructor;
23
+
24
+ export type PropValueFromConstructor<T> =
25
+ T extends BooleanConstructor ? boolean :
26
+ T extends NumberConstructor ? number :
27
+ T extends StringConstructor ? string :
28
+ never;
29
+
30
+ export interface PropConfig<T extends PropConstructor = PropConstructor> {
31
+ type: T;
32
+ default?: PropValueFromConstructor<T>;
33
+ state?: boolean;
34
+ reflect?: boolean;
35
+ }
36
+
37
+ export type AnyPropConfig =
38
+ | PropConfig<BooleanConstructor>
39
+ | PropConfig<NumberConstructor>
40
+ | PropConfig<StringConstructor>;
41
+
42
+ export type PropsDefinition = Record<string, AnyPropConfig>;
43
+
44
+ export type InferProps<Props extends PropsDefinition> = {
45
+ [K in keyof Props]: PropValueFromConstructor<Props[K]['type']>;
46
+ };
47
+
48
+ export type ComponentHost<
49
+ Props extends PropsDefinition = {},
50
+ Methods extends Record<string, (...args: any[]) => any> = {}
51
+ > = HTMLElement & InferProps<Props> & Methods;
52
+
53
+ export type InternalsFor<Form extends boolean> =
54
+ Form extends true ? ElementInternals : ElementInternals | undefined;
55
+
56
+ export interface TagsApi {
57
+ one<E extends Element = Element>(selector: string): E | null;
58
+ all<E extends Element = Element>(selector: string): E[];
59
+ each<E extends Element = Element>(
60
+ selector: string,
61
+ fn: (element: E, index: number) => void
62
+ ): void;
63
+ has(selector: string): boolean;
64
+ clear(): void;
65
+ }
66
+
67
+ export interface DelegatedEventOptions extends AddEventListenerOptions {
68
+ signal?: AbortSignal;
69
+ once?: boolean;
70
+ }
71
+
72
+ export type DelegatedEventHandler<
73
+ EventType extends Event = Event,
74
+ Target extends Element = Element
75
+ > = (event: EventType, target: Target) => void;
76
+
77
+ export interface DelegatedEventBinder<EventType extends Event = Event> {
78
+ <Target extends Element = Element>(
79
+ selector: string,
80
+ handler: DelegatedEventHandler<EventType, Target>,
81
+ options?: AbortSignal | DelegatedEventOptions
82
+ ): Disposer;
83
+
84
+ once<Target extends Element = Element>(
85
+ selector: string,
86
+ handler: DelegatedEventHandler<EventType, Target>,
87
+ options?: AbortSignal | Omit<DelegatedEventOptions, 'once'>
88
+ ): Disposer;
89
+ }
90
+
91
+ export type EventDelegator = {
92
+ [K in keyof GlobalEventHandlersEventMap]: DelegatedEventBinder<GlobalEventHandlersEventMap[K]>;
93
+ } & {
94
+ [customEvent: string]: DelegatedEventBinder<Event>;
95
+ };
96
+
97
+ export interface WatchOptions {
98
+ signal?: AbortSignal;
99
+ once?: boolean;
100
+ }
101
+
102
+ export type WatchTarget<T extends Element = Element> = string | T;
103
+
104
+ export type AttrWatchHandler<T extends Element = Element> = (
105
+ attrName: string,
106
+ newValue: string | null,
107
+ oldValue: string | null,
108
+ element: T
109
+ ) => void;
110
+
111
+ export type KidsWatchHandler<T extends Element = Element> = (
112
+ change: {
113
+ added: Node[];
114
+ removed: Node[];
115
+ },
116
+ element: T
117
+ ) => void;
118
+
119
+ export type TextWatchHandler<T extends Element = Element> = (
120
+ newText: string,
121
+ oldText: string | null,
122
+ element: T | null
123
+ ) => void;
124
+
125
+ export type TreeWatchHandler<T extends Element = Element> = (
126
+ records: MutationRecord[],
127
+ element: T | null
128
+ ) => void;
129
+
130
+ export interface WatchApi {
131
+ attr: {
132
+ <T extends Element = Element>(
133
+ target: WatchTarget<T>,
134
+ attr: string | readonly string[] | '*',
135
+ handler: AttrWatchHandler<T>,
136
+ options?: AbortSignal | WatchOptions
137
+ ): Disposer;
138
+
139
+ once<T extends Element = Element>(
140
+ target: WatchTarget<T>,
141
+ attr: string | readonly string[] | '*',
142
+ handler: AttrWatchHandler<T>,
143
+ options?: AbortSignal | Omit<WatchOptions, 'once'>
144
+ ): Disposer;
145
+ };
146
+
147
+ kids: {
148
+ <T extends Element = Element>(
149
+ target: WatchTarget<T>,
150
+ handler: KidsWatchHandler<T>,
151
+ options?: AbortSignal | WatchOptions
152
+ ): Disposer;
153
+
154
+ <T extends Element = Element>(
155
+ target: WatchTarget<T>,
156
+ config: { deep?: boolean },
157
+ handler: KidsWatchHandler<T>,
158
+ options?: AbortSignal | WatchOptions
159
+ ): Disposer;
160
+
161
+ once<T extends Element = Element>(
162
+ target: WatchTarget<T>,
163
+ handler: KidsWatchHandler<T>,
164
+ options?: AbortSignal | Omit<WatchOptions, 'once'>
165
+ ): Disposer;
166
+
167
+ once<T extends Element = Element>(
168
+ target: WatchTarget<T>,
169
+ config: { deep?: boolean },
170
+ handler: KidsWatchHandler<T>,
171
+ options?: AbortSignal | Omit<WatchOptions, 'once'>
172
+ ): Disposer;
173
+ };
174
+
175
+ text: {
176
+ <T extends Element = Element>(
177
+ target: WatchTarget<T>,
178
+ handler: TextWatchHandler<T>,
179
+ options?: AbortSignal | WatchOptions
180
+ ): Disposer;
181
+
182
+ once<T extends Element = Element>(
183
+ target: WatchTarget<T>,
184
+ handler: TextWatchHandler<T>,
185
+ options?: AbortSignal | Omit<WatchOptions, 'once'>
186
+ ): Disposer;
187
+ };
188
+
189
+ tree: {
190
+ <T extends Element = Element>(
191
+ target: WatchTarget<T>,
192
+ handler: TreeWatchHandler<T>,
193
+ options?: AbortSignal | WatchOptions
194
+ ): Disposer;
195
+
196
+ once<T extends Element = Element>(
197
+ target: WatchTarget<T>,
198
+ handler: TreeWatchHandler<T>,
199
+ options?: AbortSignal | Omit<WatchOptions, 'once'>
200
+ ): Disposer;
201
+ };
202
+ }
203
+
204
+ export interface BaseLifecycleContext<
205
+ Props extends PropsDefinition = {},
206
+ Refs extends ElementRefs<Refs> = RefsMap,
207
+ Form extends boolean = false,
208
+ Methods extends Record<string, (...args: any[]) => any> = {}
209
+ > {
210
+ el: ComponentHost<Props, Methods>;
211
+ ctrl: AbortController;
212
+ tags: TagsApi;
213
+ on: EventDelegator;
214
+ refs: Readonly<Refs>;
215
+ watch: WatchApi;
216
+ internals: InternalsFor<Form>;
217
+ }
218
+
219
+ export type MountContext<
220
+ Props extends PropsDefinition = {},
221
+ Refs extends ElementRefs<Refs> = RefsMap,
222
+ Form extends boolean = false,
223
+ Methods extends Record<string, (...args: any[]) => any> = {}
224
+ > = BaseLifecycleContext<Props, Refs, Form, Methods>;
225
+
226
+ export type UpdateContext<
227
+ Props extends PropsDefinition = {},
228
+ Refs extends ElementRefs<Refs> = RefsMap,
229
+ Form extends boolean = false,
230
+ Methods extends Record<string, (...args: any[]) => any> = {}
231
+ > = keyof Props extends never
232
+ ? never
233
+ : {
234
+ [K in keyof Props & string]:
235
+ BaseLifecycleContext<Props, Refs, Form, Methods> & {
236
+ name: K;
237
+ val: PropValueFromConstructor<Props[K]['type']>;
238
+ prev: PropValueFromConstructor<Props[K]['type']>;
239
+ old: PropValueFromConstructor<Props[K]['type']>;
240
+ }
241
+ }[keyof Props & string];
242
+
243
+ export type UnmountContext<
244
+ Props extends PropsDefinition = {},
245
+ Refs extends ElementRefs<Refs> = RefsMap,
246
+ Form extends boolean = false,
247
+ Methods extends Record<string, (...args: any[]) => any> = {}
248
+ > = Pick<
249
+ BaseLifecycleContext<Props, Refs, Form, Methods>,
250
+ 'el' | 'tags' | 'refs' | 'watch' | 'internals'
251
+ >;
252
+
253
+ export interface ElementSpec<
254
+ Props extends PropsDefinition = {},
255
+ Refs extends ElementRefs<Refs> = RefsMap,
256
+ Form extends boolean = false,
257
+ Methods extends Record<string, (...args: any[]) => any> = {}
258
+ > {
259
+ template?: string;
260
+ style?: string;
261
+ mode?: ShadowRootMode;
262
+ props?: Props;
263
+ form?: Form;
264
+ url?: string;
265
+ container?: string;
266
+ query?: readonly string[] | string[];
267
+ meta?: Record<string, unknown>;
268
+
269
+ mount?: (
270
+ context: MountContext<Props, Refs, Form, Methods>
271
+ ) => MaybePromise<void>;
272
+
273
+ update?: (
274
+ context: UpdateContext<Props, Refs, Form, Methods>
275
+ ) => MaybePromise<void>;
276
+
277
+ unmount?: (
278
+ context: UnmountContext<Props, Refs, Form, Methods>
279
+ ) => void;
280
+
281
+ associated?: (
282
+ this: ComponentHost<Props, Methods>,
283
+ form: HTMLFormElement | null
284
+ ) => void;
285
+
286
+ disabled?: (
287
+ this: ComponentHost<Props, Methods>,
288
+ value: boolean
289
+ ) => void;
290
+
291
+ reset?: (
292
+ this: ComponentHost<Props, Methods>
293
+ ) => void;
294
+
295
+ restore?: (
296
+ this: ComponentHost<Props, Methods>,
297
+ state: unknown,
298
+ mode: string
299
+ ) => void;
300
+
301
+ methods?: Methods;
302
+ }
303
+
304
+ export interface SwapViewOptions {
305
+ direction?: 'push' | 'pop' | 'replace' | string;
306
+ params?: Record<string, string>;
307
+ }
308
+
309
+ export type ContainerHost<Props extends PropsDefinition = {}> =
310
+ ComponentHost<Props> & {
311
+ swapView(newElement: Element, options?: SwapViewOptions): Promise<void>;
312
+ };
313
+
314
+ export type ContainerMountContext<
315
+ Props extends PropsDefinition = {},
316
+ Refs extends ElementRefs<Refs> = RefsMap
317
+ > = Omit<MountContext<Props, Refs, false>, 'el'> & {
318
+ el: ContainerHost<Props>;
319
+ };
320
+
321
+ export interface ContainerSpec<
322
+ Props extends PropsDefinition = {},
323
+ Refs extends ElementRefs<Refs> = RefsMap
324
+ > extends Omit<
325
+ ElementSpec<Props, Refs, false>,
326
+ 'mount' | 'update' | 'unmount' | 'form'
327
+ > {
328
+ mount?: (
329
+ context: ContainerMountContext<Props, Refs>
330
+ ) => MaybePromise<void>;
331
+
332
+ update?: (
333
+ context: UpdateContext<Props, Refs, false>
334
+ ) => MaybePromise<void>;
335
+
336
+ unmount?: (
337
+ context: UnmountContext<Props, Refs, false>
338
+ ) => void;
339
+ }
340
+
341
+ export interface ObserveApi {
342
+ resize(
343
+ el: Element,
344
+ fn: (entries: ResizeObserverEntry[]) => void,
345
+ signal?: AbortSignal
346
+ ): Disposer;
347
+
348
+ intersection(
349
+ el: Element,
350
+ fn: (entries: IntersectionObserverEntry[]) => void,
351
+ signal?: AbortSignal,
352
+ options?: IntersectionObserverInit
353
+ ): Disposer;
354
+
355
+ mutation(
356
+ el: Node,
357
+ fn: (mutations: MutationRecord[]) => void,
358
+ signal?: AbortSignal,
359
+ options?: MutationObserverInit
360
+ ): Disposer;
361
+
362
+ performance(
363
+ types: string[],
364
+ fn: (list: PerformanceObserverEntryList) => void,
365
+ signal?: AbortSignal,
366
+ options?: PerformanceObserverInit
367
+ ): Disposer;
368
+ }
369
+
370
+ export interface ViewTransitionLike<T = unknown> {
371
+ finished: Promise<T>;
372
+ updateCallbackDone: Promise<T>;
373
+ ready: Promise<unknown>;
374
+ skipTransition(): void;
375
+ }
376
+
377
+ export class BaseElement extends HTMLElement {
378
+ ctrl: AbortController | null;
379
+
380
+ constructor();
381
+ connectedCallback(): void;
382
+ disconnectedCallback(): void;
383
+ mount(): void;
384
+ unmount(): void;
385
+ }
386
+
387
+ export function define<TagName extends string>(
388
+ tagName: TagName,
389
+ elementClass: CustomElementConstructor
390
+ ): void;
391
+
392
+ export function element<
393
+ TagName extends string,
394
+ Props extends PropsDefinition = {},
395
+ Refs extends ElementRefs<Refs> = RefsMap,
396
+ Form extends boolean = false,
397
+ Methods extends Record<string, (...args: any[]) => any> = {}
398
+ >(
399
+ tagName: TagName,
400
+ spec: ElementSpec<Props, Refs, Form, Methods>,
401
+ base?: string | URL
402
+ ): void;
403
+
404
+ export function container<
405
+ TagName extends string,
406
+ Props extends PropsDefinition = {},
407
+ Refs extends ElementRefs<Refs> = RefsMap
408
+ >(
409
+ tagName: TagName,
410
+ spec: ContainerSpec<Props, Refs>,
411
+ base?: string | URL
412
+ ): void;
413
+
414
+ export function schedule<T>(
415
+ fn: () => T | Promise<T>,
416
+ priority?: TaskPriority
417
+ ): Promise<T>;
418
+
419
+ export function scheduleFrame<T>(fn: () => T): Promise<T>;
420
+
421
+ export function yieldTask(): Promise<void>;
422
+
423
+ export function transition<T>(
424
+ fn: () => T
425
+ ): Promise<ViewTransitionLike<T>>;
426
+
427
+ export function template(
428
+ strings: TemplateStringsArray,
429
+ ...values: unknown[]
430
+ ): DocumentFragment;
431
+
432
+ export const observe: ObserveApi;
433
+
434
+ export interface UiApi {
435
+ define: typeof define;
436
+ element: typeof element;
437
+ container: typeof container;
438
+ schedule: typeof schedule;
439
+ scheduleFrame: typeof scheduleFrame;
440
+ yield: typeof yieldTask;
441
+ transition: typeof transition;
442
+ template: typeof template;
443
+ observe: ObserveApi;
444
+ }
445
+
446
+ export const ui: UiApi;
@@ -0,0 +1,221 @@
1
+ /**
2
+ * types/core/workers/index.d.ts
3
+ *
4
+ * TypeScript declarations for the multi-threaded concurrency layer.
5
+ * Source: plan.md Phase 1 — Contract
6
+ */
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Message contract
10
+ // ---------------------------------------------------------------------------
11
+
12
+ /** Shape of a message sent to a worker. */
13
+ export interface WorkerRequest {
14
+ task: string;
15
+ payload?: any;
16
+ meta?: any;
17
+ }
18
+
19
+ /** Shape of a message received from a worker. */
20
+ export interface WorkerResponse {
21
+ ok: boolean;
22
+ value?: any;
23
+ error?: string;
24
+ }
25
+
26
+ // ---------------------------------------------------------------------------
27
+ // Shared task options
28
+ // ---------------------------------------------------------------------------
29
+
30
+ export interface TaskOptions {
31
+ /** Data to clone-transfer to the worker. Must be structured-clone safe. */
32
+ payload?: any;
33
+ /** Scheduling priority. Default: 'user-visible'. */
34
+ priority?: 'user-blocking' | 'user-visible' | 'background';
35
+ /** Transferables handed off to the worker (sender loses access). */
36
+ transferables?: Transferable[];
37
+ /** Signal to cancel the in-flight or queued task. */
38
+ signal?: AbortSignal;
39
+ /** Milliseconds before the task is automatically aborted. */
40
+ timeout?: number;
41
+ /** Arbitrary metadata forwarded to the worker. */
42
+ meta?: any;
43
+ /** Pool size hint (used only when the pool is first created). */
44
+ size?: number;
45
+ /** Maximum pool size cap. */
46
+ max?: number;
47
+ }
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Dedicated worker
51
+ // ---------------------------------------------------------------------------
52
+
53
+ export interface RunOptions {
54
+ payload?: any;
55
+ transferables?: Transferable[];
56
+ signal?: AbortSignal;
57
+ timeout?: number;
58
+ meta?: any;
59
+ }
60
+
61
+ export declare class Dedicated {
62
+ constructor(script: string);
63
+ readonly closed: boolean;
64
+ run(task: string, options?: RunOptions): Promise<any>;
65
+ terminate(): void;
66
+ }
67
+
68
+ /** @deprecated Use Dedicated */
69
+ export declare class DedicatedWorker extends Dedicated {}
70
+
71
+ // ---------------------------------------------------------------------------
72
+ // Worker pool
73
+ // ---------------------------------------------------------------------------
74
+
75
+ export interface PoolOptions {
76
+ size?: number;
77
+ max?: number;
78
+ idle?: number;
79
+ }
80
+
81
+ export interface PoolTaskOptions extends RunOptions {
82
+ priority?: 'user-blocking' | 'user-visible' | 'background';
83
+ idempotent?: boolean;
84
+ }
85
+
86
+ export declare class Pool {
87
+ constructor(script: string, opts?: PoolOptions);
88
+ readonly size: number;
89
+ readonly pending: number;
90
+ run(task: string, options?: PoolTaskOptions): Promise<any>;
91
+ terminate(): void;
92
+ }
93
+
94
+ /** @deprecated Use Pool */
95
+ export declare class WorkerPool extends Pool {}
96
+
97
+ // ---------------------------------------------------------------------------
98
+ // Shared worker
99
+ // ---------------------------------------------------------------------------
100
+
101
+ export declare class Shared {
102
+ constructor(script: string, name?: string);
103
+ readonly connected: boolean;
104
+ readonly closed: boolean;
105
+ connect(): void;
106
+ send(message: any, transferables?: Transferable[]): void;
107
+ subscribe(fn: (msg: any) => void, signal?: AbortSignal): () => void;
108
+ close(): void;
109
+ /** @deprecated Use send() */
110
+ postMessage(msg: any, transfer?: Transferable[]): void;
111
+ /** @deprecated Use subscribe() */
112
+ onMessage(fn: (msg: any) => void, signal?: AbortSignal): () => void;
113
+ }
114
+
115
+ /** @deprecated Use Shared */
116
+ export declare class SharedConnection extends Shared {}
117
+
118
+ // ---------------------------------------------------------------------------
119
+ // Locks
120
+ // ---------------------------------------------------------------------------
121
+
122
+ export interface LockOptions {
123
+ signal?: AbortSignal;
124
+ mode?: 'exclusive' | 'shared';
125
+ timeout?: number;
126
+ ifAvailable?: boolean;
127
+ steal?: boolean;
128
+ }
129
+
130
+ export declare function lock(
131
+ name: string,
132
+ fn: () => any | Promise<any>,
133
+ options?: LockOptions
134
+ ): Promise<any>;
135
+
136
+ // ---------------------------------------------------------------------------
137
+ // Broadcast
138
+ // ---------------------------------------------------------------------------
139
+
140
+ export interface BroadcastManager {
141
+ broadcast(name: string, payload: any): void;
142
+ subscribe(name: string, fn: (msg: any) => void, signal?: AbortSignal): () => void;
143
+ close(name: string): void;
144
+ clear(): void;
145
+ }
146
+
147
+ export declare const broadcast: BroadcastManager;
148
+
149
+ // ---------------------------------------------------------------------------
150
+ // Offscreen canvas
151
+ // ---------------------------------------------------------------------------
152
+
153
+ export interface OffscreenOptions {
154
+ onError?: (err: Error) => void;
155
+ onResize?: (dims: { width: number; height: number; dpr: number }) => void;
156
+ }
157
+
158
+ export interface ResizeOptions {
159
+ width?: number;
160
+ height?: number;
161
+ dpr?: number;
162
+ }
163
+
164
+ export declare class Offscreen {
165
+ constructor(canvas: HTMLCanvasElement, script: string, opts?: OffscreenOptions);
166
+ readonly ready: boolean;
167
+ readonly closed: boolean;
168
+ open(): Promise<this>;
169
+ send(payload: any, transferables?: Transferable[]): void;
170
+ resize(opts?: ResizeOptions): void;
171
+ close(): void;
172
+ /** @deprecated Use close() */
173
+ terminate(): void;
174
+ }
175
+
176
+ /** @deprecated Use Offscreen */
177
+ export declare class OffscreenHandle extends Offscreen {}
178
+
179
+ export declare function offscreen(
180
+ canvas: HTMLCanvasElement,
181
+ script: string,
182
+ opts?: OffscreenOptions
183
+ ): Promise<Offscreen>;
184
+
185
+ // ---------------------------------------------------------------------------
186
+ // Feature detection
187
+ // ---------------------------------------------------------------------------
188
+
189
+ export declare const has: {
190
+ worker: boolean;
191
+ shared: boolean;
192
+ channel: boolean;
193
+ locks: boolean;
194
+ offscreen: boolean;
195
+ isolated: boolean;
196
+ };
197
+
198
+ // ---------------------------------------------------------------------------
199
+ // Facade
200
+ // ---------------------------------------------------------------------------
201
+
202
+ export declare const workers: {
203
+ /** Run a task in a lazily allocated pool. */
204
+ run(script: string, task: string, opts?: TaskOptions): Promise<any>;
205
+ /** Create a standalone dedicated worker (not pooled). */
206
+ dedicated(script: string): Dedicated;
207
+ /** Connect to a SharedWorker (or dedicated fallback). */
208
+ shared(script: string, name?: string): Shared;
209
+ /** Acquire a named lock and execute fn within it. */
210
+ lock: typeof lock;
211
+ /** Send a message to a named BroadcastChannel. */
212
+ broadcast(name: string, payload: any): void;
213
+ /** Subscribe to a named BroadcastChannel. Returns a dispose function. */
214
+ subscribe(name: string, fn: (msg: any) => void, signal?: AbortSignal): () => void;
215
+ /** Transfer a canvas to a worker. Returns a Promise<Offscreen>. */
216
+ offscreen(canvas: HTMLCanvasElement, script: string, opts?: OffscreenOptions): Promise<Offscreen>;
217
+ /** Terminate the pool for one script and remove it. */
218
+ close(script: string): void;
219
+ /** Terminate all pools and clear all broadcasts. */
220
+ clear(): void;
221
+ };