kiru 0.54.4 → 1.0.1

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 (335) hide show
  1. package/dist/{appContext.d.ts → appHandle.d.ts} +4 -4
  2. package/dist/appHandle.d.ts.map +1 -0
  3. package/dist/{appContext.js → appHandle.js} +12 -9
  4. package/dist/appHandle.js.map +1 -0
  5. package/dist/components/derive.d.ts +10 -8
  6. package/dist/components/derive.d.ts.map +1 -1
  7. package/dist/components/derive.js +50 -47
  8. package/dist/components/derive.js.map +1 -1
  9. package/dist/components/index.d.ts +0 -1
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/components/index.js +0 -1
  12. package/dist/components/index.js.map +1 -1
  13. package/dist/components/lazy.d.ts.map +1 -1
  14. package/dist/components/lazy.js +5 -4
  15. package/dist/components/lazy.js.map +1 -1
  16. package/dist/components/portal.d.ts.map +1 -1
  17. package/dist/components/portal.js +2 -3
  18. package/dist/components/portal.js.map +1 -1
  19. package/dist/components/transition.d.ts +3 -2
  20. package/dist/components/transition.d.ts.map +1 -1
  21. package/dist/components/transition.js +29 -26
  22. package/dist/components/transition.js.map +1 -1
  23. package/dist/constants.d.ts +1 -5
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js +1 -5
  26. package/dist/constants.js.map +1 -1
  27. package/dist/context.d.ts +1 -1
  28. package/dist/context.d.ts.map +1 -1
  29. package/dist/context.js +25 -19
  30. package/dist/context.js.map +1 -1
  31. package/dist/devtools.d.ts +7 -0
  32. package/dist/devtools.d.ts.map +1 -0
  33. package/dist/devtools.js +15 -0
  34. package/dist/devtools.js.map +1 -0
  35. package/dist/dom.d.ts.map +1 -1
  36. package/dist/dom.js +25 -58
  37. package/dist/dom.js.map +1 -1
  38. package/dist/globalContext.d.ts +15 -16
  39. package/dist/globalContext.d.ts.map +1 -1
  40. package/dist/globalContext.js +36 -46
  41. package/dist/globalContext.js.map +1 -1
  42. package/dist/globals.d.ts +1 -4
  43. package/dist/globals.d.ts.map +1 -1
  44. package/dist/globals.js +1 -4
  45. package/dist/globals.js.map +1 -1
  46. package/dist/headlessRender.d.ts +6 -0
  47. package/dist/headlessRender.d.ts.map +1 -0
  48. package/dist/{recursiveRender.js → headlessRender.js} +17 -16
  49. package/dist/headlessRender.js.map +1 -0
  50. package/dist/hmr.d.ts +5 -7
  51. package/dist/hmr.d.ts.map +1 -1
  52. package/dist/hmr.js +27 -32
  53. package/dist/hmr.js.map +1 -1
  54. package/dist/hooks/index.d.ts +3 -14
  55. package/dist/hooks/index.d.ts.map +1 -1
  56. package/dist/hooks/index.js +3 -14
  57. package/dist/hooks/index.js.map +1 -1
  58. package/dist/hooks/onBeforeMount.d.ts +9 -0
  59. package/dist/hooks/onBeforeMount.d.ts.map +1 -0
  60. package/dist/hooks/onBeforeMount.js +12 -0
  61. package/dist/hooks/onBeforeMount.js.map +1 -0
  62. package/dist/hooks/onCleanup.d.ts +8 -0
  63. package/dist/hooks/onCleanup.d.ts.map +1 -0
  64. package/dist/hooks/onCleanup.js +15 -0
  65. package/dist/hooks/onCleanup.js.map +1 -0
  66. package/dist/hooks/onMount.d.ts +9 -0
  67. package/dist/hooks/onMount.d.ts.map +1 -0
  68. package/dist/hooks/onMount.js +12 -0
  69. package/dist/hooks/onMount.js.map +1 -0
  70. package/dist/hooks/utils.d.ts +2 -62
  71. package/dist/hooks/utils.d.ts.map +1 -1
  72. package/dist/hooks/utils.js +22 -144
  73. package/dist/hooks/utils.js.map +1 -1
  74. package/dist/index.d.ts +8 -4
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +8 -6
  77. package/dist/index.js.map +1 -1
  78. package/dist/profiling.d.ts +15 -14
  79. package/dist/profiling.d.ts.map +1 -1
  80. package/dist/profiling.js +9 -4
  81. package/dist/profiling.js.map +1 -1
  82. package/dist/reconciler.d.ts.map +1 -1
  83. package/dist/reconciler.js +12 -25
  84. package/dist/reconciler.js.map +1 -1
  85. package/dist/ref.d.ts +4 -0
  86. package/dist/ref.d.ts.map +1 -0
  87. package/dist/ref.js +4 -0
  88. package/dist/ref.js.map +1 -0
  89. package/dist/renderToString.js +1 -1
  90. package/dist/renderToString.js.map +1 -1
  91. package/dist/router/context.d.ts.map +1 -1
  92. package/dist/router/context.js +1 -2
  93. package/dist/router/context.js.map +1 -1
  94. package/dist/router/fileRouter.d.ts +1 -1
  95. package/dist/router/fileRouter.d.ts.map +1 -1
  96. package/dist/router/fileRouter.js +17 -11
  97. package/dist/router/fileRouter.js.map +1 -1
  98. package/dist/router/fileRouterController.d.ts.map +1 -1
  99. package/dist/router/fileRouterController.js +68 -55
  100. package/dist/router/fileRouterController.js.map +1 -1
  101. package/dist/router/link.d.ts.map +1 -1
  102. package/dist/router/link.js +19 -23
  103. package/dist/router/link.js.map +1 -1
  104. package/dist/router/server/index.d.ts.map +1 -1
  105. package/dist/router/server/index.js +14 -11
  106. package/dist/router/server/index.js.map +1 -1
  107. package/dist/router/types.d.ts +11 -6
  108. package/dist/router/types.d.ts.map +1 -1
  109. package/dist/scheduler.d.ts +1 -0
  110. package/dist/scheduler.d.ts.map +1 -1
  111. package/dist/scheduler.js +65 -52
  112. package/dist/scheduler.js.map +1 -1
  113. package/dist/signals/base.d.ts +0 -1
  114. package/dist/signals/base.d.ts.map +1 -1
  115. package/dist/signals/base.js +13 -36
  116. package/dist/signals/base.js.map +1 -1
  117. package/dist/signals/computed.d.ts +0 -2
  118. package/dist/signals/computed.d.ts.map +1 -1
  119. package/dist/signals/computed.js +1 -40
  120. package/dist/signals/computed.js.map +1 -1
  121. package/dist/signals/effect.d.ts +15 -14
  122. package/dist/signals/effect.d.ts.map +1 -1
  123. package/dist/signals/effect.js +65 -37
  124. package/dist/signals/effect.js.map +1 -1
  125. package/dist/signals/globals.d.ts +0 -5
  126. package/dist/signals/globals.d.ts.map +1 -1
  127. package/dist/signals/globals.js +0 -6
  128. package/dist/signals/globals.js.map +1 -1
  129. package/dist/signals/index.d.ts +4 -4
  130. package/dist/signals/index.d.ts.map +1 -1
  131. package/dist/signals/index.js +4 -4
  132. package/dist/signals/index.js.map +1 -1
  133. package/dist/signals/{for.d.ts → jsx.d.ts} +8 -1
  134. package/dist/signals/jsx.d.ts.map +1 -0
  135. package/dist/signals/{for.js → jsx.js} +4 -1
  136. package/dist/signals/jsx.js.map +1 -0
  137. package/dist/signals/tracking.d.ts +23 -0
  138. package/dist/signals/tracking.d.ts.map +1 -0
  139. package/dist/signals/tracking.js +51 -0
  140. package/dist/signals/tracking.js.map +1 -0
  141. package/dist/signals/types.d.ts +1 -1
  142. package/dist/signals/types.d.ts.map +1 -1
  143. package/dist/signals/utils.d.ts +2 -1
  144. package/dist/signals/utils.d.ts.map +1 -1
  145. package/dist/signals/utils.js +9 -2
  146. package/dist/signals/utils.js.map +1 -1
  147. package/dist/ssr/client.d.ts +3 -3
  148. package/dist/ssr/client.d.ts.map +1 -1
  149. package/dist/ssr/client.js.map +1 -1
  150. package/dist/ssr/server.js +1 -1
  151. package/dist/ssr/server.js.map +1 -1
  152. package/dist/statefulPromise.d.ts +22 -0
  153. package/dist/statefulPromise.d.ts.map +1 -0
  154. package/dist/statefulPromise.js +94 -0
  155. package/dist/statefulPromise.js.map +1 -0
  156. package/dist/types.d.ts +35 -49
  157. package/dist/types.d.ts.map +1 -1
  158. package/dist/types.dom.d.ts +4 -7
  159. package/dist/types.dom.d.ts.map +1 -1
  160. package/dist/types.utils.d.ts +3 -4
  161. package/dist/types.utils.d.ts.map +1 -1
  162. package/dist/utils/vdom.d.ts +8 -6
  163. package/dist/utils/vdom.d.ts.map +1 -1
  164. package/dist/utils/vdom.js +32 -9
  165. package/dist/utils/vdom.js.map +1 -1
  166. package/dist/viewTransitions.d.ts +7 -0
  167. package/dist/viewTransitions.d.ts.map +1 -0
  168. package/dist/viewTransitions.js +71 -0
  169. package/dist/viewTransitions.js.map +1 -0
  170. package/package.json +1 -1
  171. package/src/{appContext.ts → appHandle.ts} +21 -16
  172. package/src/components/derive.ts +74 -69
  173. package/src/components/index.ts +0 -1
  174. package/src/components/lazy.ts +5 -4
  175. package/src/components/portal.ts +2 -3
  176. package/src/components/transition.ts +33 -35
  177. package/src/constants.ts +0 -8
  178. package/src/context.ts +30 -23
  179. package/src/devtools.ts +16 -0
  180. package/src/dom.ts +31 -65
  181. package/src/globalContext.ts +57 -74
  182. package/src/globals.ts +1 -5
  183. package/src/{recursiveRender.ts → headlessRender.ts} +18 -18
  184. package/src/hmr.ts +29 -38
  185. package/src/hooks/index.ts +3 -14
  186. package/src/hooks/onBeforeMount.ts +12 -0
  187. package/src/hooks/onCleanup.ts +15 -0
  188. package/src/hooks/onMount.ts +12 -0
  189. package/src/hooks/utils.ts +28 -238
  190. package/src/index.ts +14 -6
  191. package/src/profiling.ts +22 -20
  192. package/src/reconciler.ts +18 -30
  193. package/src/ref.ts +6 -0
  194. package/src/renderToString.ts +1 -1
  195. package/src/router/context.ts +1 -2
  196. package/src/router/fileRouter.ts +23 -13
  197. package/src/router/fileRouterController.ts +72 -64
  198. package/src/router/link.ts +11 -25
  199. package/src/router/server/index.ts +24 -13
  200. package/src/router/types.ts +15 -8
  201. package/src/scheduler.ts +74 -71
  202. package/src/signals/base.ts +12 -41
  203. package/src/signals/computed.ts +1 -62
  204. package/src/signals/effect.ts +95 -48
  205. package/src/signals/globals.ts +0 -7
  206. package/src/signals/index.ts +4 -4
  207. package/src/signals/{for.ts → jsx.ts} +10 -0
  208. package/src/signals/tracking.ts +69 -0
  209. package/src/signals/types.ts +1 -1
  210. package/src/signals/utils.ts +9 -1
  211. package/src/ssr/client.ts +4 -4
  212. package/src/ssr/server.ts +2 -2
  213. package/src/statefulPromise.ts +136 -0
  214. package/src/types.dom.ts +4 -8
  215. package/src/types.ts +44 -59
  216. package/src/types.utils.ts +3 -4
  217. package/src/utils/vdom.ts +44 -15
  218. package/src/viewTransitions.ts +88 -0
  219. package/dist/appContext.d.ts.map +0 -1
  220. package/dist/appContext.js.map +0 -1
  221. package/dist/components/memo.d.ts +0 -10
  222. package/dist/components/memo.d.ts.map +0 -1
  223. package/dist/components/memo.js +0 -23
  224. package/dist/components/memo.js.map +0 -1
  225. package/dist/form/index.d.ts +0 -4
  226. package/dist/form/index.d.ts.map +0 -1
  227. package/dist/form/index.js +0 -518
  228. package/dist/form/index.js.map +0 -1
  229. package/dist/form/types.d.ts +0 -122
  230. package/dist/form/types.d.ts.map +0 -1
  231. package/dist/form/types.js +0 -2
  232. package/dist/form/types.js.map +0 -1
  233. package/dist/form/utils.d.ts +0 -3
  234. package/dist/form/utils.d.ts.map +0 -1
  235. package/dist/form/utils.js +0 -16
  236. package/dist/form/utils.js.map +0 -1
  237. package/dist/hooks/useAsync.d.ts +0 -18
  238. package/dist/hooks/useAsync.d.ts.map +0 -1
  239. package/dist/hooks/useAsync.js +0 -96
  240. package/dist/hooks/useAsync.js.map +0 -1
  241. package/dist/hooks/useCallback.d.ts +0 -7
  242. package/dist/hooks/useCallback.d.ts.map +0 -1
  243. package/dist/hooks/useCallback.js +0 -30
  244. package/dist/hooks/useCallback.js.map +0 -1
  245. package/dist/hooks/useContext.d.ts +0 -7
  246. package/dist/hooks/useContext.d.ts.map +0 -1
  247. package/dist/hooks/useContext.js +0 -59
  248. package/dist/hooks/useContext.js.map +0 -1
  249. package/dist/hooks/useEffect.d.ts +0 -8
  250. package/dist/hooks/useEffect.d.ts.map +0 -1
  251. package/dist/hooks/useEffect.js +0 -34
  252. package/dist/hooks/useEffect.js.map +0 -1
  253. package/dist/hooks/useEffectEvent.d.ts +0 -8
  254. package/dist/hooks/useEffectEvent.d.ts.map +0 -1
  255. package/dist/hooks/useEffectEvent.js +0 -23
  256. package/dist/hooks/useEffectEvent.js.map +0 -1
  257. package/dist/hooks/useId.d.ts +0 -8
  258. package/dist/hooks/useId.d.ts.map +0 -1
  259. package/dist/hooks/useId.js +0 -35
  260. package/dist/hooks/useId.js.map +0 -1
  261. package/dist/hooks/useLayoutEffect.d.ts +0 -8
  262. package/dist/hooks/useLayoutEffect.d.ts.map +0 -1
  263. package/dist/hooks/useLayoutEffect.js +0 -34
  264. package/dist/hooks/useLayoutEffect.js.map +0 -1
  265. package/dist/hooks/useMemo.d.ts +0 -8
  266. package/dist/hooks/useMemo.d.ts.map +0 -1
  267. package/dist/hooks/useMemo.js +0 -31
  268. package/dist/hooks/useMemo.js.map +0 -1
  269. package/dist/hooks/usePromise.d.ts +0 -8
  270. package/dist/hooks/usePromise.d.ts.map +0 -1
  271. package/dist/hooks/usePromise.js +0 -90
  272. package/dist/hooks/usePromise.js.map +0 -1
  273. package/dist/hooks/useReducer.d.ts +0 -7
  274. package/dist/hooks/useReducer.d.ts.map +0 -1
  275. package/dist/hooks/useReducer.js +0 -44
  276. package/dist/hooks/useReducer.js.map +0 -1
  277. package/dist/hooks/useRef.d.ts +0 -10
  278. package/dist/hooks/useRef.d.ts.map +0 -1
  279. package/dist/hooks/useRef.js +0 -29
  280. package/dist/hooks/useRef.js.map +0 -1
  281. package/dist/hooks/useState.d.ts +0 -7
  282. package/dist/hooks/useState.d.ts.map +0 -1
  283. package/dist/hooks/useState.js +0 -54
  284. package/dist/hooks/useState.js.map +0 -1
  285. package/dist/hooks/useSyncExternalStore.d.ts +0 -8
  286. package/dist/hooks/useSyncExternalStore.d.ts.map +0 -1
  287. package/dist/hooks/useSyncExternalStore.js +0 -50
  288. package/dist/hooks/useSyncExternalStore.js.map +0 -1
  289. package/dist/hooks/useViewTransition.d.ts +0 -10
  290. package/dist/hooks/useViewTransition.d.ts.map +0 -1
  291. package/dist/hooks/useViewTransition.js +0 -27
  292. package/dist/hooks/useViewTransition.js.map +0 -1
  293. package/dist/recursiveRender.d.ts +0 -7
  294. package/dist/recursiveRender.d.ts.map +0 -1
  295. package/dist/recursiveRender.js.map +0 -1
  296. package/dist/signals/for.d.ts.map +0 -1
  297. package/dist/signals/for.js.map +0 -1
  298. package/dist/signals/watch.d.ts +0 -21
  299. package/dist/signals/watch.d.ts.map +0 -1
  300. package/dist/signals/watch.js +0 -86
  301. package/dist/signals/watch.js.map +0 -1
  302. package/dist/store.d.ts +0 -28
  303. package/dist/store.d.ts.map +0 -1
  304. package/dist/store.js +0 -166
  305. package/dist/store.js.map +0 -1
  306. package/dist/swr.d.ts +0 -63
  307. package/dist/swr.d.ts.map +0 -1
  308. package/dist/swr.js +0 -236
  309. package/dist/swr.js.map +0 -1
  310. package/dist/utils/promise.d.ts +0 -16
  311. package/dist/utils/promise.d.ts.map +0 -1
  312. package/dist/utils/promise.js +0 -14
  313. package/dist/utils/promise.js.map +0 -1
  314. package/src/components/memo.ts +0 -39
  315. package/src/form/index.ts +0 -676
  316. package/src/form/types.ts +0 -262
  317. package/src/form/utils.ts +0 -19
  318. package/src/hooks/useAsync.ts +0 -121
  319. package/src/hooks/useCallback.ts +0 -32
  320. package/src/hooks/useContext.ts +0 -79
  321. package/src/hooks/useEffect.ts +0 -40
  322. package/src/hooks/useEffectEvent.ts +0 -24
  323. package/src/hooks/useId.ts +0 -42
  324. package/src/hooks/useLayoutEffect.ts +0 -43
  325. package/src/hooks/useMemo.ts +0 -34
  326. package/src/hooks/usePromise.ts +0 -126
  327. package/src/hooks/useReducer.ts +0 -50
  328. package/src/hooks/useRef.ts +0 -40
  329. package/src/hooks/useState.ts +0 -62
  330. package/src/hooks/useSyncExternalStore.ts +0 -59
  331. package/src/hooks/useViewTransition.ts +0 -25
  332. package/src/signals/watch.ts +0 -139
  333. package/src/store.ts +0 -245
  334. package/src/swr.ts +0 -351
  335. package/src/utils/promise.ts +0 -26
@@ -0,0 +1,71 @@
1
+ import { flushSync } from "./scheduler.js";
2
+ export var ViewTransitions;
3
+ (function (ViewTransitions) {
4
+ const jobs = [];
5
+ let running = false;
6
+ let scheduled = false;
7
+ let transition = null;
8
+ const supported = "window" in globalThis && typeof document.startViewTransition === "function";
9
+ function run(callback, options) {
10
+ const signal = options?.signal;
11
+ return new Promise((resolve) => {
12
+ const job = async () => {
13
+ const result = await callback();
14
+ resolve(result);
15
+ };
16
+ jobs.push(job);
17
+ signal?.addEventListener("abort", () => {
18
+ const i = jobs.indexOf(job);
19
+ if (i !== -1) {
20
+ jobs.splice(i, 1);
21
+ }
22
+ else {
23
+ transition?.skipTransition();
24
+ }
25
+ }, { once: true });
26
+ schedule();
27
+ });
28
+ }
29
+ ViewTransitions.run = run;
30
+ function stop() {
31
+ transition?.skipTransition();
32
+ transition = null;
33
+ jobs.length = 0;
34
+ running = false;
35
+ scheduled = false;
36
+ }
37
+ ViewTransitions.stop = stop;
38
+ function schedule() {
39
+ if (scheduled)
40
+ return;
41
+ scheduled = true;
42
+ queueMicrotask(() => {
43
+ scheduled = false;
44
+ runJobs();
45
+ });
46
+ }
47
+ async function runJobs() {
48
+ if (running || jobs.length === 0)
49
+ return;
50
+ running = true;
51
+ const __jobs = [...jobs];
52
+ jobs.length = 0;
53
+ const runJobs = async () => {
54
+ await Promise.all(__jobs.map((j) => j()));
55
+ flushSync();
56
+ };
57
+ if (!supported) {
58
+ await runJobs();
59
+ }
60
+ else {
61
+ transition = document.startViewTransition(runJobs);
62
+ await transition.finished;
63
+ }
64
+ transition = null;
65
+ running = false;
66
+ if (jobs.length > 0) {
67
+ schedule();
68
+ }
69
+ }
70
+ })(ViewTransitions || (ViewTransitions = {}));
71
+ //# sourceMappingURL=viewTransitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewTransitions.js","sourceRoot":"","sources":["../src/viewTransitions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kiru",
3
- "version": "0.54.4",
3
+ "version": "1.0.1",
4
4
  "description": "A batteries-included, easy-to-use rendering library with a tiny footprint",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -2,17 +2,18 @@ import { FLAG_STATIC_DOM } from "./constants.js"
2
2
  import { __DEV__ } from "./env.js"
3
3
  import { renderRootSync, requestUpdate } from "./scheduler.js"
4
4
  import { createVNode } from "./vNode.js"
5
+ import type { SomeDom } from "./types.utils.js"
5
6
 
6
7
  type VNode = Kiru.VNode
7
8
 
8
- export interface AppContextOptions {
9
+ export interface AppHandleOptions {
9
10
  /**
10
11
  * App name - shown in devtools
11
12
  */
12
13
  name?: string
13
14
  }
14
15
 
15
- export interface AppContext {
16
+ export interface AppHandle {
16
17
  id: number
17
18
  name: string
18
19
  rootNode: VNode
@@ -24,9 +25,9 @@ let appId = 0
24
25
 
25
26
  export function mount(
26
27
  children: JSX.Element,
27
- container: HTMLElement,
28
- options?: AppContextOptions
29
- ): AppContext {
28
+ container: Kiru.ContainerElement,
29
+ options?: AppHandleOptions
30
+ ): AppHandle {
30
31
  if (__DEV__) {
31
32
  if (container.__kiruNode) {
32
33
  throw new Error(
@@ -36,7 +37,7 @@ export function mount(
36
37
  }
37
38
  const rootNode = createRootNode(container)
38
39
  const id = appId++
39
- const appContext: AppContext = {
40
+ const app: AppHandle = {
40
41
  id,
41
42
  name: options?.name ?? `App-${id}`,
42
43
  rootNode,
@@ -45,39 +46,43 @@ export function mount(
45
46
  }
46
47
 
47
48
  function render(children: JSX.Element) {
48
- rootNode.props.children = children
49
+ rootNode.props = { children }
49
50
  renderRootSync(rootNode)
50
51
  }
51
52
 
52
53
  function unmount() {
53
- rootNode.props.children = null
54
+ rootNode.props = { children: null }
54
55
  renderRootSync(rootNode)
55
56
  if (__DEV__) {
56
- delete container.__kiruNode
57
+ delete (container as HTMLElement).__kiruNode
57
58
  delete rootNode.app
58
59
  }
59
- window.__kiru.emit("unmount", appContext)
60
+ window.__kiru.emit("unmount", app)
60
61
  }
61
62
 
62
63
  if (__DEV__) {
63
- rootNode.app = appContext
64
+ rootNode.app = app
64
65
  }
65
66
 
66
67
  render(children)
67
- window.__kiru.emit("mount", appContext, requestUpdate)
68
- if (__DEV__) {
68
+ window.__kiru.emit("mount", app, requestUpdate)
69
+ // @ts-expect-error
70
+ if (__DEV__ && !globalThis.__KIRU_READY__) {
71
+ // @ts-expect-error
72
+ globalThis.__KIRU_READY__ = true
73
+
69
74
  queueMicrotask(() => {
70
75
  window.dispatchEvent(new Event("kiru:ready"))
71
76
  })
72
77
  }
73
78
 
74
- return appContext
79
+ return app
75
80
  }
76
81
 
77
- function createRootNode(container: HTMLElement): Kiru.VNode {
82
+ function createRootNode(container: Kiru.ContainerElement): Kiru.VNode {
78
83
  const node = createVNode(container.nodeName.toLowerCase())
79
84
  node.flags |= FLAG_STATIC_DOM
80
- node.dom = container
85
+ node.dom = container as SomeDom
81
86
  if (__DEV__) {
82
87
  container.__kiruNode = node
83
88
  }
@@ -1,32 +1,33 @@
1
1
  import { node } from "../globals.js"
2
2
  import { $STREAM_DATA } from "../constants.js"
3
3
  import { requestUpdate } from "../scheduler.js"
4
- import { useRef } from "../hooks/index.js"
5
4
  import { Signal } from "../signals/index.js"
6
5
  import { sideEffectsEnabled } from "../utils/index.js"
7
6
  import type { RecordHas } from "../types.utils"
8
- import { isStatefulPromise, StreamDataThrowValue } from "../utils/promise.js"
7
+ import { isStatefulPromise, StreamDataThrowValue } from "../statefulPromise.js"
8
+ import { ref } from "../ref.js"
9
9
 
10
10
  export type Derivable =
11
11
  | Kiru.Signal<unknown>
12
- | Kiru.StatefulPromise<unknown>
13
- | Record<string, Kiru.Signal<unknown> | Kiru.StatefulPromise<unknown>>
12
+ | Kiru.StatefulPromiseBase<unknown>
13
+ | Record<string, Kiru.Signal<unknown> | Kiru.StatefulPromiseBase<unknown>>
14
14
 
15
- type InnerOf<T> = T extends Kiru.Signal<infer V>
16
- ? V
17
- : T extends Kiru.StatefulPromise<infer P>
18
- ? P
19
- : never
15
+ type InnerOf<T> =
16
+ T extends Kiru.Signal<infer V>
17
+ ? V
18
+ : T extends Kiru.StatefulPromiseBase<infer P>
19
+ ? P
20
+ : never
20
21
 
21
22
  type UnwrapDerive<T extends Derivable> = T extends
22
23
  | Kiru.Signal<unknown>
23
- | Kiru.StatefulPromise<any>
24
+ | Kiru.StatefulPromiseBase<any>
24
25
  ? InnerOf<T>
25
26
  : { [K in keyof T]: InnerOf<T[K]> }
26
27
 
27
28
  type RecordHasPromise<T extends Record<string, any>> = RecordHas<
28
29
  T,
29
- Kiru.StatefulPromise<any>
30
+ Kiru.StatefulPromiseBase<any>
30
31
  >
31
32
 
32
33
  type ChildFn<T> = (value: T) => JSX.Children
@@ -36,86 +37,90 @@ export type DeriveFallbackMode = "swr" | "fallback"
36
37
 
37
38
  export interface DeriveProps<
38
39
  T extends Derivable,
39
- Mode extends DeriveFallbackMode = "fallback"
40
+ Mode extends DeriveFallbackMode = "fallback",
40
41
  > {
41
42
  from: T
42
43
  mode?: Mode
43
- children: T extends Kiru.StatefulPromise<infer U>
44
+ children: T extends Kiru.StatefulPromiseBase<infer U>
44
45
  ? Mode extends "swr"
45
46
  ? ChildFnWithStale<U>
46
47
  : ChildFn<U>
47
48
  : T extends Record<string, any>
48
- ? RecordHasPromise<T> extends true
49
- ? Mode extends "swr"
50
- ? ChildFnWithStale<UnwrapDerive<T>>
49
+ ? RecordHasPromise<T> extends true
50
+ ? Mode extends "swr"
51
+ ? ChildFnWithStale<UnwrapDerive<T>>
52
+ : ChildFn<UnwrapDerive<T>>
51
53
  : ChildFn<UnwrapDerive<T>>
52
54
  : ChildFn<UnwrapDerive<T>>
53
- : ChildFn<UnwrapDerive<T>>
54
- fallback?: T extends Kiru.StatefulPromise<any>
55
+ fallback?: T extends Kiru.StatefulPromiseBase<any>
55
56
  ? JSX.Element
56
57
  : T extends Record<string, any>
57
- ? RecordHasPromise<T> extends true
58
- ? JSX.Element
58
+ ? RecordHasPromise<T> extends true
59
+ ? JSX.Element
60
+ : never
59
61
  : never
60
- : never
61
62
  }
62
63
 
63
- export function Derive<
64
- T extends Derivable,
65
- U extends DeriveFallbackMode = "swr"
66
- >(props: DeriveProps<T, U>) {
67
- const { from, children, fallback, mode } = props
68
- const prevSuccess = useRef<UnwrapDerive<T> | null>(null)
64
+ type Derive = {
65
+ <T extends Derivable, U extends DeriveFallbackMode = "swr">(
66
+ props: DeriveProps<T, U>
67
+ ): (props: DeriveProps<T, U>) => JSX.Element
68
+ }
69
69
 
70
- const promises = new Set<Kiru.StatefulPromise<any>>()
71
- let value: UnwrapDerive<T>
70
+ export const Derive: Derive = () => {
71
+ return (props) => {
72
+ const { from, children, fallback, mode } = props
73
+ const prevSuccess = ref<unknown>(null)
72
74
 
73
- if (isStatefulPromise(from)) {
74
- promises.add(from)
75
- value = from.value as UnwrapDerive<T>
76
- } else if (Signal.isSignal(from)) {
77
- value = from.value as UnwrapDerive<T>
78
- } else {
79
- const out: Record<string, any> = {}
80
- for (const key in from) {
81
- const v = from[key]
82
- if (isStatefulPromise(v)) promises.add(v)
83
- out[key] = (v as Signal<unknown> | Kiru.StatefulPromise<unknown>).value
84
- }
85
- value = out as UnwrapDerive<T>
86
- }
75
+ const promises = new Set<Kiru.StatefulPromiseBase<any>>()
76
+ let value: unknown
87
77
 
88
- if (promises.size === 0) {
89
- return (children as ChildFn<UnwrapDerive<T>>)(value)
90
- }
78
+ if (isStatefulPromise(from)) {
79
+ promises.add(from)
80
+ value = from.value as unknown
81
+ } else if (Signal.isSignal(from)) {
82
+ value = from.value as unknown
83
+ } else {
84
+ const out: Record<string, any> = {}
85
+ for (const key in from) {
86
+ const v = from[key]
87
+ if (isStatefulPromise(v)) promises.add(v)
88
+ out[key] = (
89
+ v as Signal<unknown> | Kiru.StatefulPromiseBase<unknown>
90
+ ).value
91
+ }
92
+ value = out as unknown
93
+ }
91
94
 
92
- if (!sideEffectsEnabled()) {
93
- throw {
94
- [$STREAM_DATA]: {
95
- fallback,
96
- data: Array.from(promises),
97
- },
98
- } satisfies StreamDataThrowValue
99
- }
95
+ if (promises.size === 0) {
96
+ return (children as ChildFn<unknown>)(value)
97
+ }
100
98
 
101
- for (const p of promises) {
102
- if (p.state === "rejected") {
103
- throw p.error
99
+ if (!sideEffectsEnabled()) {
100
+ throw {
101
+ [$STREAM_DATA]: {
102
+ fallback,
103
+ data: Array.from(promises),
104
+ },
105
+ } satisfies StreamDataThrowValue
104
106
  }
105
- if (p.state === "pending") {
106
- const nodeRef = node.current!
107
- Promise.allSettled(promises).then(() => requestUpdate(nodeRef))
107
+ for (const p of promises) {
108
+ if (p.state === "rejected") {
109
+ throw p.error
110
+ }
111
+ if (p.state === "pending") {
112
+ const nodeRef = node.current!
113
+ Promise.allSettled(promises).then(() => requestUpdate(nodeRef))
108
114
 
109
- if (mode !== "fallback" && prevSuccess.current) {
110
- return (children as ChildFnWithStale<UnwrapDerive<T>>)(
111
- prevSuccess.current,
112
- true
113
- )
115
+ const prev = prevSuccess.current!
116
+ if (mode !== "fallback" && prev) {
117
+ return (children as ChildFnWithStale<unknown>)(prev, true)
118
+ }
119
+ return fallback
114
120
  }
115
- return fallback
116
121
  }
117
- }
118
122
 
119
- prevSuccess.current = value
120
- return (children as ChildFnWithStale<UnwrapDerive<T>>)(value, false)
123
+ prevSuccess.current = value
124
+ return (children as ChildFnWithStale<unknown>)(value, false)
125
+ }
121
126
  }
@@ -1,6 +1,5 @@
1
1
  export { ErrorBoundary, type ErrorBoundaryProps } from "./errorBoundary.js"
2
2
  export * from "./derive.js"
3
3
  export * from "./lazy.js"
4
- export { memo } from "./memo.js"
5
4
  export * from "./portal.js"
6
5
  export * from "./transition.js"
@@ -1,7 +1,8 @@
1
1
  import { createElement } from "../element.js"
2
2
  import { __DEV__ } from "../env.js"
3
- import { useRequestUpdate } from "../hooks/utils.js"
4
3
  import { sideEffectsEnabled } from "../utils/runtime.js"
4
+ import { node } from "../globals.js"
5
+ import { requestUpdate } from "../scheduler.js"
5
6
 
6
7
  interface FCModule {
7
8
  default: Kiru.FC<any>
@@ -33,7 +34,7 @@ export function lazy<T extends LazyImportValue>(
33
34
  ): Kiru.FC<LazyComponentProps<T>> {
34
35
  function LazyWrapper(props: LazyComponentProps<T>) {
35
36
  const { fallback = null, ...rest } = props
36
- const requestUpdate = useRequestUpdate()
37
+ const nodeRef = node.current!
37
38
  if (!sideEffectsEnabled()) {
38
39
  return fallback
39
40
  }
@@ -53,13 +54,13 @@ export function lazy<T extends LazyImportValue>(
53
54
  typeof componentOrModule === "function"
54
55
  ? componentOrModule
55
56
  : componentOrModule.default
56
- requestUpdate()
57
+ requestUpdate(nodeRef)
57
58
  })
58
59
  return fallback
59
60
  }
60
61
 
61
62
  if (cachedState.result === null) {
62
- cachedState.promise.then(requestUpdate)
63
+ cachedState.promise.then(() => requestUpdate(nodeRef))
63
64
  return fallback
64
65
  }
65
66
 
@@ -1,8 +1,7 @@
1
1
  import { FLAG_STATIC_DOM } from "../constants.js"
2
2
  import { __DEV__ } from "../env.js"
3
3
  import { KiruError } from "../error.js"
4
- import { renderMode } from "../globals.js"
5
- import { useVNode } from "../hooks/utils.js"
4
+ import { node, renderMode } from "../globals.js"
6
5
  import { nextIdle, requestUpdate } from "../scheduler.js"
7
6
 
8
7
  interface PortalProps {
@@ -11,7 +10,7 @@ interface PortalProps {
11
10
  }
12
11
 
13
12
  export function Portal({ children, container }: PortalProps) {
14
- const vNode = useVNode()
13
+ const vNode = node.current!
15
14
  if (!vNode.dom) {
16
15
  vNode.flags |= FLAG_STATIC_DOM
17
16
  switch (renderMode.current) {
@@ -1,12 +1,11 @@
1
- import { useCallback } from "../hooks/useCallback.js"
2
- import { useEffect } from "../hooks/useEffect.js"
3
- import { useLayoutEffect } from "../hooks/useLayoutEffect.js"
4
- import { useRef } from "../hooks/useRef.js"
5
- import { useState } from "../hooks/useState.js"
1
+ import { onCleanup } from "../hooks/onCleanup.js"
2
+ import { signal, Signal } from "../signals/base.js"
3
+ import { effect } from "../signals/effect.js"
4
+ import { unwrap } from "../signals/utils.js"
6
5
 
7
6
  export type TransitionState = "entering" | "entered" | "exiting" | "exited"
8
7
  interface TransitionProps {
9
- in: boolean
8
+ in: boolean | Signal<boolean>
10
9
  /**
11
10
  * Initial state of the transition
12
11
  * @default "exited"
@@ -22,43 +21,42 @@ interface TransitionProps {
22
21
  onTransitionEnd?: (state: "entered" | "exited") => void
23
22
  }
24
23
 
25
- export function Transition(props: TransitionProps) {
26
- const [tState, setTState] = useState<TransitionState>(
27
- props.initialState || "exited"
28
- )
29
- const timeoutRef = useRef<number | null>(null)
24
+ export const Transition: Kiru.FC<TransitionProps> = (props) => {
25
+ const tState = signal<TransitionState>(props.initialState || "exited")
26
+ let timeoutRef: number | null = null
30
27
 
31
- useLayoutEffect(() => {
32
- if (props.in && tState !== "entered" && tState !== "entering") {
28
+ const setTransitionState = (transitionState: TransitionState) => {
29
+ clearTimeout(timeoutRef)
30
+ tState.value = transitionState
31
+ if (transitionState === "entered" || transitionState === "exited") {
32
+ if (props.onTransitionEnd) props.onTransitionEnd(transitionState)
33
+ }
34
+ }
35
+
36
+ const queueStateChange = (transitionState: "entered" | "exited") => {
37
+ timeoutRef = window.setTimeout(
38
+ () => setTransitionState(transitionState),
39
+ getTiming(transitionState, props.duration)
40
+ )
41
+ }
42
+
43
+ effect(() => {
44
+ const newIn = unwrap(props.in, true)
45
+ const current = tState.peek()
46
+ if (newIn && current !== "entered" && current !== "entering") {
33
47
  setTransitionState("entering")
34
48
  queueStateChange("entered")
35
- } else if (!props.in && tState !== "exited" && tState !== "exiting") {
49
+ } else if (!newIn && current !== "exited" && current !== "exiting") {
36
50
  setTransitionState("exiting")
37
51
  queueStateChange("exited")
38
52
  }
39
- }, [props.in, tState])
53
+ })
40
54
 
41
- useEffect(() => () => clearTimeout(timeoutRef.current), [])
55
+ onCleanup(() => clearTimeout(timeoutRef))
42
56
 
43
- const setTransitionState = useCallback((transitionState: TransitionState) => {
44
- clearTimeout(timeoutRef.current)
45
- setTState(transitionState)
46
- if (transitionState === "entered" || transitionState === "exited") {
47
- if (props.onTransitionEnd) props.onTransitionEnd(transitionState)
48
- }
49
- }, [])
50
-
51
- const queueStateChange = useCallback(
52
- (transitionState: "entered" | "exited") => {
53
- timeoutRef.current = window.setTimeout(
54
- () => setTransitionState(transitionState),
55
- getTiming(transitionState, props.duration)
56
- )
57
- },
58
- [props.duration]
59
- )
60
-
61
- return props.element(tState)
57
+ return (newProps: TransitionProps) => {
58
+ return newProps.element(tState.value)
59
+ }
62
60
  }
63
61
 
64
62
  const defaultDuration = 150
package/src/constants.ts CHANGED
@@ -1,11 +1,9 @@
1
1
  export {
2
2
  $SIGNAL,
3
3
  $CONTEXT,
4
- $CONTEXT_PROVIDER,
5
4
  $FRAGMENT,
6
5
  $KIRU_ERROR,
7
6
  $HMR_ACCEPT,
8
- $MEMO,
9
7
  $ERROR_BOUNDARY,
10
8
  $STREAM_DATA,
11
9
  $DEV_FILE_LINK,
@@ -16,8 +14,6 @@ export {
16
14
  FLAG_PLACEMENT,
17
15
  FLAG_DELETION,
18
16
  FLAG_STATIC_DOM,
19
- FLAG_MEMO,
20
- FLAG_NOOP,
21
17
  FLAG_DIRTY,
22
18
  }
23
19
 
@@ -25,11 +21,9 @@ export { voidElements, svgTags, booleanAttributes, snakeCaseAttributes }
25
21
 
26
22
  const $SIGNAL = Symbol.for("kiru.signal")
27
23
  const $CONTEXT = Symbol.for("kiru.context")
28
- const $CONTEXT_PROVIDER = Symbol.for("kiru.contextProvider")
29
24
  const $FRAGMENT = Symbol.for("kiru.fragment")
30
25
  const $KIRU_ERROR = Symbol.for("kiru.error")
31
26
  const $HMR_ACCEPT = Symbol.for("kiru.hmrAccept")
32
- const $MEMO = Symbol.for("kiru.memo")
33
27
  const $ERROR_BOUNDARY = Symbol.for("kiru.errorBoundary")
34
28
  const $STREAM_DATA = Symbol.for("kiru.streamData")
35
29
  const $DEV_FILE_LINK = Symbol.for("kiru.devFileLink")
@@ -41,8 +35,6 @@ const FLAG_UPDATE = 1 << 1
41
35
  const FLAG_PLACEMENT = 1 << 2
42
36
  const FLAG_DELETION = 1 << 3
43
37
  const FLAG_STATIC_DOM = 1 << 4
44
- const FLAG_MEMO = 1 << 5
45
- const FLAG_NOOP = 1 << 6
46
38
  const FLAG_DIRTY = 1 << 7
47
39
 
48
40
  const EVENT_PREFIX_REGEX = /^on:?/
package/src/context.ts CHANGED
@@ -1,30 +1,37 @@
1
- import { $CONTEXT, $CONTEXT_PROVIDER } from "./constants.js"
1
+ import { $CONTEXT } from "./constants.js"
2
2
  import { createElement } from "./element.js"
3
- import { useState } from "./hooks/useState.js"
3
+ import type { ContextNode } from "./types.utils.js"
4
+ import { node } from "./globals.js"
4
5
 
5
6
  export function createContext<T>(defaultValue: T): Kiru.Context<T> {
6
- const ctx: Kiru.Context<T> = {
7
- [$CONTEXT]: true,
8
- Provider: ({ value, children }: Kiru.ProviderProps<T>) => {
9
- const [dependents] = useState(() => new Set<Kiru.VNode>())
10
- return createElement(
11
- $CONTEXT_PROVIDER,
12
- { value, ctx, dependents },
13
- typeof children === "function" ? children(value) : children
14
- )
15
- },
16
- default: () => defaultValue,
17
- set displayName(name: string) {
18
- this.Provider.displayName = name
19
- },
20
- get displayName() {
21
- return this.Provider.displayName || "Anonymous Context"
22
- },
23
- }
7
+ const Context: Kiru.Context<T> = Object.assign(
8
+ ({ value, children }: Kiru.ContextProps<T>) =>
9
+ createElement($CONTEXT, { value, ctx: Context }, children),
10
+ { [$CONTEXT]: () => defaultValue }
11
+ )
12
+ Context.displayName = "Anonymous Context"
13
+ return Context
14
+ }
24
15
 
25
- return ctx
16
+ function getContextValue<T>(vNode: Kiru.VNode, context: Kiru.Context<T>): T {
17
+ let n = vNode.parent
18
+ while (n) {
19
+ if (n.type === $CONTEXT) {
20
+ const provider = n as ContextNode<unknown>
21
+ const { ctx, value } = provider.props
22
+ if (ctx === context) {
23
+ return value as T
24
+ }
25
+ }
26
+ n = n.parent
27
+ }
28
+ return context[$CONTEXT]()
26
29
  }
27
30
 
28
- export function isContext<T>(thing: unknown): thing is Kiru.Context<T> {
29
- return typeof thing === "object" && !!thing && $CONTEXT in thing
31
+ export function useContext<T>(context: Kiru.Context<T>): T {
32
+ const n = node.current
33
+ if (!n) {
34
+ throw new Error("useContext must be called inside a Kiru component")
35
+ }
36
+ return getContextValue(n, context)
30
37
  }
@@ -0,0 +1,16 @@
1
+ import type { DebuggerEntry } from "./globalContext"
2
+
3
+ export namespace DevTools {
4
+ export const track = (signal: Kiru.Signal<unknown>, label?: string) => {
5
+ window.__kiru.devtools?.track(signal, label)
6
+ }
7
+ export const untrack = (signal: Kiru.Signal<unknown>) => {
8
+ window.__kiru.devtools?.untrack(signal)
9
+ }
10
+ export const subscribe = (
11
+ callback: (entries: Set<DebuggerEntry>) => void
12
+ ) => {
13
+ if (!window.__kiru.devtools) return () => {}
14
+ return window.__kiru.devtools?.subscribe(callback)
15
+ }
16
+ }